Files
goclaw/internal/tools/credentialed_exec_env_test.go
T
Duy Nguyen c029e4f6bf feat(cli-credentials): support per-agent env grants
- enforce binary/grant parent checks on nested grant routes
- validate grant binary/agent tenant scope on create
- fail closed on invalid per-user env and preserve per-user precedence
- remove duplicate CLI Credentials sidebar entry while keeping Packages tab route
- refs #12
2026-05-17 14:35:34 +07:00

46 lines
1.3 KiB
Go

package tools
import (
"testing"
"github.com/nextlevelbuilder/goclaw/internal/store"
)
func TestMergeCredentialedEnvPerUserOverridesGrantEnv(t *testing.T) {
binary := &store.SecureCLIBinary{
EncryptedEnv: []byte(`{"SHARED_KEY":"binary","BINARY_ONLY":"base"}`),
}
binary.MergeGrantOverrides(&store.SecureCLIAgentGrant{
EncryptedEnv: []byte(`{"SHARED_KEY":"grant","GRANT_ONLY":"agent"}`),
})
binary.UserEnv = []byte(`{"SHARED_KEY":"user","USER_ONLY":"personal"}`)
env, err := mergeCredentialedEnv(binary)
if err != nil {
t.Fatalf("mergeCredentialedEnv returned error: %v", err)
}
if got := env["SHARED_KEY"]; got != "user" {
t.Fatalf("expected per-user env to win for duplicate key, got %q", got)
}
if got := env["GRANT_ONLY"]; got != "agent" {
t.Fatalf("expected grant env key to remain, got %q", got)
}
if got := env["USER_ONLY"]; got != "personal" {
t.Fatalf("expected per-user env key to remain, got %q", got)
}
if _, ok := env["BINARY_ONLY"]; ok {
t.Fatal("expected agent grant env to replace binary default env")
}
}
func TestMergeCredentialedEnvFailsClosedOnInvalidUserEnv(t *testing.T) {
_, err := mergeCredentialedEnv(&store.SecureCLIBinary{
EncryptedEnv: []byte(`{"SHARED_KEY":"grant"}`),
UserEnv: []byte(`{broken json`),
})
if err == nil {
t.Fatal("expected invalid per-user env JSON to fail closed")
}
}