1package cli
2
3import (
4 "os"
5 "path/filepath"
6 "strings"
7 "testing"
8)
9
10func TestResolveControlPlane_LocalDeniedWhenAuthEnabled(t *testing.T) {
11 tmpDir := t.TempDir()
12 t.Setenv("XDG_CONFIG_HOME", filepath.Join(tmpDir, "xdg"))
13 t.Setenv("GORDON_REMOTE", "")
14 t.Setenv("GORDON_TOKEN", "")
15 originalRemoteFlag, originalTokenFlag, originalInsecureTLSFlag := remoteFlag, tokenFlag, insecureTLSFlag
16 t.Cleanup(func() {
17 remoteFlag = originalRemoteFlag
18 tokenFlag = originalTokenFlag
19 insecureTLSFlag = originalInsecureTLSFlag
20 })
21
22 remoteFlag = ""
23 tokenFlag = ""
24 insecureTLSFlag = false
25
26 configPath := filepath.Join(tmpDir, "gordon.toml")
27 err := os.WriteFile(configPath, []byte(`[server]
28gordon_domain = "gordon.local"
29data_dir = "`+filepath.Join(tmpDir, "data")+`"
30
31[auth]
32enabled = true
33`), 0o600)
34 if err != nil {
35 t.Fatalf("failed to write config: %v", err)
36 }
37
38 handle, err := resolveControlPlane(configPath)
39 if err == nil {
40 if handle != nil {
41 handle.close()
42 }
43 t.Fatalf("expected error when auth.enabled=true and no remote target")
44 }
45 if !strings.Contains(err.Error(), "local control plane is disabled when auth.enabled=true") {
46 t.Fatalf("unexpected error: %v", err)
47 }
48}
49
50func TestResolveControlPlane_LocalAllowedWhenAuthDisabled(t *testing.T) {
51 tmpDir := t.TempDir()
52 t.Setenv("XDG_CONFIG_HOME", filepath.Join(tmpDir, "xdg"))
53 t.Setenv("GORDON_REMOTE", "")
54 t.Setenv("GORDON_TOKEN", "")
55 originalRemoteFlag, originalTokenFlag, originalInsecureTLSFlag := remoteFlag, tokenFlag, insecureTLSFlag
56 t.Cleanup(func() {
57 remoteFlag = originalRemoteFlag
58 tokenFlag = originalTokenFlag
59 insecureTLSFlag = originalInsecureTLSFlag
60 })
61
62 remoteFlag = ""
63 tokenFlag = ""
64 insecureTLSFlag = false
65
66 configPath := filepath.Join(tmpDir, "gordon.toml")
67 err := os.WriteFile(configPath, []byte(`[server]
68gordon_domain = "gordon.local"
69data_dir = "`+filepath.Join(tmpDir, "data")+`"
70
71[auth]
72enabled = false
73`), 0o600)
74 if err != nil {
75 t.Fatalf("failed to write config: %v", err)
76 }
77
78 handle, err := resolveControlPlane(configPath)
79 if err != nil {
80 t.Fatalf("expected local control-plane handle, got error: %v", err)
81 }
82 if handle == nil || handle.plane == nil {
83 t.Fatalf("expected non-nil local control-plane handle")
84 }
85 handle.close()
86}