@@ -22,34 +22,36 @@ import (
22
22
"os"
23
23
"testing"
24
24
25
+ "go.uber.org/mock/gomock"
26
+
25
27
"github.com/IBM-Cloud/power-go-client/power/models"
26
28
"github.com/IBM/go-sdk-core/v5/core"
27
29
"github.com/IBM/ibm-cos-sdk-go/aws/awserr"
30
+ "github.com/IBM/ibm-cos-sdk-go/service/s3"
31
+ tgapiv1 "github.com/IBM/networking-go-sdk/transitgatewayapisv1"
28
32
"github.com/IBM/platform-services-go-sdk/resourcecontrollerv2"
29
33
"github.com/IBM/vpc-go-sdk/vpcv1"
30
34
regionUtil "github.com/ppc64le-cloud/powervs-utils"
31
- "go.uber.org/mock/gomock"
32
35
33
36
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
34
37
"k8s.io/utils/ptr"
35
38
36
- tgapiv1 "github.com/IBM/networking-go-sdk/transitgatewayapisv1"
37
- infrav1beta2 "sigs.k8s.io/cluster-api-provider-ibmcloud/api/v1beta2"
38
- mockP "sigs.k8s.io/cluster-api-provider-ibmcloud/pkg/cloud/services/powervs/mock"
39
- tgmock "sigs.k8s.io/cluster-api-provider-ibmcloud/pkg/cloud/services/transitgateway/mock"
40
39
capiv1beta1 "sigs.k8s.io/cluster-api/api/v1beta1"
41
40
41
+ infrav1beta2 "sigs.k8s.io/cluster-api-provider-ibmcloud/api/v1beta2"
42
42
"sigs.k8s.io/cluster-api-provider-ibmcloud/cmd/capibmadm/utils"
43
+ "sigs.k8s.io/cluster-api-provider-ibmcloud/pkg/cloud/services/cos"
43
44
mockcos "sigs.k8s.io/cluster-api-provider-ibmcloud/pkg/cloud/services/cos/mock"
44
45
"sigs.k8s.io/cluster-api-provider-ibmcloud/pkg/cloud/services/powervs"
46
+ mockP "sigs.k8s.io/cluster-api-provider-ibmcloud/pkg/cloud/services/powervs/mock"
45
47
"sigs.k8s.io/cluster-api-provider-ibmcloud/pkg/cloud/services/resourcecontroller"
46
48
mockRC "sigs.k8s.io/cluster-api-provider-ibmcloud/pkg/cloud/services/resourcecontroller/mock"
47
49
"sigs.k8s.io/cluster-api-provider-ibmcloud/pkg/cloud/services/resourcemanager"
48
50
"sigs.k8s.io/cluster-api-provider-ibmcloud/pkg/cloud/services/transitgateway"
51
+ tgmock "sigs.k8s.io/cluster-api-provider-ibmcloud/pkg/cloud/services/transitgateway/mock"
49
52
"sigs.k8s.io/cluster-api-provider-ibmcloud/pkg/cloud/services/vpc"
50
53
"sigs.k8s.io/cluster-api-provider-ibmcloud/pkg/cloud/services/vpc/mock"
51
54
52
- "github.com/IBM/ibm-cos-sdk-go/service/s3"
53
55
. "github.com/onsi/gomega"
54
56
)
55
57
@@ -5722,11 +5724,13 @@ func TestDeleteTransitGatewayConnections(t *testing.T) {
5722
5724
func TestReconcileCOSInstance (t * testing.T ) {
5723
5725
var (
5724
5726
mockResourceController * mockRC.MockResourceController
5727
+ mockCOSController * mockcos.MockCos
5725
5728
mockCtrl * gomock.Controller
5726
5729
)
5727
5730
setup := func (t * testing.T ) {
5728
5731
t .Helper ()
5729
5732
mockCtrl = gomock .NewController (t )
5733
+ mockCOSController = mockcos .NewMockCos (mockCtrl )
5730
5734
mockResourceController = mockRC .NewMockResourceController (mockCtrl )
5731
5735
}
5732
5736
teardown := func () {
@@ -5986,14 +5990,110 @@ func TestReconcileCOSInstance(t *testing.T) {
5986
5990
Name : ptr .To ("test-resource-instance-name" ),
5987
5991
}, nil , nil )
5988
5992
5993
+ mockCOSController .EXPECT ().GetBucketByName (gomock .Any ()).Return (nil , fmt .Errorf ("failed to get bucket by name" ))
5994
+
5995
+ cos .NewServiceFunc = func (_ cos.ServiceOptions , _ , _ string ) (cos.Cos , error ) {
5996
+ return mockCOSController , nil
5997
+ }
5998
+
5999
+ err = clusterScope .ReconcileCOSInstance (ctx )
6000
+ g .Expect (err ).ToNot (BeNil ())
6001
+ g .Expect (clusterScope .IBMPowerVSCluster .Status .COSInstance .ID ).To (Equal (ptr .To ("test-resource-instance-guid" )))
6002
+ g .Expect (clusterScope .IBMPowerVSCluster .Status .COSInstance .ControllerCreated ).To (Equal (ptr .To (true )))
6003
+ })
6004
+ t .Run ("When create COS bucket fails" , func (t * testing.T ) {
6005
+ g := NewWithT (t )
6006
+ setup (t )
6007
+ t .Cleanup (teardown )
6008
+ err := os .Setenv ("IBMCLOUD_APIKEY" , "test-api-key" )
6009
+ g .Expect (err ).To (BeNil ())
6010
+ defer os .Unsetenv ("IBMCLOUD_APIKEY" )
6011
+
6012
+ clusterScope := PowerVSClusterScope {
6013
+ ResourceClient : mockResourceController ,
6014
+ IBMPowerVSCluster : & infrav1beta2.IBMPowerVSCluster {
6015
+ Spec : infrav1beta2.IBMPowerVSClusterSpec {
6016
+ CosInstance : & infrav1beta2.CosInstance {
6017
+ BucketRegion : "test-bucket-region" ,
6018
+ },
6019
+ ResourceGroup : & infrav1beta2.IBMPowerVSResourceReference {
6020
+ ID : ptr .To ("test-resource-group-id" ),
6021
+ },
6022
+ },
6023
+ Status : infrav1beta2.IBMPowerVSClusterStatus {
6024
+ ServiceInstance : & infrav1beta2.ResourceReference {
6025
+ ID : ptr .To ("test-serviceinstance-id" ),
6026
+ },
6027
+ },
6028
+ },
6029
+ }
6030
+ mockResourceController .EXPECT ().GetInstanceByName (gomock .Any (), gomock .Any (), gomock .Any ()).Return (nil , nil )
6031
+
6032
+ mockResourceController .EXPECT ().CreateResourceInstance (gomock .Any ()).Return (& resourcecontrollerv2.ResourceInstance {
6033
+ ID : ptr .To ("test-resource-instance-id" ),
6034
+ GUID : ptr .To ("test-resource-instance-guid" ),
6035
+ Name : ptr .To ("test-resource-instance-name" ),
6036
+ }, nil , nil )
6037
+
6038
+ mockCOSController .EXPECT ().GetBucketByName (gomock .Any ()).Return (nil , awserr .New (s3 .ErrCodeNoSuchBucket , "bucket does not exist" , nil ))
6039
+ mockCOSController .EXPECT ().CreateBucket (gomock .Any ()).Return (nil , fmt .Errorf ("failed to create bucket" ))
6040
+
6041
+ cos .NewServiceFunc = func (_ cos.ServiceOptions , _ , _ string ) (cos.Cos , error ) {
6042
+ return mockCOSController , nil
6043
+ }
6044
+
5989
6045
err = clusterScope .ReconcileCOSInstance (ctx )
5990
6046
g .Expect (err ).ToNot (BeNil ())
5991
6047
g .Expect (clusterScope .IBMPowerVSCluster .Status .COSInstance .ID ).To (Equal (ptr .To ("test-resource-instance-guid" )))
5992
6048
g .Expect (clusterScope .IBMPowerVSCluster .Status .COSInstance .ControllerCreated ).To (Equal (ptr .To (true )))
5993
6049
})
5994
6050
5995
- //TODO: Complete cases to cover control flow on checkCOSBucket and createCOSBucket
5996
- // Github issue: https://github.com/kubernetes-sigs/cluster-api-provider-ibmcloud/issues/2034
6051
+ t .Run ("When create COS bucket succeeds" , func (t * testing.T ) {
6052
+ g := NewWithT (t )
6053
+ setup (t )
6054
+ t .Cleanup (teardown )
6055
+ err := os .Setenv ("IBMCLOUD_APIKEY" , "test-api-key" )
6056
+ g .Expect (err ).To (BeNil ())
6057
+ defer os .Unsetenv ("IBMCLOUD_APIKEY" )
6058
+
6059
+ clusterScope := PowerVSClusterScope {
6060
+ ResourceClient : mockResourceController ,
6061
+ IBMPowerVSCluster : & infrav1beta2.IBMPowerVSCluster {
6062
+ Spec : infrav1beta2.IBMPowerVSClusterSpec {
6063
+ CosInstance : & infrav1beta2.CosInstance {
6064
+ BucketRegion : "test-bucket-region" ,
6065
+ },
6066
+ ResourceGroup : & infrav1beta2.IBMPowerVSResourceReference {
6067
+ ID : ptr .To ("test-resource-group-id" ),
6068
+ },
6069
+ },
6070
+ Status : infrav1beta2.IBMPowerVSClusterStatus {
6071
+ ServiceInstance : & infrav1beta2.ResourceReference {
6072
+ ID : ptr .To ("test-serviceinstance-id" ),
6073
+ },
6074
+ },
6075
+ },
6076
+ }
6077
+ mockResourceController .EXPECT ().GetInstanceByName (gomock .Any (), gomock .Any (), gomock .Any ()).Return (nil , nil )
6078
+
6079
+ mockResourceController .EXPECT ().CreateResourceInstance (gomock .Any ()).Return (& resourcecontrollerv2.ResourceInstance {
6080
+ ID : ptr .To ("test-resource-instance-id" ),
6081
+ GUID : ptr .To ("test-resource-instance-guid" ),
6082
+ Name : ptr .To ("test-resource-instance-name" ),
6083
+ }, nil , nil )
6084
+
6085
+ mockCOSController .EXPECT ().GetBucketByName (gomock .Any ()).Return (nil , awserr .New (s3 .ErrCodeNoSuchBucket , "bucket does not exist" , nil ))
6086
+ mockCOSController .EXPECT ().CreateBucket (gomock .Any ()).Return (nil , nil )
6087
+
6088
+ cos .NewServiceFunc = func (_ cos.ServiceOptions , _ , _ string ) (cos.Cos , error ) {
6089
+ return mockCOSController , nil
6090
+ }
6091
+
6092
+ err = clusterScope .ReconcileCOSInstance (ctx )
6093
+ g .Expect (err ).To (BeNil ())
6094
+ g .Expect (clusterScope .IBMPowerVSCluster .Status .COSInstance .ID ).To (Equal (ptr .To ("test-resource-instance-guid" )))
6095
+ g .Expect (clusterScope .IBMPowerVSCluster .Status .COSInstance .ControllerCreated ).To (Equal (ptr .To (true )))
6096
+ })
5997
6097
}
5998
6098
5999
6099
func TestCheckCOSServiceInstance (t * testing.T ) {
0 commit comments