diff options
| author | Paul Buetow <paul@buetow.org> | 2026-07-09 00:14:33 +0300 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2026-07-09 00:14:33 +0300 |
| commit | 756ae621bd97a8b776fefb15e5e7e2292f98ee45 (patch) | |
| tree | b454f958e6aef70bf7ca40dcbc106323cee2a42f /internal/resource/repository_test.go | |
| parent | 3f8b79f2b1384e3abc2b1bb2fe913688c7ec251c (diff) | |
dependencies
Diffstat (limited to 'internal/resource/repository_test.go')
| -rw-r--r-- | internal/resource/repository_test.go | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/internal/resource/repository_test.go b/internal/resource/repository_test.go index f939fca..ed2755e 100644 --- a/internal/resource/repository_test.go +++ b/internal/resource/repository_test.go @@ -48,6 +48,53 @@ func TestApply(t *testing.T) { wantOrder: []string{"C", "B", "A"}, }, { + name: "independent resources apply in sorted order", + setup: func(r *repository, logs *[]string) { + // Registered/visited in a deterministic, sorted order + // regardless of map iteration. + r.registered["C"] = Resource{ + Type: "T", Name: "C", + applier: &mockApplier{name: "C", logs: logs}, + } + r.registered["A"] = Resource{ + Type: "T", Name: "A", + applier: &mockApplier{name: "A", logs: logs}, + } + r.registered["B"] = Resource{ + Type: "T", Name: "B", + applier: &mockApplier{name: "B", logs: logs}, + } + }, + wantOrder: []string{"A", "B", "C"}, + }, + { + name: "diamond dependency", + setup: func(r *repository, logs *[]string) { + // D depends on B and C; both B and C depend on A. A must run + // once, before B and C, which run before D. + r.registered["A"] = Resource{ + Type: "T", Name: "A", + applier: &mockApplier{name: "A", logs: logs}, + } + r.registered["B"] = Resource{ + Type: "T", Name: "B", + applier: &mockApplier{name: "B", logs: logs}, + dependsOn: map[string]struct{}{"A": {}}, + } + r.registered["C"] = Resource{ + Type: "T", Name: "C", + applier: &mockApplier{name: "C", logs: logs}, + dependsOn: map[string]struct{}{"A": {}}, + } + r.registered["D"] = Resource{ + Type: "T", Name: "D", + applier: &mockApplier{name: "D", logs: logs}, + dependsOn: map[string]struct{}{"B": {}, "C": {}}, + } + }, + wantOrder: []string{"A", "B", "C", "D"}, + }, + { name: "circular dependency", setup: func(r *repository, logs *[]string) { r.registered["A"] = Resource{ |
