github.com/civo/civogo@v0.3.65/firewall_test.go (about) 1 package civogo 2 3 import ( 4 "reflect" 5 "testing" 6 ) 7 8 func TestListFirewalls(t *testing.T) { 9 client, server, _ := NewClientForTesting(map[string]string{ 10 "/v2/firewalls": `[{"id": "12345", "name": "instance-123456", "rules_count": 3, "instance_count": 10, "cluster_count": 2, "loadbalancer_count": 1}, {"id": "67789", "name": "instance-7890", "rules_count": 1, "instance_count": 2, "cluster_count": 1, "loadbalancer_count": 0}]`, 11 }) 12 defer server.Close() 13 got, err := client.ListFirewalls() 14 15 if err != nil { 16 t.Errorf("Request returned an error: %s", err) 17 return 18 } 19 expected := []Firewall{{ID: "12345", Name: "instance-123456", RulesCount: 3, InstanceCount: 10, ClusterCount: 2, LoadBalancerCount: 1}, {ID: "67789", Name: "instance-7890", RulesCount: 1, InstanceCount: 2, ClusterCount: 1, LoadBalancerCount: 0}} 20 if !reflect.DeepEqual(got, expected) { 21 t.Errorf("Expected %+v, got %+v", expected, got) 22 } 23 } 24 25 func TestFindFirewall(t *testing.T) { 26 client, server, _ := NewClientForTesting(map[string]string{ 27 "/v2/firewalls": `[{"id": "12345", "name": "web-instance", "rules_count": 3, "instance_count": 10, "cluster_count": 2, "loadbalancer_count": 1, "region": "lon1"}, {"id": "67789", "name": "web-node", "rules_count": 1, "instances_count": 2, "region": "lon1"}]`, 28 }) 29 defer server.Close() 30 31 got, _ := client.FindFirewall("45") 32 if got.ID != "12345" { 33 t.Errorf("Expected %s, got %s", "12345", got.ID) 34 } 35 36 got, _ = client.FindFirewall("89") 37 if got.ID != "67789" { 38 t.Errorf("Expected %s, got %s", "67789", got.ID) 39 } 40 41 got, _ = client.FindFirewall("inst") 42 if got.ID != "12345" { 43 t.Errorf("Expected %s, got %s", "12345", got.ID) 44 } 45 46 got, _ = client.FindFirewall("nod") 47 if got.ID != "67789" { 48 t.Errorf("Expected %s, got %s", "67789", got.ID) 49 } 50 51 _, err := client.FindFirewall("web") 52 if err.Error() != "MultipleMatchesError: unable to find web because there were multiple matches" { 53 t.Errorf("Expected %s, got %s", "unable to find web because there were multiple matches", err.Error()) 54 } 55 56 _, err = client.FindFirewall("missing") 57 if err.Error() != "ZeroMatchesError: unable to find missing, zero matches" { 58 t.Errorf("Expected %s, got %s", "unable to find missing, zero matches", err.Error()) 59 } 60 } 61 62 func TestNewFirewall(t *testing.T) { 63 client, server, _ := NewAdvancedClientForTesting([]ConfigAdvanceClientForTesting{ 64 { 65 Method: "POST", 66 Value: []ValueAdvanceClientForTesting{ 67 { 68 RequestBody: `{"name":"fw-mail","region":"LON1","network_id":"1234-5698-9874-98","create_rules":true}`, 69 URL: "/v2/firewalls", 70 ResponseBody: `{"id": "76cc107f-fbef-4e2b-b97f-f5d34f4075d3","name": "fw-mail","result": "success"}`, 71 }, 72 }, 73 }, 74 }) 75 defer server.Close() 76 77 CreateRules := true 78 firewallConfig := &FirewallConfig{ 79 Name: "fw-mail", 80 NetworkID: "1234-5698-9874-98", 81 Region: "LON1", 82 CreateRules: &CreateRules, 83 } 84 got, err := client.NewFirewall(firewallConfig) 85 if err != nil { 86 t.Errorf("Request returned an error: %s", err) 87 return 88 } 89 90 expected := &FirewallResult{ 91 ID: "76cc107f-fbef-4e2b-b97f-f5d34f4075d3", 92 Name: "fw-mail", 93 Result: "success", 94 } 95 96 if expected.ID != got.ID { 97 t.Errorf("Expected %s, got %s", expected.ID, got.ID) 98 } 99 100 if expected.Name != got.Name { 101 t.Errorf("Expected %s, got %s", expected.Name, got.Name) 102 } 103 104 if expected.Result != got.Result { 105 t.Errorf("Expected %s, got %s", expected.Result, got.Result) 106 } 107 } 108 109 func TestNewFirewallWithRules(t *testing.T) { 110 client, server, _ := NewAdvancedClientForTesting([]ConfigAdvanceClientForTesting{ 111 { 112 Method: "GET", 113 Value: []ValueAdvanceClientForTesting{ 114 { 115 RequestBody: ``, 116 URL: "/v2/firewalls", 117 ResponseBody: `[{"id":"76cc107f-fbef-4e2b-b97f-f5d34f4075d3","name":"fw-mail","account_id":"eaef1dd6-1cec-4d9c-8480-96452bd94dea","rules_count": 3,"instance_count": 1,"cluster_count": 1,"loadbalancer_count": 0,"default":"false","label":"www","network_id":"ef7cf1ab-ecee-407a-b7ac-e134614647e2","rules":[{"id":"9e0745f9-3dbb-48e6-b510-4163e4b6722d","protocol":"tcp","start_port":"1","cidr":["0.0.0.0/0"],"direction":"ingress","label":"All TCP ports open","end_port":"65535","action":"allow","ports":"1-65535"}]}]`, 118 }, 119 }, 120 }, 121 }) 122 defer server.Close() 123 124 got, err := client.FindFirewall("76cc107f-fbef-4e2b-b97f-f5d34f4075d3") 125 if err != nil { 126 t.Errorf("Request returned an error: %s", err) 127 return 128 } 129 130 expected := Firewall{ 131 ID: "76cc107f-fbef-4e2b-b97f-f5d34f4075d3", 132 Name: "fw-mail", 133 RulesCount: 3, 134 InstanceCount: 1, 135 ClusterCount: 1, 136 LoadBalancerCount: 0, 137 NetworkID: "ef7cf1ab-ecee-407a-b7ac-e134614647e2", 138 Rules: []FirewallRule{ 139 { 140 ID: "9e0745f9-3dbb-48e6-b510-4163e4b6722d", 141 Protocol: "tcp", 142 StartPort: "1", 143 EndPort: "65535", 144 Cidr: []string{"0.0.0.0/0"}, 145 Direction: "ingress", 146 Action: "allow", 147 Label: "All TCP ports open", 148 Ports: "1-65535", 149 }, 150 }, 151 } 152 153 if expected.ID != got.ID { 154 t.Errorf("Expected %s, got %s", expected.ID, got.ID) 155 } 156 157 if len(expected.Rules) != len(got.Rules) { 158 t.Errorf("Expected %d, got %d", len(expected.Rules), len(got.Rules)) 159 } 160 } 161 162 func TestRenameFirewall(t *testing.T) { 163 client, server, _ := NewClientForTesting(map[string]string{ 164 "/v2/firewalls/12346": `{"result": "success"}`, 165 }) 166 defer server.Close() 167 rename := &FirewallConfig{ 168 Name: "new_name", 169 } 170 got, err := client.RenameFirewall("12346", rename) 171 if err != nil { 172 t.Errorf("Request returned an error: %s", err) 173 return 174 } 175 176 expected := &SimpleResponse{Result: "success"} 177 if !reflect.DeepEqual(got, expected) { 178 t.Errorf("Expected %+v, got %+v", expected, got) 179 } 180 } 181 182 func TestDeleteFirewall(t *testing.T) { 183 client, server, _ := NewClientForTesting(map[string]string{ 184 "/v2/firewalls/12346": `{"result": "success"}`, 185 }) 186 defer server.Close() 187 got, err := client.DeleteFirewall("12346") 188 if err != nil { 189 t.Errorf("Request returned an error: %s", err) 190 return 191 } 192 193 expected := &SimpleResponse{Result: "success"} 194 if !reflect.DeepEqual(got, expected) { 195 t.Errorf("Expected %+v, got %+v", expected, got) 196 } 197 } 198 199 func TestNewFirewallRule(t *testing.T) { 200 client, server, _ := NewClientForTesting(map[string]string{ 201 "/v2/firewalls/78901/rules": `{ 202 "id": "123456", 203 "firewall_id": "78901", 204 "openstack_security_group_rule_id": null, 205 "protocol": "tcp", 206 "start_port": "443", 207 "end_port": "443", 208 "cidr": [ 209 "0.0.0.0/0" 210 ], 211 "direction": "ingress", 212 "action": "allow", 213 "label": null 214 }`, 215 }) 216 defer server.Close() 217 218 cfg := &FirewallRuleConfig{FirewallID: "78901", Protocol: "tcp", StartPort: "443", EndPort: "443", Cidr: []string{"0.0.0.0/0"}, Direction: "inbound", Label: "", Action: "allow"} 219 got, err := client.NewFirewallRule(cfg) 220 if err != nil { 221 t.Errorf("Request returned an error: %s", err) 222 return 223 } 224 225 expected := &FirewallRule{ 226 ID: "123456", 227 FirewallID: "78901", 228 Protocol: "tcp", 229 StartPort: "443", 230 EndPort: "443", 231 Cidr: []string{"0.0.0.0/0"}, 232 Direction: "ingress", 233 Action: "allow", 234 Label: "", 235 } 236 237 if expected.ID != got.ID { 238 t.Errorf("Expected %s, got %s", expected.ID, got.ID) 239 } 240 241 if expected.FirewallID != got.FirewallID { 242 t.Errorf("Expected %s, got %s", expected.FirewallID, got.FirewallID) 243 } 244 245 if expected.Protocol != got.Protocol { 246 t.Errorf("Expected %s, got %s", expected.Protocol, got.Protocol) 247 } 248 249 if expected.StartPort != got.StartPort { 250 t.Errorf("Expected %s, got %s", expected.StartPort, got.StartPort) 251 } 252 253 if expected.EndPort != got.EndPort { 254 t.Errorf("Expected %s, got %s", expected.EndPort, got.EndPort) 255 } 256 257 if !reflect.DeepEqual(expected.Cidr, got.Cidr) { 258 t.Errorf("Expected %q, got %q", expected.Cidr, got.Cidr) 259 } 260 261 if expected.Direction != got.Direction { 262 t.Errorf("Expected %s, got %s", expected.Direction, got.Direction) 263 } 264 265 if expected.Label != got.Label { 266 t.Errorf("Expected %s, got %s", expected.Label, got.Label) 267 } 268 } 269 270 func TestFindFirewallRule(t *testing.T) { 271 client, server, _ := NewClientForTesting(map[string]string{ 272 "/v2/firewalls/22/rules": `[{ 273 "id": "21", 274 "firewall_id": "22", 275 "openstack_security_group_rule_id": null, 276 "protocol": "tcp", 277 "start_port": "443", 278 "end_port": "443", 279 "cidr": [ 280 "0.0.0.0/0" 281 ], 282 "direction": "ingress", 283 "action": "allow", 284 "label": "My Rule" 285 },{ 286 "id": "22", 287 "firewall_id": "22", 288 "openstack_security_group_rule_id": null, 289 "protocol": "tcp", 290 "start_port": "80", 291 "end_port": "80", 292 "cidr": [ 293 "0.0.0.0/0" 294 ], 295 "direction": "ingress", 296 "action": "allow", 297 "label": "My Rule" 298 }]`, 299 }) 300 defer server.Close() 301 302 got, _ := client.FindFirewallRule("22", "21") 303 if got.ID != "21" { 304 t.Errorf("Expected %s, got %s", "1", got.ID) 305 } 306 307 got, _ = client.FindFirewallRule("22", "22") 308 if got.ID != "22" { 309 t.Errorf("Expected %s, got %s", "2", got.ID) 310 } 311 312 _, err := client.FindFirewallRule("22", "2") 313 if err.Error() != "MultipleMatchesError: unable to find 2 because there were multiple matches" { 314 t.Errorf("Expected %s, got %s", "unable to find 2 because there were multiple matches", err.Error()) 315 } 316 317 _, err = client.FindFirewallRule("22", "missing") 318 if err.Error() != "ZeroMatchesError: unable to find missing, zero matches" { 319 t.Errorf("Expected %s, got %s", "unable to find missing, zero matches", err.Error()) 320 } 321 } 322 323 func TestListFirewallRules(t *testing.T) { 324 client, server, _ := NewClientForTesting(map[string]string{ 325 "/v2/firewalls/22/rules": `[{ 326 "id": "1", 327 "firewall_id": "22", 328 "openstack_security_group_rule_id": null, 329 "protocol": "tcp", 330 "start_port": "443", 331 "end_port": "443", 332 "cidr": [ 333 "0.0.0.0/0" 334 ], 335 "direction": "ingress", 336 "action": "allow", 337 "label": "My Rule" 338 },{ 339 "id": "2", 340 "firewall_id": "22", 341 "openstack_security_group_rule_id": null, 342 "protocol": "tcp", 343 "start_port": "80", 344 "end_port": "80", 345 "cidr": [ 346 "0.0.0.0/0" 347 ], 348 "direction": "ingress", 349 "action": "allow", 350 "label": "My Rule" 351 }]`, 352 }) 353 defer server.Close() 354 got, err := client.ListFirewallRules("22") 355 356 if err != nil { 357 t.Errorf("Request returned an error: %s", err) 358 return 359 } 360 expected := []FirewallRule{{ID: "1", FirewallID: "22", Protocol: "tcp", StartPort: "443", EndPort: "443", Cidr: []string{"0.0.0.0/0"}, Direction: "ingress", Label: "My Rule", Action: "allow"}, {ID: "2", FirewallID: "22", Protocol: "tcp", StartPort: "80", EndPort: "80", Cidr: []string{"0.0.0.0/0"}, Direction: "ingress", Label: "My Rule", Action: "allow"}} 361 if !reflect.DeepEqual(got, expected) { 362 t.Errorf("Expected %+v, got %+v", expected, got) 363 } 364 } 365 366 func TestDeleteFirewallRule(t *testing.T) { 367 client, server, _ := NewClientForTesting(map[string]string{ 368 "/v2/firewalls/12346/rules/12345": `{"result": "success"}`, 369 }) 370 defer server.Close() 371 got, err := client.DeleteFirewallRule("12346", "12345") 372 if err != nil { 373 t.Errorf("Request returned an error: %s", err) 374 return 375 } 376 377 expected := &SimpleResponse{Result: "success"} 378 if !reflect.DeepEqual(got, expected) { 379 t.Errorf("Expected %+v, got %+v", expected, got) 380 } 381 }