1
2
3
4 package konfig
5
6 import (
7 "os"
8 "path/filepath"
9 "testing"
10
11 "github.com/stretchr/testify/assert"
12 "github.com/stretchr/testify/require"
13 "sigs.k8s.io/kustomize/api/types"
14 "sigs.k8s.io/kustomize/kyaml/filesys"
15 )
16
17 func TestDefaultAbsPluginHome_NoKustomizePluginHomeEnv(t *testing.T) {
18 fSys := filesys.MakeFsInMemory()
19 keep, isSet := os.LookupEnv(KustomizePluginHomeEnv)
20 if isSet {
21 unsetenv(t, KustomizePluginHomeEnv)
22 }
23 _, err := DefaultAbsPluginHome(fSys)
24 if isSet {
25 setenv(t, KustomizePluginHomeEnv, keep)
26 }
27 if err == nil {
28 t.Fatalf("expected err")
29 }
30 if !types.IsErrUnableToFind(err) {
31 t.Fatalf("unexpected err: %v", err)
32 }
33 for _, expectedMsg := range []string{
34 "unable to find plugin root - tried:",
35 "('<no value>'; homed in $KUSTOMIZE_PLUGIN_HOME)",
36 "; homed in $XDG_CONFIG_HOME)",
37 "/.config/kustomize/plugin'; homed in default value of $XDG_CONFIG_HOME)",
38 "/kustomize/plugin'; homed in home directory)",
39 } {
40 assert.Contains(t, err.Error(), expectedMsg)
41 }
42 }
43
44 func TestDefaultAbsPluginHome_EmptyKustomizePluginHomeEnv(t *testing.T) {
45 keep, isSet := os.LookupEnv(KustomizePluginHomeEnv)
46 setenv(t, KustomizePluginHomeEnv, "")
47
48 _, err := DefaultAbsPluginHome(filesys.MakeFsInMemory())
49 if !isSet {
50 unsetenv(t, KustomizePluginHomeEnv)
51 } else {
52 setenv(t, KustomizePluginHomeEnv, keep)
53 }
54 if err == nil {
55 t.Fatalf("expected err")
56 }
57 if !types.IsErrUnableToFind(err) {
58 t.Fatalf("unexpected err: %v", err)
59 }
60 assert.Contains(t, err.Error(), "('<no value>'; homed in $KUSTOMIZE_PLUGIN_HOME)")
61 }
62
63 func TestDefaultAbsPluginHome_WithKustomizePluginHomeEnv(t *testing.T) {
64 fSys := filesys.MakeFsInMemory()
65 keep, isSet := os.LookupEnv(KustomizePluginHomeEnv)
66 if !isSet {
67 keep = "whatever"
68 setenv(t, KustomizePluginHomeEnv, keep)
69 }
70 err := fSys.Mkdir(keep)
71 require.NoError(t, err)
72 h, err := DefaultAbsPluginHome(fSys)
73 if !isSet {
74 unsetenv(t, KustomizePluginHomeEnv)
75 }
76 require.NoError(t, err)
77 if h != keep {
78 t.Fatalf("unexpected config dir: %s", h)
79 }
80 }
81
82 func TestDefaultAbsPluginHomeWithXdg(t *testing.T) {
83 fSys := filesys.MakeFsInMemory()
84 keep, isSet := os.LookupEnv(XdgConfigHomeEnv)
85 if !isSet {
86 keep = "whatever"
87 setenv(t, XdgConfigHomeEnv, keep)
88 }
89 configDir := filepath.Join(keep, ProgramName, RelPluginHome)
90 err := fSys.Mkdir(configDir)
91 require.NoError(t, err)
92 h, err := DefaultAbsPluginHome(fSys)
93 if !isSet {
94 unsetenv(t, XdgConfigHomeEnv)
95 }
96 if err != nil {
97 t.Fatalf("unexpected err: %v", err)
98 }
99 if h != configDir {
100 t.Fatalf("unexpected config dir: %s", h)
101 }
102 }
103
104 func TestDefaultAbsPluginHomeNoConfig(t *testing.T) {
105 fSys := filesys.MakeFsInMemory()
106 keep, isSet := os.LookupEnv(XdgConfigHomeEnv)
107 if isSet {
108 unsetenv(t, XdgConfigHomeEnv)
109 }
110 _, err := DefaultAbsPluginHome(fSys)
111 if isSet {
112 setenv(t, XdgConfigHomeEnv, keep)
113 }
114 if err == nil {
115 t.Fatalf("expected err")
116 }
117 if !types.IsErrUnableToFind(err) {
118 t.Fatalf("unexpected err: %v", err)
119 }
120 }
121
122 func TestDefaultAbsPluginHomeEmptyXdgConfig(t *testing.T) {
123 keep, isSet := os.LookupEnv(XdgConfigHomeEnv)
124 setenv(t, XdgConfigHomeEnv, "")
125 if isSet {
126 unsetenv(t, XdgConfigHomeEnv)
127 }
128 _, err := DefaultAbsPluginHome(filesys.MakeFsInMemory())
129 if isSet {
130 setenv(t, XdgConfigHomeEnv, keep)
131 }
132 if err == nil {
133 t.Fatalf("expected err")
134 }
135 if !types.IsErrUnableToFind(err) {
136 t.Fatalf("unexpected err: %v", err)
137 }
138 assert.Contains(t, err.Error(), "('<no value>'; homed in $XDG_CONFIG_HOME)")
139 }
140
141 func TestDefaultAbsPluginHomeNoXdgWithDotConfig(t *testing.T) {
142 fSys := filesys.MakeFsInMemory()
143 configDir := filepath.Join(
144 HomeDir(), XdgConfigHomeEnvDefault, ProgramName, RelPluginHome)
145 err := fSys.Mkdir(configDir)
146 require.NoError(t, err)
147 keep, isSet := os.LookupEnv(XdgConfigHomeEnv)
148 if isSet {
149 unsetenv(t, XdgConfigHomeEnv)
150 }
151 s, err := DefaultAbsPluginHome(fSys)
152 require.NoError(t, err)
153 if isSet {
154 setenv(t, XdgConfigHomeEnv, keep)
155 }
156 if s != configDir {
157 t.Fatalf("unexpected config dir: %s", s)
158 }
159 }
160
161 func TestDefaultAbsPluginHomeNoXdgJustHomeDir(t *testing.T) {
162 fSys := filesys.MakeFsInMemory()
163 configDir := filepath.Join(
164 HomeDir(), ProgramName, RelPluginHome)
165 err := fSys.Mkdir(configDir)
166 require.NoError(t, err)
167 keep, isSet := os.LookupEnv(XdgConfigHomeEnv)
168 if isSet {
169 unsetenv(t, XdgConfigHomeEnv)
170 }
171 s, err := DefaultAbsPluginHome(fSys)
172 require.NoError(t, err)
173 if isSet {
174 setenv(t, XdgConfigHomeEnv, keep)
175 }
176 if s != configDir {
177 t.Fatalf("unexpected config dir: %s", s)
178 }
179 }
180
181 func setenv(t *testing.T, key, value string) {
182 t.Helper()
183 require.NoError(t, os.Setenv(key, value))
184 }
185
186 func unsetenv(t *testing.T, key string) {
187 t.Helper()
188 require.NoError(t, os.Unsetenv(key))
189 }
190
View as plain text