Ctrl K
ComunidadGuías…

internal/auth/identity_fuzz_test.go

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
package auth

import (
	"slices"
	"testing"
)

func FuzzRoleAuthorization(f *testing.F) {
	for _, seed := range []struct {
		held   string
		needed string
	}{
		{held: RoleAdmin, needed: RoleViewer},
		{held: RoleViewer, needed: RoleAdmin},
		{held: RoleAdmin, needed: "owner"},
		{held: "owner", needed: "operator"},
		{held: "", needed: ""},
	} {
		f.Add(seed.held, seed.needed)
	}

	f.Fuzz(func(t *testing.T, held, needed string) {
		got := Allows(held, needed)
		if needed == "" {
			if !got {
				t.Fatal("an operation requiring no role was refused")
			}
			return
		}
		neededAt := slices.Index(rolesWeakestFirst, needed)
		if neededAt < 0 {
			if got {
				t.Fatalf("unknown role %q was granted", needed)
			}
			return
		}
		heldAt := slices.Index(rolesWeakestFirst, held)
		if got != (heldAt >= neededAt) {
			t.Fatalf("Allows(%q, %q) = %v", held, needed, got)
		}
	})
}