Skip to content

Commit

Permalink
add firewall, firewall rule, firewall device unit tests
Browse files Browse the repository at this point in the history
  • Loading branch information
ykim-akamai committed Feb 11, 2025
1 parent 7ddf812 commit 7d548b4
Show file tree
Hide file tree
Showing 12 changed files with 843 additions and 0 deletions.
126 changes: 126 additions & 0 deletions test/unit/firewall_devices_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,126 @@
package unit

import (
"context"
"fmt"
"github.com/jarcoal/httpmock"
"github.com/linode/linodego"
"github.com/stretchr/testify/assert"
"testing"
)

func TestFirewallDevice_List(t *testing.T) {
fixtureData, err := fixtures.GetFixture("firewall_device_list")
assert.NoError(t, err)

var base ClientBaseCase
base.SetUp(t)
defer base.TearDown(t)

firewallID := 123

base.MockGet(formatMockAPIPath("networking/firewalls/%d/devices", firewallID), fixtureData)

firewallDevices, err := base.Client.ListFirewallDevices(context.Background(), firewallID, &linodego.ListOptions{})
assert.NoError(t, err)

assert.Equal(t, 2, len(firewallDevices))

for _, device := range firewallDevices {
assert.NotNil(t, device.Entity)
assert.NotEqual(t, 0, device.ID)

assert.NotNil(t, device.Created)
assert.NotNil(t, device.Updated)

switch device.Entity.Type {
case "linode":
assert.Equal(t, 123, device.Entity.ID)
assert.Equal(t, "my-linode", device.Entity.Label)
assert.Equal(t, "/v4/linode/instances/123", device.Entity.URL)
case "nodebalancer":
assert.Equal(t, 321, device.Entity.ID)
assert.Equal(t, "my-nodebalancer", device.Entity.Label)
assert.Equal(t, "/v4/nodebalancers/123", device.Entity.URL)
default:
t.Fatalf("Unexpected device type: %s", device.Entity.Type)
}
}
}

func TestFirewallDevice_Get(t *testing.T) {
fixtureData, err := fixtures.GetFixture("firewall_device_get")
assert.NoError(t, err)

var base ClientBaseCase
base.SetUp(t)
defer base.TearDown(t)

firewallID := 123

deviceID := 123

base.MockGet(formatMockAPIPath("networking/firewalls/%d/devices/%d", firewallID, deviceID), fixtureData)

firewallDevice, err := base.Client.GetFirewallDevice(context.Background(), firewallID, deviceID)
assert.NoError(t, err)
assert.NotNil(t, firewallDevice)

assert.Equal(t, deviceID, firewallDevice.ID)
assert.NotNil(t, firewallDevice.Entity)

assert.Equal(t, 123, firewallDevice.Entity.ID)
assert.Equal(t, "my-linode", firewallDevice.Entity.Label)
assert.Equal(t, linodego.FirewallDeviceType("linode"), firewallDevice.Entity.Type)
assert.Equal(t, "/v4/linode/instances/123", firewallDevice.Entity.URL)

assert.NotNil(t, firewallDevice.Created)
assert.NotNil(t, firewallDevice.Updated)
}

func TestFirewallDevice_Create(t *testing.T) {
fixtureData, err := fixtures.GetFixture("firewall_device_create")
assert.NoError(t, err)

var base ClientBaseCase
base.SetUp(t)
defer base.TearDown(t)

firewallID := 123

requestData := linodego.FirewallDeviceCreateOptions{
ID: 123,
Type: "linode",
}

base.MockPost(formatMockAPIPath("networking/firewalls/%d/devices", firewallID), fixtureData)

firewallDevice, err := base.Client.CreateFirewallDevice(context.Background(), firewallID, requestData)
assert.NoError(t, err)
assert.NotNil(t, firewallDevice)

assert.NotNil(t, firewallDevice.Entity)

assert.Equal(t, 123, firewallDevice.Entity.ID)
assert.Equal(t, "my-linode", firewallDevice.Entity.Label)
assert.Equal(t, linodego.FirewallDeviceType("linode"), firewallDevice.Entity.Type)
assert.Equal(t, "/v4/linode/instances/123", firewallDevice.Entity.URL)

assert.NotNil(t, firewallDevice.Created)
assert.NotNil(t, firewallDevice.Updated)
}

func TestFirewallDevice_Delete(t *testing.T) {
client := createMockClient(t)

firewallID := 123

deviceID := 123

httpmock.RegisterRegexpResponder("DELETE", mockRequestURL(t, fmt.Sprintf("networking/firewalls/%d/devices/%d", firewallID, deviceID)),
httpmock.NewStringResponder(200, "{}"))

if err := client.DeleteFirewallDevice(context.Background(), firewallID, deviceID); err != nil {
t.Fatal(err)
}
}
112 changes: 112 additions & 0 deletions test/unit/firewall_rules_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
package unit

import (
"context"
"github.com/linode/linodego"
"github.com/stretchr/testify/assert"
"testing"
)

