github.com/grafana/tanka@v0.26.1-0.20240506093700-c22cfc35c21a/pkg/process/extract_test.go (about) 1 package process 2 3 import ( 4 "testing" 5 6 "github.com/stretchr/testify/assert" 7 "github.com/stretchr/testify/require" 8 ) 9 10 var extractTestCases = []struct { 11 name string 12 data testData 13 errMessage string 14 }{ 15 { 16 name: "regular", 17 data: testDataRegular(), 18 }, 19 { 20 name: "flat", 21 data: testDataFlat(), 22 }, 23 { 24 name: "primitive", 25 data: testDataPrimitive(), 26 errMessage: `found invalid Kubernetes object (at .service): missing attribute "apiVersion" 27 28 note: invalid because apiVersion and kind are missing 29 `, 30 }, 31 { 32 name: "missing kind", 33 data: testMissingAttribute(), 34 errMessage: `found invalid Kubernetes object (at .service): missing attribute "kind" 35 36 apiVersion: v1 37 spec: 38 ports: 39 - port: 80 40 protocol: TCP 41 targetPort: 8080 42 selector: 43 app: deep 44 `, 45 }, 46 { 47 name: "bad kind", 48 data: testBadKindType(), 49 errMessage: `found invalid Kubernetes object (at .deployment): attribute "kind" is not a string, it is a float64 50 51 apiVersion: apps/v1 52 kind: 3000 53 metadata: 54 name: grafana 55 spec: 56 replicas: 1 57 template: 58 containers: 59 - image: grafana/grafana 60 name: grafana 61 metadata: 62 labels: 63 app: grafana 64 `, 65 }, 66 { 67 name: "deep", 68 data: testDataDeep(), 69 }, 70 { 71 name: "array", 72 data: testDataArray(), 73 }, 74 { 75 name: "nil", 76 data: func() testData { 77 d := testDataRegular() 78 d.Deep.(map[string]interface{})["disabledObject"] = nil 79 return d 80 }(), 81 errMessage: "", // we expect no error, just the result of testDataRegular 82 }, 83 } 84 85 func TestExtract(t *testing.T) { 86 for _, c := range extractTestCases { 87 t.Run(c.name, func(t *testing.T) { 88 extracted, err := Extract(c.data.Deep) 89 90 if c.errMessage != "" { 91 require.Error(t, err) 92 assert.Equal(t, c.errMessage, err.Error()) 93 return 94 } 95 96 require.NoError(t, err) 97 assert.EqualValues(t, c.data.Flat, extracted) 98 }) 99 } 100 } 101 102 func BenchmarkExtract(b *testing.B) { 103 for _, c := range extractTestCases { 104 if c.errMessage != "" { 105 continue 106 } 107 b.Run(c.name, func(b *testing.B) { 108 for i := 0; i < b.N; i++ { 109 // nolint:errcheck 110 Extract(c.data.Deep) 111 } 112 }) 113 } 114 }