@@ -1765,6 +1765,74 @@ func TestCreateLoadbalancer(t *testing.T) {
1765
1765
}, nil , nil )
1766
1766
mockgt .EXPECT ().AttachTag (gomock .Any ()).Return (nil , nil , nil )
1767
1767
1768
+ loadBalancerStatus , err := clusterScope .createLoadBalancer (lb )
1769
+ g .Expect (err ).To (BeNil ())
1770
+ g .Expect (loadBalancerStatus .State ).To (BeEquivalentTo (infrav1beta2 .VPCLoadBalancerStateActive ))
1771
+ g .Expect (loadBalancerStatus .ControllerCreated ).To (Equal (ptr .To (true )))
1772
+ g .Expect (loadBalancerStatus .Hostname ).To (Equal (ptr .To ("test-lb-hostname" )))
1773
+ })
1774
+ t .Run ("When IBMVPCClient client CreateLoadBalancer successfully creates load balancer in cloud but tagging load balancer fails" , func (* testing.T ) {
1775
+ g := NewWithT (t )
1776
+ setup (t )
1777
+ t .Cleanup (teardown )
1778
+
1779
+ clusterAPIServerPort := int32 (9090 )
1780
+ clusterScope := PowerVSClusterScope {
1781
+ IBMVPCClient : mockVpc ,
1782
+ GlobalTaggingClient : mockgt ,
1783
+ IBMPowerVSCluster : & infrav1beta2.IBMPowerVSCluster {
1784
+ Spec : infrav1beta2.IBMPowerVSClusterSpec {
1785
+
1786
+ ResourceGroup : & infrav1beta2.IBMPowerVSResourceReference {
1787
+ ID : ptr .To ("test-resource-gid" ),
1788
+ },
1789
+ LoadBalancers : []infrav1beta2.VPCLoadBalancerSpec {
1790
+ {
1791
+ Name : "test-lb" ,
1792
+ ID : nil ,
1793
+ },
1794
+ },
1795
+ VPCSubnets : []infrav1beta2.Subnet {
1796
+ {
1797
+ Name : ptr .To ("test-subnet" ),
1798
+ ID : ptr .To ("test-subnetid" ),
1799
+ },
1800
+ },
1801
+ },
1802
+ Status : infrav1beta2.IBMPowerVSClusterStatus {
1803
+ VPCSubnet : map [string ]infrav1beta2.ResourceReference {
1804
+ "test-subnet" : {
1805
+ ID : ptr .To ("test-resource-reference-id" ),
1806
+ },
1807
+ },
1808
+ },
1809
+ },
1810
+ Cluster : & capiv1beta1.Cluster {
1811
+ Spec : capiv1beta1.ClusterSpec {
1812
+ ClusterNetwork : & capiv1beta1.ClusterNetwork {
1813
+ APIServerPort : & clusterAPIServerPort ,
1814
+ },
1815
+ },
1816
+ },
1817
+ }
1818
+
1819
+ lb := infrav1beta2.VPCLoadBalancerSpec {
1820
+ Name : "test-lb" ,
1821
+ AdditionalListeners : []infrav1beta2.AdditionalListenerSpec {
1822
+ {
1823
+ Port : int64 (9090 ),
1824
+ },
1825
+ },
1826
+ }
1827
+
1828
+ mockVpc .EXPECT ().CreateLoadBalancer (gomock .Any ()).Return (& vpcv1.LoadBalancer {
1829
+ ID : ptr .To ("test-lb-id" ),
1830
+ ProvisioningStatus : ptr .To ("active" ),
1831
+ Hostname : ptr .To ("test-lb-hostname" ),
1832
+ CRN : ptr .To ("lb-crn" ),
1833
+ }, nil , nil )
1834
+ mockgt .EXPECT ().AttachTag (gomock .Any ()).Return (nil , nil , fmt .Errorf ("failed to tag load balancer" ))
1835
+
1768
1836
loadBalancerStatus , err := clusterScope .createLoadBalancer (lb )
1769
1837
g .Expect (err ).To (BeNil ())
1770
1838
g .Expect (loadBalancerStatus .State ).To (BeEquivalentTo (infrav1beta2 .VPCLoadBalancerStateActive ))
@@ -2750,6 +2818,28 @@ func TestPowerVSScopeCreateVPC(t *testing.T) {
2750
2818
g .Expect (vpcID ).To (Equal (vpcOutput .ID ))
2751
2819
})
2752
2820
2821
+ t .Run ("When create VPC is successful but tagging vpc fails" , func (t * testing.T ) {
2822
+ g := NewWithT (t )
2823
+ setup (t )
2824
+ t .Cleanup (teardown )
2825
+
2826
+ clusterScope := PowerVSClusterScope {
2827
+ IBMVPCClient : mockVPC ,
2828
+ GlobalTaggingClient : mockgt ,
2829
+ Cluster : & capiv1beta1.Cluster {Spec : capiv1beta1.ClusterSpec {ClusterNetwork : nil }},
2830
+ IBMPowerVSCluster : & infrav1beta2.IBMPowerVSCluster {Spec : infrav1beta2.IBMPowerVSClusterSpec {
2831
+ ResourceGroup : & infrav1beta2.IBMPowerVSResourceReference {ID : ptr .To ("resourceGroupID" )}}},
2832
+ }
2833
+ vpcOutput := & vpcv1.VPC {Name : ptr .To ("VPCName" ), ID : ptr .To ("vpcID" ), DefaultSecurityGroup : & vpcv1.SecurityGroupReference {ID : ptr .To ("DefaultSecurityGroupID" )}}
2834
+ mockVPC .EXPECT ().CreateVPC (gomock .Any ()).Return (vpcOutput , nil , nil )
2835
+ mockgt .EXPECT ().AttachTag (gomock .Any ()).Return (nil , nil , fmt .Errorf ("AttachTag returns error" ))
2836
+ mockVPC .EXPECT ().CreateSecurityGroupRule (gomock .Any ()).Return (nil , nil , nil )
2837
+
2838
+ vpcID , err := clusterScope .createVPC ()
2839
+ g .Expect (err ).To (BeNil ())
2840
+ g .Expect (vpcID ).To (Equal (vpcOutput .ID ))
2841
+ })
2842
+
2753
2843
t .Run ("When resourceGroupID is not nil and CreateSecurityGroupRule returns error" , func (t * testing.T ) {
2754
2844
g := NewWithT (t )
2755
2845
setup (t )
@@ -4083,6 +4173,31 @@ func TestCreateVPCSubnet(t *testing.T) {
4083
4173
g .Expect (subnetID ).To (Equal (subnet1Details .ID ))
4084
4174
g .Expect (err ).To (BeNil ())
4085
4175
})
4176
+ t .Run ("When createVPCSubnet returns success but tagging subnet fails" , func (t * testing.T ) {
4177
+ g := NewWithT (t )
4178
+ setup (t )
4179
+ t .Cleanup (teardown )
4180
+
4181
+ clusterScope := PowerVSClusterScope {
4182
+ Cluster : & capiv1beta1.Cluster {},
4183
+ IBMVPCClient : mockVPC ,
4184
+ GlobalTaggingClient : mockgt ,
4185
+ IBMPowerVSCluster : & infrav1beta2.IBMPowerVSCluster {
4186
+ Spec : infrav1beta2.IBMPowerVSClusterSpec {
4187
+ ResourceGroup : & infrav1beta2.IBMPowerVSResourceReference {ID : ptr .To ("resourceGroupID" )},
4188
+ },
4189
+ Status : infrav1beta2.IBMPowerVSClusterStatus {VPC : & infrav1beta2.ResourceReference {ID : ptr .To ("vpcID" )}},
4190
+ },
4191
+ }
4192
+ subnet := infrav1beta2.Subnet {Name : ptr .To ("ClusterName-vpcsubnet-eu-de-1" ), Zone : ptr .To ("eu-de-1" )}
4193
+ subnet1Details := & vpcv1.Subnet {ID : ptr .To ("subnet1ID" ), Name : ptr .To ("ClusterName-vpcsubnet-eu-de-1" ), CRN : ptr .To ("subnet-crn" )}
4194
+
4195
+ mockVPC .EXPECT ().CreateSubnet (gomock .Any ()).Return (subnet1Details , nil , nil )
4196
+ mockgt .EXPECT ().AttachTag (gomock .Any ()).Return (nil , nil , fmt .Errorf ("error attching subnet" ))
4197
+ subnetID , err := clusterScope .createVPCSubnet (subnet )
4198
+ g .Expect (subnetID ).To (Equal (subnet1Details .ID ))
4199
+ g .Expect (err ).To (BeNil ())
4200
+ })
4086
4201
t .Run ("When zone is not set and createVPCSubnet returns success" , func (t * testing.T ) {
4087
4202
g := NewWithT (t )
4088
4203
setup (t )
@@ -7263,6 +7378,53 @@ func TestCreateTransitGateway(t *testing.T) {
7263
7378
g .Expect (* clusterScope .IBMPowerVSCluster .Status .TransitGateway .VPCConnection .ControllerCreated ).To (BeTrue ())
7264
7379
g .Expect (err ).To (BeNil ())
7265
7380
})
7381
+
7382
+ t .Run ("When TransitGateway is created but tagging TransitGateway fails" , func (t * testing.T ) {
7383
+ g := NewWithT (t )
7384
+ setup (t )
7385
+ t .Cleanup (teardown )
7386
+
7387
+ clusterScope := PowerVSClusterScope {
7388
+ Cluster : & capiv1beta1.Cluster {},
7389
+ TransitGatewayClient : mockTransitGateway ,
7390
+ IBMVPCClient : mockVPC ,
7391
+ ResourceClient : mockResourceController ,
7392
+ GlobalTaggingClient : mockgt ,
7393
+ IBMPowerVSCluster : & infrav1beta2.IBMPowerVSCluster {
7394
+ Spec : infrav1beta2.IBMPowerVSClusterSpec {
7395
+ TransitGateway : & infrav1beta2.TransitGateway {
7396
+ GlobalRouting : ptr .To (true ),
7397
+ },
7398
+ ResourceGroup : & infrav1beta2.IBMPowerVSResourceReference {ID : ptr .To ("resourceGroupID" )},
7399
+ Zone : ptr .To ("zone-ID" ),
7400
+ VPC : & infrav1beta2.VPCResourceReference {Region : ptr .To ("region" )},
7401
+ },
7402
+ Status : infrav1beta2.IBMPowerVSClusterStatus {
7403
+ ServiceInstance : & infrav1beta2.ResourceReference {
7404
+ ID : ptr .To ("serviceInstanceID" ),
7405
+ },
7406
+ VPC : & infrav1beta2.ResourceReference {
7407
+ ID : ptr .To ("vpcID" ),
7408
+ },
7409
+ },
7410
+ },
7411
+ }
7412
+
7413
+ mockTransitGateway .EXPECT ().CreateTransitGateway (gomock .Any ()).Return (& tgapiv1.TransitGateway {ID : ptr .To ("transitGatewayID" ), Name : ptr .To ("transitGatewayName" ), Status : ptr .To (string (infrav1beta2 .TransitGatewayStateAvailable ))}, nil , nil )
7414
+ mockgt .EXPECT ().AttachTag (gomock .Any ()).Return (nil , nil , fmt .Errorf ("failed to tag transitGateway" ))
7415
+ mockVPC .EXPECT ().GetVPC (gomock .Any ()).Return (& vpcv1.VPC {CRN : ptr .To ("crn" )}, nil , nil )
7416
+ mockResourceController .EXPECT ().GetResourceInstance (gomock .Any ()).Return (& resourcecontrollerv2.ResourceInstance {CRN : ptr .To ("crn" )}, nil , nil )
7417
+ mockTransitGateway .EXPECT ().CreateTransitGatewayConnection (gomock .Any ()).Return (& tgapiv1.TransitGatewayConnectionCust {ID : ptr .To ("pvs-connID" )}, nil , nil )
7418
+ mockTransitGateway .EXPECT ().CreateTransitGatewayConnection (gomock .Any ()).Return (& tgapiv1.TransitGatewayConnectionCust {ID : ptr .To ("vpc-connID" )}, nil , nil )
7419
+ err := clusterScope .createTransitGateway ()
7420
+ g .Expect (* clusterScope .IBMPowerVSCluster .Status .TransitGateway .ID ).To (BeEquivalentTo ("transitGatewayID" ))
7421
+ g .Expect (* clusterScope .IBMPowerVSCluster .Status .TransitGateway .ControllerCreated ).To (BeTrue ())
7422
+ g .Expect (* clusterScope .IBMPowerVSCluster .Status .TransitGateway .PowerVSConnection .ID ).To (BeEquivalentTo ("pvs-connID" ))
7423
+ g .Expect (* clusterScope .IBMPowerVSCluster .Status .TransitGateway .PowerVSConnection .ControllerCreated ).To (BeTrue ())
7424
+ g .Expect (* clusterScope .IBMPowerVSCluster .Status .TransitGateway .VPCConnection .ID ).To (BeEquivalentTo ("vpc-connID" ))
7425
+ g .Expect (* clusterScope .IBMPowerVSCluster .Status .TransitGateway .VPCConnection .ControllerCreated ).To (BeTrue ())
7426
+ g .Expect (err ).To (BeNil ())
7427
+ })
7266
7428
}
7267
7429
7268
7430
func makePowerVSClusterScope (mockTransitGateway * tgmock.MockTransitGateway , mockVPC * mock.MockVpc , mockResourceController * mockRC.MockResourceController ) PowerVSClusterScope {
@@ -9621,6 +9783,33 @@ func TestCreateVPCSecurityGroup(t *testing.T) {
9621
9783
g .Expect (* sg ).To (BeEquivalentTo ("securityGroupID" ))
9622
9784
g .Expect (err ).To (BeNil ())
9623
9785
})
9786
+
9787
+ t .Run ("When SecurityGroup is created successfully but tagging SecurityGroup fails" , func (t * testing.T ) {
9788
+ g := NewWithT (t )
9789
+ setup (t )
9790
+ t .Cleanup (teardown )
9791
+ clusterScope := PowerVSClusterScope {
9792
+ Cluster : & capiv1beta1.Cluster {},
9793
+ IBMVPCClient : mockVPC ,
9794
+ GlobalTaggingClient : mockgt ,
9795
+ IBMPowerVSCluster : & infrav1beta2.IBMPowerVSCluster {
9796
+ Spec : infrav1beta2.IBMPowerVSClusterSpec {
9797
+ VPCSecurityGroups : append ([]infrav1beta2.VPCSecurityGroup {}, infrav1beta2.VPCSecurityGroup {
9798
+ Name : ptr .To ("securityGroupName" ),
9799
+ }),
9800
+ ResourceGroup : & infrav1beta2.IBMPowerVSResourceReference {
9801
+ ID : ptr .To ("resourceGroupID" ),
9802
+ },
9803
+ },
9804
+ },
9805
+ }
9806
+
9807
+ mockVPC .EXPECT ().CreateSecurityGroup (gomock .Any ()).Return (& vpcv1.SecurityGroup {ID : ptr .To ("securityGroupID" ), CRN : ptr .To ("sg-crn" )}, nil , nil )
9808
+ mockgt .EXPECT ().AttachTag (gomock .Any ()).Return (nil , nil , fmt .Errorf ("failed to tag SecurityGroup" ))
9809
+ sg , err := clusterScope .createVPCSecurityGroup (clusterScope .IBMPowerVSCluster .Spec .VPCSecurityGroups [0 ])
9810
+ g .Expect (* sg ).To (BeEquivalentTo ("securityGroupID" ))
9811
+ g .Expect (err ).To (BeNil ())
9812
+ })
9624
9813
t .Run ("When SecurityGroup returns error" , func (t * testing.T ) {
9625
9814
g := NewWithT (t )
9626
9815
setup (t )
0 commit comments