| gio | efa0ed4 | 2024-06-13 12:31:43 +0400 | [diff] [blame] | 1 | package installer |
| 2 | |
| 3 | import ( |
| 4 | "testing" |
| gio | f15b9da | 2024-09-19 06:59:16 +0400 | [diff] [blame] | 5 | |
| 6 | "cuelang.org/go/cue" |
| gio | efa0ed4 | 2024-06-13 12:31:43 +0400 | [diff] [blame] | 7 | ) |
| 8 | |
| 9 | func TestFindPortFields(t *testing.T) { |
| 10 | scm := structSchema{ |
| 11 | "a", |
| 12 | []Field{ |
| gio | 36b23b3 | 2024-08-25 12:20:54 +0400 | [diff] [blame] | 13 | Field{"x", basicSchema{"x", KindString, false, nil}}, |
| 14 | Field{"y", basicSchema{"y", KindInt, false, nil}}, |
| 15 | Field{"z", basicSchema{"z", KindPort, false, nil}}, |
| gio | efa0ed4 | 2024-06-13 12:31:43 +0400 | [diff] [blame] | 16 | Field{ |
| 17 | "w", |
| 18 | structSchema{ |
| 19 | "w", |
| 20 | []Field{ |
| gio | 36b23b3 | 2024-08-25 12:20:54 +0400 | [diff] [blame] | 21 | Field{"x", basicSchema{"x", KindString, false, nil}}, |
| 22 | Field{"y", basicSchema{"y", KindInt, false, nil}}, |
| 23 | Field{"z", basicSchema{"z", KindPort, false, nil}}, |
| gio | efa0ed4 | 2024-06-13 12:31:43 +0400 | [diff] [blame] | 24 | }, |
| 25 | false, |
| 26 | }, |
| 27 | }, |
| 28 | }, |
| 29 | false, |
| 30 | } |
| 31 | p := findPortFields(scm) |
| 32 | if len(p) != 2 { |
| 33 | t.Fatalf("expected two port fields, %v", p) |
| 34 | } |
| 35 | if p[0] != "z" || p[1] != "w.z" { |
| 36 | t.Fatalf("expected 'z' and 'w.z' port fields, %v", p) |
| 37 | } |
| 38 | } |
| gio | f15b9da | 2024-09-19 06:59:16 +0400 | [diff] [blame] | 39 | |
| 40 | const isNotNetwork = ` |
| 41 | input: { |
| 42 | repoAddr: string |
| 43 | repoPublicAddr: string |
| 44 | managerAddr: string |
| 45 | appId: string |
| 46 | branch: string |
| 47 | sshPrivateKey: string |
| 48 | username?: string |
| 49 | cluster: #Cluster |
| 50 | username?: string | *"test" |
| 51 | vpnAuthKey: string @role(VPNAuthKey) @usernameField(username) |
| 52 | } |
| 53 | |
| 54 | #Cluster: { |
| 55 | name: string |
| 56 | kubeconfig: string |
| 57 | ingressClassName: string |
| 58 | } |
| 59 | ` |
| 60 | |
| 61 | func TestIsNotNetwork(t *testing.T) { |
| 62 | v, err := ParseCueAppConfig(CueAppData{"/test.cue": []byte(isNotNetwork)}) |
| 63 | if err != nil { |
| 64 | t.Fatal(err) |
| 65 | } |
| 66 | if isNetwork(v.LookupPath(cue.ParsePath("input"))) { |
| 67 | t.Fatal("not really network") |
| 68 | } |
| 69 | } |
| 70 | |
| 71 | const inputIsNetwork = ` |
| 72 | input: { |
| 73 | name: string |
| 74 | ingressClass: string |
| 75 | certificateIssuer: string | *"" |
| 76 | domain: string |
| 77 | allocatePortAddr: string |
| 78 | reservePortAddr: string |
| 79 | deallocatePortAddr: string |
| 80 | } |
| 81 | ` |
| 82 | |
| 83 | func TestIsNetwork(t *testing.T) { |
| 84 | v, err := ParseCueAppConfig(CueAppData{"/test.cue": []byte(inputIsNetwork)}) |
| 85 | if err != nil { |
| 86 | t.Fatal(err) |
| 87 | } |
| 88 | if !isNetwork(v.LookupPath(cue.ParsePath("input"))) { |
| 89 | t.Fatal("is network") |
| 90 | } |
| 91 | } |
| gio | 8f29032 | 2024-09-21 15:37:45 +0400 | [diff] [blame] | 92 | |
| 93 | const emptyInput = "input: {}" |
| 94 | |
| 95 | func TestIsNotNetworkEmptyInput(t *testing.T) { |
| 96 | v, err := ParseCueAppConfig(CueAppData{"/test.cue": []byte(emptyInput)}) |
| 97 | if err != nil { |
| 98 | t.Fatal(err) |
| 99 | } |
| 100 | if isNetwork(v.LookupPath(cue.ParsePath("input"))) { |
| 101 | t.Fatal("not really network") |
| 102 | } |
| 103 | } |
| gio | fc441e3 | 2024-11-11 16:26:14 +0400 | [diff] [blame] | 104 | |
| 105 | const inputIsCluster = ` |
| 106 | input: { |
| 107 | name: string |
| 108 | kubeconfig: string |
| 109 | ingressClassName: string |
| 110 | } |
| 111 | ` |
| 112 | |
| 113 | func TestIsCluster(t *testing.T) { |
| 114 | v, err := ParseCueAppConfig(CueAppData{"/test.cue": []byte(inputIsCluster)}) |
| 115 | if err != nil { |
| 116 | t.Fatal(err) |
| 117 | } |
| 118 | if !isCluster(v.LookupPath(cue.ParsePath("input"))) { |
| 119 | t.Fatal("is cluster") |
| 120 | } |
| 121 | } |