github.com/terraform-modules-krish/terratest@v0.29.0/modules/k8s/config_test.go (about)

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