blob: 4238ff5b09f813029506107c0cc89d299a4bb2fa [file] [log] [blame]
Giorgi Lekveishvili7c427602024-01-04 00:13:55 +04001package installer
2
3import (
gio0eaf2712024-04-14 13:08:46 +04004 _ "embed"
giocb34ad22024-07-11 08:01:13 +04005 "fmt"
gio3cdee592024-04-17 10:15:56 +04006 "net"
Giorgi Lekveishvili7c427602024-01-04 00:13:55 +04007 "testing"
gio12e887d2024-08-18 16:09:47 +04008
9 "cuelang.org/go/cue/errors"
Giorgi Lekveishvili7c427602024-01-04 00:13:55 +040010)
11
giocb34ad22024-07-11 08:01:13 +040012var (
13 env = EnvConfig{
14 InfraName: "dodo",
15 Id: "id",
16 ContactEmail: "foo@bar.ge",
17 Domain: "bar.ge",
18 PrivateDomain: "p.bar.ge",
19 PublicIP: []net.IP{net.ParseIP("1.2.3.4")},
20 NameserverIP: []net.IP{net.ParseIP("1.2.3.4")},
21 NamespacePrefix: "id-",
22 Network: EnvNetwork{
23 DNS: net.ParseIP("1.1.1.1"),
24 DNSInClusterIP: net.ParseIP("2.2.2.2"),
25 Ingress: net.ParseIP("3.3.3.3"),
26 Headscale: net.ParseIP("4.4.4.4"),
27 ServicesFrom: net.ParseIP("5.5.5.5"),
28 ServicesTo: net.ParseIP("6.6.6.6"),
29 },
30 }
31
gio7841f4f2024-07-26 19:53:49 +040032 infraNetworks = []InfraNetwork{
33 {
34 Name: "Public",
35 IngressClass: fmt.Sprintf("%s-ingress-public", env.InfraName),
36 CertificateIssuer: fmt.Sprintf("%s-public", env.Id),
37 AllocatePortAddr: fmt.Sprintf("http://port-allocator.%s-ingress-public.svc.cluster.local/api/allocate", env.InfraName),
38 ReservePortAddr: fmt.Sprintf("http://port-allocator.%s-ingress-public.svc.cluster.local/api/reserve", env.InfraName),
39 DeallocatePortAddr: fmt.Sprintf("http://port-allocator.%s-ingress-public.svc.cluster.local/api/remove", env.InfraName),
40 },
41 }
42
giocb34ad22024-07-11 08:01:13 +040043 networks = []Network{
44 {
45 Name: "Public",
46 IngressClass: fmt.Sprintf("%s-ingress-public", env.InfraName),
47 CertificateIssuer: fmt.Sprintf("%s-public", env.Id),
48 Domain: env.Domain,
49 AllocatePortAddr: fmt.Sprintf("http://port-allocator.%s-ingress-public.svc.cluster.local/api/allocate", env.InfraName),
50 ReservePortAddr: fmt.Sprintf("http://port-allocator.%s-ingress-public.svc.cluster.local/api/reserve", env.InfraName),
51 DeallocatePortAddr: fmt.Sprintf("http://port-allocator.%s-ingress-public.svc.cluster.local/api/remove", env.InfraName),
52 },
53 {
54 Name: "Private",
55 IngressClass: fmt.Sprintf("%s-ingress-private", env.Id),
56 Domain: env.PrivateDomain,
57 AllocatePortAddr: fmt.Sprintf("http://port-allocator.%s-ingress-private.svc.cluster.local/api/allocate", env.Id),
58 ReservePortAddr: fmt.Sprintf("http://port-allocator.%s-ingress-private.svc.cluster.local/api/reserve", env.Id),
59 DeallocatePortAddr: fmt.Sprintf("http://port-allocator.%s-ingress-private.svc.cluster.local/api/remove", env.Id),
60 },
61 }
giof15b9da2024-09-19 06:59:16 +040062
63 clusters = []Cluster{
64 {
65 Name: "default",
66 },
67 {
68 Name: "io",
69 IngressClassName: "io",
70 Kubeconfig: "kubeconfig",
71 },
72 }
giocb34ad22024-07-11 08:01:13 +040073)
gioe72b54f2024-04-22 10:44:41 +040074
Giorgi Lekveishvili67383962024-03-22 19:27:34 +040075func TestAuthProxyEnabled(t *testing.T) {
Giorgi Lekveishvili186eae52024-02-15 14:21:41 +040076 r := NewInMemoryAppRepository(CreateAllApps())
gio7fbd4ad2024-08-27 10:06:39 +040077 for _, app := range []string{"rpuppy"} {
gio3cdee592024-04-17 10:15:56 +040078 a, err := FindEnvApp(r, app)
Giorgi Lekveishvili67383962024-03-22 19:27:34 +040079 if err != nil {
80 t.Fatal(err)
81 }
82 if a == nil {
83 t.Fatal("returned app is nil")
84 }
gio3cdee592024-04-17 10:15:56 +040085 release := Release{
86 Namespace: "foo",
87 }
gio3cdee592024-04-17 10:15:56 +040088 values := map[string]any{
89 "network": "Public",
90 "subdomain": "woof",
91 "auth": map[string]any{
92 "enabled": true,
93 "groups": "a,b",
Giorgi Lekveishvili67383962024-03-22 19:27:34 +040094 },
95 }
giof6ad2982024-08-23 17:42:49 +040096 rendered, err := a.Render(release, env, networks, nil, values, nil, nil)
Giorgi Lekveishvili67383962024-03-22 19:27:34 +040097 if err != nil {
98 t.Fatal(err)
99 }
100 for _, r := range rendered.Resources {
101 t.Log(string(r))
102 }
103 }
104}
105
106func TestAuthProxyDisabled(t *testing.T) {
107 r := NewInMemoryAppRepository(CreateAllApps())
gio7fbd4ad2024-08-27 10:06:39 +0400108 for _, app := range []string{"rpuppy"} {
gio3cdee592024-04-17 10:15:56 +0400109 a, err := FindEnvApp(r, app)
Giorgi Lekveishvili67383962024-03-22 19:27:34 +0400110 if err != nil {
111 t.Fatal(err)
112 }
113 if a == nil {
114 t.Fatal("returned app is nil")
115 }
gio3cdee592024-04-17 10:15:56 +0400116 release := Release{
117 Namespace: "foo",
118 }
gio3cdee592024-04-17 10:15:56 +0400119 values := map[string]any{
120 "network": "Public",
121 "subdomain": "woof",
122 "auth": map[string]any{
123 "enabled": false,
Giorgi Lekveishvili67383962024-03-22 19:27:34 +0400124 },
125 }
giof6ad2982024-08-23 17:42:49 +0400126 rendered, err := a.Render(release, env, networks, nil, values, nil, nil)
Giorgi Lekveishvili67383962024-03-22 19:27:34 +0400127 if err != nil {
128 t.Fatal(err)
129 }
130 for _, r := range rendered.Resources {
131 t.Log(string(r))
132 }
133 }
134}
135
136func TestGroupMemberships(t *testing.T) {
137 r := NewInMemoryAppRepository(CreateAllApps())
gio3cdee592024-04-17 10:15:56 +0400138 a, err := FindEnvApp(r, "memberships")
Giorgi Lekveishvili7c427602024-01-04 00:13:55 +0400139 if err != nil {
Giorgi Lekveishvili186eae52024-02-15 14:21:41 +0400140 t.Fatal(err)
Giorgi Lekveishvili7c427602024-01-04 00:13:55 +0400141 }
Giorgi Lekveishvili186eae52024-02-15 14:21:41 +0400142 if a == nil {
143 t.Fatal("returned app is nil")
Giorgi Lekveishvili7c427602024-01-04 00:13:55 +0400144 }
gio3cdee592024-04-17 10:15:56 +0400145 release := Release{
146 Namespace: "foo",
Giorgi Lekveishvili67383962024-03-22 19:27:34 +0400147 }
gio308105e2024-04-19 13:12:13 +0400148 values := map[string]any{
gio7841f4f2024-07-26 19:53:49 +0400149 "network": "Public",
gio308105e2024-04-19 13:12:13 +0400150 "authGroups": "foo,bar",
151 }
giof6ad2982024-08-23 17:42:49 +0400152 rendered, err := a.Render(release, env, networks, nil, values, nil, nil)
Giorgi Lekveishvili67383962024-03-22 19:27:34 +0400153 if err != nil {
154 t.Fatal(err)
155 }
156 for _, r := range rendered.Resources {
157 t.Log(string(r))
158 }
Giorgi Lekveishvili7c427602024-01-04 00:13:55 +0400159}
Giorgi Lekveishviliee15ee22024-03-28 12:35:10 +0400160
161func TestGerrit(t *testing.T) {
162 r := NewInMemoryAppRepository(CreateAllApps())
gio3cdee592024-04-17 10:15:56 +0400163 a, err := FindEnvApp(r, "gerrit")
Giorgi Lekveishviliee15ee22024-03-28 12:35:10 +0400164 if err != nil {
165 t.Fatal(err)
166 }
167 if a == nil {
168 t.Fatal("returned app is nil")
169 }
gio3cdee592024-04-17 10:15:56 +0400170 release := Release{
171 Namespace: "foo",
Giorgi Lekveishvili35982662024-04-05 13:05:40 +0400172 }
gio3cdee592024-04-17 10:15:56 +0400173 values := map[string]any{
174 "subdomain": "gerrit",
175 "network": "Private",
176 "key": map[string]any{
177 "public": "foo",
178 "private": "bar",
179 },
180 "sshPort": 22,
181 }
giof6ad2982024-08-23 17:42:49 +0400182 rendered, err := a.Render(release, env, networks, nil, values, nil, nil)
Giorgi Lekveishvili35982662024-04-05 13:05:40 +0400183 if err != nil {
184 t.Fatal(err)
185 }
186 for _, r := range rendered.Resources {
187 t.Log(string(r))
188 }
189}
190
191func TestJenkins(t *testing.T) {
192 r := NewInMemoryAppRepository(CreateAllApps())
gio3cdee592024-04-17 10:15:56 +0400193 a, err := FindEnvApp(r, "jenkins")
Giorgi Lekveishvili35982662024-04-05 13:05:40 +0400194 if err != nil {
195 t.Fatal(err)
196 }
197 if a == nil {
198 t.Fatal("returned app is nil")
199 }
gio3cdee592024-04-17 10:15:56 +0400200 release := Release{
201 Namespace: "foo",
Giorgi Lekveishviliee15ee22024-03-28 12:35:10 +0400202 }
gio3cdee592024-04-17 10:15:56 +0400203 values := map[string]any{
204 "subdomain": "jenkins",
205 "network": "Private",
206 }
giof6ad2982024-08-23 17:42:49 +0400207 rendered, err := a.Render(release, env, networks, nil, values, nil, nil)
Giorgi Lekveishviliee15ee22024-03-28 12:35:10 +0400208 if err != nil {
209 t.Fatal(err)
210 }
211 for _, r := range rendered.Resources {
212 t.Log(string(r))
213 }
214}
giodb274d12024-04-19 11:53:18 +0400215
216func TestIngressPublic(t *testing.T) {
217 r := NewInMemoryAppRepository(CreateAllApps())
218 a, err := FindInfraApp(r, "ingress-public")
219 if err != nil {
220 t.Fatal(err)
221 }
222 if a == nil {
223 t.Fatal("returned app is nil")
224 }
225 release := Release{
226 Namespace: "foo",
227 }
gioe72b54f2024-04-22 10:44:41 +0400228 infra := InfraConfig{
giodb274d12024-04-19 11:53:18 +0400229 Name: "dodo",
230 PublicIP: []net.IP{net.ParseIP("1.2.3.4")},
231 InfraNamespacePrefix: "id-",
232 InfraAdminPublicKey: []byte("foo"),
233 }
234 values := map[string]any{
235 "sshPrivateKey": "private",
236 }
gio7841f4f2024-07-26 19:53:49 +0400237 rendered, err := a.Render(release, infra, infraNetworks, values, nil)
giodb274d12024-04-19 11:53:18 +0400238 if err != nil {
239 t.Fatal(err)
240 }
241 for _, r := range rendered.Resources {
242 t.Log(string(r))
243 }
244}
245
246func TestPrivateNetwork(t *testing.T) {
247 r := NewInMemoryAppRepository(CreateAllApps())
248 a, err := FindEnvApp(r, "private-network")
249 if err != nil {
250 t.Fatal(err)
251 }
252 if a == nil {
253 t.Fatal("returned app is nil")
254 }
255 release := Release{
256 Namespace: "foo",
257 }
giodb274d12024-04-19 11:53:18 +0400258 values := map[string]any{
259 "privateNetwork": map[string]any{
260 "hostname": "foo",
261 "username": "bar",
262 "ipSubnet": "123123",
263 },
264 "sshPrivateKey": "private",
265 }
giof6ad2982024-08-23 17:42:49 +0400266 rendered, err := a.Render(release, env, networks, nil, values, nil, nil)
giodb274d12024-04-19 11:53:18 +0400267 if err != nil {
268 t.Fatal(err)
269 }
270 for _, r := range rendered.Resources {
271 t.Log(string(r))
272 }
273}
gio308105e2024-04-19 13:12:13 +0400274
275func TestAppPackages(t *testing.T) {
276 contents, err := valuesTmpls.ReadFile("values-tmpl/rpuppy.cue")
277 if err != nil {
278 t.Fatal(err)
279 }
280 app, err := NewCueEnvApp(CueAppData{
gioe72b54f2024-04-22 10:44:41 +0400281 "base.cue": []byte(cueBaseConfig),
282 "app.cue": []byte(contents),
283 "global.cue": []byte(cueEnvAppGlobal),
gio308105e2024-04-19 13:12:13 +0400284 })
285 if err != nil {
286 t.Fatal(err)
287 }
288 release := Release{
289 Namespace: "foo",
290 }
gio308105e2024-04-19 13:12:13 +0400291 values := map[string]any{
292 "network": "Public",
293 "subdomain": "woof",
294 "auth": map[string]any{
295 "enabled": true,
296 "groups": "a,b",
297 },
298 }
giof6ad2982024-08-23 17:42:49 +0400299 rendered, err := app.Render(release, env, networks, nil, values, nil, nil)
gio308105e2024-04-19 13:12:13 +0400300 if err != nil {
301 t.Fatal(err)
302 }
303 for _, r := range rendered.Resources {
304 t.Log(string(r))
305 }
306 for _, r := range rendered.Data {
307 t.Log(string(r))
308 }
309}
gioe72b54f2024-04-22 10:44:41 +0400310
giof15b9da2024-09-19 06:59:16 +0400311func TestAppPackagesRemoteCluster(t *testing.T) {
312 contents, err := valuesTmpls.ReadFile("values-tmpl/rpuppy.cue")
313 if err != nil {
314 t.Fatal(err)
315 }
316 app, err := NewCueEnvApp(CueAppData{
317 "base.cue": []byte(cueBaseConfig),
318 "app.cue": []byte(contents),
319 "global.cue": []byte(cueEnvAppGlobal),
320 })
321 if err != nil {
322 t.Fatal(err)
323 }
324 release := Release{
325 Namespace: "foo",
326 }
327 values := map[string]any{
328 "network": "Public",
329 "subdomain": "woof",
330 "auth": map[string]any{
331 "enabled": false,
332 },
333 "cluster": "io",
334 }
335 rendered, err := app.Render(release, env, networks, clusters, values, nil, nil)
336 if err != nil {
337 t.Fatal(err)
338 }
339 for _, r := range rendered.Resources {
340 t.Log(string(r))
341 }
342 for _, r := range rendered.Data {
343 t.Log(string(r))
344 }
345}
346
gio8f290322024-09-21 15:37:45 +0400347func TestLonghorn(t *testing.T) {
348 contents, err := valuesTmpls.ReadFile("values-tmpl/longhorn.cue")
349 if err != nil {
350 t.Fatal(err)
351 }
352 app, err := NewCueEnvApp(CueAppData{
353 "base.cue": []byte(cueBaseConfig),
354 "app.cue": []byte(contents),
355 "global.cue": []byte(cueEnvAppGlobal),
356 })
357 if err != nil {
358 t.Fatal(err)
359 }
360 t.Logf("%+v\n", app.Schema())
361}
362
gioe72b54f2024-04-22 10:44:41 +0400363func TestDNSGateway(t *testing.T) {
364 contents, err := valuesTmpls.ReadFile("values-tmpl/dns-gateway.cue")
365 if err != nil {
366 t.Fatal(err)
367 }
368 app, err := NewCueInfraApp(CueAppData{
369 "base.cue": []byte(cueBaseConfig),
370 "app.cue": []byte(contents),
371 "global.cue": []byte(cueInfraAppGlobal),
372 })
373 if err != nil {
374 t.Fatal(err)
375 }
376 release := Release{
377 Namespace: "foo",
378 AppInstanceId: "dns-gateway",
379 RepoAddr: "ssh://192.168.100.210:22/config",
380 AppDir: "/infrastructure/gns-gateway",
381 }
382 infra := InfraConfig{
383 Name: "dodo",
384 PublicIP: []net.IP{net.ParseIP("135.181.48.180"), net.ParseIP("65.108.39.172")},
385 InfraNamespacePrefix: "dodo-",
386 InfraAdminPublicKey: []byte("ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC/ZRj0QJ0j+3udh0ANN9mJyEzrATZIOAHfNikDMpSHqrVbPZqpeHGbdYrSksCvXPXfissIZoYU4CCXX007jY0W6e1mPf1nObYh2eUT1dHo/8UtGaf9nYk+kEGU/k3utN4Uzkxa13IFh9pYERX+o0Ad3X5wh0vi5hjOBAJVKOCD9d3aipeR9piUb+qrkFDXf9fozMFn7D9nALkpJBVuGxwl/76f8K6hRxBEmPqZwIMfklzX15nRdLEcsGFJpYLYXsonbr1P3moMJFBBbQFv6M6JO9rrwA+swXpWMoScI7m/nziSEPLAb+ziv+/OyhqzeC9CQner73V0m8+2DmtcgTuSe1qHRtOScPyIjBfxoXaUx1IUkgq1NXt8k+EBO2mxnVpKdyDCvwT1Tb7088P8f8cSLtUOmUdEiAhB8bfQFprzm2KrlufenfhMvdvQPU4VfWlkQ4smLYt2yVaaXoxZMy5yD3X6LFurNXwee/Gn6di+DWqsASAOsmpsNgSCGhT8wxM= lekva@gl-mbp-m1-max.local"),
387 }
388 values := map[string]any{
389 "servers": []EnvDNS{EnvDNS{"v1.dodo.cloud", "10.0.1.2"}},
390 }
gio7841f4f2024-07-26 19:53:49 +0400391 rendered, err := app.Render(release, infra, infraNetworks, values, nil)
gioe72b54f2024-04-22 10:44:41 +0400392 if err != nil {
393 t.Fatal(err)
394 }
395 for _, r := range rendered.Resources {
396 t.Log(string(r))
397 }
398 for _, r := range rendered.Data {
399 t.Log(string(r))
400 }
401}
gio0eaf2712024-04-14 13:08:46 +0400402
giof15b9da2024-09-19 06:59:16 +0400403var dodoAppRemoteClusterCue = `
giofc441e32024-11-11 16:26:14 +0400404service: [{
405 name: "app"
giof15b9da2024-09-19 06:59:16 +0400406 type: "golang:1.22.0"
407 run: "main.go"
gio4fa7eb32025-04-16 17:23:06 +0400408 ingress: [{
giof15b9da2024-09-19 06:59:16 +0400409 network: "private"
410 subdomain: "testapp"
411 auth: enabled: false
gio4fa7eb32025-04-16 17:23:06 +0400412 }]
giof15b9da2024-09-19 06:59:16 +0400413 dev: {
414 enabled: false
415 }
416 cluster: "io"
giofc441e32024-11-11 16:26:14 +0400417 source: repository: "ssh://foo.bar"
418}]`
giof15b9da2024-09-19 06:59:16 +0400419
420func TestDodoAppRemoteCluster(t *testing.T) {
421 app, err := NewDodoApp([]byte(dodoAppRemoteClusterCue))
422 if err != nil {
423 for _, e := range errors.Errors(err) {
424 t.Log(e)
425 }
426 t.Fatal(err)
427 }
428
429 release := Release{
430 Namespace: "foo",
431 AppInstanceId: "foo-bar",
432 RepoAddr: "ssh://192.168.100.210:22/config",
433 AppDir: "/foo/bar",
434 }
435 keyGen := testKeyGen{}
436 r, err := app.Render(release, env, networks, clusters, map[string]any{
giofc441e32024-11-11 16:26:14 +0400437 "managerAddr": "3",
438 "appId": "4",
439 "sshPrivateKey": "6",
giof15b9da2024-09-19 06:59:16 +0400440 }, nil, keyGen)
441 if err != nil {
442 for _, e := range errors.Errors(err) {
443 for _, f := range errors.Errors(e) {
444 for _, g := range errors.Errors(f) {
445 t.Log(g)
446 }
447 }
448 }
449 t.Fatal(err)
450 }
451 t.Log(string(r.Raw))
452}
453
gio7fbd4ad2024-08-27 10:06:39 +0400454var dodoAppDevDisabledCue = `
giofc441e32024-11-11 16:26:14 +0400455service: [{
456 name: "app"
gio7fbd4ad2024-08-27 10:06:39 +0400457 type: "golang:1.22.0"
458 run: "main.go"
gio4fa7eb32025-04-16 17:23:06 +0400459 ingress: [{
gio7fbd4ad2024-08-27 10:06:39 +0400460 network: "private"
461 subdomain: "testapp"
462 auth: enabled: false
gio4fa7eb32025-04-16 17:23:06 +0400463 }]
gio7fbd4ad2024-08-27 10:06:39 +0400464 dev: {
465 enabled: false
466 }
giofc441e32024-11-11 16:26:14 +0400467 source: repository: "ssh://foo.bar"
468}]`
gio0eaf2712024-04-14 13:08:46 +0400469
gio7fbd4ad2024-08-27 10:06:39 +0400470var dodoAppDevEnabledCue = `
giofc441e32024-11-11 16:26:14 +0400471service: [{
472 name: "app"
giocfb228c2024-09-06 15:44:31 +0400473 type: "golang:1.20.0"
gio7fbd4ad2024-08-27 10:06:39 +0400474 run: "main.go"
gio4fa7eb32025-04-16 17:23:06 +0400475 ingress: [{
gio7fbd4ad2024-08-27 10:06:39 +0400476 network: "private"
477 subdomain: "testapp"
478 auth: enabled: false
gio4fa7eb32025-04-16 17:23:06 +0400479 }]
giofc441e32024-11-11 16:26:14 +0400480 volume: ["data"]
gio7fbd4ad2024-08-27 10:06:39 +0400481 dev: {
482 enabled: true
483 username: "gio"
484 }
giofc441e32024-11-11 16:26:14 +0400485 source: repository: "ssh://foo.bar"
486}]
487
488volume: [{
489 name: "data"
490 size: "5Gi"
491}]
492
493mongodb: [{
494 name: "db"
495 size: "10Gi"
496}]
497`
gio7fbd4ad2024-08-27 10:06:39 +0400498
499func TestDodoAppDevDisabled(t *testing.T) {
500 app, err := NewDodoApp([]byte(dodoAppDevDisabledCue))
gio1364e432024-06-29 11:39:18 +0400501 if err != nil {
gio12e887d2024-08-18 16:09:47 +0400502 for _, e := range errors.Errors(err) {
503 t.Log(e)
504 }
gio1364e432024-06-29 11:39:18 +0400505 t.Fatal(err)
506 }
gio12e887d2024-08-18 16:09:47 +0400507
gio1364e432024-06-29 11:39:18 +0400508 release := Release{
509 Namespace: "foo",
510 AppInstanceId: "foo-bar",
511 RepoAddr: "ssh://192.168.100.210:22/config",
512 AppDir: "/foo/bar",
513 }
gio7fbd4ad2024-08-27 10:06:39 +0400514 keyGen := testKeyGen{}
giof6ad2982024-08-23 17:42:49 +0400515 r, err := app.Render(release, env, networks, nil, map[string]any{
giofc441e32024-11-11 16:26:14 +0400516 "managerAddr": "",
517 "appId": "",
518 "sshPrivateKey": "",
gio7fbd4ad2024-08-27 10:06:39 +0400519 }, nil, keyGen)
gio0eaf2712024-04-14 13:08:46 +0400520 if err != nil {
gio7fbd4ad2024-08-27 10:06:39 +0400521 for _, e := range errors.Errors(err) {
522 for _, f := range errors.Errors(e) {
523 for _, g := range errors.Errors(f) {
524 t.Log(g)
525 }
526 }
527 }
gio0eaf2712024-04-14 13:08:46 +0400528 t.Fatal(err)
529 }
gio7fbd4ad2024-08-27 10:06:39 +0400530 t.Log(string(r.Raw))
531}
532
533func TestDodoAppDevEnabled(t *testing.T) {
534 app, err := NewDodoApp([]byte(dodoAppDevEnabledCue))
535 if err != nil {
536 for _, e := range errors.Errors(err) {
537 t.Log(e)
538 }
539 t.Fatal(err)
540 }
541
542 release := Release{
543 Namespace: "foo",
544 AppInstanceId: "foo-bar",
545 RepoAddr: "ssh://192.168.100.210:22/config",
546 AppDir: "/foo/bar",
547 }
548 keyGen := testKeyGen{}
giof6ad2982024-08-23 17:42:49 +0400549 r, err := app.Render(release, env, networks, nil, map[string]any{
giofc441e32024-11-11 16:26:14 +0400550 "managerAddr": "",
551 "appId": "",
552 "sshPrivateKey": "",
553 "username": "",
gio7fbd4ad2024-08-27 10:06:39 +0400554 }, nil, keyGen)
555 if err != nil {
556 for _, e := range errors.Errors(err) {
557 t.Log(e)
558 }
559 t.Fatal(err)
560 }
561 t.Log(string(r.Raw))
gio0eaf2712024-04-14 13:08:46 +0400562}
gio266c04f2024-07-03 14:18:45 +0400563
564func TestDodoAppInstance(t *testing.T) {
565 r := NewInMemoryAppRepository(CreateAllApps())
566 a, err := FindEnvApp(r, "dodo-app-instance")
567 if err != nil {
568 t.Fatal(err)
569 }
570 if a == nil {
571 t.Fatal("returned app is nil")
572 }
573 release := Release{
574 Namespace: "foo",
575 }
576 values := map[string]any{
gio266c04f2024-07-03 14:18:45 +0400577 "repoAddr": "",
gio33059762024-07-05 13:19:07 +0400578 "repoHost": "",
gio7fbd4ad2024-08-27 10:06:39 +0400579 "branch": "",
gio266c04f2024-07-03 14:18:45 +0400580 "gitRepoPublicKey": "",
gio7fbd4ad2024-08-27 10:06:39 +0400581 "username": "",
gio266c04f2024-07-03 14:18:45 +0400582 }
giof6ad2982024-08-23 17:42:49 +0400583 rendered, err := a.Render(release, env, networks, nil, values, nil, nil)
gio266c04f2024-07-03 14:18:45 +0400584 if err != nil {
585 t.Fatal(err)
586 }
587 for _, r := range rendered.Resources {
588 t.Log(string(r))
589 }
590}
gio4ece99c2024-07-18 11:05:50 +0400591
592func TestDodoApp(t *testing.T) {
593 contents, err := valuesTmpls.ReadFile("values-tmpl/dodo-app.cue")
594 if err != nil {
595 t.Fatal(err)
596 }
597 app, err := NewCueEnvApp(CueAppData{
598 "base.cue": []byte(cueBaseConfig),
599 "app.cue": []byte(contents),
600 "global.cue": []byte(cueEnvAppGlobal),
601 })
602 if err != nil {
603 t.Fatal(err)
604 }
605 t.Log(app.Schema())
606}
giof6ad2982024-08-23 17:42:49 +0400607
608func TestAppVirtualMachine(t *testing.T) {
609 contents, err := valuesTmpls.ReadFile("values-tmpl/virtual-machine.cue")
610 if err != nil {
611 t.Fatal(err)
612 }
613 app, err := NewCueEnvApp(CueAppData{
614 "base.cue": []byte(cueBaseConfig),
615 "app.cue": []byte(contents),
616 "global.cue": []byte(cueEnvAppGlobal),
617 })
618 if err != nil {
619 t.Fatal(err)
620 }
621 release := Release{
622 Namespace: "foo",
623 }
624 values := map[string]any{
625 "name": "foo",
626 "username": "bar",
627 "cpuCores": 1,
628 "memory": "1Gi",
629 }
630 rendered, err := app.Render(release, env, networks, nil, values, nil, nil)
631 if err != nil {
632 t.Fatal(err)
633 }
634 for _, r := range rendered.Resources {
635 t.Log(string(r))
636 }
637 for _, r := range rendered.Data {
638 t.Log(string(r))
639 }
640}