1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150
|
package unit
import (
"context"
"testing"
"github.com/linode/linodego"
"github.com/stretchr/testify/assert"
)
func TestNodeBalancer_Create(t *testing.T) {
tests := []struct {
name string
createOpts linodego.NodeBalancerCreateOptions
fixture string
expectIPv4 string
}{
{
name: "basic creation",
createOpts: linodego.NodeBalancerCreateOptions{
Label: String("Test NodeBalancer"),
Region: "us-east",
Tags: []string{"test", "example"},
},
fixture: "nodebalancer_create",
expectIPv4: "192.0.2.1", // whatever is in the fixture
},
{
name: "creation with specific IPv4",
createOpts: linodego.NodeBalancerCreateOptions{
Label: String("Test NodeBalancer IPv4"),
Region: "us-east",
Tags: []string{"test", "example"},
IPv4: String("192.0.2.2"),
},
fixture: "nodebalancer_create_with_ipv4",
expectIPv4: "192.0.2.2",
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
fixtureData, err := fixtures.GetFixture(tt.fixture)
assert.NoError(t, err)
var base ClientBaseCase
base.SetUp(t)
defer base.TearDown(t)
base.MockPost("nodebalancers", fixtureData)
nodebalancer, err := base.Client.CreateNodeBalancer(context.Background(), tt.createOpts)
assert.NoError(t, err)
assert.Equal(t, *tt.createOpts.Label, *nodebalancer.Label)
assert.Equal(t, tt.createOpts.Region, nodebalancer.Region)
assert.Equal(t, tt.createOpts.Tags, nodebalancer.Tags)
assert.Equal(t, tt.expectIPv4, *nodebalancer.IPv4)
})
}
}
// Helper function if not already defined
func String(s string) *string {
return &s
}
func TestNodeBalancer_Get(t *testing.T) {
fixtureData, err := fixtures.GetFixture("nodebalancer_get")
assert.NoError(t, err)
var base ClientBaseCase
base.SetUp(t)
defer base.TearDown(t)
// Mock the GET request with the fixture response
base.MockGet("nodebalancers/123", fixtureData)
nodebalancer, err := base.Client.GetNodeBalancer(context.Background(), 123)
assert.NoError(t, err)
assert.Equal(t, 123, nodebalancer.ID, "Expected NodeBalancer ID to match")
assert.Equal(t, "Existing NodeBalancer", *nodebalancer.Label, "Expected NodeBalancer label to match")
assert.Equal(t, "us-west", nodebalancer.Region, "Expected NodeBalancer region to match")
}
func TestNodeBalancer_List(t *testing.T) {
fixtureData, err := fixtures.GetFixture("nodebalancers_list")
assert.NoError(t, err)
var base ClientBaseCase
base.SetUp(t)
defer base.TearDown(t)
// Mock the GET request with the fixture response
base.MockGet("nodebalancers", fixtureData)
nodebalancers, err := base.Client.ListNodeBalancers(context.Background(), &linodego.ListOptions{})
assert.NoError(t, err)
assert.Len(t, nodebalancers, 2, "Expected two NodeBalancers in the list")
// Verify details of the first NodeBalancer
assert.Equal(t, 123, nodebalancers[0].ID, "Expected first NodeBalancer ID to match")
assert.Equal(t, "NodeBalancer A", *nodebalancers[0].Label, "Expected first NodeBalancer label to match")
assert.Equal(t, "us-east", nodebalancers[0].Region, "Expected first NodeBalancer region to match")
assert.Equal(t, []string{"tag1", "tag2"}, nodebalancers[0].Tags, "Expected first NodeBalancer tags to match")
// Verify details of the second NodeBalancer
assert.Equal(t, 456, nodebalancers[1].ID, "Expected second NodeBalancer ID to match")
assert.Equal(t, "NodeBalancer B", *nodebalancers[1].Label, "Expected second NodeBalancer label to match")
assert.Equal(t, "us-west", nodebalancers[1].Region, "Expected second NodeBalancer region to match")
assert.Equal(t, []string{"tag3"}, nodebalancers[1].Tags, "Expected second NodeBalancer tags to match")
}
func TestNodeBalancer_Update(t *testing.T) {
fixtureData, err := fixtures.GetFixture("nodebalancer_update")
assert.NoError(t, err)
var base ClientBaseCase
base.SetUp(t)
defer base.TearDown(t)
// Mock the PUT request with the fixture response
base.MockPut("nodebalancers/123", fixtureData)
label := "Updated NodeBalancer"
updateOpts := linodego.NodeBalancerUpdateOptions{
Label: &label,
Tags: &[]string{"updated", "production"},
}
nodebalancer, err := base.Client.UpdateNodeBalancer(context.Background(), 123, updateOpts)
assert.NoError(t, err)
assert.Equal(t, 456, nodebalancer.ID)
assert.Equal(t, "Updated NodeBalancer", *nodebalancer.Label)
assert.Equal(t, []string{"updated", "production"}, nodebalancer.Tags)
}
func TestNodeBalancer_Delete(t *testing.T) {
var base ClientBaseCase
base.SetUp(t)
defer base.TearDown(t)
// Mock the DELETE request
base.MockDelete("nodebalancers/123", nil)
err := base.Client.DeleteNodeBalancer(context.Background(), 123)
assert.NoError(t, err, "Expected no error when deleting NodeBalancer")
}
|