...

Source file src/sigs.k8s.io/kustomize/kyaml/fn/framework/result_test.go

Documentation: sigs.k8s.io/kustomize/kyaml/fn/framework

     1  // Copyright 2021 The Kubernetes Authors.
     2  // SPDX-License-Identifier: Apache-2.0
     3  
     4  package framework_test
     5  
     6  import (
     7  	"reflect"
     8  	"testing"
     9  
    10  	"sigs.k8s.io/kustomize/kyaml/fn/framework"
    11  	"sigs.k8s.io/kustomize/kyaml/yaml"
    12  )
    13  
    14  func TestResults_Sort(t *testing.T) {
    15  	testcases := []struct {
    16  		name   string
    17  		input  framework.Results
    18  		output framework.Results
    19  	}{
    20  		{
    21  			name: "sort based on severity",
    22  			input: framework.Results{
    23  				{
    24  					Message:  "Error message 1",
    25  					Severity: framework.Info,
    26  				},
    27  				{
    28  					Message:  "Error message 2",
    29  					Severity: framework.Error,
    30  				},
    31  			},
    32  			output: framework.Results{
    33  				{
    34  					Message:  "Error message 2",
    35  					Severity: framework.Error,
    36  				},
    37  				{
    38  					Message:  "Error message 1",
    39  					Severity: framework.Info,
    40  				},
    41  			},
    42  		},
    43  		{
    44  			name: "sort based on file",
    45  			input: framework.Results{
    46  				{
    47  					Message:  "Error message",
    48  					Severity: framework.Error,
    49  					File: &framework.File{
    50  						Path:  "resource.yaml",
    51  						Index: 1,
    52  					},
    53  				},
    54  				{
    55  					Message:  "Error message",
    56  					Severity: framework.Info,
    57  					File: &framework.File{
    58  						Path:  "resource.yaml",
    59  						Index: 0,
    60  					},
    61  				},
    62  				{
    63  					Message:  "Error message",
    64  					Severity: framework.Info,
    65  					File: &framework.File{
    66  						Path:  "other-resource.yaml",
    67  						Index: 0,
    68  					},
    69  				},
    70  				{
    71  					Message:  "Error message",
    72  					Severity: framework.Warning,
    73  					File: &framework.File{
    74  						Path:  "resource.yaml",
    75  						Index: 2,
    76  					},
    77  				},
    78  				{
    79  					Message:  "Error message",
    80  					Severity: framework.Warning,
    81  				},
    82  			},
    83  			output: framework.Results{
    84  				{
    85  					Message:  "Error message",
    86  					Severity: framework.Warning,
    87  				},
    88  				{
    89  					Message:  "Error message",
    90  					Severity: framework.Info,
    91  					File: &framework.File{
    92  						Path:  "other-resource.yaml",
    93  						Index: 0,
    94  					},
    95  				},
    96  				{
    97  					Message:  "Error message",
    98  					Severity: framework.Info,
    99  					File: &framework.File{
   100  						Path:  "resource.yaml",
   101  						Index: 0,
   102  					},
   103  				},
   104  				{
   105  					Message:  "Error message",
   106  					Severity: framework.Error,
   107  					File: &framework.File{
   108  						Path:  "resource.yaml",
   109  						Index: 1,
   110  					},
   111  				},
   112  				{
   113  					Message:  "Error message",
   114  					Severity: framework.Warning,
   115  					File: &framework.File{
   116  						Path:  "resource.yaml",
   117  						Index: 2,
   118  					},
   119  				},
   120  			},
   121  		},
   122  
   123  		{
   124  			name: "sort based on other fields",
   125  			input: framework.Results{
   126  				{
   127  					Message:  "Error message",
   128  					Severity: framework.Error,
   129  					ResourceRef: &yaml.ResourceIdentifier{
   130  						TypeMeta: yaml.TypeMeta{
   131  							APIVersion: "v1",
   132  							Kind:       "Pod",
   133  						},
   134  						NameMeta: yaml.NameMeta{
   135  							Namespace: "foo-ns",
   136  							Name:      "bar",
   137  						},
   138  					},
   139  					Field: &framework.Field{
   140  						Path: "spec",
   141  					},
   142  				},
   143  				{
   144  					Message:  "Error message",
   145  					Severity: framework.Error,
   146  					ResourceRef: &yaml.ResourceIdentifier{
   147  						TypeMeta: yaml.TypeMeta{
   148  							APIVersion: "v1",
   149  							Kind:       "Pod",
   150  						},
   151  						NameMeta: yaml.NameMeta{
   152  							Namespace: "foo-ns",
   153  							Name:      "bar",
   154  						},
   155  					},
   156  					Field: &framework.Field{
   157  						Path: "metadata.name",
   158  					},
   159  				},
   160  				{
   161  					Message:  "Another error message",
   162  					Severity: framework.Error,
   163  					ResourceRef: &yaml.ResourceIdentifier{
   164  						TypeMeta: yaml.TypeMeta{
   165  							APIVersion: "v1",
   166  							Kind:       "Pod",
   167  						},
   168  						NameMeta: yaml.NameMeta{
   169  							Namespace: "foo-ns",
   170  							Name:      "bar",
   171  						},
   172  					},
   173  					Field: &framework.Field{
   174  						Path: "metadata.name",
   175  					},
   176  				},
   177  				{
   178  					Message:  "Another error message",
   179  					Severity: framework.Error,
   180  					ResourceRef: &yaml.ResourceIdentifier{
   181  						TypeMeta: yaml.TypeMeta{
   182  							APIVersion: "v1",
   183  							Kind:       "ConfigMap",
   184  						},
   185  						NameMeta: yaml.NameMeta{
   186  							Namespace: "foo-ns",
   187  							Name:      "bar",
   188  						},
   189  					},
   190  					Field: &framework.Field{
   191  						Path: "metadata.name",
   192  					},
   193  				},
   194  			},
   195  			output: framework.Results{
   196  				{
   197  					Message:  "Another error message",
   198  					Severity: framework.Error,
   199  					ResourceRef: &yaml.ResourceIdentifier{
   200  						TypeMeta: yaml.TypeMeta{
   201  							APIVersion: "v1",
   202  							Kind:       "ConfigMap",
   203  						},
   204  						NameMeta: yaml.NameMeta{
   205  							Namespace: "foo-ns",
   206  							Name:      "bar",
   207  						},
   208  					},
   209  					Field: &framework.Field{
   210  						Path: "metadata.name",
   211  					},
   212  				},
   213  				{
   214  					Message:  "Another error message",
   215  					Severity: framework.Error,
   216  					ResourceRef: &yaml.ResourceIdentifier{
   217  						TypeMeta: yaml.TypeMeta{
   218  							APIVersion: "v1",
   219  							Kind:       "Pod",
   220  						},
   221  						NameMeta: yaml.NameMeta{
   222  							Namespace: "foo-ns",
   223  							Name:      "bar",
   224  						},
   225  					},
   226  					Field: &framework.Field{
   227  						Path: "metadata.name",
   228  					},
   229  				},
   230  				{
   231  					Message:  "Error message",
   232  					Severity: framework.Error,
   233  					ResourceRef: &yaml.ResourceIdentifier{
   234  						TypeMeta: yaml.TypeMeta{
   235  							APIVersion: "v1",
   236  							Kind:       "Pod",
   237  						},
   238  						NameMeta: yaml.NameMeta{
   239  							Namespace: "foo-ns",
   240  							Name:      "bar",
   241  						},
   242  					},
   243  					Field: &framework.Field{
   244  						Path: "metadata.name",
   245  					},
   246  				},
   247  				{
   248  					Message:  "Error message",
   249  					Severity: framework.Error,
   250  					ResourceRef: &yaml.ResourceIdentifier{
   251  						TypeMeta: yaml.TypeMeta{
   252  							APIVersion: "v1",
   253  							Kind:       "Pod",
   254  						},
   255  						NameMeta: yaml.NameMeta{
   256  							Namespace: "foo-ns",
   257  							Name:      "bar",
   258  						},
   259  					},
   260  					Field: &framework.Field{
   261  						Path: "spec",
   262  					},
   263  				},
   264  			},
   265  		},
   266  	}
   267  
   268  	for _, tc := range testcases {
   269  		tc.input.Sort()
   270  		if !reflect.DeepEqual(tc.input, tc.output) {
   271  			t.Errorf("in testcase %q, expect: %#v, but got: %#v", tc.name, tc.output, tc.input)
   272  		}
   273  	}
   274  }
   275  

View as plain text