Skip to content

Commit ed51a27

Browse files
committed
extend unit tests
1 parent 2a28cb0 commit ed51a27

File tree

8 files changed

+685
-82
lines changed

8 files changed

+685
-82
lines changed

pkg/cloud/affinity_groups_test.go

Lines changed: 76 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,11 @@ 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
@@ -50,22 +55,79 @@ var _ = Describe("AffinityGroup Unit Tests", func() {
5055
mockCtrl.Finish()
5156
})
5257

53-
It("fetches an affinity group", func() {
54-
dummies.AffinityGroup.ID = "" // Force name fetching.
55-
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+
})
5683

57-
Ω(client.GetOrCreateAffinityGroup(dummies.AffinityGroup)).Should(Succeed())
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)
90+
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+
})
58121
})
59-
It("creates an affinity group", func() {
60-
dummies.SetDummyDomainAndAccount()
61-
dummies.SetDummyDomainID()
62-
ags.EXPECT().GetAffinityGroupByID(dummies.AffinityGroup.ID).Return(nil, -1, errors.New("FakeError"))
63-
ags.EXPECT().NewCreateAffinityGroupParams(dummies.AffinityGroup.Name, dummies.AffinityGroup.Type).
64-
Return(&cloudstack.CreateAffinityGroupParams{})
65-
ags.EXPECT().CreateAffinityGroup(ParamMatch(And(NameEquals(dummies.AffinityGroup.Name)))).
66-
Return(&cloudstack.CreateAffinityGroupResponse{}, nil)
67-
68-
Ω(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+
})
69131
})
70132

