Skip to content

Commit 2a28cb0

Browse files
committed
[tests] Extent unit tests for cloud package
1 parent e4c0653 commit 2a28cb0

File tree

7 files changed

+300
-3
lines changed

7 files changed

+300
-3
lines changed

pkg/cloud/affinity_groups_test.go

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ var _ = Describe("AffinityGroup Unit Tests", func() {
3232
mockCtrl *gomock.Controller
3333
mockClient *cloudstack.CloudStackClient
3434
ags *cloudstack.MockAffinityGroupServiceIface
35+
vms *cloudstack.MockVirtualMachineServiceIface
3536
client cloud.Client
3637
)
3738

@@ -40,6 +41,7 @@ var _ = Describe("AffinityGroup Unit Tests", func() {
4041
mockCtrl = gomock.NewController(GinkgoT())
4142
mockClient = cloudstack.NewMockClient(mockCtrl)
4243
ags = mockClient.AffinityGroup.(*cloudstack.MockAffinityGroupServiceIface)
44+
vms = mockClient.VirtualMachine.(*cloudstack.MockVirtualMachineServiceIface)
4345
client = cloud.NewClientFromCSAPIClient(mockClient)
4446
dummies.SetDummyVars()
4547
})
@@ -97,4 +99,30 @@ var _ = Describe("AffinityGroup Unit Tests", func() {
9799
Ω(client.FetchAffinityGroup(dummies.AffinityGroup)).ShouldNot(Succeed())
98100
})
99101
})
102+
103+
It("Associate affinity group", func() {
104+
uagp := &cloudstack.UpdateVMAffinityGroupParams{}
105+
vmp := &cloudstack.StartVirtualMachineParams{}
106+
vms.EXPECT().GetVirtualMachineByID(*dummies.CSMachine1.Spec.InstanceID).Return(&cloudstack.VirtualMachine{}, 1, nil)
107+
ags.EXPECT().NewUpdateVMAffinityGroupParams(*dummies.CSMachine1.Spec.InstanceID).Return(uagp)
108+
vms.EXPECT().NewStopVirtualMachineParams(*dummies.CSMachine1.Spec.InstanceID).Return(&cloudstack.StopVirtualMachineParams{})
109+
vms.EXPECT().StopVirtualMachine(&cloudstack.StopVirtualMachineParams{}).Return(&cloudstack.StopVirtualMachineResponse{State: "Stopping"}, nil)
110+
ags.EXPECT().UpdateVMAffinityGroup(uagp).Return(&cloudstack.UpdateVMAffinityGroupResponse{}, nil)
111+
vms.EXPECT().NewStartVirtualMachineParams(*dummies.CSMachine1.Spec.InstanceID).Return(vmp)
112+
vms.EXPECT().StartVirtualMachine(vmp).Return(&cloudstack.StartVirtualMachineResponse{}, nil)
113+
Ω(client.AssociateAffinityGroup(dummies.CSMachine1, *dummies.AffinityGroup)).Should(Succeed())
114+
})
115+
116+
It("Disassociate affinity group", func() {
117+
uagp := &cloudstack.UpdateVMAffinityGroupParams{}
118+
vmp := &cloudstack.StartVirtualMachineParams{}
119+
vms.EXPECT().GetVirtualMachineByID(*dummies.CSMachine1.Spec.InstanceID).Return(&cloudstack.VirtualMachine{}, 1, nil)
120+
ags.EXPECT().NewUpdateVMAffinityGroupParams(*dummies.CSMachine1.Spec.InstanceID).Return(uagp)
121+
vms.EXPECT().NewStopVirtualMachineParams(*dummies.CSMachine1.Spec.InstanceID).Return(&cloudstack.StopVirtualMachineParams{})
122+
vms.EXPECT().StopVirtualMachine(&cloudstack.StopVirtualMachineParams{}).Return(&cloudstack.StopVirtualMachineResponse{State: "Stopping"}, nil)
123+
ags.EXPECT().UpdateVMAffinityGroup(uagp).Return(&cloudstack.UpdateVMAffinityGroupResponse{}, nil)
124+
vms.EXPECT().NewStartVirtualMachineParams(*dummies.CSMachine1.Spec.InstanceID).Return(vmp)
125+
vms.EXPECT().StartVirtualMachine(vmp).Return(&cloudstack.StartVirtualMachineResponse{}, nil)
126+
Ω(client.DisassociateAffinityGroup(dummies.CSMachine1, *dummies.AffinityGroup)).Should(Succeed())
127+
})
100128
})

