Skip to content

Commit 41e5ec5

Browse files
authored
Add comprehensive tests for permission validation (#273)
- Add TestValidatePermissions to verify permission validation works correctly - Test valid permissions: read, write, list, execute, super - Test invalid permissions: delete, admin, create, typos like 'raed' - Ensures CLI properly rejects invalid permissions at validation time - All tests pass, addressing issue #253 Signed-off-by: majiayu000 <1835304752@qq.com>
1 parent 872311f commit 41e5ec5

File tree

1 file changed

+112
-0
lines changed

1 file changed

+112
-0
lines changed

app/spike/internal/cmd/policy/create_test.go

Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
446558
func TestNewPolicyCreateCommand(t *testing.T) {
447559
source := &workloadapi.X509Source{}
448560
SPIFFEIDPattern := "^spiffe://example\\.org/spike$"

0 commit comments

Comments
 (0)