71133
Context("AffinityGroup Integ Tests", Label("integ"), func() {

pkg/cloud/client_test.go

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import (
2020
. "github.com/onsi/ginkgo/v2"
2121
. "github.com/onsi/gomega"
2222
"gopkg.in/ini.v1"
23+
"sigs.k8s.io/cluster-api-provider-cloudstack/pkg/cloud"
2324
)
2425

2526
// Example cloud-config ini structure.
@@ -28,15 +29,14 @@ type Global struct {
2829
VerifySSL bool `ini:"verify-ssl"`
2930
}
3031

31-
var _ = Describe("Instance", func() {
32+
var _ = Describe("Client", func() {
3233

3334
var ()
3435

3536
BeforeEach(func() {
3637
// This test fixture is useful for development, but the actual method of parsing is confinded to the client's
3738
// new client method. The parsing used here is more of a schema, and we don't need to test another library's
3839
// abilities to parse said schema.
39-
Skip("Dev test suite.")
4040
})
4141

4242
AfterEach(func() {
@@ -53,4 +53,31 @@ var _ = Describe("Instance", func() {
5353
Ω(cfg.APIURL).ShouldNot(BeEmpty())
5454
})
5555
})
56+
57+
Context("Create Client and Get API Configuration", func() {
58+
It("For a configuration with the 'Global' section missing", func() {
59+
filepath := getConfigPath("cloud-config-no-global")
60+
61+
client, err := cloud.NewClient(filepath)
62+
63+
Ω(client).Should(BeNil())
64+
Ω(err.Error()).Should(ContainSubstring("section Global not found"))
65+
})
66+
67+
It("fails to read config file", func() {
68+
filepath := getConfigPath("cloud-config-no-exist")
69+
client, err := cloud.NewClient(filepath)
70+
71+
Ω(client).Should(BeNil())
72+
Ω(err.Error()).Should(ContainSubstring("reading config at path"))
73+
})
74+
75+
It("Create CloudStack client", func() {
76+
filepath := getConfigPath("cloud-config-good")
77+
client, err := cloud.NewClient(filepath)
78+
79+
Ω(client).ShouldNot(BeNil())
80+
Ω(err.Error()).Should(ContainSubstring("checking CloudStack API Client connectivity"))
81+
})
82+
})
5683
})

pkg/cloud/helpers_test.go

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -37,17 +37,6 @@ var FixturePath = path.Join(os.Getenv("PROJECT_DIR"), "test/fixtures/cloud-confi
3737

3838
var _ = Describe("Helpers", func() {
3939

40-
Context("For a configuration with the 'Global' section missing", func() {
41-
It("Gets API configuration", func() {
42-
filepath := getConfigPath("cloud-config-no-global")
43-
44-
client, err := cloud.NewClient(filepath)
45-
46-
Ω(client).Should(BeNil())
47-
Ω(err.Error()).Should(ContainSubstring("section Global not found"))
48-
})
49-
})
50-
5140
It("should compress and encode string", func() {
5241
str := "Hello World"
5342

pkg/cloud/isolated_network_test.go

Lines changed: 87 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ var _ = Describe("Network", func() {
3636
errorMessage = "Error"
3737
)
3838

39-
error := errors.New(errorMessage)
39+
fakeError := errors.New(errorMessage)
4040
var ( // Declare shared vars.
4141
mockCtrl *gomock.Controller
4242
mockClient *csapi.CloudStackClient
@@ -68,49 +68,61 @@ var _ = Describe("Network", func() {
6868
mockCtrl.Finish()
6969
})
7070

71-
It("calls to create an isolated network when not found", func() {
72-
dummies.Zone1.Network = dummies.ISONet1
73-
dummies.Zone1.Network.ID = ""
74-
dummies.CSCluster.Status.Zones = capcv1.ZoneStatusMap{dummies.Zone1.ID: dummies.Zone1}
75-
dummies.CSCluster.Status.PublicIPNetworkID = dummies.ISONet1.ID
76-
77-
nos.EXPECT().GetNetworkOfferingID(gomock.Any()).Return("someOfferingID", 1, nil)
78-
ns.EXPECT().NewCreateNetworkParams(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).
79-
Return(&csapi.CreateNetworkParams{})
80-
ns.EXPECT().GetNetworkByName(dummies.ISONet1.Name).Return(nil, 0, nil)
81-
ns.EXPECT().GetNetworkByID(dummies.ISONet1.ID).Return(nil, 0, nil)
82-
ns.EXPECT().CreateNetwork(gomock.Any()).Return(&csapi.CreateNetworkResponse{Id: dummies.ISONet1.ID}, nil)
83-
as.EXPECT().NewListPublicIpAddressesParams().Return(&csapi.ListPublicIpAddressesParams{})
84-
as.EXPECT().ListPublicIpAddresses(gomock.Any()).
85-
Return(&csapi.ListPublicIpAddressesResponse{
86-
Count: 1,
87-
PublicIpAddresses: []*csapi.PublicIpAddress{{Id: dummies.PublicIPID, Ipaddress: "fakeIP"}}}, nil)
88-
as.EXPECT().NewAssociateIpAddressParams().Return(&csapi.AssociateIpAddressParams{})
89-
as.EXPECT().AssociateIpAddress(gomock.Any())
90-
fs.EXPECT().NewCreateEgressFirewallRuleParams(dummies.ISONet1.ID, cloud.NetworkProtocolTCP).
91-
Return(&csapi.CreateEgressFirewallRuleParams{})
92-
fs.EXPECT().CreateEgressFirewallRule(&csapi.CreateEgressFirewallRuleParams{}).
93-
Return(&csapi.CreateEgressFirewallRuleResponse{}, nil)
94-
95-
// Will add cluster tag once to Network and once to PublicIP.
96-
createdByResponse := &csapi.ListTagsResponse{Tags: []*csapi.Tag{{Key: cloud.CreatedByCAPCTagName, Value: "1"}}}
97-
gomock.InOrder(
98-
rs.EXPECT().NewListTagsParams().Return(&csapi.ListTagsParams{}),
99-
rs.EXPECT().ListTags(gomock.Any()).Return(createdByResponse, nil),
100-
rs.EXPECT().NewListTagsParams().Return(&csapi.ListTagsParams{}),
101-
rs.EXPECT().ListTags(gomock.Any()).Return(createdByResponse, nil))
102-
103-
// Will add creation and cluster tags to network and PublicIP.
104-
rs.EXPECT().NewCreateTagsParams(gomock.Any(), gomock.Any(), gomock.Any()).
105-
Return(&csapi.CreateTagsParams{}).Times(4)
106-
rs.EXPECT().CreateTags(gomock.Any()).Return(&csapi.CreateTagsResponse{}, nil).Times(4)
107-
108-
lbs.EXPECT().NewListLoadBalancerRulesParams().Return(&csapi.ListLoadBalancerRulesParams{})
109-
lbs.EXPECT().ListLoadBalancerRules(gomock.Any()).Return(
110-
&csapi.ListLoadBalancerRulesResponse{LoadBalancerRules: []*csapi.LoadBalancerRule{
111-
{Publicport: strconv.Itoa(int(dummies.EndPointPort)), Id: dummies.LBRuleID}}}, nil)
112-
113-
Ω(client.GetOrCreateIsolatedNetwork(dummies.CSZone1, dummies.CSISONet1, dummies.CSCluster)).Should(Succeed())
71+
Context("Get or Create Isolated network in CloudStack", func() {
72+
It("calls to create an isolated network when not found", func() {
73+
dummies.Zone1.Network = dummies.ISONet1
74+
dummies.Zone1.Network.ID = ""
75+
dummies.CSCluster.Status.Zones = capcv1.ZoneStatusMap{dummies.Zone1.ID: dummies.Zone1}
76+
dummies.CSCluster.Status.PublicIPNetworkID = dummies.ISONet1.ID
77+
78+
nos.EXPECT().GetNetworkOfferingID(gomock.Any()).Return("someOfferingID", 1, nil)
79+
ns.EXPECT().NewCreateNetworkParams(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).
80+
Return(&csapi.CreateNetworkParams{})
81+
ns.EXPECT().GetNetworkByName(dummies.ISONet1.Name).Return(nil, 0, nil)
82+
ns.EXPECT().GetNetworkByID(dummies.ISONet1.ID).Return(nil, 0, nil)
83+
ns.EXPECT().CreateNetwork(gomock.Any()).Return(&csapi.CreateNetworkResponse{Id: dummies.ISONet1.ID}, nil)
84+
as.EXPECT().NewListPublicIpAddressesParams().Return(&csapi.ListPublicIpAddressesParams{})
85+
as.EXPECT().ListPublicIpAddresses(gomock.Any()).
86+
Return(&csapi.ListPublicIpAddressesResponse{
87+
Count: 1,
88+
PublicIpAddresses: []*csapi.PublicIpAddress{{Id: dummies.PublicIPID, Ipaddress: "fakeIP"}}}, nil)
89+
as.EXPECT().NewAssociateIpAddressParams().Return(&csapi.AssociateIpAddressParams{})
90+
as.EXPECT().AssociateIpAddress(gomock.Any())
91+
fs.EXPECT().NewCreateEgressFirewallRuleParams(dummies.ISONet1.ID, cloud.NetworkProtocolTCP).
92+
Return(&csapi.CreateEgressFirewallRuleParams{})
93+
fs.EXPECT().CreateEgressFirewallRule(&csapi.CreateEgressFirewallRuleParams{}).
94+
Return(&csapi.CreateEgressFirewallRuleResponse{}, nil)
95+
96+
// Will add cluster tag once to Network and once to PublicIP.
97+
createdByResponse := &csapi.ListTagsResponse{Tags: []*csapi.Tag{{Key: cloud.CreatedByCAPCTagName, Value: "1"}}}
98+
gomock.InOrder(
99+
rs.EXPECT().NewListTagsParams().Return(&csapi.ListTagsParams{}),
100+
rs.EXPECT().ListTags(gomock.Any()).Return(createdByResponse, nil),
101+
rs.EXPECT().NewListTagsParams().Return(&csapi.ListTagsParams{}),
102+
rs.EXPECT().ListTags(gomock.Any()).Return(createdByResponse, nil))
103+
104+
// Will add creation and cluster tags to network and PublicIP.
105+
rs.EXPECT().NewCreateTagsParams(gomock.Any(), gomock.Any(), gomock.Any()).
106+
Return(&csapi.CreateTagsParams{}).Times(4)
107+
rs.EXPECT().CreateTags(gomock.Any()).Return(&csapi.CreateTagsResponse{}, nil).Times(4)
108+
109+
lbs.EXPECT().NewListLoadBalancerRulesParams().Return(&csapi.ListLoadBalancerRulesParams{})
110+
lbs.EXPECT().ListLoadBalancerRules(gomock.Any()).Return(
111+
&csapi.ListLoadBalancerRulesResponse{LoadBalancerRules: []*csapi.LoadBalancerRule{
112+
{Publicport: strconv.Itoa(int(dummies.EndPointPort)), Id: dummies.LBRuleID}}}, nil)
113+
114+
Ω(client.GetOrCreateIsolatedNetwork(dummies.CSZone1, dummies.CSISONet1, dummies.CSCluster)).Should(Succeed())
115+
})
116+
117+
It("fails to get network offering from CloudStack", func() {
118+
ns.EXPECT().GetNetworkByName(dummies.ISONet1.Name).Return(nil, 0, nil)
119+
ns.EXPECT().GetNetworkByID(dummies.ISONet1.ID).Return(nil, 0, nil)
120+
nos.EXPECT().GetNetworkOfferingID(gomock.Any()).Return("", -1, fakeError)
121+
122+
err := client.GetOrCreateIsolatedNetwork(dummies.CSZone1, dummies.CSISONet1, dummies.CSCluster)
123+
Ω(err).ShouldNot(Succeed())
124+
Ω(err.Error()).Should(ContainSubstring("creating a new isolated network"))
125+
})
114126
})
115127

116128
Context("for a closed firewall", func() {
@@ -257,7 +269,7 @@ var _ = Describe("Network", func() {
257269
It("Failed to list LB rules", func() {
258270
lbs.EXPECT().NewListLoadBalancerRulesParams().Return(&csapi.ListLoadBalancerRulesParams{})
259271
lbs.EXPECT().ListLoadBalancerRules(gomock.Any()).Return(
260-
nil, error)
272+
nil, fakeError)
261273

262274
dummies.CSISONet1.Status.LBRuleID = ""
263275
Ω(client.ResolveLoadBalancerRuleDetails(dummies.CSZone1, dummies.CSISONet1, dummies.CSCluster).Error()).
@@ -298,7 +310,7 @@ var _ = Describe("Network", func() {
298310
Return(lbip)
299311
lbs.EXPECT().ListLoadBalancerRuleInstances(lbip).Return(&csapi.ListLoadBalancerRuleInstancesResponse{}, nil)
300312
lbs.EXPECT().NewAssignToLoadBalancerRuleParams(dummies.CSISONet1.Status.LBRuleID).Return(albp)
301-
lbs.EXPECT().AssignToLoadBalancerRule(albp).Return(nil, error)
313+
lbs.EXPECT().AssignToLoadBalancerRule(albp).Return(nil, fakeError)
302314

303315
Ω(client.AssignVMToLoadBalancerRule(dummies.CSISONet1, *dummies.CSMachine1.Spec.InstanceID)).ShouldNot(Succeed())
304316
})
@@ -337,7 +349,7 @@ var _ = Describe("Network", func() {
337349
It("Fails to resolve load balancer rule details", func() {
338350
lbs.EXPECT().NewListLoadBalancerRulesParams().Return(&csapi.ListLoadBalancerRulesParams{})
339351
lbs.EXPECT().ListLoadBalancerRules(gomock.Any()).
340-
Return(nil, error)
352+
Return(nil, fakeError)
341353
err := client.GetOrCreateLoadBalancerRule(dummies.CSZone1, dummies.CSISONet1, dummies.CSCluster)
342354
Ω(err).ShouldNot(Succeed())
343355
Ω(err.Error()).Should(ContainSubstring(errorMessage))
@@ -351,7 +363,7 @@ var _ = Describe("Network", func() {
351363
lbs.EXPECT().NewCreateLoadBalancerRuleParams(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).
352364
Return(&csapi.CreateLoadBalancerRuleParams{})
353365
lbs.EXPECT().CreateLoadBalancerRule(gomock.Any()).
354-
Return(nil, error)
366+
Return(nil, fakeError)
355367
err := client.GetOrCreateLoadBalancerRule(dummies.CSZone1, dummies.CSISONet1, dummies.CSCluster)
356368
Ω(err).ShouldNot(Succeed())
357369
Ω(err.Error()).Should(Equal(errorMessage))
@@ -371,15 +383,15 @@ var _ = Describe("Network", func() {
371383
It("Network deletion failure", func() {
372384
dnp := &csapi.DeleteNetworkParams{}
373385
ns.EXPECT().NewDeleteNetworkParams(dummies.ISONet1.ID).Return(dnp)
374-
ns.EXPECT().DeleteNetwork(dnp).Return(nil, error)
386+
ns.EXPECT().DeleteNetwork(dnp).Return(nil, fakeError)
375387
err := client.DeleteNetwork(dummies.ISONet1)
376388
Ω(err).ShouldNot(Succeed())
377389
Ω(err.Error()).Should(ContainSubstring("deleting network with id " + dummies.ISONet1.ID))
378390
})
379391
})
380392

381393
Context("Dispose or cleanup isolate network resources", func() {
382-
It("Delete all isolated network resources when not managed by CAPC", func() {
394+
It("delete all isolated network resources when not managed by CAPC", func() {
383395
dummies.CSISONet1.Status.PublicIPID = "publicIpId"
384396
rtlp := &csapi.ListTagsParams{}
385397
rs.EXPECT().NewListTagsParams().Return(rtlp).Times(4)
@@ -389,21 +401,41 @@ var _ = Describe("Network", func() {
389401
Ω(client.DisposeIsoNetResources(dummies.CSZone1, dummies.CSISONet1, dummies.CSCluster)).Should(Succeed())
390402
})
391403

392-
It("Delete all isolated network resources when managed by CAPC", func() {
404+
It("delete all isolated network resources when managed by CAPC", func() {
393405
dummies.CSISONet1.Status.PublicIPID = "publicIpId"
394406
rtdp := &csapi.DeleteTagsParams{}
395407
rtlp := &csapi.ListTagsParams{}
408+
dap := &csapi.DisassociateIpAddressParams{}
396409
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)
410+
rs.EXPECT().NewDeleteTagsParams(gomock.Any(), gomock.Any()).Return(rtdp).Times(2)
411+
rs.EXPECT().DeleteTags(rtdp).Return(&csapi.DeleteTagsResponse{}, nil).Times(2)
399412
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)
413+
rs.EXPECT().ListTags(rtlp).Return(createdByCAPCResponse, nil).Times(3)
414+
rs.EXPECT().ListTags(rtlp).Return(&csapi.ListTagsResponse{}, nil).Times(1)
402415
as.EXPECT().GetPublicIpAddressByID(dummies.CSISONet1.Status.PublicIPID).Return(&csapi.PublicIpAddress{}, 1, nil)
416+
as.EXPECT().NewDisassociateIpAddressParams(dummies.CSISONet1.Status.PublicIPID).Return(dap)
417+
as.EXPECT().DisassociateIpAddress(dap).Return(&csapi.DisassociateIpAddressResponse{}, nil)
403418

404419
Ω(client.DisposeIsoNetResources(dummies.CSZone1, dummies.CSISONet1, dummies.CSCluster)).Should(Succeed())
405420
})
406421

422+
It("disassociate IP address fails due to failure in deleting a resource i.e., disassociate Public IP", func() {
423+
dummies.CSISONet1.Status.PublicIPID = "publicIpId"
424+
rtdp := &csapi.DeleteTagsParams{}
425+
rtlp := &csapi.ListTagsParams{}
426+
dap := &csapi.DisassociateIpAddressParams{}
427+
createdByCAPCResponse := &csapi.ListTagsResponse{Tags: []*csapi.Tag{{Key: cloud.CreatedByCAPCTagName, Value: "1"}}}
428+
rs.EXPECT().NewDeleteTagsParams(gomock.Any(), gomock.Any()).Return(rtdp).Times(2)
429+
rs.EXPECT().DeleteTags(rtdp).Return(&csapi.DeleteTagsResponse{}, nil).Times(2)
430+
rs.EXPECT().NewListTagsParams().Return(rtlp).Times(2)
431+
rs.EXPECT().ListTags(rtlp).Return(createdByCAPCResponse, nil).Times(2)
432+
as.EXPECT().GetPublicIpAddressByID(dummies.CSISONet1.Status.PublicIPID).Return(&csapi.PublicIpAddress{}, 1, nil)
433+
as.EXPECT().NewDisassociateIpAddressParams(dummies.CSISONet1.Status.PublicIPID).Return(dap)
434+
as.EXPECT().DisassociateIpAddress(dap).Return(nil, fakeError)
435+
436+
Ω(client.DisposeIsoNetResources(dummies.CSZone1, dummies.CSISONet1, dummies.CSCluster)).ShouldNot(Succeed())
437+
})
438+
407439
})
408440

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

0 commit comments

Comments
 (0)