Fix: kind sorter incorrectly compares unknown and namespace (#5186)

Signed-off-by: Alexander Matyushentsev <AMatyushentsev@gmail.com>
pull/5252/head
Alexander Matyushentsev 7 years ago committed by Matthew Fisher
parent c9dfd25071
commit f5df47b1c8

@ -124,14 +124,16 @@ func (k *kindSorter) Less(i, j int) bool {
b := k.manifests[j]
first, aok := k.ordering[a.Head.Kind]
second, bok := k.ordering[b.Head.Kind]
// if same kind (including unknown) sub sort alphanumeric
if first == second {
// if both are unknown and of different kind sort by kind alphabetically
if !aok && !bok && a.Head.Kind != b.Head.Kind {
if !aok && !bok {
// if both are unknown then sort alphabetically by kind and name
if a.Head.Kind != b.Head.Kind {
return a.Head.Kind < b.Head.Kind
} else {
return a.Name < b.Name
}
return a.Name < b.Name
}
// unknown kind is last
if !aok {
return false
@ -139,6 +141,11 @@ func (k *kindSorter) Less(i, j int) bool {
if !bok {
return true
}
// if same kind sub sort alphanumeric
if first == second {
return a.Name < b.Name
}
// sort different kinds
return first < second
}

@ -223,3 +223,24 @@ func TestKindSorterSubSort(t *testing.T) {
})
}
}
func TestKindSorterNamespaceAgainstUnknown(t *testing.T) {
unknown := Manifest{
Name: "a",
Head: &util.SimpleHead{Kind: "Unknown"},
}
namespace := Manifest{
Name: "b",
Head: &util.SimpleHead{Kind: "Namespace"},
}
manifests := []Manifest{unknown, namespace}
sortByKind(manifests, InstallOrder)
expectedOrder := []Manifest{namespace, unknown}
for i, manifest := range manifests {
if expectedOrder[i].Name != manifest.Name {
t.Errorf("Expected %s, got %s", expectedOrder[i].Name, manifest.Name)
}
}
}

Loading…
Cancel
Save