Skip to content

Commit 8e3edd7

Browse files
committed
Test IP public/private mapping
1 parent 8bd57c3 commit 8e3edd7

1 file changed

Lines changed: 54 additions & 46 deletions

File tree

cloud/linode/instances_test.go

Lines changed: 54 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package linode
33
import (
44
"context"
55
"errors"
6+
"fmt"
67
"net"
78
"net/http"
89
"strconv"
@@ -128,20 +129,6 @@ func TestMetadataRetrieval(t *testing.T) {
128129
assert.Nil(t, meta)
129130
})
130131

131-
t.Run("errors when linode does not have any ips", func(t *testing.T) {
132-
id := 29392
133-
name := "an-instance"
134-
node := nodeWithName(name)
135-
filter := linodeFilterListOptions(name)
136-
client.EXPECT().ListInstances(gomock.Any(), filter).Times(1).Return([]linodego.Instance{
137-
{ID: id, Label: name},
138-
}, nil)
139-
140-
meta, err := instances.InstanceMetadata(ctx, node)
141-
assert.Error(t, err, instanceNoIPAddressesError{id})
142-
assert.Nil(t, meta)
143-
})
144-
145132
t.Run("should return data when linode is found (by name)", func(t *testing.T) {
146133
id := 123
147134
name := "mock-instance"
@@ -175,39 +162,60 @@ func TestMetadataRetrieval(t *testing.T) {
175162
})
176163
})
177164

178-
t.Run("should return addresses when linode is found (by provider)", func(t *testing.T) {
179-
id := 192910
180-
name := "my-instance"
181-
providerID := providerIDPrefix + strconv.Itoa(id)
182-
node := nodeWithProviderID(providerID)
183-
publicIPv4 := net.ParseIP("32.74.121.25")
184-
privateIPv4 := net.ParseIP("192.168.121.42")
185-
linodeType := "g6-standard-1"
186-
region := "us-east"
187-
client.EXPECT().GetInstance(gomock.Any(), id).Times(1).Return(&linodego.Instance{
188-
ID: id, Label: name, Type: linodeType, Region: region, IPv4: []*net.IP{&publicIPv4, &privateIPv4},
189-
}, nil)
190-
191-
meta, err := instances.InstanceMetadata(ctx, node)
192-
193-
assert.NoError(t, err)
194-
assert.Equal(t, region, meta.Region)
195-
assert.Equal(t, linodeType, meta.InstanceType)
196-
assert.Equal(t, meta.NodeAddresses, []v1.NodeAddress{
197-
{
198-
Type: v1.NodeHostName,
199-
Address: name,
200-
},
201-
{
202-
Type: v1.NodeExternalIP,
203-
Address: publicIPv4.String(),
204-
},
205-
{
206-
Type: v1.NodeInternalIP,
207-
Address: privateIPv4.String(),
208-
},
165+
ipTests := []struct {
166+
name string
167+
inputIPs []string
168+
outputAddresses []v1.NodeAddress
169+
expectedErr error
170+
}{
171+
{"no IPs", nil, nil, instanceNoIPAddressesError{192910}},
172+
{"one public, one private", []string{"32.74.121.25", "192.168.121.42"},
173+
[]v1.NodeAddress{{Type: v1.NodeExternalIP, Address: "32.74.121.25"}, {Type: v1.NodeInternalIP, Address: "192.168.121.42"}}, nil},
174+
{"one public, no private", []string{"32.74.121.25"},
175+
[]v1.NodeAddress{{Type: v1.NodeExternalIP, Address: "32.74.121.25"}}, nil},
176+
{"one private, no public", []string{"192.168.121.42"},
177+
[]v1.NodeAddress{{Type: v1.NodeInternalIP, Address: "192.168.121.42"}}, nil},
178+
{"two public addresses", []string{"32.74.121.25", "32.74.121.22"},
179+
[]v1.NodeAddress{{Type: v1.NodeExternalIP, Address: "32.74.121.25"}, {Type: v1.NodeExternalIP, Address: "32.74.121.22"}}, nil},
180+
{"two private addresses", []string{"192.168.121.42", "10.0.2.15"},
181+
[]v1.NodeAddress{{Type: v1.NodeInternalIP, Address: "192.168.121.42"}, {Type: v1.NodeInternalIP, Address: "10.0.2.15"}}, nil},
182+
}
183+
184+
for _, test := range ipTests {
185+
t.Run(fmt.Sprintf("addresses are retrieved - %s", test.name), func(t *testing.T) {
186+
id := 192910
187+
name := "my-instance"
188+
providerID := providerIDPrefix + strconv.Itoa(id)
189+
node := nodeWithProviderID(providerID)
190+
191+
ips := make([]*net.IP, 0, len(test.inputIPs))
192+
for _, ip := range test.inputIPs {
193+
parsed := net.ParseIP(ip)
194+
if parsed == nil {
195+
t.Fatalf("cannot parse %v as an ipv4", ip)
196+
}
197+
ips = append(ips, &parsed)
198+
}
199+
200+
linodeType := "g6-standard-1"
201+
region := "us-east"
202+
client.EXPECT().GetInstance(gomock.Any(), id).Times(1).Return(&linodego.Instance{
203+
ID: id, Label: name, Type: linodeType, Region: region, IPv4: ips,
204+
}, nil)
205+
206+
meta, err := instances.InstanceMetadata(ctx, node)
207+
208+
assert.Equal(t, err, test.expectedErr)
209+
if test.expectedErr == nil {
210+
assert.Equal(t, region, meta.Region)
211+
assert.Equal(t, linodeType, meta.InstanceType)
212+
addresses := append([]v1.NodeAddress{
213+
{Type: v1.NodeHostName, Address: name},
214+
}, test.outputAddresses...)
215+
assert.Equal(t, meta.NodeAddresses, addresses)
216+
}
209217
})
210-
})
218+
}
211219
}
212220

213221
func TestMalformedProviders(t *testing.T) {

0 commit comments

Comments
 (0)