diff --git a/cmd/kubectl/kubectlcobra/inventory.go b/cmd/kubectl/kubectlcobra/inventory.go index 336bbb5e4..2c2913578 100644 --- a/cmd/kubectl/kubectlcobra/inventory.go +++ b/cmd/kubectl/kubectlcobra/inventory.go @@ -164,6 +164,16 @@ func (is *InventorySet) Subtract(other *InventorySet) (*InventorySet, error) { return result, nil } +// Equals returns true if the "other" inventory set is the same +// as this current inventory set. Relies on the fact that the +// inventory items are sorted for the String() function. +func (is *InventorySet) Equals(other *InventorySet) bool { + if other == nil { + return false + } + return is.String() == other.String() +} + // String returns a string describing set of Inventory structs. func (is *InventorySet) String() string { strs := []string{} diff --git a/cmd/kubectl/kubectlcobra/inventory_test.go b/cmd/kubectl/kubectlcobra/inventory_test.go index 93fd9a0e8..f5b5006da 100644 --- a/cmd/kubectl/kubectlcobra/inventory_test.go +++ b/cmd/kubectl/kubectlcobra/inventory_test.go @@ -487,3 +487,60 @@ func TestInventorySetSubtract(t *testing.T) { } } } + +func TestInventorySetEquals(t *testing.T) { + tests := []struct { + set1 []*Inventory + set2 []*Inventory + isEqual bool + }{ + { + set1: []*Inventory{}, + set2: []*Inventory{&inventory1}, + isEqual: false, + }, + { + set1: []*Inventory{&inventory1}, + set2: []*Inventory{}, + isEqual: false, + }, + { + set1: []*Inventory{&inventory1, &inventory2}, + set2: []*Inventory{&inventory1}, + isEqual: false, + }, + { + set1: []*Inventory{&inventory1, &inventory2}, + set2: []*Inventory{&inventory3, &inventory4}, + isEqual: false, + }, + // Empty sets are equal. + { + set1: []*Inventory{}, + set2: []*Inventory{}, + isEqual: true, + }, + { + set1: []*Inventory{&inventory1}, + set2: []*Inventory{&inventory1}, + isEqual: true, + }, + // Ordering of the inventory items does not matter for equality. + { + set1: []*Inventory{&inventory1, &inventory2}, + set2: []*Inventory{&inventory2, &inventory1}, + isEqual: true, + }, + } + + for _, test := range tests { + invSet1 := NewInventorySet(test.set1) + invSet2 := NewInventorySet(test.set2) + if !invSet1.Equals(invSet2) && test.isEqual { + t.Errorf("Expected equal inventory sets; got unequal (%s)/(%s)\n", invSet1, invSet2) + } + if invSet1.Equals(invSet2) && !test.isEqual { + t.Errorf("Expected inequal inventory sets; got equal (%s)/(%s)\n", invSet1, invSet2) + } + } +}