github.com/mponton/terratest@v0.44.0/modules/k8s/config_test.go (about)

     1  //go:build kubeall || kubernetes
     2  // +build kubeall kubernetes
     3  
     4  // NOTE: we have build tags to differentiate kubernetes tests from non-kubernetes tests. This is done because minikube
     5  // is heavy and can interfere with docker related tests in terratest. Specifically, many of the tests start to fail with
     6  // `connection refused` errors from `minikube`. To avoid overloading the system, we run the kubernetes tests and helm
     7  // tests separately from the others. This may not be necessary if you have a sufficiently powerful machine.  We
     8  // recommend at least 4 cores and 16GB of RAM if you want to run all the tests together.
     9  
    10  package k8s
    11  
    12  import (
    13  	"io/ioutil"
    14  	"os"
    15  	"testing"
    16  
    17  	"github.com/stretchr/testify/assert"
    18  	"github.com/stretchr/testify/require"
    19  	"k8s.io/client-go/tools/clientcmd"
    20  )
    21  
    22  func TestDeleteConfigContext(t *testing.T) {
    23  	t.Parallel()
    24  
    25  	path := StoreConfigToTempFile(t, BASIC_CONFIG_WITH_EXTRA_CONTEXT)
    26  	defer os.Remove(path)
    27  
    28  	err := DeleteConfigContextWithPathE(t, path, "extra_minikube")
    29  	require.NoError(t, err)
    30  
    31  	data, err := ioutil.ReadFile(path)
    32  	require.NoError(t, err)
    33  	storedConfig := string(data)
    34  	assert.Equal(t, BASIC_CONFIG, storedConfig)
    35  }
    36  
    37  func TestDeleteConfigContextWithAnotherContextRemaining(t *testing.T) {
    38  	t.Parallel()
    39  
    40  	path := StoreConfigToTempFile(t, BASIC_CONFIG_WITH_EXTRA_CONTEXT_NO_GARBAGE)
    41  	defer os.Remove(path)
    42  
    43  	err := DeleteConfigContextWithPathE(t, path, "extra_minikube")
    44  	require.NoError(t, err)
    45  
    46  	data, err := ioutil.ReadFile(path)
    47  	require.NoError(t, err)
    48  	storedConfig := string(data)
    49  	assert.Equal(t, EXPECTED_CONFIG_AFTER_EXTRA_MINIKUBE_DELETED_NO_GARBAGE, storedConfig)
    50  }
    51  
    52  func TestRemoveOrphanedClusterAndAuthInfoConfig(t *testing.T) {
    53  	t.Parallel()
    54  
    55  	testCases := []struct {
    56  		name string
    57  		in   string
    58  		out  string
    59  	}{
    60  		{
    61  			"TestExtraClusterRemoveOrphanedClusterAndAuthInfoed",
    62  			BASIC_CONFIG_WITH_EXTRA_CLUSTER,
    63  			BASIC_CONFIG,
    64  		},
    65  		{
    66  			"TestExtraAuthInfoRemoveOrphanedClusterAndAuthInfoed",
    67  			BASIC_CONFIG_WITH_EXTRA_AUTH_INFO,
    68  			BASIC_CONFIG,
    69  		},
    70  	}
    71  	for _, testCase := range testCases {
    72  		// Capture range variable to scope within range
    73  		testCase := testCase
    74  
    75  		t.Run(testCase.name, func(t *testing.T) {
    76  			t.Parallel()
    77  			removeOrphanedClusterAndAuthInfoConfigTestFunc(t, testCase.in, testCase.out)
    78  		})
    79  	}
    80  }
    81  
    82  func removeOrphanedClusterAndAuthInfoConfigTestFunc(t *testing.T, inputConfig string, expectedOutputConfig string) {
    83  	path := StoreConfigToTempFile(t, inputConfig)
    84  	defer os.Remove(path)
    85  
    86  	config := LoadConfigFromPath(path)
    87  	rawConfig, err := config.RawConfig()
    88  	require.NoError(t, err)
    89  	RemoveOrphanedClusterAndAuthInfoConfig(&rawConfig)
    90  	err = clientcmd.ModifyConfig(config.ConfigAccess(), rawConfig, false)
    91  	require.NoError(t, err)
    92  	data, err := ioutil.ReadFile(path)
    93  	require.NoError(t, err)
    94  	storedConfig := string(data)
    95  	assert.Equal(t, expectedOutputConfig, storedConfig)
    96  }
    97  
    98  // Various example configs used in testing the config manipulation functions
    99  
   100  const BASIC_CONFIG = `apiVersion: v1
   101  clusters:
   102  - cluster:
   103      certificate-authority: /home/terratest/.minikube/ca.crt
   104      server: https://172.17.0.48:8443
   105    name: minikube
   106  contexts:
   107  - context:
   108      cluster: minikube
   109      user: minikube
   110    name: minikube
   111  current-context: minikube
   112  kind: Config
   113  preferences: {}
   114  users:
   115  - name: minikube
   116    user:
   117      client-certificate: /home/terratest/.minikube/client.crt
   118      client-key: /home/terratest/.minikube/client.key
   119  `
   120  
   121  const BASIC_CONFIG_WITH_EXTRA_CLUSTER = `apiVersion: v1
   122  clusters:
   123  - cluster:
   124      certificate-authority: /home/terratest/.minikube/ca.crt
   125      server: https://172.17.0.48:8443
   126    name: minikube
   127  - cluster:
   128      certificate-authority: /home/terratest/.minikube/extra_ca.crt
   129      server: https://172.17.0.48:8443
   130    name: extra_minikube
   131  contexts:
   132  - context:
   133      cluster: minikube
   134      user: minikube
   135    name: minikube
   136  current-context: minikube
   137  kind: Config
   138  preferences: {}
   139  users:
   140  - name: minikube
   141    user:
   142      client-certificate: /home/terratest/.minikube/client.crt
   143      client-key: /home/terratest/.minikube/client.key
   144  `
   145  
   146  const BASIC_CONFIG_WITH_EXTRA_AUTH_INFO = `apiVersion: v1
   147  clusters:
   148  - cluster:
   149      certificate-authority: /home/terratest/.minikube/ca.crt
   150      server: https://172.17.0.48:8443
   151    name: minikube
   152  contexts:
   153  - context:
   154      cluster: minikube
   155      user: minikube
   156    name: minikube
   157  current-context: minikube
   158  kind: Config
   159  preferences: {}
   160  users:
   161  - name: minikube
   162    user:
   163      client-certificate: /home/terratest/.minikube/client.crt
   164      client-key: /home/terratest/.minikube/client.key
   165  - name: extra_minikube
   166    user:
   167      client-certificate: /home/terratest/.minikube/extra_client.crt
   168      client-key: /home/terratest/.minikube/extra_client.key
   169  `
   170  
   171  const BASIC_CONFIG_WITH_EXTRA_CONTEXT = `apiVersion: v1
   172  clusters:
   173  - cluster:
   174      certificate-authority: /home/terratest/.minikube/ca.crt
   175      server: https://172.17.0.48:8443
   176    name: minikube
   177  - cluster:
   178      certificate-authority: /home/terratest/.minikube/extra_ca.crt
   179      server: https://172.17.0.48:8443
   180    name: extra_minikube
   181  contexts:
   182  - context:
   183      cluster: minikube
   184      user: minikube
   185    name: minikube
   186  - context:
   187      cluster: extra_minikube
   188      user: extra_minikube
   189    name: extra_minikube
   190  current-context: extra_minikube
   191  kind: Config
   192  preferences: {}
   193  users:
   194  - name: minikube
   195    user:
   196      client-certificate: /home/terratest/.minikube/client.crt
   197      client-key: /home/terratest/.minikube/client.key
   198  - name: extra_minikube
   199    user:
   200      client-certificate: /home/terratest/.minikube/extra_client.crt
   201      client-key: /home/terratest/.minikube/extra_client.key
   202  `
   203  
   204  const BASIC_CONFIG_WITH_EXTRA_CONTEXT_NO_GARBAGE = `apiVersion: v1
   205  clusters:
   206  - cluster:
   207      certificate-authority: /home/terratest/.minikube/ca.crt
   208      server: https://172.17.0.48:8443
   209    name: minikube
   210  - cluster:
   211      certificate-authority: /home/terratest/.minikube/extra_ca.crt
   212      server: https://172.17.0.48:8443
   213    name: extra_minikube
   214  contexts:
   215  - context:
   216      cluster: minikube
   217      user: minikube
   218    name: minikube
   219  - context:
   220      cluster: extra_minikube
   221      user: extra_minikube
   222    name: extra_minikube
   223  - context:
   224      cluster: extra_minikube
   225      user: minikube
   226    name: other_minikube
   227  
   228  current-context: extra_minikube
   229  kind: Config
   230  preferences: {}
   231  users:
   232  - name: minikube
   233    user:
   234      client-certificate: /home/terratest/.minikube/client.crt
   235      client-key: /home/terratest/.minikube/client.key
   236  - name: extra_minikube
   237    user:
   238      client-certificate: /home/terratest/.minikube/extra_client.crt
   239      client-key: /home/terratest/.minikube/extra_client.key
   240  `
   241  
   242  const EXPECTED_CONFIG_AFTER_EXTRA_MINIKUBE_DELETED_NO_GARBAGE = `apiVersion: v1
   243  clusters:
   244  - cluster:
   245      certificate-authority: /home/terratest/.minikube/extra_ca.crt
   246      server: https://172.17.0.48:8443
   247    name: extra_minikube
   248  - cluster:
   249      certificate-authority: /home/terratest/.minikube/ca.crt
   250      server: https://172.17.0.48:8443
   251    name: minikube
   252  contexts:
   253  - context:
   254      cluster: minikube
   255      user: minikube
   256    name: minikube
   257  - context:
   258      cluster: extra_minikube
   259      user: minikube
   260    name: other_minikube
   261  current-context: minikube
   262  kind: Config
   263  preferences: {}
   264  users:
   265  - name: minikube
   266    user:
   267      client-certificate: /home/terratest/.minikube/client.crt
   268      client-key: /home/terratest/.minikube/client.key
   269  `