@@ -443,6 +443,118 @@ func TestGetPolicyFromFlags(t *testing.T) {
443443 }
444444}
445445
446+ // TestValidatePermissions tests the validatePermissions wrapper function to
447+ // ensure it properly validates permissions and rejects invalid ones.
448+ func TestValidatePermissions (t * testing.T ) {
449+ tests := []struct {
450+ name string
451+ permsStr string
452+ wantErr bool
453+ errContains string
454+ wantPerms int
455+ }{
456+ {
457+ name : "valid_single_permission" ,
458+ permsStr : "read" ,
459+ wantErr : false ,
460+ wantPerms : 1 ,
461+ },
462+ {
463+ name : "valid_multiple_permissions" ,
464+ permsStr : "read,write,list" ,
465+ wantErr : false ,
466+ wantPerms : 3 ,
467+ },
468+ {
469+ name : "valid_all_permissions" ,
470+ permsStr : "read,write,list,execute,super" ,
471+ wantErr : false ,
472+ wantPerms : 5 ,
473+ },
474+ {
475+ name : "valid_permissions_with_spaces" ,
476+ permsStr : "read, write, list" ,
477+ wantErr : false ,
478+ wantPerms : 3 ,
479+ },
480+ {
481+ name : "invalid_permission_delete" ,
482+ permsStr : "delete" ,
483+ wantErr : true ,
484+ errContains : "invalid permission" ,
485+ },
486+ {
487+ name : "invalid_permission_admin" ,
488+ permsStr : "admin" ,
489+ wantErr : true ,
490+ errContains : "invalid permission" ,
491+ },
492+ {
493+ name : "invalid_permission_typo" ,
494+ permsStr : "raed" ,
495+ wantErr : true ,
496+ errContains : "invalid permission" ,
497+ },
498+ {
499+ name : "mixed_valid_and_invalid" ,
500+ permsStr : "read,delete" ,
501+ wantErr : true ,
502+ errContains : "invalid permission" ,
503+ },
504+ {
505+ name : "invalid_permission_create" ,
506+ permsStr : "create" ,
507+ wantErr : true ,
508+ errContains : "invalid permission" ,
509+ },
510+ {
511+ name : "empty_string" ,
512+ permsStr : "" ,
513+ wantErr : true ,
514+ errContains : "no valid permissions" ,
515+ },
516+ }
517+
518+ for _ , tt := range tests {
519+ t .Run (tt .name , func (t * testing.T ) {
520+ perms , err := validatePermissions (tt .permsStr )
521+
522+ if tt .wantErr {
523+ if err == nil {
524+ t .Errorf (
525+ "validatePermissions() expected error but got none" ,
526+ )
527+ return
528+ }
529+ if tt .errContains != "" && ! strings .Contains (
530+ strings .ToLower (err .Error ()),
531+ strings .ToLower (tt .errContains ),
532+ ) {
533+ t .Errorf (
534+ "validatePermissions() error = %v, " +
535+ "want error containing %v" ,
536+ err , tt .errContains ,
537+ )
538+ }
539+ } else {
540+ if err != nil {
541+ t .Errorf (
542+ "validatePermissions() unexpected error: %v" ,
543+ err ,
544+ )
545+ return
546+ }
547+ if len (perms ) != tt .wantPerms {
548+ t .Errorf (
549+ "validatePermissions() got %d permissions, want %d" ,
550+ len (perms ), tt .wantPerms ,
551+ )
552+ }
553+ }
554+ })
555+ }
556+ }
557+
446558func TestNewPolicyCreateCommand (t * testing.T ) {
447559 source := & workloadapi.X509Source {}
448560 SPIFFEIDPattern := "^spiffe://example\\ .org/spike$"
0 commit comments