...

Source file src/sigs.k8s.io/cli-utils/pkg/kstatus/polling/event/event_test.go

Documentation: sigs.k8s.io/cli-utils/pkg/kstatus/polling/event

     1  // Copyright 2020 The Kubernetes Authors.
     2  // SPDX-License-Identifier: Apache-2.0
     3  
     4  package event
     5  
     6  import (
     7  	"fmt"
     8  	"testing"
     9  
    10  	"github.com/stretchr/testify/assert"
    11  	"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
    12  	"k8s.io/apimachinery/pkg/runtime/schema"
    13  	"sigs.k8s.io/cli-utils/pkg/kstatus/status"
    14  	"sigs.k8s.io/cli-utils/pkg/object"
    15  )
    16  
    17  func TestDeepEqual(t *testing.T) {
    18  	testCases := map[string]struct {
    19  		actual   ResourceStatus
    20  		expected ResourceStatus
    21  		equal    bool
    22  	}{
    23  		"same resource should be equal": {
    24  			actual: ResourceStatus{
    25  				Identifier: object.ObjMetadata{
    26  					GroupKind: schema.GroupKind{
    27  						Group: "apps",
    28  						Kind:  "Deployment",
    29  					},
    30  					Namespace: "default",
    31  					Name:      "Foo",
    32  				},
    33  				Resource: &unstructured.Unstructured{
    34  					Object: map[string]interface{}{
    35  						"metadata": map[string]interface{}{
    36  							"generation": int64(1),
    37  						},
    38  					},
    39  				},
    40  				Status:  status.UnknownStatus,
    41  				Message: "Some message",
    42  			},
    43  			expected: ResourceStatus{
    44  				Identifier: object.ObjMetadata{
    45  					GroupKind: schema.GroupKind{
    46  						Group: "apps",
    47  						Kind:  "Deployment",
    48  					},
    49  					Namespace: "default",
    50  					Name:      "Foo",
    51  				},
    52  				Resource: &unstructured.Unstructured{
    53  					Object: map[string]interface{}{
    54  						"metadata": map[string]interface{}{
    55  							"generation": int64(2),
    56  						},
    57  					},
    58  				},
    59  				Status:  status.UnknownStatus,
    60  				Message: "Some message",
    61  			},
    62  			equal: false,
    63  		},
    64  		"different resources with only name different": {
    65  			actual: ResourceStatus{
    66  				Identifier: object.ObjMetadata{
    67  					GroupKind: schema.GroupKind{
    68  						Group: "apps",
    69  						Kind:  "Deployment",
    70  					},
    71  					Namespace: "default",
    72  					Name:      "Foo",
    73  				},
    74  				Status: status.CurrentStatus,
    75  			},
    76  			expected: ResourceStatus{
    77  				Identifier: object.ObjMetadata{
    78  					GroupKind: schema.GroupKind{
    79  						Group: "apps",
    80  						Kind:  "Deployment",
    81  					},
    82  					Namespace: "default",
    83  					Name:      "Bar",
    84  				},
    85  				Status: status.CurrentStatus,
    86  			},
    87  			equal: false,
    88  		},
    89  		"different GroupKind otherwise same": {
    90  			actual: ResourceStatus{
    91  				Identifier: object.ObjMetadata{
    92  					GroupKind: schema.GroupKind{
    93  						Group: "apps",
    94  						Kind:  "Deployment",
    95  					},
    96  					Namespace: "default",
    97  					Name:      "Bar",
    98  				},
    99  				Status: status.CurrentStatus,
   100  			},
   101  			expected: ResourceStatus{
   102  				Identifier: object.ObjMetadata{
   103  					GroupKind: schema.GroupKind{
   104  						Group: "custom.io",
   105  						Kind:  "Deployment",
   106  					},
   107  					Namespace: "default",
   108  					Name:      "Bar",
   109  				},
   110  				Status: status.CurrentStatus,
   111  			},
   112  			equal: false,
   113  		},
   114  		"same resource with same error": {
   115  			actual: ResourceStatus{
   116  				Identifier: object.ObjMetadata{
   117  					GroupKind: schema.GroupKind{
   118  						Group: "apps",
   119  						Kind:  "Deployment",
   120  					},
   121  					Namespace: "default",
   122  					Name:      "Bar",
   123  				},
   124  				Status: status.UnknownStatus,
   125  				Error:  fmt.Errorf("this is a test"),
   126  			},
   127  			expected: ResourceStatus{
   128  				Identifier: object.ObjMetadata{
   129  					GroupKind: schema.GroupKind{
   130  						Group: "apps",
   131  						Kind:  "Deployment",
   132  					},
   133  					Namespace: "default",
   134  					Name:      "Bar",
   135  				},
   136  				Status: status.UnknownStatus,
   137  				Error:  fmt.Errorf("this is a test"),
   138  			},
   139  			equal: true,
   140  		},
   141  		"same resource with different error": {
   142  			actual: ResourceStatus{
   143  				Identifier: object.ObjMetadata{
   144  					GroupKind: schema.GroupKind{
   145  						Group: "apps",
   146  						Kind:  "Deployment",
   147  					},
   148  					Namespace: "default",
   149  					Name:      "Bar",
   150  				},
   151  				Status: status.UnknownStatus,
   152  				Error:  fmt.Errorf("this is a test"),
   153  			},
   154  			expected: ResourceStatus{
   155  				Identifier: object.ObjMetadata{
   156  					GroupKind: schema.GroupKind{
   157  						Group: "apps",
   158  						Kind:  "Deployment",
   159  					},
   160  					Namespace: "default",
   161  					Name:      "Bar",
   162  				},
   163  				Status: status.UnknownStatus,
   164  				Error:  fmt.Errorf("this is a different error"),
   165  			},
   166  			equal: false,
   167  		},
   168  		"same resource different status": {
   169  			actual: ResourceStatus{
   170  				Identifier: object.ObjMetadata{
   171  					GroupKind: schema.GroupKind{
   172  						Group: "apps",
   173  						Kind:  "Deployment",
   174  					},
   175  					Namespace: "default",
   176  					Name:      "Bar",
   177  				},
   178  				Status: status.CurrentStatus,
   179  			},
   180  			expected: ResourceStatus{
   181  				Identifier: object.ObjMetadata{
   182  					GroupKind: schema.GroupKind{
   183  						Group: "apps",
   184  						Kind:  "Deployment",
   185  					},
   186  					Namespace: "default",
   187  					Name:      "Bar",
   188  				},
   189  				Status: status.InProgressStatus,
   190  			},
   191  			equal: false,
   192  		},
   193  		"same resource with different number of generated resources": {
   194  			actual: ResourceStatus{
   195  				Identifier: object.ObjMetadata{
   196  					GroupKind: schema.GroupKind{
   197  						Group: "apps",
   198  						Kind:  "Deployment",
   199  					},
   200  					Namespace: "default",
   201  					Name:      "Bar",
   202  				},
   203  				Status: status.InProgressStatus,
   204  				GeneratedResources: []*ResourceStatus{
   205  					{
   206  						Identifier: object.ObjMetadata{
   207  							GroupKind: schema.GroupKind{
   208  								Group: "apps",
   209  								Kind:  "ReplicaSet",
   210  							},
   211  							Namespace: "default",
   212  							Name:      "Bar-123",
   213  						},
   214  						Status: status.InProgressStatus,
   215  					},
   216  				},
   217  			},
   218  			expected: ResourceStatus{
   219  				Identifier: object.ObjMetadata{
   220  					GroupKind: schema.GroupKind{
   221  						Group: "apps",
   222  						Kind:  "Deployment",
   223  					},
   224  					Namespace: "default",
   225  					Name:      "Bar",
   226  				},
   227  				Status: status.InProgressStatus,
   228  			},
   229  			equal: false,
   230  		},
   231  		"same resource with different status on generated resources": {
   232  			actual: ResourceStatus{
   233  				Identifier: object.ObjMetadata{
   234  					GroupKind: schema.GroupKind{
   235  						Group: "apps",
   236  						Kind:  "Deployment",
   237  					},
   238  					Namespace: "default",
   239  					Name:      "Bar",
   240  				},
   241  				Status: status.InProgressStatus,
   242  				GeneratedResources: []*ResourceStatus{
   243  					{
   244  						Identifier: object.ObjMetadata{
   245  							GroupKind: schema.GroupKind{
   246  								Group: "apps",
   247  								Kind:  "ReplicaSet",
   248  							},
   249  							Namespace: "default",
   250  							Name:      "Bar-123",
   251  						},
   252  						Status: status.InProgressStatus,
   253  					},
   254  				},
   255  			},
   256  			expected: ResourceStatus{
   257  				Identifier: object.ObjMetadata{
   258  					GroupKind: schema.GroupKind{
   259  						Group: "apps",
   260  						Kind:  "Deployment",
   261  					},
   262  					Namespace: "default",
   263  					Name:      "Bar",
   264  				},
   265  				Status: status.InProgressStatus,
   266  				GeneratedResources: []*ResourceStatus{
   267  					{
   268  						Identifier: object.ObjMetadata{
   269  							GroupKind: schema.GroupKind{
   270  								Group: "apps",
   271  								Kind:  "ReplicaSet",
   272  							},
   273  							Namespace: "default",
   274  							Name:      "Bar-123",
   275  						},
   276  						Status: status.CurrentStatus,
   277  					},
   278  				},
   279  			},
   280  			equal: false,
   281  		},
   282  	}
   283  
   284  	for tn, tc := range testCases {
   285  		t.Run(tn, func(t *testing.T) {
   286  			res := ResourceStatusEqual(&tc.actual, &tc.expected)
   287  
   288  			assert.Equal(t, tc.equal, res)
   289  		})
   290  	}
   291  }
   292  

View as plain text