1 package edgecli
2
3 import (
4 "errors"
5 "os"
6 "strconv"
7 "testing"
8
9 "github.com/stretchr/testify/assert"
10 )
11
12 var (
13 testBanners = []*BannerContext{
14 {
15 BannerEdgeID: "BID0",
16 BannerName: "Banner0",
17 TenantOrg: "Org0",
18 Username: "User0",
19 Endpoint: "Endpoint0",
20 Token: "Token0",
21 },
22 {
23 BannerEdgeID: "BID1",
24 BannerName: "Banner1",
25 TenantOrg: "Org1",
26 Username: "User1",
27 Endpoint: "Endpoint1",
28 Token: "Token1",
29 },
30 {
31 BannerEdgeID: "BID2",
32 BannerName: "Banner2",
33 TenantOrg: "Org2",
34 Username: "User2",
35 Endpoint: "Endpoint2",
36 Token: "Token2",
37 },
38 {
39 BannerEdgeID: "BID3",
40 BannerName: "Banner3",
41 TenantOrg: "Org3",
42 Username: "User3",
43 Endpoint: "Endpoint3",
44 Token: "Token3",
45 },
46 {
47 BannerEdgeID: "BID4",
48 BannerName: "Banner4",
49 TenantOrg: "Org4",
50 Username: "User4",
51 Endpoint: "Endpoint4",
52 Token: "Token4",
53 },
54 }
55
56 testClusters = []*ClusterContext{
57 {
58 ClusterEdgeID: "CID0",
59 },
60 {
61 ClusterEdgeID: "CID1",
62 },
63 {
64 ClusterEdgeID: "CID2",
65 },
66 {
67 ClusterEdgeID: "CID3",
68 },
69 {
70 ClusterEdgeID: "CID4",
71 },
72 }
73
74 testCfgs = []*Config{
75 {
76
77 BannerContexts: make(map[string]*BannerContext),
78 ClusterContexts: make(map[string]*ClusterContext),
79 },
80 {
81 BannerContexts: map[string]*BannerContext{
82 "0": testBanners[0],
83 "1": testBanners[1],
84 "2": testBanners[2],
85 },
86 ClusterContexts: map[string]*ClusterContext{
87 "0": testClusters[0],
88 "1": testClusters[1],
89 },
90 },
91 {
92 BannerContexts: map[string]*BannerContext{
93 "1": testBanners[1],
94 "3": testBanners[3],
95 },
96 ClusterContexts: map[string]*ClusterContext{
97 "0": testClusters[0],
98 "2": testClusters[2],
99 "4": testClusters[4],
100 },
101 },
102 {
103 BannerContexts: map[string]*BannerContext{
104 "0": testBanners[0],
105 "1": testBanners[1],
106 "2": testBanners[2],
107 "3": testBanners[3],
108 "4": testBanners[4],
109 },
110 ClusterContexts: map[string]*ClusterContext{
111 "0": testClusters[0],
112 "1": testClusters[1],
113 "2": testClusters[2],
114 "3": testClusters[3],
115 "4": testClusters[4],
116 },
117 },
118 }
119 )
120
121 func Test_File(t *testing.T) {
122 dir := t.TempDir()
123 defer os.RemoveAll(dir)
124 t.Setenv("HOME", dir)
125 path := dir + "/.edge"
126
127 t.Run("Creating .edge", func(t *testing.T) {
128
129 if _, err := os.Stat(path); !errors.Is(err, os.ErrNotExist) {
130 err = os.Remove(path)
131 assert.NoError(t, err)
132 }
133
134
135 _, err := ReadConfig()
136 assert.NoError(t, err)
137 _, err = os.Stat(path)
138 assert.True(t, !errors.Is(err, os.ErrNotExist))
139
140
141 if _, err := os.Stat(path); !errors.Is(err, os.ErrNotExist) {
142 err = os.Remove(path)
143 assert.NoError(t, err)
144 }
145
146
147 err = WriteConfig(&Config{})
148 assert.NoError(t, err)
149 _, err = os.Stat(path)
150 assert.True(t, !errors.Is(err, os.ErrNotExist))
151 })
152
153 t.Run("Read and write to .edge", func(t *testing.T) {
154 for _, cfg := range testCfgs {
155 err := WriteConfig(cfg)
156 assert.NoError(t, err)
157
158 readCfg, err := ReadConfig()
159 assert.NoError(t, err)
160
161 assert.Equal(t, cfg, readCfg)
162 }
163 })
164 }
165
166 func Test_Config(t *testing.T) {
167 dir := t.TempDir()
168 defer os.RemoveAll(dir)
169 t.Setenv("HOME", dir)
170
171 t.Run("Add Banner", func(t *testing.T) {
172 cfg := Config{}
173 for name, banner := range testBanners {
174
175 bc, err := cfg.AddBanner(strconv.Itoa(name),
176 banner.BannerEdgeID,
177 banner.BannerName,
178 banner.Username,
179 banner.TenantOrg,
180 banner.Endpoint,
181 banner.Token,
182 banner.TokenTime,
183 )
184 assert.NoError(t, err)
185 assert.Equal(t, banner, bc)
186 assert.Equal(t, banner, cfg.BannerContexts[strconv.Itoa(name)])
187
188
189 _, err = cfg.AddBanner(strconv.Itoa(name),
190 banner.BannerEdgeID,
191 banner.BannerName,
192 banner.Username,
193 banner.TenantOrg,
194 banner.Endpoint,
195 banner.Token,
196 banner.TokenTime,
197 )
198 assert.Error(t, err)
199 }
200
201 _, err := cfg.AddBanner("no edge ID", "", "", "", "", "", "", "")
202 assert.Error(t, err)
203 })
204
205 t.Run("Add Cluster", func(t *testing.T) {
206 cfg := Config{}
207 for name, cluster := range testClusters {
208
209 cc, err := cfg.AddCluster(strconv.Itoa(name), cluster.ClusterEdgeID)
210 assert.NoError(t, err)
211 assert.Equal(t, cluster, cc)
212 assert.Equal(t, cluster, cfg.ClusterContexts[strconv.Itoa(name)])
213
214
215 _, err = cfg.AddCluster(strconv.Itoa(name), cluster.ClusterEdgeID)
216 assert.Error(t, err)
217 }
218
219 _, err := cfg.AddCluster("no edge ID", "")
220 assert.Error(t, err)
221 })
222
223 t.Run("Set Banner", func(t *testing.T) {
224 for _, cfg := range testCfgs {
225 for name := range cfg.BannerContexts {
226 err := cfg.SetBanner(name)
227 assert.NoError(t, err)
228 }
229
230 err := cfg.SetBanner("not a name")
231 assert.Error(t, err)
232 }
233 })
234
235 t.Run("Set Cluster", func(t *testing.T) {
236 for _, cfg := range testCfgs {
237 for name := range cfg.ClusterContexts {
238 err := cfg.SetCluster(name)
239 assert.NoError(t, err)
240 }
241
242 err := cfg.SetCluster("not a name")
243 assert.Error(t, err)
244 }
245 })
246
247 t.Run("Delete Banner", func(t *testing.T) {
248 for _, cfg := range testCfgs {
249 for name := range cfg.BannerContexts {
250 err := cfg.DeleteBanner(name)
251 assert.NoError(t, err)
252 _, ok := cfg.BannerContexts[name]
253 assert.False(t, ok)
254 }
255
256 err := cfg.DeleteBanner("not a name")
257 assert.Error(t, err)
258 }
259 })
260
261 t.Run("Delete Cluster", func(t *testing.T) {
262 for _, cfg := range testCfgs {
263 for name := range cfg.ClusterContexts {
264 err := cfg.DeleteCluster(name)
265 assert.NoError(t, err)
266 _, ok := cfg.ClusterContexts[name]
267 assert.False(t, ok)
268 }
269
270 err := cfg.DeleteCluster("not a name")
271 assert.Error(t, err)
272 }
273 })
274
275 t.Run("Update Banner", func(t *testing.T) {
276 for _, cfg := range testCfgs {
277 for name, bc := range cfg.BannerContexts {
278 err := cfg.UpdateBanner(name, "1", "2", "3", "4", "5", "6")
279 assert.NoError(t, err)
280 testBanner := BannerContext{
281 BannerEdgeID: "1",
282 BannerName: "2",
283 Username: "3",
284 TenantOrg: "4",
285 Endpoint: "5",
286 Token: "6",
287 TokenTime: bc.TokenTime,
288 }
289 assert.Equal(t, testBanner, cfg.BannerContexts[name])
290 }
291
292 err := cfg.UpdateBanner("not a name", "1", "2", "3", "4", "5", "6")
293 assert.Error(t, err)
294 }
295 })
296
297 t.Run("Update Cluster", func(t *testing.T) {
298 for _, cfg := range testCfgs {
299 for name := range cfg.ClusterContexts {
300 err := cfg.UpdateCluster(name, "1")
301 assert.NoError(t, err)
302 testBanner := ClusterContext{
303 ClusterEdgeID: "1",
304 }
305 assert.Equal(t, testBanner, cfg.ClusterContexts[name])
306 }
307
308 err := cfg.UpdateCluster("not a name", "1")
309 assert.Error(t, err)
310 }
311 })
312 }
313
View as plain text