summaryrefslogtreecommitdiff
path: root/internal/resource/repository_test.go
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-07-09 00:14:33 +0300
committerPaul Buetow <paul@buetow.org>2026-07-09 00:14:33 +0300
commit756ae621bd97a8b776fefb15e5e7e2292f98ee45 (patch)
treeb454f958e6aef70bf7ca40dcbc106323cee2a42f /internal/resource/repository_test.go
parent3f8b79f2b1384e3abc2b1bb2fe913688c7ec251c (diff)
dependencies
Diffstat (limited to 'internal/resource/repository_test.go')
-rw-r--r--internal/resource/repository_test.go47
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{