blob: 497c23597d4f2fe0da354c43c72c12c946311dc2 [file] [log] [blame]
Giorgi Lekveishvili7c427602024-01-04 00:13:55 +04001package installer
2
3import (
gio3cdee592024-04-17 10:15:56 +04004 "net"
Giorgi Lekveishvili7c427602024-01-04 00:13:55 +04005 "testing"
Giorgi Lekveishvili7c427602024-01-04 00:13:55 +04006)
7
gioe72b54f2024-04-22 10:44:41 +04008var env = EnvConfig{
9 InfraName: "dodo",
10 Id: "id",
11 ContactEmail: "foo@bar.ge",
12 Domain: "bar.ge",
13 PrivateDomain: "p.bar.ge",
14 PublicIP: []net.IP{net.ParseIP("1.2.3.4")},
15 NameserverIP: []net.IP{net.ParseIP("1.2.3.4")},
16 NamespacePrefix: "id-",
17 Network: EnvNetwork{
18 DNS: net.ParseIP("1.1.1.1"),
19 DNSInClusterIP: net.ParseIP("2.2.2.2"),
20 Ingress: net.ParseIP("3.3.3.3"),
21 Headscale: net.ParseIP("4.4.4.4"),
22 ServicesFrom: net.ParseIP("5.5.5.5"),
23 ServicesTo: net.ParseIP("6.6.6.6"),
24 },
25}
26
Giorgi Lekveishvili67383962024-03-22 19:27:34 +040027func TestAuthProxyEnabled(t *testing.T) {
Giorgi Lekveishvili186eae52024-02-15 14:21:41 +040028 r := NewInMemoryAppRepository(CreateAllApps())
Giorgi Lekveishvili67383962024-03-22 19:27:34 +040029 for _, app := range []string{"rpuppy", "Pi-hole", "url-shortener"} {
gio3cdee592024-04-17 10:15:56 +040030 a, err := FindEnvApp(r, app)
Giorgi Lekveishvili67383962024-03-22 19:27:34 +040031 if err != nil {
32 t.Fatal(err)
33 }
34 if a == nil {
35 t.Fatal("returned app is nil")
36 }
gio3cdee592024-04-17 10:15:56 +040037 release := Release{
38 Namespace: "foo",
39 }
gio3cdee592024-04-17 10:15:56 +040040 values := map[string]any{
41 "network": "Public",
42 "subdomain": "woof",
43 "auth": map[string]any{
44 "enabled": true,
45 "groups": "a,b",
Giorgi Lekveishvili67383962024-03-22 19:27:34 +040046 },
47 }
gio3cdee592024-04-17 10:15:56 +040048 rendered, err := a.Render(release, env, values)
Giorgi Lekveishvili67383962024-03-22 19:27:34 +040049 if err != nil {
50 t.Fatal(err)
51 }
52 for _, r := range rendered.Resources {
53 t.Log(string(r))
54 }
55 }
56}
57
58func TestAuthProxyDisabled(t *testing.T) {
59 r := NewInMemoryAppRepository(CreateAllApps())
60 for _, app := range []string{"rpuppy", "Pi-hole", "url-shortener"} {
gio3cdee592024-04-17 10:15:56 +040061 a, err := FindEnvApp(r, app)
Giorgi Lekveishvili67383962024-03-22 19:27:34 +040062 if err != nil {
63 t.Fatal(err)
64 }
65 if a == nil {
66 t.Fatal("returned app is nil")
67 }
gio3cdee592024-04-17 10:15:56 +040068 release := Release{
69 Namespace: "foo",
70 }
gio3cdee592024-04-17 10:15:56 +040071 values := map[string]any{
72 "network": "Public",
73 "subdomain": "woof",
74 "auth": map[string]any{
75 "enabled": false,
Giorgi Lekveishvili67383962024-03-22 19:27:34 +040076 },
77 }
gio3cdee592024-04-17 10:15:56 +040078 rendered, err := a.Render(release, env, values)
Giorgi Lekveishvili67383962024-03-22 19:27:34 +040079 if err != nil {
80 t.Fatal(err)
81 }
82 for _, r := range rendered.Resources {
83 t.Log(string(r))
84 }
85 }
86}
87
88func TestGroupMemberships(t *testing.T) {
89 r := NewInMemoryAppRepository(CreateAllApps())
gio3cdee592024-04-17 10:15:56 +040090 a, err := FindEnvApp(r, "memberships")
Giorgi Lekveishvili7c427602024-01-04 00:13:55 +040091 if err != nil {
Giorgi Lekveishvili186eae52024-02-15 14:21:41 +040092 t.Fatal(err)
Giorgi Lekveishvili7c427602024-01-04 00:13:55 +040093 }
Giorgi Lekveishvili186eae52024-02-15 14:21:41 +040094 if a == nil {
95 t.Fatal("returned app is nil")
Giorgi Lekveishvili7c427602024-01-04 00:13:55 +040096 }
gio3cdee592024-04-17 10:15:56 +040097 release := Release{
98 Namespace: "foo",
Giorgi Lekveishvili67383962024-03-22 19:27:34 +040099 }
gio308105e2024-04-19 13:12:13 +0400100 values := map[string]any{
101 "authGroups": "foo,bar",
102 }
gio3cdee592024-04-17 10:15:56 +0400103 rendered, err := a.Render(release, env, values)
Giorgi Lekveishvili67383962024-03-22 19:27:34 +0400104 if err != nil {
105 t.Fatal(err)
106 }
107 for _, r := range rendered.Resources {
108 t.Log(string(r))
109 }
Giorgi Lekveishvili7c427602024-01-04 00:13:55 +0400110}
Giorgi Lekveishviliee15ee22024-03-28 12:35:10 +0400111
112func TestGerrit(t *testing.T) {
113 r := NewInMemoryAppRepository(CreateAllApps())
gio3cdee592024-04-17 10:15:56 +0400114 a, err := FindEnvApp(r, "gerrit")
Giorgi Lekveishviliee15ee22024-03-28 12:35:10 +0400115 if err != nil {
116 t.Fatal(err)
117 }
118 if a == nil {
119 t.Fatal("returned app is nil")
120 }
gio3cdee592024-04-17 10:15:56 +0400121 release := Release{
122 Namespace: "foo",
Giorgi Lekveishvili35982662024-04-05 13:05:40 +0400123 }
gio3cdee592024-04-17 10:15:56 +0400124 values := map[string]any{
125 "subdomain": "gerrit",
126 "network": "Private",
127 "key": map[string]any{
128 "public": "foo",
129 "private": "bar",
130 },
131 "sshPort": 22,
132 }
133 rendered, err := a.Render(release, env, values)
Giorgi Lekveishvili35982662024-04-05 13:05:40 +0400134 if err != nil {
135 t.Fatal(err)
136 }
137 for _, r := range rendered.Resources {
138 t.Log(string(r))
139 }
140}
141
142func TestJenkins(t *testing.T) {
143 r := NewInMemoryAppRepository(CreateAllApps())
gio3cdee592024-04-17 10:15:56 +0400144 a, err := FindEnvApp(r, "jenkins")
Giorgi Lekveishvili35982662024-04-05 13:05:40 +0400145 if err != nil {
146 t.Fatal(err)
147 }
148 if a == nil {
149 t.Fatal("returned app is nil")
150 }
gio3cdee592024-04-17 10:15:56 +0400151 release := Release{
152 Namespace: "foo",
Giorgi Lekveishviliee15ee22024-03-28 12:35:10 +0400153 }
gio3cdee592024-04-17 10:15:56 +0400154 values := map[string]any{
155 "subdomain": "jenkins",
156 "network": "Private",
157 }
158 rendered, err := a.Render(release, env, values)
Giorgi Lekveishviliee15ee22024-03-28 12:35:10 +0400159 if err != nil {
160 t.Fatal(err)
161 }
162 for _, r := range rendered.Resources {
163 t.Log(string(r))
164 }
165}
giodb274d12024-04-19 11:53:18 +0400166
167func TestIngressPublic(t *testing.T) {
168 r := NewInMemoryAppRepository(CreateAllApps())
169 a, err := FindInfraApp(r, "ingress-public")
170 if err != nil {
171 t.Fatal(err)
172 }
173 if a == nil {
174 t.Fatal("returned app is nil")
175 }
176 release := Release{
177 Namespace: "foo",
178 }
gioe72b54f2024-04-22 10:44:41 +0400179 infra := InfraConfig{
giodb274d12024-04-19 11:53:18 +0400180 Name: "dodo",
181 PublicIP: []net.IP{net.ParseIP("1.2.3.4")},
182 InfraNamespacePrefix: "id-",
183 InfraAdminPublicKey: []byte("foo"),
184 }
185 values := map[string]any{
186 "sshPrivateKey": "private",
187 }
gioe72b54f2024-04-22 10:44:41 +0400188 rendered, err := a.Render(release, infra, values)
giodb274d12024-04-19 11:53:18 +0400189 if err != nil {
190 t.Fatal(err)
191 }
192 for _, r := range rendered.Resources {
193 t.Log(string(r))
194 }
195}
196
197func TestPrivateNetwork(t *testing.T) {
198 r := NewInMemoryAppRepository(CreateAllApps())
199 a, err := FindEnvApp(r, "private-network")
200 if err != nil {
201 t.Fatal(err)
202 }
203 if a == nil {
204 t.Fatal("returned app is nil")
205 }
206 release := Release{
207 Namespace: "foo",
208 }
giodb274d12024-04-19 11:53:18 +0400209 values := map[string]any{
210 "privateNetwork": map[string]any{
211 "hostname": "foo",
212 "username": "bar",
213 "ipSubnet": "123123",
214 },
215 "sshPrivateKey": "private",
216 }
217 rendered, err := a.Render(release, env, values)
218 if err != nil {
219 t.Fatal(err)
220 }
221 for _, r := range rendered.Resources {
222 t.Log(string(r))
223 }
224}
gio308105e2024-04-19 13:12:13 +0400225
226func TestAppPackages(t *testing.T) {
227 contents, err := valuesTmpls.ReadFile("values-tmpl/rpuppy.cue")
228 if err != nil {
229 t.Fatal(err)
230 }
231 app, err := NewCueEnvApp(CueAppData{
gioe72b54f2024-04-22 10:44:41 +0400232 "base.cue": []byte(cueBaseConfig),
233 "app.cue": []byte(contents),
234 "global.cue": []byte(cueEnvAppGlobal),
gio308105e2024-04-19 13:12:13 +0400235 })
236 if err != nil {
237 t.Fatal(err)
238 }
239 release := Release{
240 Namespace: "foo",
241 }
gio308105e2024-04-19 13:12:13 +0400242 values := map[string]any{
243 "network": "Public",
244 "subdomain": "woof",
245 "auth": map[string]any{
246 "enabled": true,
247 "groups": "a,b",
248 },
249 }
250 rendered, err := app.Render(release, env, values)
251 if err != nil {
252 t.Fatal(err)
253 }
254 for _, r := range rendered.Resources {
255 t.Log(string(r))
256 }
257 for _, r := range rendered.Data {
258 t.Log(string(r))
259 }
260}
gioe72b54f2024-04-22 10:44:41 +0400261
262func TestDNSGateway(t *testing.T) {
263 contents, err := valuesTmpls.ReadFile("values-tmpl/dns-gateway.cue")
264 if err != nil {
265 t.Fatal(err)
266 }
267 app, err := NewCueInfraApp(CueAppData{
268 "base.cue": []byte(cueBaseConfig),
269 "app.cue": []byte(contents),
270 "global.cue": []byte(cueInfraAppGlobal),
271 })
272 if err != nil {
273 t.Fatal(err)
274 }
275 release := Release{
276 Namespace: "foo",
277 AppInstanceId: "dns-gateway",
278 RepoAddr: "ssh://192.168.100.210:22/config",
279 AppDir: "/infrastructure/gns-gateway",
280 }
281 infra := InfraConfig{
282 Name: "dodo",
283 PublicIP: []net.IP{net.ParseIP("135.181.48.180"), net.ParseIP("65.108.39.172")},
284 InfraNamespacePrefix: "dodo-",
285 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"),
286 }
287 values := map[string]any{
288 "servers": []EnvDNS{EnvDNS{"v1.dodo.cloud", "10.0.1.2"}},
289 }
290 rendered, err := app.Render(release, infra, values)
291 if err != nil {
292 t.Fatal(err)
293 }
294 for _, r := range rendered.Resources {
295 t.Log(string(r))
296 }
297 for _, r := range rendered.Data {
298 t.Log(string(r))
299 }
300}