Skip to content

Commit b4b6969

Browse files
author
Rahul Sharma
committed
add unittests for vpc.go file
1 parent e3e4997 commit b4b6969

File tree

1 file changed

+153
-0
lines changed

1 file changed

+153
-0
lines changed

cloud/linode/vpc_test.go

Lines changed: 153 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,153 @@
1+
package linode
2+
3+
import (
4+
"context"
5+
"errors"
6+
"net/http"
7+
"reflect"
8+
"sort"
9+
"testing"
10+
11+
"github.com/golang/mock/gomock"
12+
"github.com/linode/linode-cloud-controller-manager/cloud/linode/client/mocks"
13+
"github.com/linode/linodego"
14+
"github.com/stretchr/testify/assert"
15+
)
16+
17+
func TestGetAllVPCIDs(t *testing.T) {
18+
tests := []struct {
19+
name string
20+
vpcIDs map[string]int
21+
want []int
22+
}{
23+
{
24+
name: "multiple vpcs present",
25+
vpcIDs: map[string]int{"test1": 1, "test2": 2, "test3": 3},
26+
want: []int{1, 2, 3},
27+
},
28+
{
29+
name: "no vpc present",
30+
vpcIDs: map[string]int{},
31+
want: []int{},
32+
},
33+
}
34+
for _, tt := range tests {
35+
t.Run(tt.name, func(t *testing.T) {
36+
vpcIDs = tt.vpcIDs
37+
got := GetAllVPCIDs()
38+
sort.Ints(got)
39+
if !reflect.DeepEqual(got, tt.want) {
40+
t.Errorf("GetAllVPCIDs() = %v, want %v", got, tt.want)
41+
}
42+
})
43+
}
44+
}
45+
46+
func TestGetVPCID(t *testing.T) {
47+
t.Parallel()
48+
49+
t.Run("vpcID in cache", func(t *testing.T) {
50+
ctrl := gomock.NewController(t)
51+
defer ctrl.Finish()
52+
client := mocks.NewMockClient(ctrl)
53+
vpcIDs = map[string]int{"test1": 1, "test2": 2, "test3": 3}
54+
got, err := GetVPCID(context.TODO(), client, "test3")
55+
if err != nil {
56+
t.Errorf("GetVPCID() error = %v", err)
57+
return
58+
}
59+
if got != vpcIDs["test3"] {
60+
t.Errorf("GetVPCID() = %v, want %v", got, vpcIDs["test3"])
61+
}
62+
})
63+
64+
t.Run("vpcID not in cache and listVPCs return error", func(t *testing.T) {
65+
ctrl := gomock.NewController(t)
66+
defer ctrl.Finish()
67+
client := mocks.NewMockClient(ctrl)
68+
vpcIDs = map[string]int{"test1": 1, "test2": 2, "test3": 3}
69+
client.EXPECT().ListVPCs(gomock.Any(), gomock.Any()).Times(1).Return([]linodego.VPC{}, errors.New("error"))
70+
got, err := GetVPCID(context.TODO(), client, "test4")
71+
assert.Error(t, err)
72+
if got != 0 {
73+
t.Errorf("GetVPCID() = %v, want %v", got, 0)
74+
}
75+
})
76+
77+
t.Run("vpcID not in cache and listVPCs return nothing", func(t *testing.T) {
78+
ctrl := gomock.NewController(t)
79+
defer ctrl.Finish()
80+
client := mocks.NewMockClient(ctrl)
81+
vpcIDs = map[string]int{"test1": 1, "test2": 2, "test3": 3}
82+
client.EXPECT().ListVPCs(gomock.Any(), gomock.Any()).Times(1).Return([]linodego.VPC{}, nil)
83+
got, err := GetVPCID(context.TODO(), client, "test4")
84+
assert.ErrorIs(t, err, vpcLookupError{"test4"})
85+
if got != 0 {
86+
t.Errorf("GetVPCID() = %v, want %v", got, 0)
87+
}
88+
})
89+
90+
t.Run("vpcID not in cache and listVPCs return vpc info", func(t *testing.T) {
91+
ctrl := gomock.NewController(t)
92+
defer ctrl.Finish()
93+
client := mocks.NewMockClient(ctrl)
94+
vpcIDs = map[string]int{"test1": 1, "test2": 2, "test3": 3}
95+
client.EXPECT().ListVPCs(gomock.Any(), gomock.Any()).Times(1).Return([]linodego.VPC{{ID: 4, Label: "test4"}}, nil)
96+
got, err := GetVPCID(context.TODO(), client, "test4")
97+
assert.NoError(t, err)
98+
if got != 4 {
99+
t.Errorf("GetVPCID() = %v, want %v", got, 4)
100+
}
101+
})
102+
}
103+
104+
func TestGetVPCIPAddresses(t *testing.T) {
105+
t.Parallel()
106+
107+
t.Run("vpc id not found", func(t *testing.T) {
108+
ctrl := gomock.NewController(t)
109+
defer ctrl.Finish()
110+
client := mocks.NewMockClient(ctrl)
111+
vpcIDs = map[string]int{"test1": 1, "test2": 2, "test3": 3}
112+
client.EXPECT().ListVPCs(gomock.Any(), gomock.Any()).Times(1).Return([]linodego.VPC{}, nil)
113+
_, err := GetVPCIPAddresses(context.TODO(), client, "test4")
114+
assert.Error(t, err)
115+
})
116+
117+
t.Run("vpc id found but listing ip addresses fails with 404 error", func(t *testing.T) {
118+
ctrl := gomock.NewController(t)
119+
defer ctrl.Finish()
120+
client := mocks.NewMockClient(ctrl)
121+
vpcIDs = map[string]int{"test1": 1, "test2": 2, "test3": 3}
122+
client.EXPECT().ListVPCIPAddresses(gomock.Any(), gomock.Any(), gomock.Any()).Times(1).Return([]linodego.VPCIP{}, &linodego.Error{Code: http.StatusNotFound, Message: "[404] [label] VPC not found"})
123+
_, err := GetVPCIPAddresses(context.TODO(), client, "test3")
124+
assert.Error(t, err)
125+
_, exists := vpcIDs["test3"]
126+
assert.False(t, exists, "test3 key should get deleted from vpcIDs map")
127+
})
128+
129+
t.Run("vpc id found but listing ip addresses fails with 500 error", func(t *testing.T) {
130+
ctrl := gomock.NewController(t)
131+
defer ctrl.Finish()
132+
client := mocks.NewMockClient(ctrl)
133+
vpcIDs = map[string]int{"test1": 1, "test2": 2, "test3": 3}
134+
client.EXPECT().ListVPCIPAddresses(gomock.Any(), gomock.Any(), gomock.Any()).Times(1).Return([]linodego.VPCIP{}, &linodego.Error{Code: http.StatusInternalServerError, Message: "[500] [label] Internal Server Error"})
135+
_, err := GetVPCIPAddresses(context.TODO(), client, "test1")
136+
assert.Error(t, err)
137+
_, exists := vpcIDs["test1"]
138+
assert.True(t, exists, "test1 key should not get deleted from vpcIDs map")
139+
})
140+
141+
t.Run("vpc id found and listing vpc ipaddresses succeeds", func(t *testing.T) {
142+
ctrl := gomock.NewController(t)
143+
defer ctrl.Finish()
144+
client := mocks.NewMockClient(ctrl)
145+
vpcIDs = map[string]int{"test1": 1, "test2": 2, "test3": 3}
146+
client.EXPECT().ListVPCs(gomock.Any(), gomock.Any()).Times(1).Return([]linodego.VPC{{ID: 10, Label: "test10"}}, nil)
147+
client.EXPECT().ListVPCIPAddresses(gomock.Any(), gomock.Any(), gomock.Any()).Times(1).Return([]linodego.VPCIP{}, nil)
148+
_, err := GetVPCIPAddresses(context.TODO(), client, "test10")
149+
assert.NoError(t, err)
150+
_, exists := vpcIDs["test10"]
151+
assert.True(t, exists, "test10 key should be present in vpcIDs map")
152+
})
153+
}

0 commit comments

Comments
 (0)