blob: 7695796d66300630ae46c9e4bd897eacf2de5724 [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
Giorgi Lekveishvili67383962024-03-22 19:27:34 +04008func TestAuthProxyEnabled(t *testing.T) {
Giorgi Lekveishvili186eae52024-02-15 14:21:41 +04009 r := NewInMemoryAppRepository(CreateAllApps())
Giorgi Lekveishvili67383962024-03-22 19:27:34 +040010 for _, app := range []string{"rpuppy", "Pi-hole", "url-shortener"} {
gio3cdee592024-04-17 10:15:56 +040011 a, err := FindEnvApp(r, app)
Giorgi Lekveishvili67383962024-03-22 19:27:34 +040012 if err != nil {
13 t.Fatal(err)
14 }
15 if a == nil {
16 t.Fatal("returned app is nil")
17 }
gio3cdee592024-04-17 10:15:56 +040018 release := Release{
19 Namespace: "foo",
20 }
21 env := AppEnvConfig{
22 InfraName: "dodo",
23 Id: "id",
24 ContactEmail: "foo@bar.ge",
25 Domain: "bar.ge",
26 PrivateDomain: "p.bar.ge",
27 PublicIP: []net.IP{net.ParseIP("1.2.3.4")},
28 NamespacePrefix: "id-",
29 }
30 values := map[string]any{
31 "network": "Public",
32 "subdomain": "woof",
33 "auth": map[string]any{
34 "enabled": true,
35 "groups": "a,b",
Giorgi Lekveishvili67383962024-03-22 19:27:34 +040036 },
37 }
gio3cdee592024-04-17 10:15:56 +040038 rendered, err := a.Render(release, env, values)
Giorgi Lekveishvili67383962024-03-22 19:27:34 +040039 if err != nil {
40 t.Fatal(err)
41 }
42 for _, r := range rendered.Resources {
43 t.Log(string(r))
44 }
45 }
46}
47
48func TestAuthProxyDisabled(t *testing.T) {
49 r := NewInMemoryAppRepository(CreateAllApps())
50 for _, app := range []string{"rpuppy", "Pi-hole", "url-shortener"} {
gio3cdee592024-04-17 10:15:56 +040051 a, err := FindEnvApp(r, app)
Giorgi Lekveishvili67383962024-03-22 19:27:34 +040052 if err != nil {
53 t.Fatal(err)
54 }
55 if a == nil {
56 t.Fatal("returned app is nil")
57 }
gio3cdee592024-04-17 10:15:56 +040058 release := Release{
59 Namespace: "foo",
60 }
61 env := AppEnvConfig{
62 InfraName: "dodo",
63 Id: "id",
64 ContactEmail: "foo@bar.ge",
65 Domain: "bar.ge",
66 PrivateDomain: "p.bar.ge",
67 PublicIP: []net.IP{net.ParseIP("1.2.3.4")},
68 NamespacePrefix: "id-",
69 }
70 values := map[string]any{
71 "network": "Public",
72 "subdomain": "woof",
73 "auth": map[string]any{
74 "enabled": false,
Giorgi Lekveishvili67383962024-03-22 19:27:34 +040075 },
76 }
gio3cdee592024-04-17 10:15:56 +040077 rendered, err := a.Render(release, env, values)
Giorgi Lekveishvili67383962024-03-22 19:27:34 +040078 if err != nil {
79 t.Fatal(err)
80 }
81 for _, r := range rendered.Resources {
82 t.Log(string(r))
83 }
84 }
85}
86
87func TestGroupMemberships(t *testing.T) {
88 r := NewInMemoryAppRepository(CreateAllApps())
gio3cdee592024-04-17 10:15:56 +040089 a, err := FindEnvApp(r, "memberships")
Giorgi Lekveishvili7c427602024-01-04 00:13:55 +040090 if err != nil {
Giorgi Lekveishvili186eae52024-02-15 14:21:41 +040091 t.Fatal(err)
Giorgi Lekveishvili7c427602024-01-04 00:13:55 +040092 }
Giorgi Lekveishvili186eae52024-02-15 14:21:41 +040093 if a == nil {
94 t.Fatal("returned app is nil")
Giorgi Lekveishvili7c427602024-01-04 00:13:55 +040095 }
gio3cdee592024-04-17 10:15:56 +040096 release := Release{
97 Namespace: "foo",
Giorgi Lekveishvili67383962024-03-22 19:27:34 +040098 }
gio3cdee592024-04-17 10:15:56 +040099 env := AppEnvConfig{
100 InfraName: "dodo",
101 Id: "id",
102 ContactEmail: "foo@bar.ge",
103 Domain: "bar.ge",
104 PrivateDomain: "p.bar.ge",
105 PublicIP: []net.IP{net.ParseIP("1.2.3.4")},
106 NamespacePrefix: "id-",
107 }
gio308105e2024-04-19 13:12:13 +0400108 values := map[string]any{
109 "authGroups": "foo,bar",
110 }
gio3cdee592024-04-17 10:15:56 +0400111 rendered, err := a.Render(release, env, values)
Giorgi Lekveishvili67383962024-03-22 19:27:34 +0400112 if err != nil {
113 t.Fatal(err)
114 }
115 for _, r := range rendered.Resources {
116 t.Log(string(r))
117 }
Giorgi Lekveishvili7c427602024-01-04 00:13:55 +0400118}
Giorgi Lekveishviliee15ee22024-03-28 12:35:10 +0400119
120func TestGerrit(t *testing.T) {
121 r := NewInMemoryAppRepository(CreateAllApps())
gio3cdee592024-04-17 10:15:56 +0400122 a, err := FindEnvApp(r, "gerrit")
Giorgi Lekveishviliee15ee22024-03-28 12:35:10 +0400123 if err != nil {
124 t.Fatal(err)
125 }
126 if a == nil {
127 t.Fatal("returned app is nil")
128 }
gio3cdee592024-04-17 10:15:56 +0400129 release := Release{
130 Namespace: "foo",
Giorgi Lekveishvili35982662024-04-05 13:05:40 +0400131 }
gio3cdee592024-04-17 10:15:56 +0400132 env := AppEnvConfig{
133 InfraName: "dodo",
134 Id: "id",
135 ContactEmail: "foo@bar.ge",
136 Domain: "bar.ge",
137 PrivateDomain: "p.bar.ge",
138 PublicIP: []net.IP{net.ParseIP("1.2.3.4")},
139 NamespacePrefix: "id-",
140 }
141 values := map[string]any{
142 "subdomain": "gerrit",
143 "network": "Private",
144 "key": map[string]any{
145 "public": "foo",
146 "private": "bar",
147 },
148 "sshPort": 22,
149 }
150 rendered, err := a.Render(release, env, values)
Giorgi Lekveishvili35982662024-04-05 13:05:40 +0400151 if err != nil {
152 t.Fatal(err)
153 }
154 for _, r := range rendered.Resources {
155 t.Log(string(r))
156 }
157}
158
159func TestJenkins(t *testing.T) {
160 r := NewInMemoryAppRepository(CreateAllApps())
gio3cdee592024-04-17 10:15:56 +0400161 a, err := FindEnvApp(r, "jenkins")
Giorgi Lekveishvili35982662024-04-05 13:05:40 +0400162 if err != nil {
163 t.Fatal(err)
164 }
165 if a == nil {
166 t.Fatal("returned app is nil")
167 }
gio3cdee592024-04-17 10:15:56 +0400168 release := Release{
169 Namespace: "foo",
Giorgi Lekveishviliee15ee22024-03-28 12:35:10 +0400170 }
gio3cdee592024-04-17 10:15:56 +0400171 env := AppEnvConfig{
172 InfraName: "dodo",
173 Id: "id",
174 ContactEmail: "foo@bar.ge",
175 Domain: "bar.ge",
176 PrivateDomain: "p.bar.ge",
177 PublicIP: []net.IP{net.ParseIP("1.2.3.4")},
178 NamespacePrefix: "id-",
179 }
180 values := map[string]any{
181 "subdomain": "jenkins",
182 "network": "Private",
183 }
184 rendered, err := a.Render(release, env, values)
Giorgi Lekveishviliee15ee22024-03-28 12:35:10 +0400185 if err != nil {
186 t.Fatal(err)
187 }
188 for _, r := range rendered.Resources {
189 t.Log(string(r))
190 }
191}
giodb274d12024-04-19 11:53:18 +0400192
193func TestIngressPublic(t *testing.T) {
194 r := NewInMemoryAppRepository(CreateAllApps())
195 a, err := FindInfraApp(r, "ingress-public")
196 if err != nil {
197 t.Fatal(err)
198 }
199 if a == nil {
200 t.Fatal("returned app is nil")
201 }
202 release := Release{
203 Namespace: "foo",
204 }
205 env := InfraConfig{
206 Name: "dodo",
207 PublicIP: []net.IP{net.ParseIP("1.2.3.4")},
208 InfraNamespacePrefix: "id-",
209 InfraAdminPublicKey: []byte("foo"),
210 }
211 values := map[string]any{
212 "sshPrivateKey": "private",
213 }
214 rendered, err := a.Render(release, env, values)
215 if err != nil {
216 t.Fatal(err)
217 }
218 for _, r := range rendered.Resources {
219 t.Log(string(r))
220 }
221}
222
223func TestPrivateNetwork(t *testing.T) {
224 r := NewInMemoryAppRepository(CreateAllApps())
225 a, err := FindEnvApp(r, "private-network")
226 if err != nil {
227 t.Fatal(err)
228 }
229 if a == nil {
230 t.Fatal("returned app is nil")
231 }
232 release := Release{
233 Namespace: "foo",
234 }
235 env := AppEnvConfig{
236 InfraName: "dodo",
237 Id: "id",
238 ContactEmail: "foo@bar.ge",
239 Domain: "bar.ge",
240 PrivateDomain: "p.bar.ge",
241 PublicIP: []net.IP{net.ParseIP("1.2.3.4")},
242 NamespacePrefix: "id-",
243 }
244 values := map[string]any{
245 "privateNetwork": map[string]any{
246 "hostname": "foo",
247 "username": "bar",
248 "ipSubnet": "123123",
249 },
250 "sshPrivateKey": "private",
251 }
252 rendered, err := a.Render(release, env, values)
253 if err != nil {
254 t.Fatal(err)
255 }
256 for _, r := range rendered.Resources {
257 t.Log(string(r))
258 }
259}
gio308105e2024-04-19 13:12:13 +0400260
261func TestAppPackages(t *testing.T) {
262 contents, err := valuesTmpls.ReadFile("values-tmpl/rpuppy.cue")
263 if err != nil {
264 t.Fatal(err)
265 }
266 app, err := NewCueEnvApp(CueAppData{
267 "base.cue": []byte(cueBaseConfig),
268 "app.cue": []byte(contents),
269 })
270 if err != nil {
271 t.Fatal(err)
272 }
273 release := Release{
274 Namespace: "foo",
275 }
276 env := AppEnvConfig{
277 InfraName: "dodo",
278 Id: "id",
279 ContactEmail: "foo@bar.ge",
280 Domain: "bar.ge",
281 PrivateDomain: "p.bar.ge",
282 PublicIP: []net.IP{net.ParseIP("1.2.3.4")},
283 NamespacePrefix: "id-",
284 }
285 values := map[string]any{
286 "network": "Public",
287 "subdomain": "woof",
288 "auth": map[string]any{
289 "enabled": true,
290 "groups": "a,b",
291 },
292 }
293 rendered, err := app.Render(release, env, values)
294 if err != nil {
295 t.Fatal(err)
296 }
297 for _, r := range rendered.Resources {
298 t.Log(string(r))
299 }
300 for _, r := range rendered.Data {
301 t.Log(string(r))
302 }
303}