@@ -201,6 +201,174 @@ func TestLoadingEmptyMaps(t *testing.T) {
201
201
}
202
202
}
203
203
204
+ func TestDuplicateClusterName (t * testing.T ) {
205
+ configFile , _ := ioutil .TempFile ("" , "" )
206
+ defer os .Remove (configFile .Name ())
207
+
208
+ err := ioutil .WriteFile (configFile .Name (), []byte (`
209
+ kind: Config
210
+ apiVersion: v1
211
+ clusters:
212
+ - cluster:
213
+ api-version: v1
214
+ server: https://kubernetes.default.svc:443
215
+ certificate-authority: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
216
+ name: kubeconfig-cluster
217
+ - cluster:
218
+ api-version: v2
219
+ server: https://test.example.server:443
220
+ certificate-authority: /var/run/secrets/test.example.io/serviceaccount/ca.crt
221
+ name: kubeconfig-cluster
222
+ contexts:
223
+ - context:
224
+ cluster: kubeconfig-cluster
225
+ namespace: default
226
+ user: kubeconfig-user
227
+ name: kubeconfig-context
228
+ current-context: kubeconfig-context
229
+ users:
230
+ - name: kubeconfig-user
231
+ user:
232
+ tokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token
233
+ ` ), os .FileMode (0755 ))
234
+
235
+ if err != nil {
236
+ t .Errorf ("Unexpected error: %v" , err )
237
+ }
238
+
239
+ _ , err = LoadFromFile (configFile .Name ())
240
+ if err == nil || ! strings .Contains (err .Error (),
241
+ "error converting *[]NamedCluster into *map[string]*api.Cluster: duplicate name \" kubeconfig-cluster\" in list" ) {
242
+ t .Error ("Expected error in loading duplicate cluster name, got none" )
243
+ }
244
+ }
245
+
246
+ func TestDuplicateContextName (t * testing.T ) {
247
+ configFile , _ := ioutil .TempFile ("" , "" )
248
+ defer os .Remove (configFile .Name ())
249
+
250
+ err := ioutil .WriteFile (configFile .Name (), []byte (`
251
+ kind: Config
252
+ apiVersion: v1
253
+ clusters:
254
+ - cluster:
255
+ api-version: v1
256
+ server: https://kubernetes.default.svc:443
257
+ certificate-authority: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
258
+ name: kubeconfig-cluster
259
+ contexts:
260
+ - context:
261
+ cluster: kubeconfig-cluster
262
+ namespace: default
263
+ user: kubeconfig-user
264
+ name: kubeconfig-context
265
+ - context:
266
+ cluster: test-example-cluster
267
+ namespace: test-example
268
+ user: test-example-user
269
+ name: kubeconfig-context
270
+ current-context: kubeconfig-context
271
+ users:
272
+ - name: kubeconfig-user
273
+ user:
274
+ tokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token
275
+ ` ), os .FileMode (0755 ))
276
+
277
+ if err != nil {
278
+ t .Errorf ("Unexpected error: %v" , err )
279
+ }
280
+
281
+ _ , err = LoadFromFile (configFile .Name ())
282
+ if err == nil || ! strings .Contains (err .Error (),
283
+ "error converting *[]NamedContext into *map[string]*api.Context: duplicate name \" kubeconfig-context\" in list" ) {
284
+ t .Error ("Expected error in loading duplicate context name, got none" )
285
+ }
286
+ }
287
+
288
+ func TestDuplicateUserName (t * testing.T ) {
289
+ configFile , _ := ioutil .TempFile ("" , "" )
290
+ defer os .Remove (configFile .Name ())
291
+
292
+ err := ioutil .WriteFile (configFile .Name (), []byte (`
293
+ kind: Config
294
+ apiVersion: v1
295
+ clusters:
296
+ - cluster:
297
+ api-version: v1
298
+ server: https://kubernetes.default.svc:443
299
+ certificate-authority: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
300
+ name: kubeconfig-cluster
301
+ contexts:
302
+ - context:
303
+ cluster: kubeconfig-cluster
304
+ namespace: default
305
+ user: kubeconfig-user
306
+ name: kubeconfig-context
307
+ current-context: kubeconfig-context
308
+ users:
309
+ - name: kubeconfig-user
310
+ user:
311
+ tokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token
312
+ - name: kubeconfig-user
313
+ user:
314
+ tokenFile: /var/run/secrets/test.example.com/serviceaccount/token
315
+ ` ), os .FileMode (0755 ))
316
+
317
+ if err != nil {
318
+ t .Errorf ("Unexpected error: %v" , err )
319
+ }
320
+
321
+ _ , err = LoadFromFile (configFile .Name ())
322
+ if err == nil || ! strings .Contains (err .Error (),
323
+ "error converting *[]NamedAuthInfo into *map[string]*api.AuthInfo: duplicate name \" kubeconfig-user\" in list" ) {
324
+ t .Error ("Expected error in loading duplicate user name, got none" )
325
+ }
326
+ }
327
+
328
+ func TestDuplicateExtensionName (t * testing.T ) {
329
+ configFile , _ := ioutil .TempFile ("" , "" )
330
+ defer os .Remove (configFile .Name ())
331
+
332
+ err := ioutil .WriteFile (configFile .Name (), []byte (`
333
+ kind: Config
334
+ apiVersion: v1
335
+ clusters:
336
+ - cluster:
337
+ api-version: v1
338
+ server: https://kubernetes.default.svc:443
339
+ certificate-authority: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
340
+ name: kubeconfig-cluster
341
+ contexts:
342
+ - context:
343
+ cluster: kubeconfig-cluster
344
+ namespace: default
345
+ user: kubeconfig-user
346
+ name: kubeconfig-context
347
+ current-context: kubeconfig-context
348
+ users:
349
+ - name: kubeconfig-user
350
+ user:
351
+ tokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token
352
+ extensions:
353
+ - extension:
354
+ bytes: test
355
+ name: test-extension
356
+ - extension:
357
+ bytes: some-example
358
+ name: test-extension
359
+ ` ), os .FileMode (0755 ))
360
+
361
+ if err != nil {
362
+ t .Errorf ("Unexpected error: %v" , err )
363
+ }
364
+
365
+ _ , err = LoadFromFile (configFile .Name ())
366
+ if err == nil || ! strings .Contains (err .Error (),
367
+ "error converting *[]NamedExtension into *map[string]runtime.Object: duplicate name \" test-extension\" in list" ) {
368
+ t .Error ("Expected error in loading duplicate extension name, got none" )
369
+ }
370
+ }
371
+
204
372
func TestResolveRelativePaths (t * testing.T ) {
205
373
pathResolutionConfig1 := clientcmdapi.Config {
206
374
AuthInfos : map [string ]* clientcmdapi.AuthInfo {
0 commit comments