Skip to content

Commit

Permalink
fix(sc-105769): add unittests on instances.NodeAddressesByProviderID
Browse files Browse the repository at this point in the history
instance.IPv6Enabled case was not covered nor instance.PrivateNetworkIDs

It's now solved
  • Loading branch information
nerzhul committed Sep 23, 2024
1 parent b321f7f commit ea27995
Show file tree
Hide file tree
Showing 2 changed files with 107 additions and 0 deletions.
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -15,3 +15,6 @@ test/**/id_*
test/**/nlb_service_*
*.log
*.pid

# vscode
__debug_bin*
104 changes: 104 additions & 0 deletions exoscale/instances_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import (
"k8s.io/apimachinery/pkg/types"
"k8s.io/client-go/kubernetes/fake"
cloudprovider "k8s.io/cloud-provider"
cloudproviderapi "k8s.io/cloud-provider/api"

egoscale "github.com/exoscale/egoscale/v2"
exoapi "github.com/exoscale/egoscale/v2/api"
Expand All @@ -20,6 +21,7 @@ var (
testInstanceID = new(exoscaleCCMTestSuite).randomID()
testInstanceName = new(exoscaleCCMTestSuite).randomString(10)
testInstancePublicIPv4 = "1.2.3.4"
testInstancePrivateIPv4 = "10.0.0.1"
testInstancePublicIPv6 = "fd00::123:4"
testInstancePublicIPv4P = net.ParseIP(testInstancePublicIPv4)
testInstancePublicIPv6P = net.ParseIP(testInstancePublicIPv6)
Expand Down Expand Up @@ -167,6 +169,108 @@ func (ts *exoscaleCCMTestSuite) TestNodeAddressesByProviderID() {
ts.Require().Equal(expected, actual)
}

func (ts *exoscaleCCMTestSuite) TestNodeAddressesByProviderID_WithIPV6Enabled() {
ts.p.client.(*exoscaleClientMock).
On("GetInstance", ts.p.ctx, ts.p.zone, testInstanceID).
Return(
&egoscale.Instance{
ID: &testInstanceID,
Name: &testInstanceName,
PublicIPAddress: &testInstancePublicIPv4P,
IPv6Enabled: ptr.To(true),
IPv6Address: &testInstancePublicIPv6P,
},
nil,
)

ts.p.kclient = fake.NewSimpleClientset(&v1.Node{
TypeMeta: metav1.TypeMeta{
Kind: "Node",
APIVersion: "v1",
},
ObjectMeta: metav1.ObjectMeta{
Name: testInstanceName,
},
Status: v1.NodeStatus{
NodeInfo: v1.NodeSystemInfo{
SystemUUID: testInstanceID,
},
},
})

expected := []v1.NodeAddress{
{
Type: v1.NodeHostName,
Address: testInstanceName,
},
{
Type: v1.NodeExternalIP,
Address: testInstancePublicIPv4,
},
{
Type: v1.NodeExternalIP,
Address: testInstancePublicIPv6,
},
}

actual, err := ts.p.instances.NodeAddressesByProviderID(ts.p.ctx, providerPrefix+testInstanceID)
ts.Require().NoError(err)
ts.Require().Equal(expected, actual)
}

func (ts *exoscaleCCMTestSuite) TestNodeAddressesByProviderID_WithPrivateNetworkIDs() {
ts.p.client.(*exoscaleClientMock).
On("GetInstance", ts.p.ctx, ts.p.zone, testInstanceID).
Return(
&egoscale.Instance{
ID: &testInstanceID,
Name: &testInstanceName,
PublicIPAddress: &testInstancePublicIPv4P,
PrivateNetworkIDs: &[]string{
new(exoscaleCCMTestSuite).randomID(),
},
},
nil,
)

ts.p.kclient = fake.NewSimpleClientset(&v1.Node{
TypeMeta: metav1.TypeMeta{
Kind: "Node",
APIVersion: "v1",
},
ObjectMeta: metav1.ObjectMeta{
Name: testInstanceName,
Annotations: map[string]string{
cloudproviderapi.AnnotationAlphaProvidedIPAddr: testInstancePrivateIPv4,
},
},
Status: v1.NodeStatus{
NodeInfo: v1.NodeSystemInfo{
SystemUUID: testInstanceID,
},
},
})

expected := []v1.NodeAddress{
{
Type: v1.NodeHostName,
Address: testInstanceName,
},
{
Type: v1.NodeExternalIP,
Address: testInstancePublicIPv4,
},
{
Type: v1.NodeInternalIP,
Address: testInstancePrivateIPv4,
},
}

actual, err := ts.p.instances.NodeAddressesByProviderID(ts.p.ctx, providerPrefix+testInstanceID)
ts.Require().NoError(err)
ts.Require().Equal(expected, actual)
}

func (ts *exoscaleCCMTestSuite) TestInstanceID() {
ts.p.kclient = fake.NewSimpleClientset(&v1.Node{
TypeMeta: metav1.TypeMeta{
Expand Down

0 comments on commit ea27995

Please sign in to comment.