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 `