* fix(pat): carry agentCode in batch auth args * fix(pat): let core default missing agent code * fix(pat): require yes for batch grants * test(pat): cover cli authorization matrix * fix(pat): keep canonical agent code env only --------- Co-authored-by: shangguanxuan.sgx <shangguanxuan.sgx@alibaba-inc.com>
266 lines
7.7 KiB
Go
266 lines
7.7 KiB
Go
// Copyright 2026 Alibaba Group
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
package pat
|
|
|
|
import (
|
|
"bytes"
|
|
"encoding/json"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
func TestBrowserPolicy_DefaultRoundTrip(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
configDir := t.TempDir()
|
|
saved, err := SetBrowserPolicy(configDir, "", false)
|
|
if err != nil {
|
|
t.Fatalf("SetBrowserPolicy(default) error = %v", err)
|
|
}
|
|
if saved.Scope != "default" {
|
|
t.Fatalf("saved.Scope = %q, want default", saved.Scope)
|
|
}
|
|
if saved.OpenBrowser {
|
|
t.Fatal("saved.OpenBrowser = true, want false")
|
|
}
|
|
|
|
loaded, err := ResolveBrowserPolicy(configDir, "")
|
|
if err != nil {
|
|
t.Fatalf("ResolveBrowserPolicy(default) error = %v", err)
|
|
}
|
|
if loaded.Scope != "default" {
|
|
t.Fatalf("loaded.Scope = %q, want default", loaded.Scope)
|
|
}
|
|
if loaded.OpenBrowser {
|
|
t.Fatal("loaded.OpenBrowser = true, want false")
|
|
}
|
|
}
|
|
|
|
func TestSetBrowserPolicy_EmptyAgentCodeIgnoresEnvAndWritesDefault(t *testing.T) {
|
|
t.Setenv(agentCodeEnv, "agt-env")
|
|
configDir := t.TempDir()
|
|
|
|
saved, err := SetBrowserPolicy(configDir, "", false)
|
|
if err != nil {
|
|
t.Fatalf("SetBrowserPolicy(default) error = %v", err)
|
|
}
|
|
if saved.Scope != "default" {
|
|
t.Fatalf("saved.Scope = %q, want default", saved.Scope)
|
|
}
|
|
if saved.AgentCode != "" {
|
|
t.Fatalf("saved.AgentCode = %q, want empty", saved.AgentCode)
|
|
}
|
|
|
|
policy, err := LoadBrowserPolicy(configDir)
|
|
if err != nil {
|
|
t.Fatalf("LoadBrowserPolicy error = %v", err)
|
|
}
|
|
if policy.Default == nil {
|
|
t.Fatal("policy.Default is nil, want default policy")
|
|
}
|
|
if got := len(policy.Agents); got != 0 {
|
|
t.Fatalf("len(policy.Agents) = %d, want 0", got)
|
|
}
|
|
|
|
loaded, err := ResolveBrowserPolicy(configDir, "")
|
|
if err != nil {
|
|
t.Fatalf("ResolveBrowserPolicy(default under env) error = %v", err)
|
|
}
|
|
if loaded.Scope != "default" {
|
|
t.Fatalf("loaded.Scope = %q, want default", loaded.Scope)
|
|
}
|
|
if loaded.AgentCode != "" {
|
|
t.Fatalf("loaded.AgentCode = %q, want empty", loaded.AgentCode)
|
|
}
|
|
if loaded.OpenBrowser {
|
|
t.Fatal("loaded.OpenBrowser = true, want false")
|
|
}
|
|
}
|
|
|
|
func TestBrowserPolicy_AgentOverridesDefault(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
configDir := t.TempDir()
|
|
if _, err := SetBrowserPolicy(configDir, "", true); err != nil {
|
|
t.Fatalf("SetBrowserPolicy(default) error = %v", err)
|
|
}
|
|
if _, err := SetBrowserPolicy(configDir, "agt-sales", false); err != nil {
|
|
t.Fatalf("SetBrowserPolicy(agent) error = %v", err)
|
|
}
|
|
|
|
agentLoaded, err := ResolveBrowserPolicy(configDir, "agt-sales")
|
|
if err != nil {
|
|
t.Fatalf("ResolveBrowserPolicy(agent) error = %v", err)
|
|
}
|
|
if agentLoaded.Scope != "agent" {
|
|
t.Fatalf("agentLoaded.Scope = %q, want agent", agentLoaded.Scope)
|
|
}
|
|
if agentLoaded.AgentCode != "agt-sales" {
|
|
t.Fatalf("agentLoaded.AgentCode = %q, want agt-sales", agentLoaded.AgentCode)
|
|
}
|
|
if agentLoaded.OpenBrowser {
|
|
t.Fatal("agentLoaded.OpenBrowser = true, want false")
|
|
}
|
|
|
|
defaultLoaded, err := ResolveBrowserPolicy(configDir, "agt-other")
|
|
if err != nil {
|
|
t.Fatalf("ResolveBrowserPolicy(default fallback) error = %v", err)
|
|
}
|
|
if defaultLoaded.Scope != "default" {
|
|
t.Fatalf("defaultLoaded.Scope = %q, want default", defaultLoaded.Scope)
|
|
}
|
|
if !defaultLoaded.OpenBrowser {
|
|
t.Fatal("defaultLoaded.OpenBrowser = false, want true")
|
|
}
|
|
}
|
|
|
|
func TestResolveBrowserPolicy_EnvFallback(t *testing.T) {
|
|
t.Setenv(agentCodeEnv, "agt-env")
|
|
configDir := t.TempDir()
|
|
if _, err := SetBrowserPolicy(configDir, "agt-env", false); err != nil {
|
|
t.Fatalf("SetBrowserPolicy(agent) error = %v", err)
|
|
}
|
|
|
|
loaded, err := ResolveBrowserPolicy(configDir, "")
|
|
if err != nil {
|
|
t.Fatalf("ResolveBrowserPolicy(env fallback) error = %v", err)
|
|
}
|
|
if loaded.Scope != "agent" {
|
|
t.Fatalf("loaded.Scope = %q, want agent", loaded.Scope)
|
|
}
|
|
if loaded.AgentCode != "agt-env" {
|
|
t.Fatalf("loaded.AgentCode = %q, want agt-env", loaded.AgentCode)
|
|
}
|
|
if loaded.OpenBrowser {
|
|
t.Fatal("loaded.OpenBrowser = true, want false")
|
|
}
|
|
}
|
|
|
|
func TestResolveBrowserPolicy_FallsBackToOpenSourceDefault(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
loaded, err := ResolveBrowserPolicy(t.TempDir(), "")
|
|
if err != nil {
|
|
t.Fatalf("ResolveBrowserPolicy(fallback) error = %v", err)
|
|
}
|
|
if loaded.Scope != "builtin_default" {
|
|
t.Fatalf("loaded.Scope = %q, want builtin_default", loaded.Scope)
|
|
}
|
|
if !loaded.OpenBrowser {
|
|
t.Fatal("loaded.OpenBrowser = false, want true")
|
|
}
|
|
}
|
|
|
|
func TestBrowserPolicyCommand_WritesAgentPolicy(t *testing.T) {
|
|
configDir := t.TempDir()
|
|
t.Setenv("DWS_CONFIG_DIR", configDir)
|
|
|
|
cmd := newBrowserPolicyCommand()
|
|
var stdout bytes.Buffer
|
|
cmd.SetOut(&stdout)
|
|
cmd.SetErr(&stdout)
|
|
cmd.SetArgs([]string{"--enabled=false", "--agentCode", "agt-command"})
|
|
|
|
if err := cmd.Execute(); err != nil {
|
|
t.Fatalf("browser-policy Execute() error = %v", err)
|
|
}
|
|
|
|
var payload map[string]any
|
|
if err := json.Unmarshal(stdout.Bytes(), &payload); err != nil {
|
|
t.Fatalf("json.Unmarshal(command output) error = %v\nraw=%s", err, stdout.String())
|
|
}
|
|
if got, _ := payload["scope"].(string); got != "agent" {
|
|
t.Fatalf("scope = %q, want agent", got)
|
|
}
|
|
if got, _ := payload["agentCode"].(string); got != "agt-command" {
|
|
t.Fatalf("agentCode = %q, want agt-command", got)
|
|
}
|
|
if got, _ := payload["openBrowser"].(bool); got {
|
|
t.Fatal("openBrowser = true, want false")
|
|
}
|
|
|
|
loaded, err := ResolveBrowserPolicy(configDir, "agt-command")
|
|
if err != nil {
|
|
t.Fatalf("ResolveBrowserPolicy(agent) error = %v", err)
|
|
}
|
|
if loaded.OpenBrowser {
|
|
t.Fatal("loaded.OpenBrowser = true, want false")
|
|
}
|
|
}
|
|
|
|
func TestBrowserPolicyCommand_NoAgentCodeWritesDefaultEvenWhenEnvSet(t *testing.T) {
|
|
configDir := t.TempDir()
|
|
t.Setenv("DWS_CONFIG_DIR", configDir)
|
|
t.Setenv(agentCodeEnv, "agt-env")
|
|
|
|
cmd := newBrowserPolicyCommand()
|
|
var stdout bytes.Buffer
|
|
cmd.SetOut(&stdout)
|
|
cmd.SetErr(&stdout)
|
|
cmd.SetArgs([]string{"--enabled=false"})
|
|
|
|
if err := cmd.Execute(); err != nil {
|
|
t.Fatalf("browser-policy Execute() error = %v", err)
|
|
}
|
|
|
|
var payload map[string]any
|
|
if err := json.Unmarshal(stdout.Bytes(), &payload); err != nil {
|
|
t.Fatalf("json.Unmarshal(command output) error = %v\nraw=%s", err, stdout.String())
|
|
}
|
|
if got, _ := payload["scope"].(string); got != "default" {
|
|
t.Fatalf("scope = %q, want default", got)
|
|
}
|
|
if _, ok := payload["agentCode"]; ok {
|
|
t.Fatalf("unexpected agentCode in default policy output: %v", payload["agentCode"])
|
|
}
|
|
|
|
policy, err := LoadBrowserPolicy(configDir)
|
|
if err != nil {
|
|
t.Fatalf("LoadBrowserPolicy error = %v", err)
|
|
}
|
|
if policy.Default == nil {
|
|
t.Fatal("policy.Default is nil, want default policy")
|
|
}
|
|
if got := len(policy.Agents); got != 0 {
|
|
t.Fatalf("len(policy.Agents) = %d, want 0", got)
|
|
}
|
|
}
|
|
|
|
func TestBrowserPolicyCommand_RequiresEnabledFlag(t *testing.T) {
|
|
configDir := t.TempDir()
|
|
t.Setenv("DWS_CONFIG_DIR", configDir)
|
|
|
|
cmd := newBrowserPolicyCommand()
|
|
var stdout bytes.Buffer
|
|
cmd.SetOut(&stdout)
|
|
cmd.SetErr(&stdout)
|
|
cmd.SetArgs([]string{"--agentCode", "agt-command"})
|
|
|
|
err := cmd.Execute()
|
|
if err == nil {
|
|
t.Fatal("browser-policy Execute() error = nil, want missing --enabled error")
|
|
}
|
|
if !strings.Contains(err.Error(), "--enabled is required") {
|
|
t.Fatalf("browser-policy error = %q, want --enabled requirement", err.Error())
|
|
}
|
|
|
|
policy, loadErr := LoadBrowserPolicy(configDir)
|
|
if loadErr != nil {
|
|
t.Fatalf("LoadBrowserPolicy error = %v", loadErr)
|
|
}
|
|
if policy.Default != nil || len(policy.Agents) != 0 {
|
|
t.Fatalf("policy was modified despite missing --enabled: %#v", policy)
|
|
}
|
|
}
|