@@ -17,48 +17,126 @@ limitations under the License.
17
17
package controllers
18
18
19
19
import (
20
- "context"
20
+ "fmt"
21
+ "testing"
22
+ "time"
21
23
24
+ . "github.com/onsi/gomega"
25
+ corev1 "k8s.io/api/core/v1"
22
26
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
23
27
"k8s.io/klog/v2/klogr"
24
28
ctrl "sigs.k8s.io/controller-runtime"
25
29
"sigs.k8s.io/controller-runtime/pkg/client"
26
30
27
31
infrav1beta1 "sigs.k8s.io/cluster-api-provider-ibmcloud/api/v1beta1"
28
-
29
- . "github.com/onsi/ginkgo"
30
- . "github.com/onsi/gomega"
32
+ capiv1beta1 "sigs.k8s.io/cluster-api/api/v1beta1"
33
+ "sigs.k8s.io/cluster-api/util"
31
34
)
32
35
33
- var _ = Describe ("IBMPowerVSClusterReconciler" , func () {
34
-
35
- Context ("Reconcile an IBMMPowerVSCluster" , func () {
36
- It ("should not error and not requeue the request" , func () {
37
- ctx := context .Background ()
36
+ func TestIBMPowerVSClusterReconciler (t * testing.T ) {
37
+ testCases := []struct {
38
+ name string
39
+ powervsCluster * infrav1beta1.IBMPowerVSCluster
40
+ ownerCluster * capiv1beta1.Cluster
41
+ expectError bool
42
+ }{
43
+ {
44
+ name : "Should fail Reconcile if owner cluster not found" ,
45
+ powervsCluster : & infrav1beta1.IBMPowerVSCluster {ObjectMeta : metav1.ObjectMeta {GenerateName : "powervs-test-" , OwnerReferences : []metav1.OwnerReference {
46
+ {
47
+ APIVersion : capiv1beta1 .GroupVersion .String (),
48
+ Kind : "Cluster" ,
49
+ Name : "capi-test" ,
50
+ UID : "1" ,
51
+ }}},
52
+ Spec : infrav1beta1.IBMPowerVSClusterSpec {ServiceInstanceID : "foo" }},
53
+ expectError : true ,
54
+ },
55
+ {
56
+ name : "Should not reconcile if owner reference is not set" ,
57
+ powervsCluster : & infrav1beta1.IBMPowerVSCluster {ObjectMeta : metav1.ObjectMeta {GenerateName : "powervs-test-" }, Spec : infrav1beta1.IBMPowerVSClusterSpec {ServiceInstanceID : "foo" }},
58
+ expectError : false ,
59
+ },
60
+ {
61
+ name : "Should Reconcile successfully if no IBMPowerVSCluster found" ,
62
+ expectError : false ,
63
+ },
64
+ }
38
65
66
+ for _ , tc := range testCases {
67
+ t .Run (tc .name , func (t * testing.T ) {
68
+ g := NewWithT (t )
39
69
reconciler := & IBMPowerVSClusterReconciler {
40
- Client : k8sClient ,
70
+ Client : testEnv . Client ,
41
71
Log : klogr .New (),
42
72
}
43
73
44
- instance := & infrav1beta1.IBMPowerVSCluster {ObjectMeta : metav1.ObjectMeta {Name : "foo" , Namespace : "default" }, Spec : infrav1beta1.IBMPowerVSClusterSpec {ServiceInstanceID : "foo" }}
74
+ ns , err := testEnv .CreateNamespace (ctx , fmt .Sprintf ("namespace-%s" , util .RandomString (5 )))
75
+ g .Expect (err ).To (BeNil ())
45
76
46
- // Create the IBMPowerVSCluster object and expect the Reconcile to be created
47
- Expect (k8sClient .Create (ctx , instance )).To (Succeed ())
48
- defer func () {
49
- err := k8sClient .Delete (ctx , instance )
50
- Expect (err ).NotTo (HaveOccurred ())
51
- }()
77
+ if tc .ownerCluster != nil {
78
+ tc .ownerCluster .Namespace = ns .Name
79
+ g .Expect (testEnv .Create (ctx , tc .ownerCluster )).To (Succeed ())
80
+ defer func (do ... client.Object ) {
81
+ g .Expect (testEnv .Cleanup (ctx , do ... )).To (Succeed ())
82
+ }(tc .ownerCluster )
83
+ tc .powervsCluster .OwnerReferences = []metav1.OwnerReference {
84
+ {
85
+ APIVersion : capiv1beta1 .GroupVersion .String (),
86
+ Kind : "Cluster" ,
87
+ Name : tc .ownerCluster .Name ,
88
+ UID : "1" ,
89
+ },
90
+ }
91
+ }
92
+ createCluster (g , tc .powervsCluster , ns .Name )
93
+ defer cleanupCluster (g , tc .powervsCluster , ns )
52
94
53
- result , err := reconciler .Reconcile (ctx , ctrl.Request {
54
- NamespacedName : client.ObjectKey {
55
- Namespace : instance .Namespace ,
56
- Name : instance .Name ,
57
- },
58
- })
59
- Expect (err ).NotTo (HaveOccurred ())
60
- Expect (result .RequeueAfter ).To (BeZero ())
61
- Expect (result .Requeue ).To (BeFalse ())
95
+ if tc .powervsCluster != nil {
96
+ _ , err := reconciler .Reconcile (ctx , ctrl.Request {
97
+ NamespacedName : client.ObjectKey {
98
+ Namespace : tc .powervsCluster .Namespace ,
99
+ Name : tc .powervsCluster .Name ,
100
+ },
101
+ })
102
+ if tc .expectError {
103
+ g .Expect (err ).ToNot (BeNil ())
104
+ } else {
105
+ g .Expect (err ).To (BeNil ())
106
+ }
107
+ } else {
108
+ _ , err := reconciler .Reconcile (ctx , ctrl.Request {
109
+ NamespacedName : client.ObjectKey {
110
+ Namespace : ns .Name ,
111
+ Name : "test" ,
112
+ },
113
+ })
114
+ g .Expect (err ).To (BeNil ())
115
+ }
62
116
})
63
- })
64
- })
117
+ }
118
+ }
119
+
120
+ func createCluster (g * WithT , powervsCluster * infrav1beta1.IBMPowerVSCluster , namespace string ) {
121
+ if powervsCluster != nil {
122
+ powervsCluster .Namespace = namespace
123
+ g .Expect (testEnv .Create (ctx , powervsCluster )).To (Succeed ())
124
+ g .Eventually (func () bool {
125
+ cluster := & infrav1beta1.IBMPowerVSCluster {}
126
+ key := client.ObjectKey {
127
+ Name : powervsCluster .Name ,
128
+ Namespace : namespace ,
129
+ }
130
+ err := testEnv .Get (ctx , key , cluster )
131
+ return err == nil
132
+ }, 10 * time .Second ).Should (Equal (true ))
133
+ }
134
+ }
135
+
136
+ func cleanupCluster (g * WithT , powervsCluster * infrav1beta1.IBMPowerVSCluster , namespace * corev1.Namespace ) {
137
+ if powervsCluster != nil {
138
+ func (do ... client.Object ) {
139
+ g .Expect (testEnv .Cleanup (ctx , do ... )).To (Succeed ())
140
+ }(powervsCluster , namespace )
141
+ }
142
+ }
0 commit comments