Skip to content

Commit c3f25a2

Browse files
authored
Merge pull request #139 from Pearl1594/add-unit-tests
[tests] Extend unit tests for cloud package
2 parents 1c0aa0d + 8d0354a commit c3f25a2

File tree

12 files changed

+956
-59
lines changed

12 files changed

+956
-59
lines changed

api/v1beta1/conversion_test.go

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,6 @@ import (
2626
capiv1 "sigs.k8s.io/cluster-api/api/v1beta1"
2727
)
2828

29-
30-
3129
var _ = Describe("Conversion", func() {
3230
BeforeEach(func() { // Reset test vars to initial state.
3331
})

pkg/cloud/affinity_groups_test.go

Lines changed: 104 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,16 @@ import (
2828
)
2929

3030
var _ = Describe("AffinityGroup Unit Tests", func() {
31+
const (
32+
errorMessage = "Fake Error"
33+
)
34+
35+
fakeError := errors.New(errorMessage)
3136
var ( // Declare shared vars.
3237
mockCtrl *gomock.Controller
3338
mockClient *cloudstack.CloudStackClient
3439
ags *cloudstack.MockAffinityGroupServiceIface
40+
vms *cloudstack.MockVirtualMachineServiceIface
3541
client cloud.Client
3642
)
3743

@@ -40,6 +46,7 @@ var _ = Describe("AffinityGroup Unit Tests", func() {
4046
mockCtrl = gomock.NewController(GinkgoT())
4147
mockClient = cloudstack.NewMockClient(mockCtrl)
4248
ags = mockClient.AffinityGroup.(*cloudstack.MockAffinityGroupServiceIface)
49+
vms = mockClient.VirtualMachine.(*cloudstack.MockVirtualMachineServiceIface)
4350
client = cloud.NewClientFromCSAPIClient(mockClient)
4451
dummies.SetDummyVars()
4552
})
@@ -48,20 +55,79 @@ var _ = Describe("AffinityGroup Unit Tests", func() {
4855
mockCtrl.Finish()
4956
})
5057

51-
It("fetches an affinity group", func() {
52-
dummies.AffinityGroup.ID = "" // Force name fetching.
53-
ags.EXPECT().GetAffinityGroupByName(dummies.AffinityGroup.Name).Return(&cloudstack.AffinityGroup{}, 1, nil)
58+
Context("Fetch or Create Affinity group", func() {
59+
It("fetches an affinity group by Name", func() {
60+
dummies.AffinityGroup.ID = "" // Force name fetching.
61+
ags.EXPECT().GetAffinityGroupByName(dummies.AffinityGroup.Name).Return(&cloudstack.AffinityGroup{}, 1, nil)
62+
63+
Ω(client.GetOrCreateAffinityGroup(dummies.AffinityGroup)).Should(Succeed())
64+
})
65+
66+
It("fetches an affinity group by ID", func() {
67+
ags.EXPECT().GetAffinityGroupByID(dummies.AffinityGroup.ID).Return(&cloudstack.AffinityGroup{}, 1, nil)
68+
69+
Ω(client.GetOrCreateAffinityGroup(dummies.AffinityGroup)).Should(Succeed())
70+
})
71+
72+
It("creates an affinity group", func() {
73+
// dummies.SetDummyDomainAndAccount()
74+
// dummies.SetDummyDomainID()
75+
ags.EXPECT().GetAffinityGroupByID(dummies.AffinityGroup.ID).Return(nil, -1, fakeError)
76+
ags.EXPECT().NewCreateAffinityGroupParams(dummies.AffinityGroup.Name, dummies.AffinityGroup.Type).
77+
Return(&cloudstack.CreateAffinityGroupParams{})
78+
ags.EXPECT().CreateAffinityGroup(ParamMatch(And(NameEquals(dummies.AffinityGroup.Name)))).
79+
Return(&cloudstack.CreateAffinityGroupResponse{}, nil)
80+
81+
Ω(client.GetOrCreateAffinityGroup(dummies.AffinityGroup)).Should(Succeed())
82+
})
83+
84+
It("creates an affinity group if Name provided returns more than one affinity group", func() {
85+
dummies.AffinityGroup.ID = "" // Force name fetching.
86+
agp := &cloudstack.CreateAffinityGroupParams{}
87+
ags.EXPECT().GetAffinityGroupByName(dummies.AffinityGroup.Name).Return(&cloudstack.AffinityGroup{}, 2, nil)
88+
ags.EXPECT().NewCreateAffinityGroupParams(gomock.Any(), gomock.Any()).Return(agp)
89+
ags.EXPECT().CreateAffinityGroup(agp).Return(&cloudstack.CreateAffinityGroupResponse{}, nil)
5490

55-
Ω(client.GetOrCreateAffinityGroup(dummies.AffinityGroup)).Should(Succeed())
91+
Ω(client.GetOrCreateAffinityGroup(dummies.AffinityGroup)).Should(Succeed())
92+
})
93+
94+
It("creates an affinity group if getting affinity group by name fails", func() {
95+
dummies.AffinityGroup.ID = "" // Force name fetching.
96+
agp := &cloudstack.CreateAffinityGroupParams{}
97+
ags.EXPECT().GetAffinityGroupByName(dummies.AffinityGroup.Name).Return(nil, -1, fakeError)
98+
ags.EXPECT().NewCreateAffinityGroupParams(gomock.Any(), gomock.Any()).Return(agp)
99+
ags.EXPECT().CreateAffinityGroup(agp).Return(&cloudstack.CreateAffinityGroupResponse{}, nil)
100+
101+
Ω(client.GetOrCreateAffinityGroup(dummies.AffinityGroup)).Should(Succeed())
102+
})
103+
104+
It("creates an affinity group if ID provided returns more than one affinity group", func() {
105+
agp := &cloudstack.CreateAffinityGroupParams{}
106+
ags.EXPECT().GetAffinityGroupByID(dummies.AffinityGroup.ID).Return(&cloudstack.AffinityGroup{}, 2, nil)
107+
ags.EXPECT().NewCreateAffinityGroupParams(gomock.Any(), gomock.Any()).Return(agp)
108+
ags.EXPECT().CreateAffinityGroup(agp).Return(&cloudstack.CreateAffinityGroupResponse{}, nil)
109+
110+
Ω(client.GetOrCreateAffinityGroup(dummies.AffinityGroup)).Should(Succeed())
111+
})
112+
113+
It("creates an affinity group if getting affinity group by ID fails", func() {
114+
agp := &cloudstack.CreateAffinityGroupParams{}
115+
ags.EXPECT().GetAffinityGroupByID(dummies.AffinityGroup.ID).Return(nil, -1, fakeError)
116+
ags.EXPECT().NewCreateAffinityGroupParams(gomock.Any(), gomock.Any()).Return(agp)
117+
ags.EXPECT().CreateAffinityGroup(agp).Return(&cloudstack.CreateAffinityGroupResponse{}, nil)
118+
119+
Ω(client.GetOrCreateAffinityGroup(dummies.AffinityGroup)).Should(Succeed())
120+
})
56121
})
57-
It("creates an affinity group", func() {
58-
ags.EXPECT().GetAffinityGroupByID(dummies.AffinityGroup.ID).Return(nil, -1, errors.New("FakeError"))
59-
ags.EXPECT().NewCreateAffinityGroupParams(dummies.AffinityGroup.Name, dummies.AffinityGroup.Type).
60-
Return(&cloudstack.CreateAffinityGroupParams{})
61-
ags.EXPECT().CreateAffinityGroup(ParamMatch(And(NameEquals(dummies.AffinityGroup.Name)))).
62-
Return(&cloudstack.CreateAffinityGroupResponse{}, nil)
63-
64-
Ω(client.GetOrCreateAffinityGroup(dummies.AffinityGroup)).Should(Succeed())
122+
123+
Context("Delete Affinity group in CloudStack", func() {
124+
It("delete affinity group", func() {
125+
agp := &cloudstack.DeleteAffinityGroupParams{}
126+
ags.EXPECT().NewDeleteAffinityGroupParams().Return(agp)
127+
ags.EXPECT().DeleteAffinityGroup(agp).Return(&cloudstack.DeleteAffinityGroupResponse{}, nil)
128+
129+
Ω(client.DeleteAffinityGroup(dummies.AffinityGroup)).Should(Succeed())
130+
})
65131
})
66132

67133
Context("AffinityGroup Integ Tests", Label("integ"), func() {
@@ -94,4 +160,30 @@ var _ = Describe("AffinityGroup Unit Tests", func() {
94160
Ω(client.FetchAffinityGroup(dummies.AffinityGroup)).ShouldNot(Succeed())
95161
})
96162
})
163+
164+
It("Associate affinity group", func() {
165+
uagp := &cloudstack.UpdateVMAffinityGroupParams{}
166+
vmp := &cloudstack.StartVirtualMachineParams{}
167+
vms.EXPECT().GetVirtualMachineByID(*dummies.CSMachine1.Spec.InstanceID).Return(&cloudstack.VirtualMachine{}, 1, nil)
168+
ags.EXPECT().NewUpdateVMAffinityGroupParams(*dummies.CSMachine1.Spec.InstanceID).Return(uagp)
169+
vms.EXPECT().NewStopVirtualMachineParams(*dummies.CSMachine1.Spec.InstanceID).Return(&cloudstack.StopVirtualMachineParams{})
170+
vms.EXPECT().StopVirtualMachine(&cloudstack.StopVirtualMachineParams{}).Return(&cloudstack.StopVirtualMachineResponse{State: "Stopping"}, nil)
171+
ags.EXPECT().UpdateVMAffinityGroup(uagp).Return(&cloudstack.UpdateVMAffinityGroupResponse{}, nil)
172+
vms.EXPECT().NewStartVirtualMachineParams(*dummies.CSMachine1.Spec.InstanceID).Return(vmp)
173+
vms.EXPECT().StartVirtualMachine(vmp).Return(&cloudstack.StartVirtualMachineResponse{}, nil)
174+
Ω(client.AssociateAffinityGroup(dummies.CSMachine1, *dummies.AffinityGroup)).Should(Succeed())
175+
})
176+
177+
It("Disassociate affinity group", func() {
178+
uagp := &cloudstack.UpdateVMAffinityGroupParams{}
179+
vmp := &cloudstack.StartVirtualMachineParams{}
180+
vms.EXPECT().GetVirtualMachineByID(*dummies.CSMachine1.Spec.InstanceID).Return(&cloudstack.VirtualMachine{}, 1, nil)
181+
ags.EXPECT().NewUpdateVMAffinityGroupParams(*dummies.CSMachine1.Spec.InstanceID).Return(uagp)
182+
vms.EXPECT().NewStopVirtualMachineParams(*dummies.CSMachine1.Spec.InstanceID).Return(&cloudstack.StopVirtualMachineParams{})
183+
vms.EXPECT().StopVirtualMachine(&cloudstack.StopVirtualMachineParams{}).Return(&cloudstack.StopVirtualMachineResponse{State: "Stopping"}, nil)
184+
ags.EXPECT().UpdateVMAffinityGroup(uagp).Return(&cloudstack.UpdateVMAffinityGroupResponse{}, nil)
185+
vms.EXPECT().NewStartVirtualMachineParams(*dummies.CSMachine1.Spec.InstanceID).Return(vmp)
186+
vms.EXPECT().StartVirtualMachine(vmp).Return(&cloudstack.StartVirtualMachineResponse{}, nil)
187+
Ω(client.DisassociateAffinityGroup(dummies.CSMachine1, *dummies.AffinityGroup)).Should(Succeed())
188+
})
97189
})

pkg/cloud/client_test.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ type Global struct {
3434
VerifySSL bool `ini:"verify-ssl"`
3535
}
3636

37-
var _ = Describe("Instance", func() {
37+
var _ = Describe("Client", func() {
3838

3939
var ()
4040

@@ -50,7 +50,6 @@ var _ = Describe("Instance", func() {
5050
// new client method. The parsing used here is more of a schema, and we don't need to test another library's
5151
// abilities to parse said schema.
5252
Skip("Dev test suite.")
53-
5453
// Create a real cloud client.
5554
var connectionErr error
5655
_, connectionErr = helpers.NewCSClient()

pkg/cloud/isolated_network.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,7 @@ func (c *client) GetPublicIP(
152152
return v, nil
153153
}
154154
}
155-
return nil, errors.New("all Public IP Adresse(s) found were already allocated")
155+
return nil, errors.New("all Public IP Address(es) found were already allocated")
156156
}
157157
return nil, errors.New("no public addresses found in available networks")
158158
}

0 commit comments

Comments
 (0)