...

Source file src/sigs.k8s.io/cli-utils/pkg/object/unstructured_set_test.go

Documentation: sigs.k8s.io/cli-utils/pkg/object

     1  // Copyright 2020 The Kubernetes Authors.
     2  // SPDX-License-Identifier: Apache-2.0
     3  
     4  package object
     5  
     6  import (
     7  	"testing"
     8  
     9  	"sigs.k8s.io/cli-utils/pkg/kstatus/polling/testutil"
    10  )
    11  
    12  var resources = map[string]string{
    13  	"pod1": `
    14  apiVersion: v1
    15  kind: Pod
    16  metadata:
    17    name: pod1
    18    namespace: default
    19  `,
    20  	"pod1dupe": `
    21  apiVersion: v1
    22  kind: Pod
    23  metadata:
    24    name: pod1
    25    namespace: default
    26  `,
    27  	"pod2": `
    28  apiVersion: v1
    29  kind: Pod
    30  metadata:
    31    name: pod2
    32    namespace: default
    33  `,
    34  	"pod3": `
    35  apiVersion: v1
    36  kind: Pod
    37  metadata:
    38    name: pod3
    39    namespace: default
    40  `,
    41  	"pod4": `
    42  apiVersion: v1
    43  kind: Pod
    44  metadata:
    45  name: pod4
    46  namespace: default
    47  `,
    48  }
    49  
    50  func TestUnstructuredSetEquals(t *testing.T) {
    51  	pod1 := testutil.YamlToUnstructured(t, resources["pod1"])
    52  	pod1dupe := testutil.YamlToUnstructured(t, resources["pod1dupe"])
    53  	pod2 := testutil.YamlToUnstructured(t, resources["pod2"])
    54  	pod3 := testutil.YamlToUnstructured(t, resources["pod3"])
    55  	pod4 := testutil.YamlToUnstructured(t, resources["pod4"])
    56  
    57  	testCases := map[string]struct {
    58  		setA    UnstructuredSet
    59  		setB    UnstructuredSet
    60  		isEqual bool
    61  	}{
    62  		"Empty sets": {
    63  			setA:    UnstructuredSet{},
    64  			setB:    UnstructuredSet{},
    65  			isEqual: true,
    66  		},
    67  		"Empty first set": {
    68  			setA:    UnstructuredSet{},
    69  			setB:    UnstructuredSet{pod1, pod2},
    70  			isEqual: false,
    71  		},
    72  		"Empty second set": {
    73  			setA:    UnstructuredSet{pod1, pod2},
    74  			setB:    UnstructuredSet{},
    75  			isEqual: false,
    76  		},
    77  		"Different order": {
    78  			setA:    UnstructuredSet{pod1, pod2},
    79  			setB:    UnstructuredSet{pod2, pod1},
    80  			isEqual: true,
    81  		},
    82  		"One item overlap": {
    83  			setA:    UnstructuredSet{pod1, pod2},
    84  			setB:    UnstructuredSet{pod2, pod3},
    85  			isEqual: false,
    86  		},
    87  		"Disjoint sets": {
    88  			setA:    UnstructuredSet{pod1, pod2},
    89  			setB:    UnstructuredSet{pod3, pod4},
    90  			isEqual: false,
    91  		},
    92  		"Duplicate pointer": {
    93  			setA:    UnstructuredSet{pod1, pod1},
    94  			setB:    UnstructuredSet{pod1},
    95  			isEqual: true,
    96  		},
    97  		"Duplicate value": {
    98  			setA:    UnstructuredSet{pod1, pod1dupe},
    99  			setB:    UnstructuredSet{pod1},
   100  			isEqual: true,
   101  		},
   102  		"Same value": {
   103  			setA:    UnstructuredSet{pod1},
   104  			setB:    UnstructuredSet{pod1dupe},
   105  			isEqual: true,
   106  		},
   107  	}
   108  
   109  	for name, tc := range testCases {
   110  		t.Run(name, func(t *testing.T) {
   111  			actual := tc.setA.Equal(tc.setB)
   112  			if tc.isEqual != actual {
   113  				t.Errorf("Equal expected (%t), got (%t)", tc.isEqual, actual)
   114  			}
   115  		})
   116  	}
   117  }
   118  

View as plain text