myxce/src/frontend/apiserver/controllers/rbac_convention_test.go

108 lines
3.2 KiB
Go

package controllers
import (
"testing"
"apiserver/models"
"apiserver/store"
)
// TestGetRequireResourcePermission_ReturnsPermThenError verifies the Go-standard
// (T, error) return order: permission first, error second.
func TestGetRequireResourcePermission_GoConvention(t *testing.T) {
store.InitStores()
// unknown user — should return error
perm, err := GetRequireResourcePermission("nobody", "job:view")
if err == nil {
t.Error("expected error for user with no roles")
}
if perm.Permission != "" {
t.Errorf("expected empty permission on error, got %+v", perm)
}
}
func TestGetRequireResourcePermission_FoundPermission(t *testing.T) {
store.InitStores()
store.AddRoleForUser("alice", "myrole")
store.AddPermissionsForRole("myrole", []store.RolePermission{
{Action: "job:view", DomainType: "all"},
})
perm, err := GetRequireResourcePermission("alice", "job:view")
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
if perm.Permission != "job:view" {
t.Errorf("expected job:view, got %q", perm.Permission)
}
if perm.DomainType != "all" {
t.Errorf("expected all, got %q", perm.DomainType)
}
}
// TestDomainTypeConstants ensures domain type constants match expected string values.
// This guards against accidental constant value changes.
func TestDomainTypeConstants(t *testing.T) {
cases := map[string]string{
"DomainTypeAll": models.DomainTypeAll,
"DomainTypeSelf": models.DomainTypeSelf,
"DomainTypeSelfUG": models.DomainTypeSelfUG,
"DomainTypeQueue": models.DomainTypeQueue,
}
expected := map[string]string{
"DomainTypeAll": "all",
"DomainTypeSelf": "self",
"DomainTypeSelfUG": "self_ug",
"DomainTypeQueue": "queue",
}
for name, got := range cases {
if got != expected[name] {
t.Errorf("%s = %q, want %q", name, got, expected[name])
}
}
}
// TestGetAccessQueues_AllDomain returns all queue names for "all" domain
func TestGetAccessQueues_AllDomain(t *testing.T) {
store.InitStores()
store.Queues.Put("q1", models.QueueInfo{QueueName: "q1"})
store.Queues.Put("q2", models.QueueInfo{QueueName: "q2"})
store.AddRoleForUser("alice", "r1")
store.AddPermissionsForRole("r1", []store.RolePermission{
{Action: "queue:view", DomainType: "all"},
})
queues, err := getAccessQueues("alice", "queue:view")
if err != nil {
t.Fatal(err)
}
if len(queues) != 2 {
t.Errorf("expected 2 queues, got %d", len(queues))
}
}
// TestGetAccessQueues_QueueDomain returns only permitted queues
func TestGetAccessQueues_QueueDomain(t *testing.T) {
store.InitStores()
store.Queues.Put("normal", models.QueueInfo{QueueName: "normal"})
store.Queues.Put("priority", models.QueueInfo{QueueName: "priority"})
store.AddRoleForUser("bob", "r2")
store.AddPermissionsForRole("r2", []store.RolePermission{
{Action: "queue:view", DomainType: "queue", DomainValues: []string{"normal"}},
})
queues, err := getAccessQueues("bob", "queue:view")
if err != nil {
t.Fatal(err)
}
if len(queues) != 1 || queues[0] != "normal" {
t.Errorf("expected [normal], got %v", queues)
}
}
// TestGetAccessQueues_NoPermission returns error
func TestGetAccessQueues_NoPermission(t *testing.T) {
store.InitStores()
_, err := getAccessQueues("nobody", "queue:view")
if err == nil {
t.Error("expected error for user with no permission")
}
}