...

Source file src/sigs.k8s.io/kustomize/kyaml/resid/resid_test.go

Documentation: sigs.k8s.io/kustomize/kyaml/resid

     1  // Copyright 2019 The Kubernetes Authors.
     2  // SPDX-License-Identifier: Apache-2.0
     3  
     4  package resid
     5  
     6  import (
     7  	"testing"
     8  )
     9  
    10  var resIdStringTests = []struct {
    11  	x ResId
    12  	s string
    13  }{
    14  	{
    15  		ResId{
    16  			Namespace: "ns",
    17  			Gvk:       Gvk{Group: "g", Version: "v", Kind: "k"},
    18  			Name:      "nm",
    19  		},
    20  		"k.v.g/nm.ns",
    21  	},
    22  	{
    23  		ResId{
    24  			Namespace: "ns",
    25  			Gvk:       Gvk{Version: "v", Kind: "k"},
    26  			Name:      "nm",
    27  		},
    28  		"k.v.[noGrp]/nm.ns",
    29  	},
    30  	{
    31  		ResId{
    32  			Namespace: "ns",
    33  			Gvk:       Gvk{Kind: "k"},
    34  			Name:      "nm",
    35  		},
    36  		"k.[noVer].[noGrp]/nm.ns",
    37  	},
    38  	{
    39  		ResId{
    40  			Namespace: "ns",
    41  			Gvk:       Gvk{},
    42  			Name:      "nm",
    43  		},
    44  		"[noKind].[noVer].[noGrp]/nm.ns",
    45  	},
    46  	{
    47  		ResId{
    48  			Gvk:  Gvk{},
    49  			Name: "nm",
    50  		},
    51  		"[noKind].[noVer].[noGrp]/nm.[noNs]",
    52  	},
    53  	{
    54  		ResId{
    55  			Gvk: Gvk{},
    56  		},
    57  		"[noKind].[noVer].[noGrp]/[noName].[noNs]",
    58  	},
    59  	{
    60  		ResId{},
    61  		"[noKind].[noVer].[noGrp]/[noName].[noNs]",
    62  	},
    63  }
    64  
    65  func TestResIdString(t *testing.T) {
    66  	for _, hey := range resIdStringTests {
    67  		if hey.x.String() != hey.s {
    68  			t.Fatalf("Actual: %v,  Expected: '%s'", hey.x, hey.s)
    69  		}
    70  	}
    71  }
    72  
    73  func TestResIdEquals(t *testing.T) {
    74  	var GvknEqualsTest = []struct {
    75  		id1        ResId
    76  		id2        ResId
    77  		gVknResult bool
    78  		nsEquals   bool
    79  		equals     bool
    80  	}{
    81  		{
    82  			id1: ResId{
    83  				Namespace: "X",
    84  				Gvk:       Gvk{Group: "g", Version: "v", Kind: "k"},
    85  				Name:      "nm",
    86  			},
    87  			id2: ResId{
    88  				Namespace: "X",
    89  				Gvk:       Gvk{Group: "g", Version: "v", Kind: "k"},
    90  				Name:      "nm",
    91  			},
    92  			gVknResult: true,
    93  			nsEquals:   true,
    94  			equals:     true,
    95  		},
    96  		{
    97  			id1: ResId{
    98  				Namespace: "X",
    99  				Gvk:       Gvk{Group: "g", Version: "v", Kind: "k"},
   100  				Name:      "nm",
   101  			},
   102  			id2: ResId{
   103  				Namespace: "Z",
   104  				Gvk:       Gvk{Group: "g", Version: "v", Kind: "k"},
   105  				Name:      "nm",
   106  			},
   107  			gVknResult: true,
   108  			nsEquals:   false,
   109  			equals:     false,
   110  		},
   111  		{
   112  			id1: ResId{
   113  				Namespace: "X",
   114  				Gvk:       Gvk{Group: "g", Version: "v", Kind: "k"},
   115  				Name:      "nm",
   116  			},
   117  			id2: ResId{
   118  				Gvk:  Gvk{Group: "g", Version: "v", Kind: "k"},
   119  				Name: "nm",
   120  			},
   121  			gVknResult: true,
   122  			nsEquals:   false,
   123  			equals:     false,
   124  		},
   125  		{
   126  			id1: ResId{
   127  				Namespace: "X",
   128  				Gvk:       Gvk{Version: "v", Kind: "k"},
   129  				Name:      "nm",
   130  			},
   131  			id2: ResId{
   132  				Namespace: "Z",
   133  				Gvk:       Gvk{Version: "v", Kind: "k"},
   134  				Name:      "nm",
   135  			},
   136  			gVknResult: true,
   137  			nsEquals:   false,
   138  			equals:     false,
   139  		},
   140  		{
   141  			id1: ResId{
   142  				Namespace: "X",
   143  				Gvk:       Gvk{Kind: "k"},
   144  				Name:      "nm",
   145  			},
   146  			id2: ResId{
   147  				Namespace: "Z",
   148  				Gvk:       Gvk{Kind: "k"},
   149  				Name:      "nm",
   150  			},
   151  			gVknResult: true,
   152  			nsEquals:   false,
   153  			equals:     false,
   154  		},
   155  		{
   156  			id1: ResId{
   157  				Gvk:  Gvk{Kind: "k"},
   158  				Name: "nm",
   159  			},
   160  			id2: ResId{
   161  				Gvk:  Gvk{Kind: "k"},
   162  				Name: "nm2",
   163  			},
   164  			gVknResult: false,
   165  			nsEquals:   true,
   166  			equals:     false,
   167  		},
   168  		{
   169  			id1: ResId{
   170  				Gvk:  Gvk{Kind: "k"},
   171  				Name: "nm",
   172  			},
   173  			id2: ResId{
   174  				Gvk:  Gvk{Kind: "Node"},
   175  				Name: "nm",
   176  			},
   177  			gVknResult: false,
   178  			nsEquals:   true,
   179  			equals:     false,
   180  		},
   181  		{
   182  			id1: ResId{
   183  				Gvk:  Gvk{Kind: "Node"},
   184  				Name: "nm1",
   185  			},
   186  			id2: ResId{
   187  				Gvk:  Gvk{Kind: "Node"},
   188  				Name: "nm2",
   189  			},
   190  			gVknResult: false,
   191  			nsEquals:   true,
   192  			equals:     false,
   193  		},
   194  		{
   195  			id1: ResId{
   196  				Namespace: "default",
   197  				Gvk:       Gvk{Kind: "k"},
   198  				Name:      "nm1",
   199  			},
   200  			id2: ResId{
   201  				Gvk:  Gvk{Kind: "k"},
   202  				Name: "nm2",
   203  			},
   204  			gVknResult: false,
   205  			nsEquals:   true,
   206  			equals:     false,
   207  		},
   208  		{
   209  			id1: ResId{
   210  				Namespace: "X",
   211  				Name:      "nm",
   212  			},
   213  			id2: ResId{
   214  				Namespace: "Z",
   215  				Name:      "nm",
   216  			},
   217  			gVknResult: true,
   218  			nsEquals:   false,
   219  			equals:     false,
   220  		},
   221  	}
   222  
   223  	for _, tst := range GvknEqualsTest {
   224  		if tst.id1.GvknEquals(tst.id2) != tst.gVknResult {
   225  			t.Fatalf("GvknEquals(\n%v,\n%v\n) should be %v",
   226  				tst.id1, tst.id2, tst.gVknResult)
   227  		}
   228  		if tst.id1.IsNsEquals(tst.id2) != tst.nsEquals {
   229  			t.Fatalf("IsNsEquals(\n%v,\n%v\n) should be %v",
   230  				tst.id1, tst.id2, tst.equals)
   231  		}
   232  		if tst.id1.Equals(tst.id2) != tst.equals {
   233  			t.Fatalf("Equals(\n%v,\n%v\n) should be %v",
   234  				tst.id1, tst.id2, tst.equals)
   235  		}
   236  	}
   237  }
   238  
   239  var ids = []ResId{
   240  	{
   241  		Namespace: "ns",
   242  		Gvk:       Gvk{Group: "g", Version: "v", Kind: "k"},
   243  		Name:      "nm",
   244  	},
   245  	{
   246  		Namespace: "ns",
   247  		Gvk:       Gvk{Version: "v", Kind: "k"},
   248  		Name:      "nm",
   249  	},
   250  	{
   251  		Namespace: "ns",
   252  		Gvk:       Gvk{Kind: "k"},
   253  		Name:      "nm",
   254  	},
   255  	{
   256  		Namespace: "ns",
   257  		Gvk:       Gvk{},
   258  		Name:      "nm",
   259  	},
   260  	{
   261  		Gvk:  Gvk{},
   262  		Name: "nm",
   263  	},
   264  	{
   265  		Gvk:  Gvk{},
   266  		Name: "nm",
   267  	},
   268  	{
   269  		Gvk: Gvk{},
   270  	},
   271  	{
   272  		Gvk: Gvk{
   273  			Group:           "rbac.authorization.k8s.io",
   274  			Version:         "v1",
   275  			Kind:            "ClusterRole",
   276  			isClusterScoped: true,
   277  		},
   278  		Name: "nm",
   279  	},
   280  	{
   281  		Gvk: Gvk{
   282  			Group:           "rbac.authorization.k8s.io",
   283  			Version:         "v1",
   284  			Kind:            "ClusterRole",
   285  			isClusterScoped: true,
   286  		},
   287  		Name: "my.name",
   288  	},
   289  }
   290  
   291  func TestResIdIsSelected(t *testing.T) {
   292  	type selectable struct {
   293  		id             ResId
   294  		expectSelected bool
   295  	}
   296  	var testCases = []struct {
   297  		selector    ResId
   298  		selectables []selectable
   299  	}{
   300  		{
   301  			selector: ResId{
   302  				Namespace: "X",
   303  				Name:      "nm",
   304  				Gvk:       Gvk{Group: "g", Version: "v", Kind: "k"},
   305  			},
   306  			selectables: []selectable{
   307  				{
   308  					id: ResId{
   309  						Namespace: "X",
   310  						Name:      "nm",
   311  						Gvk:       Gvk{Group: "g", Version: "v", Kind: "k"},
   312  					},
   313  					expectSelected: true,
   314  				},
   315  				{
   316  					id: ResId{
   317  						Namespace: "x",
   318  						Name:      "nm",
   319  						Gvk:       Gvk{Group: "g", Version: "v", Kind: "k"},
   320  					},
   321  					expectSelected: false,
   322  				},
   323  				{
   324  					id: ResId{
   325  						Name: "nm",
   326  						Gvk:  Gvk{Group: "g", Version: "v", Kind: "k"},
   327  					},
   328  					expectSelected: false,
   329  				},
   330  			},
   331  		},
   332  		{
   333  			selector: ResId{
   334  				/* Namespace wildcard */
   335  				Name: "nm",
   336  				Gvk:  Gvk{Group: "g" /* Version wildcard */, Kind: "k"},
   337  			},
   338  			selectables: []selectable{
   339  				{
   340  					id: ResId{
   341  						Namespace: "X",
   342  						Name:      "nm",
   343  						Gvk:       Gvk{Group: "g", Version: "v", Kind: "k"},
   344  					},
   345  					expectSelected: true,
   346  				},
   347  				{
   348  					id: ResId{
   349  						Namespace: "x",
   350  						Name:      "nm",
   351  						Gvk:       Gvk{Group: "g", Version: "v", Kind: "k"},
   352  					},
   353  					expectSelected: true,
   354  				},
   355  				{
   356  					id: ResId{
   357  						Name: "nm",
   358  						Gvk:  Gvk{Group: "g", Version: "VVV", Kind: "k"},
   359  					},
   360  					expectSelected: true,
   361  				},
   362  			},
   363  		},
   364  	}
   365  
   366  	for _, tst := range testCases {
   367  		for _, pair := range tst.selectables {
   368  			if pair.id.IsSelectedBy(tst.selector) {
   369  				if !pair.expectSelected {
   370  					t.Fatalf(
   371  						"expected id %s to NOT be selected by %s",
   372  						pair.id, tst.selector)
   373  				}
   374  			} else {
   375  				if pair.expectSelected {
   376  					t.Fatalf(
   377  						"expected id %s to be selected by %s",
   378  						pair.id, tst.selector)
   379  				}
   380  			}
   381  		}
   382  	}
   383  }
   384  
   385  func TestFromString(t *testing.T) {
   386  	for _, id := range ids {
   387  		newId := FromString(id.String())
   388  		if newId != id {
   389  			t.Fatalf("Actual: %v,  Expected: '%s'", newId, id)
   390  		}
   391  	}
   392  }
   393  
   394  func TestEffectiveNamespace(t *testing.T) {
   395  	var testCases = map[string]struct {
   396  		id       ResId
   397  		expected string
   398  	}{
   399  		"tst1": {
   400  			id: ResId{
   401  				Gvk:  NewGvk("", "v1", "Node"),
   402  				Name: "nm",
   403  			},
   404  			expected: TotallyNotANamespace,
   405  		},
   406  		"tst2": {
   407  			id: ResId{
   408  				Namespace: "foo",
   409  				Gvk:       NewGvk("", "v1", "Node"),
   410  				Name:      "nm",
   411  			},
   412  			expected: TotallyNotANamespace,
   413  		},
   414  		"tst3": {
   415  			id: ResId{
   416  				Namespace: "foo",
   417  				Gvk:       NewGvk("g", "v", "k"),
   418  				Name:      "nm",
   419  			},
   420  			expected: "foo",
   421  		},
   422  		"tst4": {
   423  			id: ResId{
   424  				Namespace: "",
   425  				Gvk:       NewGvk("g", "v", "k"),
   426  				Name:      "nm",
   427  			},
   428  			expected: DefaultNamespace,
   429  		},
   430  		"tst5": {
   431  			id: ResId{
   432  				Gvk:  Gvk{Group: "g", Version: "v", Kind: "k"},
   433  				Name: "nm",
   434  			},
   435  			expected: DefaultNamespace,
   436  		},
   437  	}
   438  
   439  	for n, tst := range testCases {
   440  		t.Run(n, func(t *testing.T) {
   441  			if actual := tst.id.EffectiveNamespace(); actual != tst.expected {
   442  				t.Fatalf("EffectiveNamespace was %s, expected %s",
   443  					actual, tst.expected)
   444  			}
   445  		})
   446  	}
   447  }
   448  

View as plain text