pkg/cloud/client.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,10 @@ limitations under the License.
1717
package cloud
1818

1919
import (
20-
"sigs.k8s.io/cluster-api-provider-cloudstack/pkg/metrics"
2120
"strings"
2221

22+
"sigs.k8s.io/cluster-api-provider-cloudstack/pkg/metrics"
23+
2324
"github.com/apache/cloudstack-go/v2/cloudstack"
2425
"github.com/pkg/errors"
2526
"gopkg.in/ini.v1"

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
}

pkg/cloud/isolated_network_test.go

Lines changed: 216 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,13 @@ import (
3030
)
3131

3232
var _ = Describe("Network", func() {
33+
34+
const (
35+
ipAddress = "192.168.1.14"
36+
errorMessage = "Error"
37+
)
38+
39+
error := errors.New(errorMessage)
3340
var ( // Declare shared vars.
3441
mockCtrl *gomock.Controller
3542
mockClient *csapi.CloudStackClient
@@ -137,7 +144,6 @@ var _ = Describe("Network", func() {
137144

138145
Context("in an isolated network with public IPs available", func() {
139146
It("will resolve public IP details given an endpoint spec", func() {
140-
ipAddress := "192.168.1.14"
141147
as.EXPECT().NewListPublicIpAddressesParams().Return(&csapi.ListPublicIpAddressesParams{})
142148
as.EXPECT().ListPublicIpAddresses(gomock.Any()).
143149
Return(&csapi.ListPublicIpAddressesResponse{
@@ -151,6 +157,80 @@ var _ = Describe("Network", func() {
151157
})
152158
})
153159

160+
Context("In an isolated network with all public IPs allocated", func() {
161+
It("No public IP addresses available", func() {
162+
as.EXPECT().NewListPublicIpAddressesParams().Return(&csapi.ListPublicIpAddressesParams{})
163+
as.EXPECT().ListPublicIpAddresses(gomock.Any()).
164+
Return(&csapi.ListPublicIpAddressesResponse{
165+
Count: 0,
166+
PublicIpAddresses: []*csapi.PublicIpAddress{},
167+
}, nil)
168+
publicIPAddress, err := client.GetPublicIP(dummies.CSZone1, dummies.CSISONet1, dummies.CSCluster)
169+
Ω(publicIPAddress).Should(BeNil())
170+
Ω(err.Error()).Should(ContainSubstring("no public addresses found in available networks"))
171+
})
172+
173+
It("All Public IPs allocated", func() {
174+
as.EXPECT().NewListPublicIpAddressesParams().Return(&csapi.ListPublicIpAddressesParams{})
175+
as.EXPECT().ListPublicIpAddresses(gomock.Any()).
176+
Return(&csapi.ListPublicIpAddressesResponse{
177+
Count: 2,
178+
PublicIpAddresses: []*csapi.PublicIpAddress{{
179+
State: "Allocated",
180+
Allocated: "true",
181+
Associatednetworkid: "1",
182+
},
183+
{
184+
State: "Allocated",
185+
Allocated: "true",
186+
Associatednetworkid: "1",
187+
}},
188+
}, nil)
189+
publicIPAddress, err := client.GetPublicIP(dummies.CSZone1, dummies.CSISONet1, dummies.CSCluster)
190+
Ω(publicIPAddress).Should(BeNil())
191+
Ω(err.Error()).Should(ContainSubstring("all Public IP Address(es) found were already allocated"))
192+
})
193+
})
194+
195+
Context("Associate Public IP address to Network", func() {
196+
It("Successfully Associated Public IP to provided isolated network", func() {
197+
as.EXPECT().NewListPublicIpAddressesParams().Return(&csapi.ListPublicIpAddressesParams{})
198+
as.EXPECT().ListPublicIpAddresses(gomock.Any()).
199+
Return(&csapi.ListPublicIpAddressesResponse{
200+
Count: 1,
201+
PublicIpAddresses: []*csapi.PublicIpAddress{{Id: "PublicIPID", Ipaddress: ipAddress}},
202+
}, nil)
203+
aip := &csapi.AssociateIpAddressParams{}
204+
as.EXPECT().NewAssociateIpAddressParams().Return(aip)
205+
as.EXPECT().AssociateIpAddress(aip).Return(&csapi.AssociateIpAddressResponse{}, nil)
206+
// Will add cluster tag once to Network and once to PublicIP.
207+
createdByResponse := &csapi.ListTagsResponse{Tags: []*csapi.Tag{{Key: cloud.CreatedByCAPCTagName, Value: "1"}}}
208+
gomock.InOrder(
209+
rs.EXPECT().NewListTagsParams().Return(&csapi.ListTagsParams{}),
210+
rs.EXPECT().ListTags(gomock.Any()).Return(createdByResponse, nil))
211+
212+
// Will add creation and cluster tags to network and PublicIP.
213+
rs.EXPECT().NewCreateTagsParams(gomock.Any(), gomock.Any(), gomock.Any()).
214+
Return(&csapi.CreateTagsParams{}).Times(2)
215+
rs.EXPECT().CreateTags(gomock.Any()).Return(&csapi.CreateTagsResponse{}, nil).Times(2)
216+
217+
Ω(client.AssociatePublicIPAddress(dummies.CSZone1, dummies.CSISONet1, dummies.CSCluster)).Should(Succeed())
218+
})
219+
220+
It("Failure Associating Public IP to Isolated network", func() {
221+
as.EXPECT().NewListPublicIpAddressesParams().Return(&csapi.ListPublicIpAddressesParams{})
222+
as.EXPECT().ListPublicIpAddresses(gomock.Any()).
223+
Return(&csapi.ListPublicIpAddressesResponse{
224+
Count: 1,
225+
PublicIpAddresses: []*csapi.PublicIpAddress{{Id: "PublicIPID", Ipaddress: ipAddress}},
226+
}, nil)
227+
aip := &csapi.AssociateIpAddressParams{}
228+
as.EXPECT().NewAssociateIpAddressParams().Return(aip)
229+
as.EXPECT().AssociateIpAddress(aip).Return(nil, errors.New("Failed to allocate IP address"))
230+
Ω(client.AssociatePublicIPAddress(dummies.CSZone1, dummies.CSISONet1, dummies.CSCluster).Error()).Should(ContainSubstring("associating public IP address with ID"))
231+
})
232+
})
233+
154234
Context("The specific load balancer rule does exist", func() {
155235
It("resolves the rule's ID", func() {
156236
lbs.EXPECT().NewListLoadBalancerRulesParams().Return(&csapi.ListLoadBalancerRulesParams{})
@@ -163,6 +243,27 @@ var _ = Describe("Network", func() {
163243
Ω(dummies.CSISONet1.Status.LBRuleID).Should(Equal(dummies.LBRuleID))
164244
})
165245

246+
It("Failed to resolve LB rule details", func() {
247+
lbs.EXPECT().NewListLoadBalancerRulesParams().Return(&csapi.ListLoadBalancerRulesParams{})
248+
lbs.EXPECT().ListLoadBalancerRules(gomock.Any()).Return(
249+
&csapi.ListLoadBalancerRulesResponse{LoadBalancerRules: []*csapi.LoadBalancerRule{
250+
{Publicport: "differentPublicPort", Id: dummies.LBRuleID}}}, nil)
251+
252+
dummies.CSISONet1.Status.LBRuleID = ""
253+
Ω(client.ResolveLoadBalancerRuleDetails(dummies.CSZone1, dummies.CSISONet1, dummies.CSCluster).Error()).
254+
Should(Equal("no load balancer rule found"))
255+
})
256+
257+
It("Failed to list LB rules", func() {
258+
lbs.EXPECT().NewListLoadBalancerRulesParams().Return(&csapi.ListLoadBalancerRulesParams{})
259+
lbs.EXPECT().ListLoadBalancerRules(gomock.Any()).Return(
260+
nil, error)
261+
262+
dummies.CSISONet1.Status.LBRuleID = ""
263+
Ω(client.ResolveLoadBalancerRuleDetails(dummies.CSZone1, dummies.CSISONet1, dummies.CSCluster).Error()).
264+
Should(ContainSubstring("listing load balancer rules"))
265+
})
266+
166267
It("doesn't create a new load balancer rule on create", func() {
167268
lbs.EXPECT().NewListLoadBalancerRulesParams().Return(&csapi.ListLoadBalancerRulesParams{})
168269
lbs.EXPECT().ListLoadBalancerRules(gomock.Any()).
@@ -175,6 +276,49 @@ var _ = Describe("Network", func() {
175276
})
176277
})
177278

279+
Context("Assign VM to Load Balancer rule", func() {
280+
It("Associates VM to LB rule", func() {
281+
dummies.CSISONet1.Status.LBRuleID = "lbruleid"
282+
lbip := &csapi.ListLoadBalancerRuleInstancesParams{}
283+
albp := &csapi.AssignToLoadBalancerRuleParams{}
284+
lbs.EXPECT().NewListLoadBalancerRuleInstancesParams(dummies.CSISONet1.Status.LBRuleID).
285+
Return(lbip)
286+
lbs.EXPECT().ListLoadBalancerRuleInstances(lbip).Return(&csapi.ListLoadBalancerRuleInstancesResponse{}, nil)
287+
lbs.EXPECT().NewAssignToLoadBalancerRuleParams(dummies.CSISONet1.Status.LBRuleID).Return(albp)
288+
lbs.EXPECT().AssignToLoadBalancerRule(albp).Return(&csapi.AssignToLoadBalancerRuleResponse{}, nil)
289+
290+
Ω(client.AssignVMToLoadBalancerRule(dummies.CSISONet1, *dummies.CSMachine1.Spec.InstanceID)).Should(Succeed())
291+
})
292+
293+
It("Associating VM to LB rule fails", func() {
294+
dummies.CSISONet1.Status.LBRuleID = "lbruleid"
295+
lbip := &csapi.ListLoadBalancerRuleInstancesParams{}
296+
albp := &csapi.AssignToLoadBalancerRuleParams{}
297+
lbs.EXPECT().NewListLoadBalancerRuleInstancesParams(dummies.CSISONet1.Status.LBRuleID).
298+
Return(lbip)
299+
lbs.EXPECT().ListLoadBalancerRuleInstances(lbip).Return(&csapi.ListLoadBalancerRuleInstancesResponse{}, nil)
300+
lbs.EXPECT().NewAssignToLoadBalancerRuleParams(dummies.CSISONet1.Status.LBRuleID).Return(albp)
301+
lbs.EXPECT().AssignToLoadBalancerRule(albp).Return(nil, error)
302+
303+
Ω(client.AssignVMToLoadBalancerRule(dummies.CSISONet1, *dummies.CSMachine1.Spec.InstanceID)).ShouldNot(Succeed())
304+
})
305+
306+
It("LB Rule already assigned to VM", func() {
307+
dummies.CSISONet1.Status.LBRuleID = "lbruleid"
308+
lbip := &csapi.ListLoadBalancerRuleInstancesParams{}
309+
lbs.EXPECT().NewListLoadBalancerRuleInstancesParams(dummies.CSISONet1.Status.LBRuleID).
310+
Return(lbip)
311+
lbs.EXPECT().ListLoadBalancerRuleInstances(lbip).Return(&csapi.ListLoadBalancerRuleInstancesResponse{
312+
Count: 1,
313+
LoadBalancerRuleInstances: []*csapi.VirtualMachine{{
314+
Id: *dummies.CSMachine1.Spec.InstanceID,
315+
}},
316+
}, nil)
317+
318+
Ω(client.AssignVMToLoadBalancerRule(dummies.CSISONet1, *dummies.CSMachine1.Spec.InstanceID)).Should(Succeed())
319+
})
320+
})
321+
178322
Context("load balancer rule does not exist", func() {
179323
It("calls cloudstack to create a new load balancer rule.", func() {
180324
lbs.EXPECT().NewListLoadBalancerRulesParams().Return(&csapi.ListLoadBalancerRulesParams{})
@@ -189,6 +333,77 @@ var _ = Describe("Network", func() {
189333
Ω(client.GetOrCreateLoadBalancerRule(dummies.CSZone1, dummies.CSISONet1, dummies.CSCluster)).Should(Succeed())
190334
Ω(dummies.CSISONet1.Status.LBRuleID).Should(Equal("2ndLBRuleID"))
191335
})
336+
337+
It("Fails to resolve load balancer rule details", func() {
338+
lbs.EXPECT().NewListLoadBalancerRulesParams().Return(&csapi.ListLoadBalancerRulesParams{})
339+
lbs.EXPECT().ListLoadBalancerRules(gomock.Any()).
340+
Return(nil, error)
341+
err := client.GetOrCreateLoadBalancerRule(dummies.CSZone1, dummies.CSISONet1, dummies.CSCluster)
342+
Ω(err).ShouldNot(Succeed())
343+
Ω(err.Error()).Should(ContainSubstring(errorMessage))
344+
})
345+
346+
It("Fails to create a new load balancer rule.", func() {
347+
lbs.EXPECT().NewListLoadBalancerRulesParams().Return(&csapi.ListLoadBalancerRulesParams{})
348+
lbs.EXPECT().ListLoadBalancerRules(gomock.Any()).
349+
Return(&csapi.ListLoadBalancerRulesResponse{
350+
LoadBalancerRules: []*csapi.LoadBalancerRule{{Publicport: "7443", Id: dummies.LBRuleID}}}, nil)
351+
lbs.EXPECT().NewCreateLoadBalancerRuleParams(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).
352+
Return(&csapi.CreateLoadBalancerRuleParams{})
353+
lbs.EXPECT().CreateLoadBalancerRule(gomock.Any()).
354+
Return(nil, error)
355+
err := client.GetOrCreateLoadBalancerRule(dummies.CSZone1, dummies.CSISONet1, dummies.CSCluster)
356+
Ω(err).ShouldNot(Succeed())
357+
Ω(err.Error()).Should(Equal(errorMessage))
358+
359+
})
360+
})
361+
362+
Context("Delete Network", func() {
363+
It("Calls CloudStack to delete network", func() {
364+
dnp := &csapi.DeleteNetworkParams{}
365+
ns.EXPECT().NewDeleteNetworkParams(dummies.ISONet1.ID).Return(dnp)
366+
ns.EXPECT().DeleteNetwork(dnp).Return(&csapi.DeleteNetworkResponse{}, nil)
367+
368+
Ω(client.DeleteNetwork(dummies.ISONet1)).Should(Succeed())
369+
})
370+
371+
It("Network deletion failure", func() {
372+
dnp := &csapi.DeleteNetworkParams{}
373+
ns.EXPECT().NewDeleteNetworkParams(dummies.ISONet1.ID).Return(dnp)
374+
ns.EXPECT().DeleteNetwork(dnp).Return(nil, error)
375+
err := client.DeleteNetwork(dummies.ISONet1)
376+
Ω(err).ShouldNot(Succeed())
377+
Ω(err.Error()).Should(ContainSubstring("deleting network with id " + dummies.ISONet1.ID))
378+
})
379+
})
380+
381+
Context("Dispose or cleanup isolate network resources", func() {
382+
It("Delete all isolated network resources when not managed by CAPC", func() {
383+
dummies.CSISONet1.Status.PublicIPID = "publicIpId"
384+
rtlp := &csapi.ListTagsParams{}
385+
rs.EXPECT().NewListTagsParams().Return(rtlp).Times(4)
386+
rs.EXPECT().ListTags(rtlp).Return(&csapi.ListTagsResponse{}, nil).Times(4)
387+
as.EXPECT().GetPublicIpAddressByID(dummies.CSISONet1.Status.PublicIPID).Return(&csapi.PublicIpAddress{}, 1, nil)
388+
389+
Ω(client.DisposeIsoNetResources(dummies.CSZone1, dummies.CSISONet1, dummies.CSCluster)).Should(Succeed())
390+
})
391+
392+
It("Delete all isolated network resources when managed by CAPC", func() {
393+
dummies.CSISONet1.Status.PublicIPID = "publicIpId"
394+
rtdp := &csapi.DeleteTagsParams{}
395+
rtlp := &csapi.ListTagsParams{}
396+
createdByCAPCResponse := &csapi.ListTagsResponse{Tags: []*csapi.Tag{{Key: cloud.CreatedByCAPCTagName, Value: "1"}}}
397+
rs.EXPECT().NewDeleteTagsParams(gomock.Any(), gomock.Any()).Return(rtdp)
398+
rs.EXPECT().DeleteTags(rtdp).Return(&csapi.DeleteTagsResponse{}, nil)
399+
rs.EXPECT().NewListTagsParams().Return(rtlp).Times(4)
400+
rs.EXPECT().ListTags(rtlp).Return(createdByCAPCResponse, nil)
401+
rs.EXPECT().ListTags(rtlp).Return(&csapi.ListTagsResponse{}, nil).Times(3)
402+
as.EXPECT().GetPublicIpAddressByID(dummies.CSISONet1.Status.PublicIPID).Return(&csapi.PublicIpAddress{}, 1, nil)
403+
404+
Ω(client.DisposeIsoNetResources(dummies.CSZone1, dummies.CSISONet1, dummies.CSCluster)).Should(Succeed())
405+
})
406+
192407
})
193408

194409
Context("Networking Integ Tests", Label("integ"), func() {

pkg/cloud/network.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import (
2424

2525
type NetworkIface interface {
2626
ResolveNetwork(*capcv1.Network) error
27+
RemoveClusterTagFromNetwork(*capcv1.CloudStackCluster, capcv1.Network) error
2728
}
2829

2930
const (

pkg/cloud/network_test.go

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@ limitations under the License.
1717
package cloud_test
1818

1919
import (
20+
"errors"
21+
"fmt"
22+
2023
csapi "github.com/apache/cloudstack-go/v2/cloudstack"
2124
"github.com/golang/mock/gomock"
2225
. "github.com/onsi/ginkgo/v2"
@@ -30,6 +33,7 @@ var _ = Describe("Network", func() {
3033
mockCtrl *gomock.Controller
3134
mockClient *csapi.CloudStackClient
3235
ns *csapi.MockNetworkServiceIface
36+
rs *csapi.MockResourcetagsServiceIface
3337
client cloud.Client
3438
)
3539

@@ -38,6 +42,7 @@ var _ = Describe("Network", func() {
3842
mockCtrl = gomock.NewController(GinkgoT())
3943
mockClient = csapi.NewMockClient(mockCtrl)
4044
ns = mockClient.Network.(*csapi.MockNetworkServiceIface)
45+
rs = mockClient.Resourcetags.(*csapi.MockResourcetagsServiceIface)
4146
client = cloud.NewClientFromCSAPIClient(mockClient)
4247
dummies.SetDummyVars()
4348
dummies.SetDummyClusterStatus()
@@ -60,5 +65,26 @@ var _ = Describe("Network", func() {
6065

6166
Ω(client.ResolveNetwork(&dummies.ISONet1)).Should(Succeed())
6267
})
68+
69+
It("When there exists more than one network with the same name", func() {
70+
ns.EXPECT().GetNetworkByName(dummies.ISONet1.Name).Return(dummies.CAPCNetToCSAPINet(&dummies.ISONet1), 2, nil)
71+
ns.EXPECT().GetNetworkByID(dummies.ISONet1.ID).Return(nil, 2, errors.New("There is more then one result for Network UUID"))
72+
err := client.ResolveNetwork(&dummies.ISONet1)
73+
Ω(err).ShouldNot(Succeed())
74+
Ω(err.Error()).Should(ContainSubstring(fmt.Sprintf("expected 1 Network with name %s, but got %d", dummies.ISONet1.Name, 2)))
75+
})
76+
})
77+
78+
Context("Remove cluster tag from network", func() {
79+
It("Remove tag from network", func() {
80+
rtdp := &csapi.DeleteTagsParams{}
81+
createdByCAPCResponse := &csapi.ListTagsResponse{Tags: []*csapi.Tag{{Key: dummies.CSClusterTagKey, Value: "1"}}}
82+
rtlp := &csapi.ListTagsParams{}
83+
rs.EXPECT().NewDeleteTagsParams(gomock.Any(), gomock.Any()).Return(rtdp)
84+
rs.EXPECT().DeleteTags(rtdp).Return(&csapi.DeleteTagsResponse{}, nil)
85+
rs.EXPECT().NewListTagsParams().Return(rtlp)
86+
rs.EXPECT().ListTags(rtlp).Return(createdByCAPCResponse, nil)
87+
Ω(client.RemoveClusterTagFromNetwork(dummies.CSCluster, dummies.ISONet1)).Should(Succeed())
88+
})
6389
})
6490
})

0 commit comments

Comments
 (0)