func TestFirewallRule_Get(t *testing.T) {
fixtureData, err := fixtures.GetFixture("firewall_rule_get")
assert.NoError(t, err)

var base ClientBaseCase
base.SetUp(t)
defer base.TearDown(t)

firewallID := 123
base.MockGet(formatMockAPIPath("networking/firewalls/%d/rules", firewallID), fixtureData)

firewallRule, err := base.Client.GetFirewallRules(context.Background(), firewallID)
assert.NoError(t, err)
assert.NotNil(t, firewallRule)

assert.Equal(t, "DROP", firewallRule.InboundPolicy)
assert.Equal(t, 1, len(firewallRule.Inbound))
assert.Equal(t, "ACCEPT", firewallRule.Inbound[0].Action)
assert.Equal(t, "firewallrule123", firewallRule.Inbound[0].Label)
assert.Equal(t, "An example firewall rule description.", firewallRule.Inbound[0].Description)
assert.Equal(t, "22-24, 80, 443", firewallRule.Inbound[0].Ports)
assert.Equal(t, linodego.NetworkProtocol("TCP"), firewallRule.Inbound[0].Protocol)
assert.ElementsMatch(t, []string{"192.0.2.0/24", "198.51.100.2/32"}, *firewallRule.Inbound[0].Addresses.IPv4)
assert.ElementsMatch(t, []string{"2001:DB8::/128"}, *firewallRule.Inbound[0].Addresses.IPv6)

assert.Equal(t, "DROP", firewallRule.OutboundPolicy)
assert.Equal(t, 1, len(firewallRule.Outbound))
assert.Equal(t, "ACCEPT", firewallRule.Outbound[0].Action)
assert.Equal(t, "firewallrule123", firewallRule.Outbound[0].Label)
assert.Equal(t, "An example firewall rule description.", firewallRule.Outbound[0].Description)
assert.Equal(t, "22-24, 80, 443", firewallRule.Outbound[0].Ports)
assert.Equal(t, linodego.NetworkProtocol("TCP"), firewallRule.Outbound[0].Protocol)
assert.ElementsMatch(t, []string{"192.0.2.0/24", "198.51.100.2/32"}, *firewallRule.Outbound[0].Addresses.IPv4)
assert.ElementsMatch(t, []string{"2001:DB8::/128"}, *firewallRule.Outbound[0].Addresses.IPv6)
}

func TestFirewallRule_Update(t *testing.T) {
fixtureData, err := fixtures.GetFixture("firewall_rule_update")
assert.NoError(t, err)

var base ClientBaseCase
base.SetUp(t)
defer base.TearDown(t)

firewallID := 123
base.MockPut(formatMockAPIPath("networking/firewalls/%d/rules", firewallID), fixtureData)

requestData := linodego.FirewallRuleSet{
Inbound: []linodego.FirewallRule{
{
Action: "ACCEPT",
Label: "firewallrule123",
Description: "An example firewall rule description.",
Ports: "22-24, 80, 443",
Protocol: "TCP",
Addresses: linodego.NetworkAddresses{
IPv4: &[]string{"192.0.2.0/24", "198.51.100.2/32"},
IPv6: &[]string{"2001:DB8::/128"},
},
},
},
InboundPolicy: "DROP",
Outbound: []linodego.FirewallRule{
{
Action: "ACCEPT",
Label: "firewallrule123",
Description: "An example firewall rule description.",
Ports: "22-24, 80, 443",
Protocol: "TCP",
Addresses: linodego.NetworkAddresses{
IPv4: &[]string{"192.0.2.0/24", "198.51.100.2/32"},
IPv6: &[]string{"2001:DB8::/128"},
},
},
},
OutboundPolicy: "DROP",
}

firewallRule, err := base.Client.UpdateFirewallRules(context.Background(), firewallID, requestData)

assert.NoError(t, err)
assert.NotNil(t, firewallRule)

assert.Equal(t, "DROP", firewallRule.InboundPolicy)
assert.Equal(t, 1, len(firewallRule.Inbound))
assert.Equal(t, "ACCEPT", firewallRule.Inbound[0].Action)
assert.Equal(t, "firewallrule123", firewallRule.Inbound[0].Label)
assert.Equal(t, "An example firewall rule description.", firewallRule.Inbound[0].Description)
assert.Equal(t, "22-24, 80, 443", firewallRule.Inbound[0].Ports)
assert.Equal(t, linodego.NetworkProtocol("TCP"), firewallRule.Inbound[0].Protocol)
assert.ElementsMatch(t, []string{"192.0.2.0/24", "198.51.100.2/32"}, *firewallRule.Inbound[0].Addresses.IPv4)
assert.ElementsMatch(t, []string{"2001:DB8::/128"}, *firewallRule.Inbound[0].Addresses.IPv6)

assert.Equal(t, "DROP", firewallRule.OutboundPolicy)
assert.Equal(t, 1, len(firewallRule.Outbound))
assert.Equal(t, "ACCEPT", firewallRule.Outbound[0].Action)
assert.Equal(t, "firewallrule123", firewallRule.Outbound[0].Label)
assert.Equal(t, "An example firewall rule description.", firewallRule.Outbound[0].Description)
assert.Equal(t, "22-24, 80, 443", firewallRule.Outbound[0].Ports)
assert.Equal(t, linodego.NetworkProtocol("TCP"), firewallRule.Outbound[0].Protocol)
assert.ElementsMatch(t, []string{"192.0.2.0/24", "198.51.100.2/32"}, *firewallRule.Outbound[0].Addresses.IPv4)
assert.ElementsMatch(t, []string{"2001:DB8::/128"}, *firewallRule.Outbound[0].Addresses.IPv6)
}
Loading

0 comments on commit 7d548b4

Please sign in to comment.