github.com/grafana/tanka@v0.26.1-0.20240506093700-c22cfc35c21a/pkg/process/sort_test.go (about) 1 package process 2 3 import ( 4 "testing" 5 6 "github.com/grafana/tanka/pkg/kubernetes/manifest" 7 "github.com/stretchr/testify/require" 8 ) 9 10 func TestSort(t *testing.T) { 11 cases := []struct { 12 raw manifest.List 13 state manifest.List 14 err error 15 }{ 16 { 17 // sorting by kinds in the `kindOrder` list 18 raw: manifest.List{ 19 mkobj("Service", "service", "default"), 20 mkobj("Deployment", "deployment", "default"), 21 mkobj("CustomResourceDefinition", "crd", ""), 22 }, 23 state: manifest.List{ 24 mkobj("CustomResourceDefinition", "crd", ""), 25 mkobj("Service", "service", "default"), 26 mkobj("Deployment", "deployment", "default"), 27 }, 28 }, 29 { 30 // alphabtical sorting by kinds outside `kindOrder` list 31 raw: manifest.List{ 32 mkobj("B", "b", "default"), 33 mkobj("C", "c", "default"), 34 mkobj("A", "a", "default"), 35 }, 36 state: manifest.List{ 37 mkobj("A", "a", "default"), 38 mkobj("B", "b", "default"), 39 mkobj("C", "c", "default"), 40 }, 41 }, 42 { 43 // sorting by the namespace if kinds match 44 raw: manifest.List{ 45 mkobj("Service", "service", "default2"), 46 mkobj("Service", "service", "default"), 47 mkobj("Service", "service", "default1"), 48 }, 49 state: manifest.List{ 50 mkobj("Service", "service", "default"), 51 mkobj("Service", "service", "default1"), 52 mkobj("Service", "service", "default2"), 53 }, 54 }, 55 { 56 // sorting by the names if both kinds and namespaces match 57 raw: manifest.List{ 58 mkobj("Service", "service2", "default"), 59 mkobj("Service", "service", "default"), 60 mkobj("Service", "service1", "default"), 61 }, 62 state: manifest.List{ 63 mkobj("Service", "service", "default"), 64 mkobj("Service", "service1", "default"), 65 mkobj("Service", "service2", "default"), 66 }, 67 }, 68 { 69 // sorting by the names if both kinds match and there are no namespaces 70 raw: manifest.List{ 71 mkobj("CustomResourceDefinition", "crd2", ""), 72 mkobj("CustomResourceDefinition", "crd", ""), 73 mkobj("CustomResourceDefinition", "crd1", ""), 74 }, 75 state: manifest.List{ 76 mkobj("CustomResourceDefinition", "crd", ""), 77 mkobj("CustomResourceDefinition", "crd1", ""), 78 mkobj("CustomResourceDefinition", "crd2", ""), 79 }, 80 }, 81 { 82 raw: manifest.List{ 83 mkobj("Deployment", "b", "a"), 84 mkobj("ConfigMap", "a", "a"), 85 mkobj("Issuer", "a", "a"), 86 mkobj("Service", "b", "a"), 87 mkobj("Service", "a", "a"), 88 mkobj("Deployment", "a", "a"), 89 mkobj("ConfigMap", "a", "b"), 90 mkobj("Issuer", "b", "a"), 91 mkobj("Service", "b", "b"), 92 mkobj("Deployment", "a", "b"), 93 mkobj("ConfigMap", "b", "a"), 94 mkobj("Issuer", "a", "b"), 95 }, 96 state: manifest.List{ 97 mkobj("ConfigMap", "a", "a"), 98 mkobj("ConfigMap", "b", "a"), 99 mkobj("ConfigMap", "a", "b"), 100 mkobj("Service", "a", "a"), 101 mkobj("Service", "b", "a"), 102 mkobj("Service", "b", "b"), 103 mkobj("Deployment", "a", "a"), 104 mkobj("Deployment", "b", "a"), 105 mkobj("Deployment", "a", "b"), 106 mkobj("Issuer", "a", "a"), 107 mkobj("Issuer", "b", "a"), 108 mkobj("Issuer", "a", "b"), 109 }, 110 }, 111 } 112 113 for _, c := range cases { 114 Sort(c.raw) 115 require.Equal(t, c.state, c.raw) 116 } 117 } 118 119 func mkobj(kind string, name string, ns string) map[string]interface{} { 120 ret := map[string]interface{}{ 121 "kind": kind, 122 "apiVersion": "apiversion", 123 "metadata": map[string]interface{}{ 124 "name": name, 125 }, 126 } 127 if ns != "" { 128 ret["metadata"].(map[string]interface{})["namespace"] = ns 129 } 130 131 return ret 132 }