Skip to content

Commit 93de903

Browse files
committed
Add unit tests requested by Emilien
1 parent 16e467f commit 93de903

File tree

4 files changed

+234
-91
lines changed

4 files changed

+234
-91
lines changed

pkg/cloud/services/compute/instance_test.go

Lines changed: 0 additions & 91 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ import (
3030
common "github.com/gophercloud/gophercloud/openstack/common/extensions"
3131
"github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/attachinterfaces"
3232
"github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/availabilityzones"
33-
"github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/servergroups"
3433
"github.com/gophercloud/gophercloud/openstack/compute/v2/flavors"
3534
"github.com/gophercloud/gophercloud/openstack/compute/v2/servers"
3635
"github.com/gophercloud/gophercloud/openstack/imageservice/v2/images"
@@ -119,96 +118,6 @@ func Test_getPortName(t *testing.T) {
119118
}
120119
}
121120

122-
func TestService_getServerGroupID(t *testing.T) {
123-
const serverGroupID1 = "ce96e584-7ebc-46d6-9e55-987d72e3806c"
124-
const serverGroupID2 = "8f536889-5198-42d7-8314-cb78f4f4755c"
125-
126-
tests := []struct {
127-
testName string
128-
serverGroupFilter *infrav1.ServerGroupFilter
129-
expect func(m *mock.MockComputeClientMockRecorder)
130-
want string
131-
wantErr bool
132-
}{
133-
{
134-
testName: "Return server group ID from filter if only filter (with ID) given",
135-
serverGroupFilter: &infrav1.ServerGroupFilter{ID: serverGroupID1},
136-
expect: func(m *mock.MockComputeClientMockRecorder) {
137-
},
138-
want: serverGroupID1,
139-
wantErr: false,
140-
},
141-
{
142-
testName: "Return server group ID from filter if only filter (with name) given",
143-
serverGroupFilter: &infrav1.ServerGroupFilter{Name: "test-server-group"},
144-
expect: func(m *mock.MockComputeClientMockRecorder) {
145-
m.ListServerGroups().Return(
146-
[]servergroups.ServerGroup{{ID: serverGroupID1, Name: "test-server-group"}},
147-
nil)
148-
},
149-
want: serverGroupID1,
150-
wantErr: false,
151-
},
152-
{
153-
testName: "Return no results",
154-
serverGroupFilter: &infrav1.ServerGroupFilter{Name: "test-server-group"},
155-
expect: func(m *mock.MockComputeClientMockRecorder) {
156-
m.ListServerGroups().Return(
157-
[]servergroups.ServerGroup{},
158-
nil)
159-
},
160-
want: "",
161-
wantErr: true,
162-
},
163-
{
164-
testName: "Return multiple results",
165-
serverGroupFilter: &infrav1.ServerGroupFilter{Name: "test-server-group"},
166-
expect: func(m *mock.MockComputeClientMockRecorder) {
167-
m.ListServerGroups().Return(
168-
[]servergroups.ServerGroup{
169-
{ID: serverGroupID1, Name: "test-server-group"},
170-
{ID: serverGroupID2, Name: "test-server-group"},
171-
},
172-
nil)
173-
},
174-
want: "",
175-
wantErr: true,
176-
},
177-
{
178-
testName: "OpenStack returns error",
179-
serverGroupFilter: &infrav1.ServerGroupFilter{Name: "test-server-group"},
180-
expect: func(m *mock.MockComputeClientMockRecorder) {
181-
m.ListServerGroups().Return(
182-
nil,
183-
fmt.Errorf("test error"))
184-
},
185-
want: "",
186-
wantErr: true,
187-
},
188-
}
189-
for _, tt := range tests {
190-
t.Run(tt.testName, func(t *testing.T) {
191-
mockCtrl := gomock.NewController(t)
192-
mockScopeFactory := scope.NewMockScopeFactory(mockCtrl, "", logr.Discard())
193-
194-
s, err := NewService(mockScopeFactory)
195-
if err != nil {
196-
t.Fatalf("Failed to create service: %v", err)
197-
}
198-
tt.expect(mockScopeFactory.ComputeClient.EXPECT())
199-
200-
got, err := s.GetServerGroupID(tt.serverGroupFilter)
201-
if (err != nil) != tt.wantErr {
202-
t.Errorf("Service.getServerGroupID() error = %v, wantErr %v", err, tt.wantErr)
203-
return
204-
}
205-
if got != tt.want {
206-
t.Errorf("Service.getServerGroupID() = %v, want %v", got, tt.want)
207-
}
208-
})
209-
}
210-
}
211-
212121
func TestService_getImageID(t *testing.T) {
213122
const imageIDA = "ce96e584-7ebc-46d6-9e55-987d72e3806c"
214123
const imageIDB = "8f536889-5198-42d7-8314-cb78f4f4755c"
Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
/*
2+
Copyright 2018 The Kubernetes Authors.
3+
4+
Licensed under the Apache License, Version 2.0 (the "License");
5+
you may not use this file except in compliance with the License.
6+
You may obtain a copy of the License at
7+
8+
http://www.apache.org/licenses/LICENSE-2.0
9+
10+
Unless required by applicable law or agreed to in writing, software
11+
distributed under the License is distributed on an "AS IS" BASIS,
12+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
See the License for the specific language governing permissions and
14+
limitations under the License.
15+
*/
16+
17+
package compute
18+
19+
import (
20+
"testing"
21+
22+
"github.com/go-logr/logr"
23+
"github.com/golang/mock/gomock"
24+
"github.com/google/go-cmp/cmp"
25+
"github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/servergroups"
26+
. "github.com/onsi/gomega"
27+
28+
infrav1 "sigs.k8s.io/cluster-api-provider-openstack/api/v1alpha8"
29+
"sigs.k8s.io/cluster-api-provider-openstack/pkg/clients/mock"
30+
"sigs.k8s.io/cluster-api-provider-openstack/pkg/scope"
31+
)
32+
33+
func Test_ResolveReferencedMachineResources(t *testing.T) {
34+
const serverGroupID1 = "ce96e584-7ebc-46d6-9e55-987d72e3806c"
35+
36+
tests := []struct {
37+
testName string
38+
serverGroupFilter *infrav1.ServerGroupFilter
39+
expect func(m *mock.MockComputeClientMockRecorder)
40+
want *infrav1.ReferencedMachineResources
41+
wantErr bool
42+
}{
43+
{
44+
testName: "Server group ID passed",
45+
serverGroupFilter: &infrav1.ServerGroupFilter{ID: serverGroupID1},
46+
expect: func(m *mock.MockComputeClientMockRecorder) {},
47+
want: &infrav1.ReferencedMachineResources{ServerGroupID: serverGroupID1},
48+
wantErr: false,
49+
},
50+
{
51+
testName: "Server group filter nil",
52+
serverGroupFilter: nil,
53+
expect: func(m *mock.MockComputeClientMockRecorder) {},
54+
want: &infrav1.ReferencedMachineResources{},
55+
wantErr: false,
56+
},
57+
{
58+
testName: "Server group ID empty",
59+
serverGroupFilter: &infrav1.ServerGroupFilter{},
60+
expect: func(m *mock.MockComputeClientMockRecorder) {},
61+
want: &infrav1.ReferencedMachineResources{},
62+
wantErr: false,
63+
},
64+
{
65+
testName: "Server group ID not found",
66+
serverGroupFilter: &infrav1.ServerGroupFilter{Name: "test-server-group"},
67+
expect: func(m *mock.MockComputeClientMockRecorder) {
68+
m.ListServerGroups().Return(
69+
[]servergroups.ServerGroup{},
70+
nil)
71+
},
72+
want: &infrav1.ReferencedMachineResources{},
73+
wantErr: true,
74+
},
75+
}
76+
for _, tt := range tests {
77+
t.Run(tt.testName, func(t *testing.T) {
78+
g := NewWithT(t)
79+
mockCtrl := gomock.NewController(t)
80+
mockScopeFactory := scope.NewMockScopeFactory(mockCtrl, "", logr.Discard())
81+
82+
tt.expect(mockScopeFactory.ComputeClient.EXPECT())
83+
84+
machineSpec := &infrav1.OpenStackMachineSpec{
85+
ServerGroup: tt.serverGroupFilter,
86+
}
87+
88+
resources := &infrav1.ReferencedMachineResources{}
89+
90+
err := ResolveReferencedMachineResources(mockScopeFactory, machineSpec, resources)
91+
if tt.wantErr {
92+
g.Expect(err).Error()
93+
return
94+
}
95+
96+
g.Expect(resources).To(Equal(tt.want), cmp.Diff(resources, tt.want))
97+
})
98+
}
99+
}

pkg/cloud/services/compute/servergroup.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,18 @@ import (
2424
infrav1 "sigs.k8s.io/cluster-api-provider-openstack/api/v1alpha8"
2525
)
2626

27+
// GetServerGroupID looks up a server group using the passed filter and returns
28+
// its ID. It'll return an error when server group is not found or there are multiple.
2729
func (s *Service) GetServerGroupID(serverGroupFilter *infrav1.ServerGroupFilter) (string, error) {
2830
if serverGroupFilter.ID != "" {
2931
return serverGroupFilter.ID, nil
3032
}
3133

34+
if serverGroupFilter.Name == "" {
35+
// empty filter produced no server group, but also no error
36+
return "", nil
37+
}
38+
3239
// otherwise fallback to looking up by name, which is slower
3340
serverGroup, err := s.getServerGroupByName(serverGroupFilter.Name)
3441
if err != nil {
Lines changed: 128 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,128 @@
1+
/*
2+
Copyright 2018 The Kubernetes Authors.
3+
4+
Licensed under the Apache License, Version 2.0 (the "License");
5+
you may not use this file except in compliance with the License.
6+
You may obtain a copy of the License at
7+
8+
http://www.apache.org/licenses/LICENSE-2.0
9+
10+
Unless required by applicable law or agreed to in writing, software
11+
distributed under the License is distributed on an "AS IS" BASIS,
12+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
See the License for the specific language governing permissions and
14+
limitations under the License.
15+
*/
16+
17+
package compute
18+
19+
import (
20+
"fmt"
21+
"testing"
22+
23+
"github.com/go-logr/logr"
24+
"github.com/golang/mock/gomock"
25+
"github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/servergroups"
26+
27+
infrav1 "sigs.k8s.io/cluster-api-provider-openstack/api/v1alpha8"
28+
"sigs.k8s.io/cluster-api-provider-openstack/pkg/clients/mock"
29+
"sigs.k8s.io/cluster-api-provider-openstack/pkg/scope"
30+
)
31+
32+
func TestService_GetServerGroupID(t *testing.T) {
33+
const serverGroupID1 = "ce96e584-7ebc-46d6-9e55-987d72e3806c"
34+
const serverGroupID2 = "8f536889-5198-42d7-8314-cb78f4f4755c"
35+
36+
tests := []struct {
37+
testName string
38+
serverGroupFilter *infrav1.ServerGroupFilter
39+
expect func(m *mock.MockComputeClientMockRecorder)
40+
want string
41+
wantErr bool
42+
}{
43+
{
44+
testName: "Return server group ID from filter if only filter (with ID) given",
45+
serverGroupFilter: &infrav1.ServerGroupFilter{ID: serverGroupID1},
46+
expect: func(m *mock.MockComputeClientMockRecorder) {
47+
},
48+
want: serverGroupID1,
49+
wantErr: false,
50+
},
51+
{
52+
testName: "Return no server group if empty filter is given",
53+
serverGroupFilter: &infrav1.ServerGroupFilter{},
54+
expect: func(m *mock.MockComputeClientMockRecorder) {
55+
},
56+
want: "",
57+
wantErr: false,
58+
},
59+
{
60+
testName: "Return server group ID from filter if only filter (with name) given",
61+
serverGroupFilter: &infrav1.ServerGroupFilter{Name: "test-server-group"},
62+
expect: func(m *mock.MockComputeClientMockRecorder) {
63+
m.ListServerGroups().Return(
64+
[]servergroups.ServerGroup{{ID: serverGroupID1, Name: "test-server-group"}},
65+
nil)
66+
},
67+
want: serverGroupID1,
68+
wantErr: false,
69+
},
70+
{
71+
testName: "Return no results",
72+
serverGroupFilter: &infrav1.ServerGroupFilter{Name: "test-server-group"},
73+
expect: func(m *mock.MockComputeClientMockRecorder) {
74+
m.ListServerGroups().Return(
75+
[]servergroups.ServerGroup{},
76+
nil)
77+
},
78+
want: "",
79+
wantErr: true,
80+
},
81+
{
82+
testName: "Return multiple results",
83+
serverGroupFilter: &infrav1.ServerGroupFilter{Name: "test-server-group"},
84+
expect: func(m *mock.MockComputeClientMockRecorder) {
85+
m.ListServerGroups().Return(
86+
[]servergroups.ServerGroup{
87+
{ID: serverGroupID1, Name: "test-server-group"},
88+
{ID: serverGroupID2, Name: "test-server-group"},
89+
},
90+
nil)
91+
},
92+
want: "",
93+
wantErr: true,
94+
},
95+
{
96+
testName: "OpenStack returns error",
97+
serverGroupFilter: &infrav1.ServerGroupFilter{Name: "test-server-group"},
98+
expect: func(m *mock.MockComputeClientMockRecorder) {
99+
m.ListServerGroups().Return(
100+
nil,
101+
fmt.Errorf("test error"))
102+
},
103+
want: "",
104+
wantErr: true,
105+
},
106+
}
107+
for _, tt := range tests {
108+
t.Run(tt.testName, func(t *testing.T) {
109+
mockCtrl := gomock.NewController(t)
110+
mockScopeFactory := scope.NewMockScopeFactory(mockCtrl, "", logr.Discard())
111+
112+
s, err := NewService(mockScopeFactory)
113+
if err != nil {
114+
t.Fatalf("Failed to create service: %v", err)
115+
}
116+
tt.expect(mockScopeFactory.ComputeClient.EXPECT())
117+
118+
got, err := s.GetServerGroupID(tt.serverGroupFilter)
119+
if (err != nil) != tt.wantErr {
120+
t.Errorf("Service.getServerGroupID() error = %v, wantErr %v", err, tt.wantErr)
121+
return
122+
}
123+
if got != tt.want {
124+
t.Errorf("Service.getServerGroupID() = %v, want %v", got, tt.want)
125+
}
126+
})
127+
}
128+
}

0 commit comments

Comments
 (0)