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 `