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  }