1 package utils
2
3 import (
4 "fmt"
5 "testing"
6
7 "github.com/stretchr/testify/assert"
8
9 "edge-infra.dev/pkg/edge/api/graph/model"
10 )
11
12 var (
13 terminalID = "efd9fae5-dddf-4c98-8a4c-5ddabecc3f05"
14 clusterEdgeID = "d5354303-9d3d-4411-a638-dce63c4c2b9c"
15 lane = "lane1"
16 terminalRoleControlPlane = model.TerminalRoleTypeControlplane
17 terminalClassServer = model.TerminalClassTypeServer
18 terminalDiscoverDisksAll = model.TerminalDiscoverDisksTypeAll
19 terminalExistingEfiPart = "/dev/sda1"
20 terminalBootDisk = "/dev/sdb"
21 terminalSwapEnabled = false
22 clusterName = "testing-cluster1"
23 hostname = "gas-station-terminal1"
24
25 terminalIfaceID = "79d63a8c-a6a8-4a3e-8ec6-d860d5499304"
26 macAddress = "72:46:16:ee:5c:5c"
27 dhcp4True = true
28 dhcp4False = false
29 dhcp6True = true
30 dhcp6False = false
31 gateway4 = "129.164.1.112"
32 gateway6 = "58c7:0b4c:0e7b:889c:d591:ebb6:5017:76d3"
33
34 terminalAddressID = "499d02af-e528-48c7-8d98-4f787a4d8087"
35 ipv4 = "231.207.251.140"
36 familyInet = model.InetTypeInet
37 familyInet6 = model.InetTypeInet6
38
39 ipv6 = "3899:217d:ff5f:8048:6722:57a7:5cf3:959f"
40 prefixLen24 = 24
41 )
42
43 func TestValidateTerminal(t *testing.T) {
44 terminal := CreateTerminalModel(terminalID, clusterEdgeID, &lane, terminalRoleControlPlane, &terminalClassServer, &terminalDiscoverDisksAll, &terminalBootDisk, clusterName, hostname, &terminalExistingEfiPart, terminalSwapEnabled)
45 err := ValidateTerminal(&terminal)
46 assert.NoError(t, err)
47 }
48
49 func TestValidateInterfaceInputMacAddressError(t *testing.T) {
50 invalidMac := "INVALID"
51 ifaceCreate := &model.TerminalInterfaceCreateInput{
52 MacAddress: invalidMac,
53 }
54 err := ValidateTerminalInterfaceCreateInput(ifaceCreate)
55 assert.Error(t, err)
56 }
57
58 func TestValidateTerminalIfaceDhcp4True(t *testing.T) {
59
60 iface := CreateTerminalIfaceModel(terminalIfaceID, macAddress, dhcp4True, dhcp6True, nil, nil, terminalID)
61 err := ValidateTerminalIface(&iface)
62 assert.NoError(t, err)
63
64
65 iface.Gateway4 = &gateway4
66 err = ValidateTerminalIface(&iface)
67 assert.NoError(t, err)
68
69
70 address := CreateTerminalAddressModel(terminalAddressID, &ipv4, prefixLen24, familyInet, terminalIfaceID)
71 iface.Addresses = append(iface.Addresses, &address)
72 err = ValidateTerminalIface(&iface)
73 assert.NoError(t, err)
74 }
75
76 func TestValidateTerminalIfaceDhcp4False(t *testing.T) {
77
78 iface := CreateTerminalIfaceModel(terminalIfaceID, macAddress, dhcp4False, dhcp6True, &gateway4, nil, terminalID)
79 address := CreateTerminalAddressModel(terminalAddressID, &ipv4, prefixLen24, familyInet, terminalIfaceID)
80 iface.Addresses = append(iface.Addresses, &address)
81 err := ValidateTerminalIface(&iface)
82 assert.NoError(t, err)
83 }
84
85 func TestValidateTerminalIfaceDhcp4FalseError(t *testing.T) {
86
87 iface := CreateTerminalIfaceModel(terminalIfaceID, macAddress, dhcp4False, dhcp6True, nil, nil, terminalID)
88
89
90 invalidGateway4 := "invalidGateway4"
91 iface.Gateway4 = &invalidGateway4
92 err := ValidateTerminalIface(&iface)
93 assert.Error(t, err)
94 expectedErrMsg := fmt.Sprintf("invalid gateway4 address: %s", invalidGateway4)
95 assert.Equal(t, expectedErrMsg, err.Error())
96 }
97
98 func TestValidateTerminalIfaceDhcp6True(t *testing.T) {
99
100 iface := CreateTerminalIfaceModel(terminalIfaceID, macAddress, dhcp4True, dhcp6True, nil, nil, terminalID)
101 err := ValidateTerminalIface(&iface)
102 assert.NoError(t, err)
103
104
105 iface.Gateway6 = &gateway6
106 err = ValidateTerminalIface(&iface)
107 assert.NoError(t, err)
108
109
110 address := CreateTerminalAddressModel(terminalAddressID, &ipv6, prefixLen24, familyInet6, terminalIfaceID)
111 iface.Addresses = append(iface.Addresses, &address)
112 err = ValidateTerminalIface(&iface)
113 assert.NoError(t, err)
114 }
115
116 func TestValidateTerminalIfaceDhcp6False(t *testing.T) {
117
118 iface := CreateTerminalIfaceModel(terminalIfaceID, macAddress, dhcp4True, dhcp6False, nil, nil, terminalID)
119 err := ValidateTerminalIface(&iface)
120 assert.NoError(t, err)
121
122
123 iface.Gateway6 = &gateway6
124 err = ValidateTerminalIface(&iface)
125 assert.NoError(t, err)
126
127
128 address := CreateTerminalAddressModel(terminalAddressID, &ipv6, prefixLen24, familyInet6, terminalIfaceID)
129 iface.Addresses = append(iface.Addresses, &address)
130 err = ValidateTerminalIface(&iface)
131 assert.NoError(t, err)
132 }
133
134 func TestValidateTerminalAddress(t *testing.T) {
135
136 address := CreateTerminalAddressModel(terminalAddressID, &ipv4, prefixLen24, familyInet, terminalIfaceID)
137 err := ValidateTerminalAddress(&address)
138 assert.NoError(t, err)
139
140
141 address = CreateTerminalAddressModel(terminalAddressID, &ipv6, prefixLen24, familyInet6, terminalIfaceID)
142 err = ValidateTerminalAddress(&address)
143 assert.NoError(t, err)
144 }
145
146 func TestValidateTerminalAddressIpError(t *testing.T) {
147 invalidIP := "invalidIP"
148 address := CreateTerminalAddressModel(terminalAddressID, &invalidIP, prefixLen24, familyInet, terminalIfaceID)
149 err := ValidateTerminalAddress(&address)
150 assert.Error(t, err)
151 expectedErrMsg := fmt.Sprintf("invalid address ip: %s", invalidIP)
152 assert.Equal(t, expectedErrMsg, err.Error())
153 }
154
155 func TestValidateTerminalAddressCidrError(t *testing.T) {
156 invalidPrefixLen := -12
157 address := CreateTerminalAddressModel(terminalAddressID, &ipv4, invalidPrefixLen, familyInet, terminalIfaceID)
158 err := ValidateTerminalAddress(&address)
159 assert.Error(t, err)
160 expectedErrMsg := fmt.Sprintf("invalid prefix: %d", invalidPrefixLen)
161 assert.Equal(t, expectedErrMsg, err.Error())
162 }
163
164 func TestMatchMacAddresses(t *testing.T) {
165 addrID, ip, ifaceID, terminalID, clusterEdgeID := "1d88738d-dae1-4bfe-839b-f31bc3809606", "83.25.121.197", "ff674589-500a-4a27-b42f-5cb2478a9cfe",
166 "64cfc839-d7b6-4d2b-8eee-210873ba56c9", "4f725ad2-1b1e-43f8-8a3f-38bbd0892571"
167 gateway4, terminalClass, mac := "223.54.203.117", model.TerminalClassTypeServer, "56:21:a1:f2:63:bf"
168 addr := CreateTerminalAddressModel(addrID, &ip, 16, model.InetTypeInet, ifaceID)
169 iface := CreateTerminalIfaceModel(ifaceID, mac, false, true, &gateway4, nil, terminalID)
170 iface.Addresses = []*model.TerminalAddress{&addr}
171 terminalDiskType := model.TerminalDiscoverDisksTypeEmpty
172 terminal := CreateTerminalModel(terminalID, clusterEdgeID, nil, model.TerminalRoleTypeControlplane, &terminalClass, &terminalDiskType, &terminalBootDisk, "test", "hostname", &terminalExistingEfiPart, terminalSwapEnabled)
173 terminal.Interfaces = []*model.TerminalInterface{&iface}
174
175 macs := []string{"66:96:83:7f:8c:09", mac}
176 macMatch, err := MatchTerminalMacAddresses(macs, &terminal)
177 assert.NoError(t, err)
178 assert.True(t, macMatch)
179 }
180
181 func TestConvertMacAddresses(t *testing.T) {
182 macs := []string{"ce:d7:2e:27:b9:66", "12-6f-cb-16-62-f4", "9A-80-53-6D-C0-1F"}
183 normMacs := []string{"ce:d7:2e:27:b9:66", "12:6f:cb:16:62:f4", "9a:80:53:6d:c0:1f"}
184 normOutput, err := FormatMacAddresses(macs)
185 assert.NoError(t, err)
186 assert.Equal(t, normMacs, normOutput)
187
188 nilOutput, err := FormatMacAddresses(nil)
189 assert.NoError(t, err)
190 assert.Nil(t, nilOutput)
191 }
192
193 func TestConvertMacAddressesError(t *testing.T) {
194 macs := []string{"ce:d7:2e:27:b9:66", "12:6fcb:16:62"}
195 _, err := FormatMacAddresses(macs)
196 assert.EqualError(t, err, "address 12:6fcb:16:62: invalid MAC address")
197
198 macs = []string{"12:6f:cb:16:f4:6x"}
199 _, err = FormatMacAddresses(macs)
200 assert.EqualError(t, err, "address 12:6f:cb:16:f4:6x: invalid MAC address")
201 }
202
View as plain text