Skip to content

Commit f95fc21

Browse files
Minor UT coverage improvements (#753)
Signed-off-by: Prajyot-Parab <[email protected]>
1 parent 28d2a96 commit f95fc21

File tree

8 files changed

+157
-99
lines changed

8 files changed

+157
-99
lines changed

cloud/scope/common_test.go

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,8 @@ import (
2121
corev1 "k8s.io/api/core/v1"
2222
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2323
capiv1beta1 "sigs.k8s.io/cluster-api/api/v1beta1"
24-
"sigs.k8s.io/controller-runtime/pkg/client"
2524

2625
infrav1beta1 "sigs.k8s.io/cluster-api-provider-ibmcloud/api/v1beta1"
27-
28-
. "github.com/onsi/gomega"
2926
)
3027

3128
const (
@@ -91,16 +88,3 @@ func newBootstrapSecret(clusterName, machineName string) *corev1.Secret {
9188
},
9289
}
9390
}
94-
95-
func createObject(g *WithT, obj client.Object, namespace string) {
96-
if obj.DeepCopyObject() != nil {
97-
obj.SetNamespace(namespace)
98-
g.Expect(testEnv.Create(ctx, obj)).To(Succeed())
99-
}
100-
}
101-
102-
func cleanupObject(g *WithT, obj client.Object) {
103-
if obj.DeepCopyObject() != nil {
104-
g.Expect(testEnv.Cleanup(ctx, obj)).To(Succeed())
105-
}
106-
}

cloud/scope/machine_test.go

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ limitations under the License.
1717
package scope
1818

