blob: 47eb02cecbce2bf17cda201d00041b91abc9f746 [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 = `
404app: {
405 type: "golang:1.22.0"
406 run: "main.go"
407 ingress: {
408 network: "private"
409 subdomain: "testapp"
410 auth: enabled: false
411 }
412 dev: {
413 enabled: false
414 }
415 cluster: "io"
416}`
417
418func TestDodoAppRemoteCluster(t *testing.T) {
419 app, err := NewDodoApp([]byte(dodoAppRemoteClusterCue))
420 if err != nil {
421 for _, e := range errors.Errors(err) {
422 t.Log(e)
423 }
424 t.Fatal(err)
425 }
426
427 release := Release{
428 Namespace: "foo",
429 AppInstanceId: "foo-bar",
430 RepoAddr: "ssh://192.168.100.210:22/config",
431 AppDir: "/foo/bar",
432 }
433 keyGen := testKeyGen{}
434 r, err := app.Render(release, env, networks, clusters, map[string]any{
435 "repoAddr": "1",
436 "repoPublicAddr": "2",
437 "managerAddr": "3",
438 "appId": "4",
439 "branch": "5",
440 "sshPrivateKey": "6",
441 }, nil, keyGen)
442 if err != nil {
443 for _, e := range errors.Errors(err) {
444 for _, f := range errors.Errors(e) {
445 for _, g := range errors.Errors(f) {
446 t.Log(g)
447 }
448 }
449 }
450 t.Fatal(err)
451 }
452 t.Log(string(r.Raw))
453}
454
gio7fbd4ad2024-08-27 10:06:39 +0400455var dodoAppDevDisabledCue = `
456app: {
457 type: "golang:1.22.0"
458 run: "main.go"
459 ingress: {
460 network: "private"
461 subdomain: "testapp"
462 auth: enabled: false
463 }
464 dev: {
465 enabled: false
466 }
467}`
gio0eaf2712024-04-14 13:08:46 +0400468
gio7fbd4ad2024-08-27 10:06:39 +0400469var dodoAppDevEnabledCue = `
470app: {
giocfb228c2024-09-06 15:44:31 +0400471 type: "golang:1.20.0"
gio7fbd4ad2024-08-27 10:06:39 +0400472 run: "main.go"
473 ingress: {
474 network: "private"
475 subdomain: "testapp"
476 auth: enabled: false
477 }
478 dev: {
479 enabled: true
480 username: "gio"
481 }
gioc81a8472024-09-24 13:06:19 +0200482 volumes: [{
483 name: "data"
484 size: "5Gi"
485 }]
486 postgresql: [{
487 name: "db"
488 size: "10Gi"
489 }]
gio7fbd4ad2024-08-27 10:06:39 +0400490}`
491
492func TestDodoAppDevDisabled(t *testing.T) {
493 app, err := NewDodoApp([]byte(dodoAppDevDisabledCue))
gio1364e432024-06-29 11:39:18 +0400494 if err != nil {
gio12e887d2024-08-18 16:09:47 +0400495 for _, e := range errors.Errors(err) {
496 t.Log(e)
497 }
gio1364e432024-06-29 11:39:18 +0400498 t.Fatal(err)
499 }
gio12e887d2024-08-18 16:09:47 +0400500
gio1364e432024-06-29 11:39:18 +0400501 release := Release{
502 Namespace: "foo",
503 AppInstanceId: "foo-bar",
504 RepoAddr: "ssh://192.168.100.210:22/config",
505 AppDir: "/foo/bar",
506 }
gio7fbd4ad2024-08-27 10:06:39 +0400507 keyGen := testKeyGen{}
giof6ad2982024-08-23 17:42:49 +0400508 r, err := app.Render(release, env, networks, nil, map[string]any{
gio7fbd4ad2024-08-27 10:06:39 +0400509 "repoAddr": "",
510 "repoPublicAddr": "",
511 "managerAddr": "",
512 "appId": "",
513 "branch": "",
514 "sshPrivateKey": "",
515 }, nil, keyGen)
gio0eaf2712024-04-14 13:08:46 +0400516 if err != nil {
gio7fbd4ad2024-08-27 10:06:39 +0400517 for _, e := range errors.Errors(err) {
518 for _, f := range errors.Errors(e) {
519 for _, g := range errors.Errors(f) {
520 t.Log(g)
521 }
522 }
523 }
gio0eaf2712024-04-14 13:08:46 +0400524 t.Fatal(err)
525 }
gio7fbd4ad2024-08-27 10:06:39 +0400526 t.Log(string(r.Raw))
527}
528
529func TestDodoAppDevEnabled(t *testing.T) {
530 app, err := NewDodoApp([]byte(dodoAppDevEnabledCue))
531 if err != nil {
532 for _, e := range errors.Errors(err) {
533 t.Log(e)
534 }
535 t.Fatal(err)
536 }
537
538 release := Release{
539 Namespace: "foo",
540 AppInstanceId: "foo-bar",
541 RepoAddr: "ssh://192.168.100.210:22/config",
542 AppDir: "/foo/bar",
543 }
544 keyGen := testKeyGen{}
giof6ad2982024-08-23 17:42:49 +0400545 r, err := app.Render(release, env, networks, nil, map[string]any{
gio7fbd4ad2024-08-27 10:06:39 +0400546 "repoAddr": "",
547 "repoPublicAddr": "",
548 "managerAddr": "",
549 "appId": "",
550 "branch": "",
551 "sshPrivateKey": "",
552 "username": "",
553 }, nil, keyGen)
554 if err != nil {
555 for _, e := range errors.Errors(err) {
556 t.Log(e)
557 }
558 t.Fatal(err)
559 }
560 t.Log(string(r.Raw))
gio0eaf2712024-04-14 13:08:46 +0400561}
gio266c04f2024-07-03 14:18:45 +0400562
563func TestDodoAppInstance(t *testing.T) {
564 r := NewInMemoryAppRepository(CreateAllApps())
565 a, err := FindEnvApp(r, "dodo-app-instance")
566 if err != nil {
567 t.Fatal(err)
568 }
569 if a == nil {
570 t.Fatal("returned app is nil")
571 }
572 release := Release{
573 Namespace: "foo",
574 }
575 values := map[string]any{
gio266c04f2024-07-03 14:18:45 +0400576 "repoAddr": "",
gio7fbd4ad2024-08-27 10:06:39 +0400577 "repoPublicAddr": "",
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}