@@ -3,6 +3,7 @@ package linode
33import (
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
213221func TestMalformedProviders (t * testing.T ) {
0 commit comments