blob: 83cf7017f9d64665fc0789d3073f243590f5514d [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
gioe72b54f2024-04-22 10:44:41 +0400347func TestDNSGateway(t *testing.T) {
348 contents, err := valuesTmpls.ReadFile("values-tmpl/dns-gateway.cue")
349 if err != nil {
350 t.Fatal(err)
351 }
352 app, err := NewCueInfraApp(CueAppData{
353 "base.cue": []byte(cueBaseConfig),
354 "app.cue": []byte(contents),
355 "global.cue": []byte(cueInfraAppGlobal),
356 })
357 if err != nil {
358 t.Fatal(err)
359 }
360 release := Release{
361 Namespace: "foo",
362 AppInstanceId: "dns-gateway",
363 RepoAddr: "ssh://192.168.100.210:22/config",
364 AppDir: "/infrastructure/gns-gateway",
365 }
366 infra := InfraConfig{
367 Name: "dodo",
368 PublicIP: []net.IP{net.ParseIP("135.181.48.180"), net.ParseIP("65.108.39.172")},
369 InfraNamespacePrefix: "dodo-",
370 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"),
371 }
372 values := map[string]any{
373 "servers": []EnvDNS{EnvDNS{"v1.dodo.cloud", "10.0.1.2"}},
374 }
gio7841f4f2024-07-26 19:53:49 +0400375 rendered, err := app.Render(release, infra, infraNetworks, values, nil)
gioe72b54f2024-04-22 10:44:41 +0400376 if err != nil {
377 t.Fatal(err)
378 }
379 for _, r := range rendered.Resources {
380 t.Log(string(r))
381 }
382 for _, r := range rendered.Data {
383 t.Log(string(r))
384 }
385}
gio0eaf2712024-04-14 13:08:46 +0400386
giof15b9da2024-09-19 06:59:16 +0400387var dodoAppRemoteClusterCue = `
388app: {
389 type: "golang:1.22.0"
390 run: "main.go"
391 ingress: {
392 network: "private"
393 subdomain: "testapp"
394 auth: enabled: false
395 }
396 dev: {
397 enabled: false
398 }
399 cluster: "io"
400}`
401
402func TestDodoAppRemoteCluster(t *testing.T) {
403 app, err := NewDodoApp([]byte(dodoAppRemoteClusterCue))
404 if err != nil {
405 for _, e := range errors.Errors(err) {
406 t.Log(e)
407 }
408 t.Fatal(err)
409 }
410
411 release := Release{
412 Namespace: "foo",
413 AppInstanceId: "foo-bar",
414 RepoAddr: "ssh://192.168.100.210:22/config",
415 AppDir: "/foo/bar",
416 }
417 keyGen := testKeyGen{}
418 r, err := app.Render(release, env, networks, clusters, map[string]any{
419 "repoAddr": "1",
420 "repoPublicAddr": "2",
421 "managerAddr": "3",
422 "appId": "4",
423 "branch": "5",
424 "sshPrivateKey": "6",
425 }, nil, keyGen)
426 if err != nil {
427 for _, e := range errors.Errors(err) {
428 for _, f := range errors.Errors(e) {
429 for _, g := range errors.Errors(f) {
430 t.Log(g)
431 }
432 }
433 }
434 t.Fatal(err)
435 }
436 t.Log(string(r.Raw))
437}
438
gio7fbd4ad2024-08-27 10:06:39 +0400439var dodoAppDevDisabledCue = `
440app: {
441 type: "golang:1.22.0"
442 run: "main.go"
443 ingress: {
444 network: "private"
445 subdomain: "testapp"
446 auth: enabled: false
447 }
448 dev: {
449 enabled: false
450 }
451}`
gio0eaf2712024-04-14 13:08:46 +0400452
gio7fbd4ad2024-08-27 10:06:39 +0400453var dodoAppDevEnabledCue = `
454app: {
giocfb228c2024-09-06 15:44:31 +0400455 type: "golang:1.20.0"
gio7fbd4ad2024-08-27 10:06:39 +0400456 run: "main.go"
457 ingress: {
458 network: "private"
459 subdomain: "testapp"
460 auth: enabled: false
461 }
462 dev: {
463 enabled: true
464 username: "gio"
465 }
giocfb228c2024-09-06 15:44:31 +0400466 volumes: {
467 data: size: "5Gi"
468 }
469 postgresql: {
470 db: size: "10Gi"
471 }
gio7fbd4ad2024-08-27 10:06:39 +0400472}`
473
474func TestDodoAppDevDisabled(t *testing.T) {
475 app, err := NewDodoApp([]byte(dodoAppDevDisabledCue))
gio1364e432024-06-29 11:39:18 +0400476 if err != nil {
gio12e887d2024-08-18 16:09:47 +0400477 for _, e := range errors.Errors(err) {
478 t.Log(e)
479 }
gio1364e432024-06-29 11:39:18 +0400480 t.Fatal(err)
481 }
gio12e887d2024-08-18 16:09:47 +0400482
gio1364e432024-06-29 11:39:18 +0400483 release := Release{
484 Namespace: "foo",
485 AppInstanceId: "foo-bar",
486 RepoAddr: "ssh://192.168.100.210:22/config",
487 AppDir: "/foo/bar",
488 }
gio7fbd4ad2024-08-27 10:06:39 +0400489 keyGen := testKeyGen{}
giof6ad2982024-08-23 17:42:49 +0400490 r, err := app.Render(release, env, networks, nil, map[string]any{
gio7fbd4ad2024-08-27 10:06:39 +0400491 "repoAddr": "",
492 "repoPublicAddr": "",
493 "managerAddr": "",
494 "appId": "",
495 "branch": "",
496 "sshPrivateKey": "",
497 }, nil, keyGen)
gio0eaf2712024-04-14 13:08:46 +0400498 if err != nil {
gio7fbd4ad2024-08-27 10:06:39 +0400499 for _, e := range errors.Errors(err) {
500 for _, f := range errors.Errors(e) {
501 for _, g := range errors.Errors(f) {
502 t.Log(g)
503 }
504 }
505 }
gio0eaf2712024-04-14 13:08:46 +0400506 t.Fatal(err)
507 }
gio7fbd4ad2024-08-27 10:06:39 +0400508 t.Log(string(r.Raw))
509}
510
511func TestDodoAppDevEnabled(t *testing.T) {
512 app, err := NewDodoApp([]byte(dodoAppDevEnabledCue))
513 if err != nil {
514 for _, e := range errors.Errors(err) {
515 t.Log(e)
516 }
517 t.Fatal(err)
518 }
519
520 release := Release{
521 Namespace: "foo",
522 AppInstanceId: "foo-bar",
523 RepoAddr: "ssh://192.168.100.210:22/config",
524 AppDir: "/foo/bar",
525 }
526 keyGen := testKeyGen{}
giof6ad2982024-08-23 17:42:49 +0400527 r, err := app.Render(release, env, networks, nil, map[string]any{
gio7fbd4ad2024-08-27 10:06:39 +0400528 "repoAddr": "",
529 "repoPublicAddr": "",
530 "managerAddr": "",
531 "appId": "",
532 "branch": "",
533 "sshPrivateKey": "",
534 "username": "",
535 }, nil, keyGen)
536 if err != nil {
537 for _, e := range errors.Errors(err) {
538 t.Log(e)
539 }
540 t.Fatal(err)
541 }
542 t.Log(string(r.Raw))
gio0eaf2712024-04-14 13:08:46 +0400543}
gio266c04f2024-07-03 14:18:45 +0400544
545func TestDodoAppInstance(t *testing.T) {
546 r := NewInMemoryAppRepository(CreateAllApps())
547 a, err := FindEnvApp(r, "dodo-app-instance")
548 if err != nil {
549 t.Fatal(err)
550 }
551 if a == nil {
552 t.Fatal("returned app is nil")
553 }
554 release := Release{
555 Namespace: "foo",
556 }
557 values := map[string]any{
gio266c04f2024-07-03 14:18:45 +0400558 "repoAddr": "",
gio7fbd4ad2024-08-27 10:06:39 +0400559 "repoPublicAddr": "",
gio33059762024-07-05 13:19:07 +0400560 "repoHost": "",
gio7fbd4ad2024-08-27 10:06:39 +0400561 "branch": "",
gio266c04f2024-07-03 14:18:45 +0400562 "gitRepoPublicKey": "",
gio7fbd4ad2024-08-27 10:06:39 +0400563 "username": "",
gio266c04f2024-07-03 14:18:45 +0400564 }
giof6ad2982024-08-23 17:42:49 +0400565 rendered, err := a.Render(release, env, networks, nil, values, nil, nil)
gio266c04f2024-07-03 14:18:45 +0400566 if err != nil {
567 t.Fatal(err)
568 }
569 for _, r := range rendered.Resources {
570 t.Log(string(r))
571 }
572}
gio4ece99c2024-07-18 11:05:50 +0400573
574func TestDodoApp(t *testing.T) {
575 contents, err := valuesTmpls.ReadFile("values-tmpl/dodo-app.cue")
576 if err != nil {
577 t.Fatal(err)
578 }
579 app, err := NewCueEnvApp(CueAppData{
580 "base.cue": []byte(cueBaseConfig),
581 "app.cue": []byte(contents),
582 "global.cue": []byte(cueEnvAppGlobal),
583 })
584 if err != nil {
585 t.Fatal(err)
586 }
587 t.Log(app.Schema())
588}
giof6ad2982024-08-23 17:42:49 +0400589
590func TestAppVirtualMachine(t *testing.T) {
591 contents, err := valuesTmpls.ReadFile("values-tmpl/virtual-machine.cue")
592 if err != nil {
593 t.Fatal(err)
594 }
595 app, err := NewCueEnvApp(CueAppData{
596 "base.cue": []byte(cueBaseConfig),
597 "app.cue": []byte(contents),
598 "global.cue": []byte(cueEnvAppGlobal),
599 })
600 if err != nil {
601 t.Fatal(err)
602 }
603 release := Release{
604 Namespace: "foo",
605 }
606 values := map[string]any{
607 "name": "foo",
608 "username": "bar",
609 "cpuCores": 1,
610 "memory": "1Gi",
611 }
612 rendered, err := app.Render(release, env, networks, nil, values, nil, nil)
613 if err != nil {
614 t.Fatal(err)
615 }
616 for _, r := range rendered.Resources {
617 t.Log(string(r))
618 }
619 for _, r := range rendered.Data {
620 t.Log(string(r))
621 }
622}