1package cli
2
3import (
4 "os"
5 "path/filepath"
6 "testing"
7
8 "github.com/stretchr/testify/require"
9)
10
11func TestResolveControlPlane_LocalAllowedWhenAuthEnabled(t *testing.T) {
12 tmpDir := t.TempDir()
13 t.Setenv("XDG_CONFIG_HOME", filepath.Join(tmpDir, "xdg"))
14 t.Setenv("GORDON_REMOTE", "")
15 t.Setenv("GORDON_TOKEN", "")
16 originalRemoteFlag, originalTokenFlag, originalInsecureTLSFlag := remoteFlag, tokenFlag, insecureTLSFlag
17 t.Cleanup(func() {
18 remoteFlag = originalRemoteFlag
19 tokenFlag = originalTokenFlag
20 insecureTLSFlag = originalInsecureTLSFlag
21 })
22
23 remoteFlag = ""
24 tokenFlag = ""
25 insecureTLSFlag = false
26
27 configPath := filepath.Join(tmpDir, "gordon.toml")
28 err := os.WriteFile(configPath, []byte(`[server]
29gordon_domain = "gordon.local"
30data_dir = "`+filepath.Join(tmpDir, "data")+`"
31
32[auth]
33enabled = true
34secrets_backend = "unsafe"
35`), 0o600)
36 require.NoError(t, err)
37
38 handle, err := resolveControlPlane(configPath)
39 require.NoError(t, err)
40 require.NotNil(t, handle)
41 require.NotNil(t, handle.plane)
42 defer handle.close()
43}
44
45func TestResolveControlPlane_LocalAllowedWhenAuthDisabled(t *testing.T) {
46 tmpDir := t.TempDir()
47 t.Setenv("XDG_CONFIG_HOME", filepath.Join(tmpDir, "xdg"))
48 t.Setenv("GORDON_REMOTE", "")
49 t.Setenv("GORDON_TOKEN", "")
50 originalRemoteFlag, originalTokenFlag, originalInsecureTLSFlag := remoteFlag, tokenFlag, insecureTLSFlag
51 t.Cleanup(func() {
52 remoteFlag = originalRemoteFlag
53 tokenFlag = originalTokenFlag
54 insecureTLSFlag = originalInsecureTLSFlag
55 })
56
57 remoteFlag = ""
58 tokenFlag = ""
59 insecureTLSFlag = false
60
61 configPath := filepath.Join(tmpDir, "gordon.toml")
62 err := os.WriteFile(configPath, []byte(`[server]
63gordon_domain = "gordon.local"
64data_dir = "`+filepath.Join(tmpDir, "data")+`"
65
66[auth]
67enabled = false
68secrets_backend = "unsafe"
69`), 0o600)
70 require.NoError(t, err)
71
72 handle, err := resolveControlPlane(configPath)
73 require.NoError(t, err)
74 require.NotNil(t, handle)
75 require.NotNil(t, handle.plane)
76 defer handle.close()
77}
78
79func TestResolveControlPlane_ExplicitUnknownRemoteReturnsError(t *testing.T) {
80 tmpDir := t.TempDir()
81 t.Setenv("XDG_CONFIG_HOME", filepath.Join(tmpDir, "xdg"))
82 t.Setenv("GORDON_REMOTE", "")
83 t.Setenv("GORDON_TOKEN", "")
84 originalRemoteFlag, originalTokenFlag, originalInsecureTLSFlag := remoteFlag, tokenFlag, insecureTLSFlag
85 t.Cleanup(func() {
86 remoteFlag = originalRemoteFlag
87 tokenFlag = originalTokenFlag
88 insecureTLSFlag = originalInsecureTLSFlag
89 })
90
91 remoteFlag = "does-not-exist"
92 tokenFlag = ""
93 insecureTLSFlag = false
94
95 configPath := filepath.Join(tmpDir, "gordon.toml")
96 err := os.WriteFile(configPath, []byte(`[server]
97gordon_domain = "gordon.local"
98data_dir = "`+filepath.Join(tmpDir, "data")+`"
99
100[auth]
101enabled = false
102secrets_backend = "unsafe"
103`), 0o600)
104 require.NoError(t, err)
105
106 handle, err := resolveControlPlane(configPath)
107 require.Error(t, err)
108 require.Nil(t, handle)
109 require.Contains(t, err.Error(), "does-not-exist")
110}