1919
import (
20+
"context"
2021
"errors"
2122
"testing"
2223

@@ -145,20 +146,6 @@ func TestCreateMachine(t *testing.T) {
145146
t.Run("Should create Machine", func(t *testing.T) {
146147
scope := setupMachineScope(clusterName, machineName, mockvpc)
147148
scope.IBMVPCMachine.Spec = vpcMachine.Spec
148-
secret := &corev1.Secret{
149-
ObjectMeta: metav1.ObjectMeta{
150-
Labels: map[string]string{
151-
capiv1beta1.ClusterLabelName: scope.Cluster.Name,
152-
},
153-
Name: scope.Machine.Name,
154-
Namespace: "default",
155-
},
156-
Data: map[string][]byte{
157-
"value": []byte("user data"),
158-
},
159-
}
160-
createObject(g, secret, "default")
161-
defer cleanupObject(g, secret)
162149
instance := &vpcv1.Instance{
163150
Name: &scope.Machine.Name,
164151
}
@@ -203,6 +190,25 @@ func TestCreateMachine(t *testing.T) {
203190
g.Expect(err).To(Not(BeNil()))
204191
})
205192

193+
t.Run("Failed to retrieve bootstrap data, secret value key is missing", func(t *testing.T) {
194+
scope := setupMachineScope(clusterName, machineName, mockvpc)
195+
secret := &corev1.Secret{
196+
ObjectMeta: metav1.ObjectMeta{
197+
Labels: map[string]string{
198+
capiv1beta1.ClusterLabelName: clusterName,
199+
},
200+
Name: machineName,
201+
Namespace: "default",
202+
},
203+
Data: map[string][]byte{
204+
"val": []byte("user data"),
205+
}}
206+
g.Expect(scope.Client.Update(context.Background(), secret)).To(Succeed())
207+
mockvpc.EXPECT().ListInstances(gomock.AssignableToTypeOf(listInstancesOptions)).Return(instanceCollection, detailedResponse, nil)
208+
_, err := scope.CreateMachine()
209+
g.Expect(err).To(Not(BeNil()))
210+
})
211+
206212
t.Run("Failed to create instance", func(t *testing.T) {
207213
scope := setupMachineScope(clusterName, machineName, mockvpc)
208214
mockvpc.EXPECT().ListInstances(gomock.AssignableToTypeOf(listInstancesOptions)).Return(instanceCollection, detailedResponse, nil)

cloud/scope/powervs_cluster.go

Lines changed: 3 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -32,10 +32,8 @@ import (
3232
"sigs.k8s.io/controller-runtime/pkg/client"
3333

3434
infrav1beta1 "sigs.k8s.io/cluster-api-provider-ibmcloud/api/v1beta1"
35-
"sigs.k8s.io/cluster-api-provider-ibmcloud/pkg/cloud/services/authenticator"
3635
"sigs.k8s.io/cluster-api-provider-ibmcloud/pkg/cloud/services/powervs"
3736
"sigs.k8s.io/cluster-api-provider-ibmcloud/pkg/cloud/services/resourcecontroller"
38-
servicesutils "sigs.k8s.io/cluster-api-provider-ibmcloud/pkg/cloud/services/utils"
3937
"sigs.k8s.io/cluster-api-provider-ibmcloud/pkg/endpoints"
4038
)
4139

@@ -101,18 +99,6 @@ func NewPowerVSClusterScope(params PowerVSClusterScopeParams) (scope *PowerVSClu
10199

102100
spec := params.IBMPowerVSCluster.Spec
103101

104-
auth, err := authenticator.GetAuthenticator()
105-
if err != nil {
106-
err = errors.Wrap(err, "failed to get authenticator")
107-
return
108-
}
109-
110-
account, err := servicesutils.GetAccount(auth)
111-
if err != nil {
112-
err = errors.Wrap(err, "failed to get account")
113-
return
114-
}
115-
116102
rc, err := resourcecontroller.NewService(resourcecontroller.ServiceOptions{})
117103
if err != nil {
118104
return
@@ -143,10 +129,9 @@ func NewPowerVSClusterScope(params PowerVSClusterScopeParams) (scope *PowerVSClu
143129

144130
options := powervs.ServiceOptions{
145131
IBMPIOptions: &ibmpisession.IBMPIOptions{
146-
Debug: params.Logger.V(DEBUGLEVEL).Enabled(),
147-
UserAccount: account,
148-
Region: region,
149-
Zone: *res.RegionID,
132+
Debug: params.Logger.V(DEBUGLEVEL).Enabled(),
133+
Region: region,
134+
Zone: *res.RegionID,
150135
},
151136
CloudInstanceID: spec.ServiceInstanceID,
152137
}

cloud/scope/powervs_image.go

Lines changed: 3 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -32,10 +32,8 @@ import (
3232
"sigs.k8s.io/controller-runtime/pkg/client"
3333

3434
infrav1beta1 "sigs.k8s.io/cluster-api-provider-ibmcloud/api/v1beta1"
35-
"sigs.k8s.io/cluster-api-provider-ibmcloud/pkg/cloud/services/authenticator"
3635
"sigs.k8s.io/cluster-api-provider-ibmcloud/pkg/cloud/services/powervs"
3736
"sigs.k8s.io/cluster-api-provider-ibmcloud/pkg/cloud/services/resourcecontroller"
38-
servicesutils "sigs.k8s.io/cluster-api-provider-ibmcloud/pkg/cloud/services/utils"
3937
"sigs.k8s.io/cluster-api-provider-ibmcloud/pkg/endpoints"
4038
"sigs.k8s.io/cluster-api-provider-ibmcloud/pkg/record"
4139
)
@@ -94,18 +92,6 @@ func NewPowerVSImageScope(params PowerVSImageScopeParams) (scope *PowerVSImageSc
9492

9593
spec := params.IBMPowerVSImage.Spec
9694

97-
auth, err := authenticator.GetAuthenticator()
98-
if err != nil {
99-
err = errors.Wrap(err, "failed to get authenticator")
100-
return
101-
}
102-
103-
account, err := servicesutils.GetAccount(auth)
104-
if err != nil {
105-
err = errors.Wrap(err, "failed to get account")
106-
return
107-
}
108-
10995
rc, err := resourcecontroller.NewService(resourcecontroller.ServiceOptions{})
11096
if err != nil {
11197
return
@@ -136,10 +122,9 @@ func NewPowerVSImageScope(params PowerVSImageScopeParams) (scope *PowerVSImageSc
136122

137123
options := powervs.ServiceOptions{
138124
IBMPIOptions: &ibmpisession.IBMPIOptions{
139-
Debug: params.Logger.V(DEBUGLEVEL).Enabled(),
140-
UserAccount: account,
141-
Region: region,
142-
Zone: *res.RegionID,
125+
Debug: params.Logger.V(DEBUGLEVEL).Enabled(),
126+
Region: region,
127+
Zone: *res.RegionID,
143128
},
144129
CloudInstanceID: spec.ServiceInstanceID,
145130
}

cloud/scope/powervs_machine.go

Lines changed: 3 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -42,10 +42,8 @@ import (
4242
"sigs.k8s.io/controller-runtime/pkg/client"
4343

4444
infrav1beta1 "sigs.k8s.io/cluster-api-provider-ibmcloud/api/v1beta1"
45-
"sigs.k8s.io/cluster-api-provider-ibmcloud/pkg/cloud/services/authenticator"
4645
"sigs.k8s.io/cluster-api-provider-ibmcloud/pkg/cloud/services/powervs"
4746
"sigs.k8s.io/cluster-api-provider-ibmcloud/pkg/cloud/services/resourcecontroller"
48-
servicesutils "sigs.k8s.io/cluster-api-provider-ibmcloud/pkg/cloud/services/utils"
4947
"sigs.k8s.io/cluster-api-provider-ibmcloud/pkg/endpoints"
5048
"sigs.k8s.io/cluster-api-provider-ibmcloud/pkg/options"
5149
"sigs.k8s.io/cluster-api-provider-ibmcloud/pkg/record"
@@ -124,18 +122,6 @@ func NewPowerVSMachineScope(params PowerVSMachineScopeParams) (scope *PowerVSMac
124122

125123
m := params.IBMPowerVSMachine
126124

127-
auth, err := authenticator.GetAuthenticator()
128-
if err != nil {
129-
err = errors.Wrap(err, "failed to get authenticator")
130-
return
131-
}
132-
133-
account, err := servicesutils.GetAccount(auth)
134-
if err != nil {
135-
err = errors.Wrap(err, "failed to get account")
136-
return
137-
}
138-
139125
rc, err := resourcecontroller.NewService(resourcecontroller.ServiceOptions{})
140126
if err != nil {
141127
return
@@ -168,10 +154,9 @@ func NewPowerVSMachineScope(params PowerVSMachineScopeParams) (scope *PowerVSMac
168154

169155
serviceOptions := powervs.ServiceOptions{
170156
IBMPIOptions: &ibmpisession.IBMPIOptions{
171-
Debug: params.Logger.V(DEBUGLEVEL).Enabled(),
172-
UserAccount: account,
173-
Region: region,
174-
Zone: *res.RegionID,
157+
Debug: params.Logger.V(DEBUGLEVEL).Enabled(),
158+
Region: region,
159+
Zone: *res.RegionID,
175160
},
176161
CloudInstanceID: m.Spec.ServiceInstanceID,
177162
}

cloud/scope/powervs_machine_test.go

Lines changed: 20 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ limitations under the License.
1717
package scope
1818

1919
import (
20+
"context"
2021
"errors"
2122
"fmt"
2223
"testing"
@@ -223,21 +224,6 @@ func TestCreateMachinePVS(t *testing.T) {
223224

224225
t.Run("Should create Machine", func(t *testing.T) {
225226
scope := setupPowerVSMachineScope(clusterName, machineName, core.StringPtr(pvsImage), core.StringPtr(pvsNetwork), true, mockpowervs)
226-
secret := &corev1.Secret{
227-
ObjectMeta: metav1.ObjectMeta{
228-
Labels: map[string]string{
229-
capiv1beta1.ClusterLabelName: scope.Cluster.Name,
230-
},
231-
Name: scope.Machine.Name,
232-
Namespace: "default",
233-
},
234-
Data: map[string][]byte{
235-
"value": []byte("user data"),
236-
},
237-
}
238-
createObject(g, secret, "default")
239-
defer cleanupObject(g, secret)
240-
241227
mockpowervs.EXPECT().GetAllInstance().Return(pvmInstances, nil)
242228
mockpowervs.EXPECT().GetAllImage().Return(images, nil)
243229
mockpowervs.EXPECT().GetAllNetwork().Return(networks, nil)
@@ -281,6 +267,25 @@ func TestCreateMachinePVS(t *testing.T) {
281267
g.Expect(err).To(Not(BeNil()))
282268
})
283269

270+
t.Run("Failed to retrieve bootstrap data, secret value key is missing", func(t *testing.T) {
271+
scope := setupPowerVSMachineScope(clusterName, machineName, core.StringPtr(pvsImage), core.StringPtr(pvsNetwork), true, mockpowervs)
272+
secret := &corev1.Secret{
273+
ObjectMeta: metav1.ObjectMeta{
274+
Labels: map[string]string{
275+
capiv1beta1.ClusterLabelName: clusterName,
276+
},
277+
Name: machineName,
278+
Namespace: "default",
279+
},
280+
Data: map[string][]byte{
281+
"val": []byte("user data"),
282+
}}
283+
g.Expect(scope.Client.Update(context.Background(), secret)).To(Succeed())
284+
mockpowervs.EXPECT().GetAllInstance().Return(pvmInstances, nil)
285+
_, err := scope.CreateMachine()
286+
g.Expect(err).To(Not(BeNil()))
287+
})
288+
284289
t.Run("Invalid memory value", func(t *testing.T) {
285290
scope := setupPowerVSMachineScope(clusterName, machineName, core.StringPtr(pvsImage), core.StringPtr(pvsNetwork), true, mockpowervs)
286291
scope.IBMPowerVSMachine.Spec.Memory = "illegal"

pkg/cloud/services/powervs/service.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import (
2525
"github.com/IBM-Cloud/power-go-client/power/models"
2626

2727
"sigs.k8s.io/cluster-api-provider-ibmcloud/pkg/cloud/services/authenticator"
28+
"sigs.k8s.io/cluster-api-provider-ibmcloud/pkg/cloud/services/utils"
2829
)
2930

3031
var _ PowerVS = &Service{}
@@ -128,6 +129,11 @@ func NewService(options ServiceOptions) (PowerVS, error) {
128129
return nil, err
129130
}
130131
options.Authenticator = auth
132+
account, err := utils.GetAccount(auth)
133+
if err != nil {
134+
return nil, err
135+
}
136+
options.IBMPIOptions.UserAccount = account
131137
session, err := ibmpisession.NewIBMPISession(options.IBMPIOptions)
132138
if err != nil {
133139
return nil, err

pkg/endpoints/endpoints_test.go

Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,3 +153,105 @@ func TestParseFlags(t *testing.T) {
153153
})
154154
}
155155
}
156+
157+
func TestFetchVPCEndpoint(t *testing.T) {
158+
testCases := []struct {
159+
name string
160+
region string
161+
serviceEndpoint []ServiceEndpoint
162+
expectedOutput string
163+
}{
164+
{
165+
name: "Return constructed endpoint",
166+
region: "us-south",
167+
serviceEndpoint: []ServiceEndpoint{},
168+
expectedOutput: "https://us-south.iaas.cloud.ibm.com/v1",
169+
},
170+
{
171+
name: "Return fetched endpoint",
172+
region: "us-south",
173+
serviceEndpoint: []ServiceEndpoint{
174+
{
175+
ID: "vpc",
176+
URL: "https://vpchost:8080",
177+
Region: "us-south",
178+
},
179+
},
180+
expectedOutput: "https://vpchost:8080",
181+
},
182+
}
183+
184+
for _, tc := range testCases {
185+
t.Run(tc.name, func(t *testing.T) {
186+
out := FetchVPCEndpoint(tc.region, tc.serviceEndpoint)
187+
require.Equal(t, tc.expectedOutput, out)
188+
})
189+
}
190+
}
191+
192+
func TestFetchPVSEndpoint(t *testing.T) {
193+
testCases := []struct {
194+
name string
195+
region string
196+
serviceEndpoint []ServiceEndpoint
197+
expectedOutput string
198+
}{
199+
{
200+
name: "Return empty endpoint",
201+
region: "us-south",
202+
serviceEndpoint: []ServiceEndpoint{},
203+
expectedOutput: "",
204+
},
205+
{
206+
name: "Return fetched endpoint",
207+
region: "us-south",
208+
serviceEndpoint: []ServiceEndpoint{
209+
{
210+
ID: "powervs",
211+
URL: "https://powervshost:8080",
212+
Region: "us-south",
213+
},
214+
},
215+
expectedOutput: "https://powervshost:8080",
216+
},
217+
}
218+
219+
for _, tc := range testCases {
220+
t.Run(tc.name, func(t *testing.T) {
221+
out := FetchPVSEndpoint(tc.region, tc.serviceEndpoint)
222+
require.Equal(t, tc.expectedOutput, out)
223+
})
224+
}
225+
}
226+
227+
func TestFetchRCEndpoint(t *testing.T) {
228+
testCases := []struct {
229+
name string
230+
serviceEndpoint []ServiceEndpoint
231+
expectedOutput string
232+
}{
233+
{
234+
name: "Return empty endpoint",
235+
serviceEndpoint: []ServiceEndpoint{},
236+
expectedOutput: "",
237+
},
238+
{
239+
name: "Return fetched endpoint",
240+
serviceEndpoint: []ServiceEndpoint{
241+
{
242+
ID: "rc",
243+
URL: "https://rchost:8080",
244+
Region: "us-south",
245+
},
246+
},
247+
expectedOutput: "https://rchost:8080",
248+
},
249+
}
250+
251+
for _, tc := range testCases {
252+
t.Run(tc.name, func(t *testing.T) {
253+
out := FetchRCEndpoint(tc.serviceEndpoint)
254+
require.Equal(t, tc.expectedOutput, out)
255+
})
256+
}
257+
}

0 commit comments

Comments
 (0)