package kmp import ( "fmt" "gotest.tools/v3/assert/cmp" "sigs.k8s.io/controller-runtime/pkg/client" "edge-infra.dev/pkg/k8s/runtime/inventory" ) // SameInventory checks that the exp and actual inventories contain the same // objects. // // The compared object must implement [edge-infra.dev/pkg/k8s/runtime/inventory.Getter] func SameInventory(exp, actual *inventory.ResourceInventory) cmp.Comparison { return func() cmp.Result { if exp == nil || actual == nil { return cmp.ResultFailure("can't compare nil inventories") } diff, err := inventory.Diff(exp, actual) if err != nil { return cmp.ResultFromError(err) } if len(diff) > 0 { return cmp.ResultFailure(fmt.Sprintf( "unexpected inventory:\n\n\tgot: %s\n\n\texpected: %s\n", actual, exp, )) } return cmp.ResultSuccess } } // HasInventory checks that the object o has the same contents as the expected // inventory. // // The compared object must implement [edge-infra.dev/pkg/k8s/runtime/inventory.Getter] func HasInventory(exp *inventory.ResourceInventory) Komparison { return func(o client.Object) cmp.Result { return SameInventory(exp, o.(inventory.Getter).GetInventory())() } }