Skip to content

Commit 33c0c1d

Browse files
authored
Add firewall, firewall rule, and firewall device unit tests (#679)
* add firewall, firewall rule, firewall device unit tests * fixing git diff * lint
1 parent a11eecf commit 33c0c1d

13 files changed

+847
-1
lines changed

test/unit/firewall_devices_test.go

Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
1+
package unit
2+
3+
import (
4+
"context"
5+
"fmt"
6+
"testing"
7+
8+
"github.com/jarcoal/httpmock"
9+
"github.com/linode/linodego"
10+
"github.com/stretchr/testify/assert"
11+
)
12+
13+
func TestFirewallDevice_List(t *testing.T) {
14+
fixtureData, err := fixtures.GetFixture("firewall_device_list")
15+
assert.NoError(t, err)
16+
17+
var base ClientBaseCase
18+
base.SetUp(t)
19+
defer base.TearDown(t)
20+
21+
firewallID := 123
22+
23+
base.MockGet(formatMockAPIPath("networking/firewalls/%d/devices", firewallID), fixtureData)
24+
25+
firewallDevices, err := base.Client.ListFirewallDevices(context.Background(), firewallID, &linodego.ListOptions{})
26+
assert.NoError(t, err)
27+
28+
assert.Equal(t, 2, len(firewallDevices))
29+
30+
for _, device := range firewallDevices {
31+
assert.NotNil(t, device.Entity)
32+
assert.NotEqual(t, 0, device.ID)
33+
34+
assert.NotNil(t, device.Created)
35+
assert.NotNil(t, device.Updated)
36+
37+
switch device.Entity.Type {
38+
case "linode":
39+
assert.Equal(t, 123, device.Entity.ID)
40+
assert.Equal(t, "my-linode", device.Entity.Label)
41+
assert.Equal(t, "/v4/linode/instances/123", device.Entity.URL)
42+
case "nodebalancer":
43+
assert.Equal(t, 321, device.Entity.ID)
44+
assert.Equal(t, "my-nodebalancer", device.Entity.Label)
45+
assert.Equal(t, "/v4/nodebalancers/123", device.Entity.URL)
46+
default:
47+
t.Fatalf("Unexpected device type: %s", device.Entity.Type)
48+
}
49+
}
50+
}
51+
52+
func TestFirewallDevice_Get(t *testing.T) {
53+
fixtureData, err := fixtures.GetFixture("firewall_device_get")
54+
assert.NoError(t, err)
55+
56+
var base ClientBaseCase
57+
base.SetUp(t)
58+
defer base.TearDown(t)
59+
60+
firewallID := 123
61+
62+
deviceID := 123
63+
64+
base.MockGet(formatMockAPIPath("networking/firewalls/%d/devices/%d", firewallID, deviceID), fixtureData)
65+
66+
firewallDevice, err := base.Client.GetFirewallDevice(context.Background(), firewallID, deviceID)
67+
assert.NoError(t, err)
68+
assert.NotNil(t, firewallDevice)
69+
70+
assert.Equal(t, deviceID, firewallDevice.ID)
71+
assert.NotNil(t, firewallDevice.Entity)
72+
73+
assert.Equal(t, 123, firewallDevice.Entity.ID)
74+
assert.Equal(t, "my-linode", firewallDevice.Entity.Label)
75+
assert.Equal(t, linodego.FirewallDeviceType("linode"), firewallDevice.Entity.Type)
76+
assert.Equal(t, "/v4/linode/instances/123", firewallDevice.Entity.URL)
77+
78+
assert.NotNil(t, firewallDevice.Created)
79+
assert.NotNil(t, firewallDevice.Updated)
80+
}
81+
82+
func TestFirewallDevice_Create(t *testing.T) {
83+
fixtureData, err := fixtures.GetFixture("firewall_device_create")
84+
assert.NoError(t, err)
85+
86+
var base ClientBaseCase
87+
base.SetUp(t)
88+
defer base.TearDown(t)
89+
90+
firewallID := 123
91+
92+
requestData := linodego.FirewallDeviceCreateOptions{
93+
ID: 123,
94+
Type: "linode",
95+
}
96+
97+
base.MockPost(formatMockAPIPath("networking/firewalls/%d/devices", firewallID), fixtureData)
98+
99+
firewallDevice, err := base.Client.CreateFirewallDevice(context.Background(), firewallID, requestData)
100+
assert.NoError(t, err)
101+
assert.NotNil(t, firewallDevice)
102+
103+
assert.NotNil(t, firewallDevice.Entity)
104+
105+
assert.Equal(t, 123, firewallDevice.Entity.ID)
106+
assert.Equal(t, "my-linode", firewallDevice.Entity.Label)
107+
assert.Equal(t, linodego.FirewallDeviceType("linode"), firewallDevice.Entity.Type)
108+
assert.Equal(t, "/v4/linode/instances/123", firewallDevice.Entity.URL)
109+
110+
assert.NotNil(t, firewallDevice.Created)
111+
assert.NotNil(t, firewallDevice.Updated)
112+
}
113+
114+
func TestFirewallDevice_Delete(t *testing.T) {
115+
client := createMockClient(t)
116+
117+
firewallID := 123
118+
119+
deviceID := 123
120+
121+
httpmock.RegisterRegexpResponder("DELETE", mockRequestURL(t, fmt.Sprintf("networking/firewalls/%d/devices/%d", firewallID, deviceID)),
122+
httpmock.NewStringResponder(200, "{}"))
123+
124+
if err := client.DeleteFirewallDevice(context.Background(), firewallID, deviceID); err != nil {
125+
t.Fatal(err)
126+
}
127+
}

test/unit/firewall_rules_test.go

Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
package unit
2+
3+
import (
4+
"context"
5+
"testing"
6+
7+
"github.com/linode/linodego"
8+
"github.com/stretchr/testify/assert"
9+
)
10+
11+
func TestFirewallRule_Get(t *testing.T) {
12+
fixtureData, err := fixtures.GetFixture("firewall_rule_get")
13+
assert.NoError(t, err)
14+
15+
var base ClientBaseCase
16+
base.SetUp(t)
17+
defer base.TearDown(t)
18+
19+
firewallID := 123
20+
base.MockGet(formatMockAPIPath("networking/firewalls/%d/rules", firewallID), fixtureData)
21+
22+
firewallRule, err := base.Client.GetFirewallRules(context.Background(), firewallID)
23+
assert.NoError(t, err)
24+
assert.NotNil(t, firewallRule)
25+
26+
assert.Equal(t, "DROP", firewallRule.InboundPolicy)
27+
assert.Equal(t, 1, len(firewallRule.Inbound))
28+
assert.Equal(t, "ACCEPT", firewallRule.Inbound[0].Action)
29+
assert.Equal(t, "firewallrule123", firewallRule.Inbound[0].Label)
30+
assert.Equal(t, "An example firewall rule description.", firewallRule.Inbound[0].Description)
31+
assert.Equal(t, "22-24, 80, 443", firewallRule.Inbound[0].Ports)
32+
assert.Equal(t, linodego.NetworkProtocol("TCP"), firewallRule.Inbound[0].Protocol)
33+
assert.ElementsMatch(t, []string{"192.0.2.0/24", "198.51.100.2/32"}, *firewallRule.Inbound[0].Addresses.IPv4)
34+
assert.ElementsMatch(t, []string{"2001:DB8::/128"}, *firewallRule.Inbound[0].Addresses.IPv6)
35+
36+
assert.Equal(t, "DROP", firewallRule.OutboundPolicy)
37+
assert.Equal(t, 1, len(firewallRule.Outbound))
38+
assert.Equal(t, "ACCEPT", firewallRule.Outbound[0].Action)
39+
assert.Equal(t, "firewallrule123", firewallRule.Outbound[0].Label)
40+
assert.Equal(t, "An example firewall rule description.", firewallRule.Outbound[0].Description)
41+
assert.Equal(t, "22-24, 80, 443", firewallRule.Outbound[0].Ports)
42+
assert.Equal(t, linodego.NetworkProtocol("TCP"), firewallRule.Outbound[0].Protocol)
43+
assert.ElementsMatch(t, []string{"192.0.2.0/24", "198.51.100.2/32"}, *firewallRule.Outbound[0].Addresses.IPv4)
44+
assert.ElementsMatch(t, []string{"2001:DB8::/128"}, *firewallRule.Outbound[0].Addresses.IPv6)
45+
}
46+
47+
func TestFirewallRule_Update(t *testing.T) {
48+
fixtureData, err := fixtures.GetFixture("firewall_rule_update")
49+
assert.NoError(t, err)
50+
51+
var base ClientBaseCase
52+
base.SetUp(t)
53+
defer base.TearDown(t)
54+
55+
firewallID := 123
56+
base.MockPut(formatMockAPIPath("networking/firewalls/%d/rules", firewallID), fixtureData)
57+
58+
requestData := linodego.FirewallRuleSet{
59+
Inbound: []linodego.FirewallRule{
60+
{
61+
Action: "ACCEPT",
62+
Label: "firewallrule123",
63+
Description: "An example firewall rule description.",
64+
Ports: "22-24, 80, 443",
65+
Protocol: "TCP",
66+
Addresses: linodego.NetworkAddresses{
67+
IPv4: &[]string{"192.0.2.0/24", "198.51.100.2/32"},
68+
IPv6: &[]string{"2001:DB8::/128"},
69+
},
70+
},
71+
},
72+
InboundPolicy: "DROP",
73+
Outbound: []linodego.FirewallRule{
74+
{
75+
Action: "ACCEPT",
76+
Label: "firewallrule123",
77+
Description: "An example firewall rule description.",
78+
Ports: "22-24, 80, 443",
79+
Protocol: "TCP",
80+
Addresses: linodego.NetworkAddresses{
81+
IPv4: &[]string{"192.0.2.0/24", "198.51.100.2/32"},
82+
IPv6: &[]string{"2001:DB8::/128"},
83+
},
84+
},
85+
},
86+
OutboundPolicy: "DROP",
87+
}
88+
89+
firewallRule, err := base.Client.UpdateFirewallRules(context.Background(), firewallID, requestData)
90+
91+
assert.NoError(t, err)
92+
assert.NotNil(t, firewallRule)
93+
94+
assert.Equal(t, "DROP", firewallRule.InboundPolicy)
95+
assert.Equal(t, 1, len(firewallRule.Inbound))
96+
assert.Equal(t, "ACCEPT", firewallRule.Inbound[0].Action)
97+
assert.Equal(t, "firewallrule123", firewallRule.Inbound[0].Label)
98+
assert.Equal(t, "An example firewall rule description.", firewallRule.Inbound[0].Description)
99+
assert.Equal(t, "22-24, 80, 443", firewallRule.Inbound[0].Ports)
100+
assert.Equal(t, linodego.NetworkProtocol("TCP"), firewallRule.Inbound[0].Protocol)
101+
assert.ElementsMatch(t, []string{"192.0.2.0/24", "198.51.100.2/32"}, *firewallRule.Inbound[0].Addresses.IPv4)
102+
assert.ElementsMatch(t, []string{"2001:DB8::/128"}, *firewallRule.Inbound[0].Addresses.IPv6)
103+
104+
assert.Equal(t, "DROP", firewallRule.OutboundPolicy)
105+
assert.Equal(t, 1, len(firewallRule.Outbound))
106+
assert.Equal(t, "ACCEPT", firewallRule.Outbound[0].Action)
107+
assert.Equal(t, "firewallrule123", firewallRule.Outbound[0].Label)
108+
assert.Equal(t, "An example firewall rule description.", firewallRule.Outbound[0].Description)
109+
assert.Equal(t, "22-24, 80, 443", firewallRule.Outbound[0].Ports)
110+
assert.Equal(t, linodego.NetworkProtocol("TCP"), firewallRule.Outbound[0].Protocol)
111+
assert.ElementsMatch(t, []string{"192.0.2.0/24", "198.51.100.2/32"}, *firewallRule.Outbound[0].Addresses.IPv4)
112+
assert.ElementsMatch(t, []string{"2001:DB8::/128"}, *firewallRule.Outbound[0].Addresses.IPv6)
113+
}

0 commit comments

Comments
 (0)