4
4
"bytes"
5
5
"flag"
6
6
"fmt"
7
- "io/ioutil"
8
7
"os"
9
8
"strconv"
10
9
"strings"
@@ -73,6 +72,17 @@ func TestCheckParams(t *testing.T) {
73
72
set .String ("cluster" , "cluster-0" , "" )
74
73
err = checkParams (c )
75
74
assert .NoError (t , err )
75
+
76
+ // Sanitizes namespace
77
+ set = flag .NewFlagSet ("namespace-sanitize" , 0 )
78
+ c = cli .NewContext (nil , set , nil )
79
+ set .String ("token" , "{}" , "" )
80
+ set .String ("region" , "us-west1" , "" )
81
+ set .String ("cluster" , "cluster-0" , "" )
82
+ set .String ("namespace" , "feature/1892-TEST-NS" , "" )
83
+ err = checkParams (c )
84
+ assert .NoError (t , err )
85
+ assert .Equal (t , "feature-1892-test-ns" , c .String ("namespace" ))
76
86
}
77
87
78
88
func TestValidateKubectlVersion (t * testing.T ) {
@@ -197,7 +207,8 @@ func TestFetchCredentials(t *testing.T) {
197
207
assert .NoError (t , regionalErr )
198
208
199
209
// Verify token file
200
- buf , err := ioutil .ReadFile ("/tmp/gcloud.json" )
210
+ buf , err := os .ReadFile ("/tmp/gcloud.json" )
211
+ assert .NoError (t , err )
201
212
assert .Equal (t , "{\" key\" , \" val\" }" , string (buf ))
202
213
203
214
// Run() error
@@ -259,13 +270,13 @@ func TestTemplateData(t *testing.T) {
259
270
260
271
// Variable overrides existing ones
261
272
vars = map [string ]interface {}{"zone" : "us-east4-b" }
262
- tmplData , secretsData , secretsDataRedacted , err = templateData (c , "us-east1-b" , vars , secrets )
273
+ _ , _ , _ , err = templateData (c , "us-east1-b" , vars , secrets )
263
274
assert .Error (t , err )
264
275
265
276
// Secret overrides variable
266
277
vars = map [string ]interface {}{"SECRET_TEST" : "val0" }
267
278
secrets = map [string ]string {"SECRET_TEST" : "test_val" }
268
- tmplData , secretsData , secretsDataRedacted , err = templateData (c , "us-east1-b" , vars , secrets )
279
+ _ , _ , _ , err = templateData (c , "us-east1-b" , vars , secrets )
269
280
assert .Error (t , err )
270
281
}
271
282
@@ -324,19 +335,20 @@ func TestTemplateDataExpandingVars(t *testing.T) {
324
335
325
336
// Variable overrides existing ones
326
337
vars = map [string ]interface {}{"zone" : "us-east4-b" }
327
- tmplData , secretsData , secretsDataRedacted , err = templateData (c , "us-east1-b" , vars , secrets )
338
+ _ , _ , _ , err = templateData (c , "us-east1-b" , vars , secrets )
328
339
assert .Error (t , err )
329
340
330
341
// Secret overrides variable
331
342
vars = map [string ]interface {}{"SECRET_TEST" : "val0" }
332
343
secrets = map [string ]string {"SECRET_TEST" : "test_val" }
333
- tmplData , secretsData , secretsDataRedacted , err = templateData (c , "us-east1-b" , vars , secrets )
344
+ _ , _ , _ , err = templateData (c , "us-east1-b" , vars , secrets )
334
345
assert .Error (t , err )
335
346
}
336
347
337
348
func TestRenderTemplates (t * testing.T ) {
338
349
// Mkdir for testing template files
339
- os .MkdirAll ("/tmp/drone-gke-tests/" , os .ModePerm )
350
+ err := os .MkdirAll ("/tmp/drone-gke-tests/" , os .ModePerm )
351
+ assert .NoError (t , err )
340
352
kubeTemplatePath := "/tmp/drone-gke-tests/.kube.yml"
341
353
secretTemplatePath := "/tmp/drone-gke-tests/.kube.sec.yml"
342
354
@@ -359,32 +371,35 @@ func TestRenderTemplates(t *testing.T) {
359
371
// No template file, should error
360
372
os .Remove (kubeTemplatePath )
361
373
os .Remove (secretTemplatePath )
362
- _ , err : = renderTemplates (c , tmplData , secretsData )
374
+ _ , err = renderTemplates (c , tmplData , secretsData )
363
375
assert .Error (t , err )
364
376
365
377
// Normal
366
378
// Create test template files
367
379
tmplBuf := []byte ("{{.COMMIT}}-{{.key0}}" )
368
- err = ioutil .WriteFile (kubeTemplatePath , tmplBuf , 0600 )
380
+ err = os .WriteFile (kubeTemplatePath , tmplBuf , 0600 )
369
381
assert .NoError (t , err )
370
382
tmplBuf = []byte ("{{.COMMIT}}-{{.SECRET_TEST}}" )
371
- err = ioutil .WriteFile (secretTemplatePath , tmplBuf , 0600 )
383
+ err = os .WriteFile (secretTemplatePath , tmplBuf , 0600 )
372
384
assert .NoError (t , err )
373
385
374
386
// Render
375
387
manifestPaths , err := renderTemplates (c , tmplData , secretsData )
376
388
assert .NoError (t , err )
377
389
378
390
// Verify token files
379
- buf , err := ioutil .ReadFile (manifestPaths [kubeTemplatePath ])
391
+ buf , err := os .ReadFile (manifestPaths [kubeTemplatePath ])
392
+ assert .NoError (t , err )
380
393
assert .Equal (t , "e0f21b90a-val0" , string (buf ))
381
394
382
- buf , err = ioutil .ReadFile (manifestPaths [secretTemplatePath ])
395
+ buf , err = os .ReadFile (manifestPaths [secretTemplatePath ])
396
+ assert .NoError (t , err )
383
397
assert .Equal (t , "e0f21b90a-test_sec_val" , string (buf ))
384
398
385
399
// Secret variables shouldn't be available in kube template
386
400
tmplBuf = []byte ("{{.SECRET_TEST}}" )
387
- err = ioutil .WriteFile (kubeTemplatePath , tmplBuf , 0600 )
401
+ err = os .WriteFile (kubeTemplatePath , tmplBuf , 0600 )
402
+ assert .NoError (t , err )
388
403
_ , err = renderTemplates (c , tmplData , secretsData )
389
404
assert .Error (t , err )
390
405
}
@@ -475,14 +490,15 @@ func TestSetNamespace(t *testing.T) {
475
490
assert .NoError (t , err )
476
491
477
492
// Verify written file
478
- buf , err := ioutil .ReadFile ("/tmp/namespace.json" )
493
+ buf , err := os .ReadFile ("/tmp/namespace.json" )
494
+ assert .NoError (t , err )
479
495
assert .Equal (t , "\n ---\n apiVersion: v1\n kind: Namespace\n metadata:\n name: test-ns\n " , string (buf ))
480
496
481
497
// Dry-run
482
498
set = flag .NewFlagSet ("test-set" , 0 )
483
499
set .String ("zone" , "us-east1-b" , "" )
484
500
set .String ("cluster" , "cluster-0" , "" )
485
- set .String ("namespace" , "Feature/ 1892-TEST-NS " , "" )
501
+ set .String ("namespace" , "feature- 1892-test-ns " , "" ) // the namespace is already sanitized by this point
486
502
set .Bool ("dry-run" , true , "" )
487
503
set .Bool ("create-namespace" , true , "" )
488
504
c = cli .NewContext (nil , set , nil )
@@ -498,7 +514,7 @@ func TestSetNamespace(t *testing.T) {
498
514
set = flag .NewFlagSet ("no-create-namespace-set" , 0 )
499
515
set .String ("zone" , "us-east1-b" , "" )
500
516
set .String ("cluster" , "cluster-0" , "" )
501
- set .String ("namespace" , "Feature/ 1892-TEST-NS " , "" )
517
+ set .String ("namespace" , "feature- 1892-test-ns " , "" ) // the namespace is already sanitized by this point
502
518
set .Bool ("dry-run" , false , "" )
503
519
set .Bool ("create-namespace" , false , "" )
504
520
c = cli .NewContext (nil , set , nil )
@@ -891,6 +907,7 @@ func TestSetDryRunFlag(t *testing.T) {
891
907
expectedFlag : clientSideDryRunFlagDefault ,
892
908
},
893
909
}
910
+
894
911
for _ , test := range tests {
895
912
t .Run (test .name , func (t * testing.T ) {
896
913
os .Clearenv ()
@@ -918,7 +935,8 @@ func TestSetDryRunFlag(t *testing.T) {
918
935
}
919
936
920
937
// Run
921
- setDryRunFlag (testRunner , buf , ctx )
938
+ err := setDryRunFlag (testRunner , buf , ctx )
939
+ assert .NoError (t , err )
922
940
923
941
// Check
924
942
if dryRunFlag != test .expectedFlag {
@@ -927,7 +945,6 @@ func TestSetDryRunFlag(t *testing.T) {
927
945
return nil
928
946
},
929
947
}).Run ([]string {"run" })
930
-
931
948
if err != nil {
932
949
t .Fatalf ("unepected err: %v" , err )
933
950
}
@@ -988,3 +1005,49 @@ func Test_decodeToken(t *testing.T) {
988
1005
})
989
1006
}
990
1007
}
1008
+
1009
+ func TestSanitizeNamespace (t * testing.T ) {
1010
+ tests := []struct {
1011
+ name string
1012
+ input string
1013
+ expected string
1014
+ }{
1015
+ {
1016
+ name : "already sanitized" ,
1017
+ input : "test-ns" ,
1018
+ expected : "test-ns" ,
1019
+ },
1020
+ {
1021
+ name : "uppercase characters" ,
1022
+ input : "TEST-NS" ,
1023
+ expected : "test-ns" ,
1024
+ },
1025
+ {
1026
+ name : "mixed case" ,
1027
+ input : "Test-Ns" ,
1028
+ expected : "test-ns" ,
1029
+ },
1030
+ {
1031
+ name : "special-chars" ,
1032
+ input : "feature/1892_test_ns" ,
1033
+ expected : "feature-1892-test-ns" ,
1034
+ },
1035
+ {
1036
+ name : "uppercase and special chars" ,
1037
+ input : "feature/1892-TEST-NS" ,
1038
+ expected : "feature-1892-test-ns" ,
1039
+ },
1040
+ {
1041
+ name : "empty" ,
1042
+ input : "" ,
1043
+ expected : "" ,
1044
+ },
1045
+ }
1046
+
1047
+ for _ , tt := range tests {
1048
+ t .Run (tt .name , func (t * testing.T ) {
1049
+ output := sanitizeNamespace (tt .input )
1050
+ assert .Equal (t , tt .expected , output )
1051
+ })
1052
+ }
1053
+ }
0 commit comments