github.com/kubeshop/testkube@v1.17.23/contrib/executor/kubepug/pkg/runner/result_test.go (about) 1 package runner 2 3 import ( 4 "fmt" 5 "testing" 6 7 "github.com/kubepug/kubepug/pkg/apis/v1alpha1" 8 kubepug "github.com/kubepug/kubepug/pkg/results" 9 "github.com/stretchr/testify/assert" 10 ) 11 12 func TestResultParser(t *testing.T) { 13 output := ` 14 [ 15 { 16 "group":"apps", 17 "kind":"Deployment", 18 "version":"v1beta2", 19 "replacement": 20 { 21 "group":"apps", 22 "version":"v1", 23 "kind":"Deployment" 24 }, 25 "k8sversion":"1.16", 26 "description":"DEPRECATED - This group version of Deployment is deprecated by apps/v1/Deployment. See the release notes for\nmore information.\nDeployment enables declarative updates for Pods and ReplicaSets.", 27 "deleted_items":[ 28 { 29 "scope":"OBJECT", 30 "objectname":"testkube-dashboard", 31 "namespace":"testkube", 32 "location":"deployment.yaml" 33 } 34 ] 35 } 36 ]` 37 38 result := []kubepug.ResultItem{ 39 { 40 Description: "DEPRECATED - This group version of Deployment is deprecated by apps/v1/Deployment. See the release notes for\nmore information.\nDeployment enables declarative updates for Pods and ReplicaSets.", 41 Group: "apps", 42 Kind: "Deployment", 43 Version: "v1beta2", 44 Replacement: &v1alpha1.GroupVersionKind{ 45 Group: "apps", 46 Version: "v1", 47 Kind: "Deployment", 48 }, 49 K8sVersion: "1.16", 50 Items: []kubepug.Item{ 51 { 52 Scope: "OBJECT", 53 ObjectName: "testkube-dashboard", 54 Namespace: "testkube", 55 Location: "deployment.yaml", 56 }, 57 }, 58 }, 59 } 60 61 tests := []struct { 62 name string 63 kubepugOutput string 64 wantErr bool 65 result kubepug.Result 66 }{ 67 { 68 name: "GetResults should return empty result when there is no JSON output", 69 kubepugOutput: `{"DeprecatedAPIs":null,"DeletedAPIs":null}`, 70 wantErr: false, 71 result: kubepug.Result{ 72 DeprecatedAPIs: nil, 73 DeletedAPIs: nil, 74 }, 75 }, 76 { 77 name: "GetResult should return error for invalid JSON", 78 kubepugOutput: `invalid JSON`, 79 wantErr: true, 80 result: kubepug.Result{}, 81 }, 82 { 83 name: "GetResult should return populated DeprecatedAPIs when there's a DeprecatedAPI finding", 84 kubepugOutput: fmt.Sprintf(`{ 85 "deprecated_apis": %s, 86 "deleted_apis": null 87 }`, output), 88 wantErr: false, 89 result: kubepug.Result{ 90 DeprecatedAPIs: result, 91 }, 92 }, 93 { 94 name: "GetResult should return populated DeletedAPIs when there's a DeletedAPIs finding", 95 kubepugOutput: fmt.Sprintf(`{ 96 "deprecated_apis": null, 97 "deleted_apis": %s 98 } 99 `, output), 100 wantErr: false, 101 result: kubepug.Result{ 102 DeletedAPIs: result, 103 }, 104 }, 105 { 106 name: "GetResult should return populated DeprecatedAPIs and DeletedAPIs when there's both finding", 107 kubepugOutput: fmt.Sprintf(`{ 108 "deprecated_apis": %s, 109 "deleted_apis": %s 110 }`, output, output), 111 wantErr: false, 112 result: kubepug.Result{ 113 DeprecatedAPIs: result, 114 DeletedAPIs: result, 115 }, 116 }, 117 } 118 119 for _, tc := range tests { 120 tc := tc 121 t.Run(tc.name, func(t *testing.T) { 122 t.Parallel() 123 output := tc.kubepugOutput 124 result, err := GetResult(output) 125 if !tc.wantErr { 126 assert.NoError(t, err) 127 } else { 128 assert.Error(t, err) 129 } 130 assert.Equal(t, tc.result, result) 131 }) 132 } 133 }