@@ -1146,16 +1146,159 @@ func TestReconcileVPCResources(t *testing.T) {
1146
1146
}
1147
1147
}
1148
1148
1149
- func getServiceInstanceReadyCondition () capiv1beta1.Condition {
1150
- return capiv1beta1.Condition {
1151
- Type : infrav1beta2 .ServiceInstanceReadyCondition ,
1152
- Status : "True" ,
1149
+ func TestReconcilePowerVSResources (t * testing.T ) {
1150
+ testCases := []struct {
1151
+ name string
1152
+ powerVSClusterScopeFunc func () * scope.PowerVSClusterScope
1153
+ reconcileResult reconcileResult
1154
+ conditions capiv1beta1.Conditions
1155
+ }{
1156
+ {
1157
+ name : "When Reconciling PowerVS service instance returns error" ,
1158
+ powerVSClusterScopeFunc : func () * scope.PowerVSClusterScope {
1159
+ clusterScope := & scope.PowerVSClusterScope {
1160
+ IBMPowerVSCluster : & infrav1beta2.IBMPowerVSCluster {
1161
+ Status : infrav1beta2.IBMPowerVSClusterStatus {
1162
+ ServiceInstance : & infrav1beta2.ResourceReference {
1163
+ ID : ptr .To ("serviceInstanceID" ),
1164
+ },
1165
+ },
1166
+ },
1167
+ }
1168
+ mockResourceController := resourceclientmock .NewMockResourceController (gomock .NewController (t ))
1169
+ mockResourceController .EXPECT ().GetResourceInstance (gomock .Any ()).Return (nil , nil , fmt .Errorf ("error getting resource instance" ))
1170
+ clusterScope .ResourceClient = mockResourceController
1171
+ return clusterScope
1172
+ },
1173
+ reconcileResult : reconcileResult {
1174
+ error : errors .New ("error getting resource instance" ),
1175
+ },
1176
+
1177
+ conditions : capiv1beta1.Conditions {
1178
+ capiv1beta1.Condition {
1179
+ Type : infrav1beta2 .ServiceInstanceReadyCondition ,
1180
+ Status : "False" ,
1181
+ Severity : capiv1beta1 .ConditionSeverityError ,
1182
+ LastTransitionTime : metav1.Time {},
1183
+ Reason : infrav1beta2 .ServiceInstanceReconciliationFailedReason ,
1184
+ Message : "error getting resource instance" ,
1185
+ },
1186
+ },
1187
+ },
1188
+ {
1189
+ name : "When Reconciling PowerVS service instance returns requeue as true" ,
1190
+ powerVSClusterScopeFunc : func () * scope.PowerVSClusterScope {
1191
+ clusterScope := & scope.PowerVSClusterScope {
1192
+ IBMPowerVSCluster : & infrav1beta2.IBMPowerVSCluster {
1193
+ Status : infrav1beta2.IBMPowerVSClusterStatus {
1194
+ ServiceInstance : & infrav1beta2.ResourceReference {
1195
+ ID : ptr .To ("serviceInstanceID" ),
1196
+ },
1197
+ },
1198
+ },
1199
+ }
1200
+ mockResourceController := resourceclientmock .NewMockResourceController (gomock .NewController (t ))
1201
+ mockResourceController .EXPECT ().GetResourceInstance (gomock .Any ()).Return (& resourcecontrollerv2.ResourceInstance {State : ptr .To (string (infrav1beta2 .ServiceInstanceStateProvisioning )), Name : ptr .To ("serviceInstanceName" )}, nil , nil )
1202
+ clusterScope .ResourceClient = mockResourceController
1203
+ return clusterScope
1204
+ },
1205
+ reconcileResult : reconcileResult {
1206
+ Result : reconcile.Result {
1207
+ Requeue : true ,
1208
+ },
1209
+ },
1210
+ },
1211
+ {
1212
+ name : "When Reconciling network returns error" ,
1213
+ powerVSClusterScopeFunc : func () * scope.PowerVSClusterScope {
1214
+ clusterScope := & scope.PowerVSClusterScope {
1215
+ IBMPowerVSCluster : & infrav1beta2.IBMPowerVSCluster {
1216
+ Spec : infrav1beta2.IBMPowerVSClusterSpec {
1217
+ ServiceInstanceID : "serviceInstanceID" ,
1218
+ },
1219
+ Status : infrav1beta2.IBMPowerVSClusterStatus {
1220
+ DHCPServer : & infrav1beta2.ResourceReference {ID : ptr .To ("DHCPServerID" )},
1221
+ ServiceInstance : & infrav1beta2.ResourceReference {ID : ptr .To ("serviceInstanceID" )},
1222
+ },
1223
+ },
1224
+ }
1225
+ mockPowerVS := powervsmock .NewMockPowerVS (gomock .NewController (t ))
1226
+ dhcpServer := & models.DHCPServerDetail {ID : ptr .To ("dhcpID" ), Status : ptr .To (string (infrav1beta2 .DHCPServerStateError ))}
1227
+ mockPowerVS .EXPECT ().GetDHCPServer (gomock .Any ()).Return (dhcpServer , nil )
1228
+ mockPowerVS .EXPECT ().WithClients (gomock .Any ())
1229
+ mockResourceController := resourceclientmock .NewMockResourceController (gomock .NewController (t ))
1230
+ mockResourceController .EXPECT ().GetResourceInstance (gomock .Any ()).Return (& resourcecontrollerv2.ResourceInstance {State : ptr .To (string (infrav1beta2 .ServiceInstanceStateActive )), Name : ptr .To ("serviceInstanceName" )}, nil , nil )
1231
+ clusterScope .ResourceClient = mockResourceController
1232
+ clusterScope .IBMPowerVSClient = mockPowerVS
1233
+ return clusterScope
1234
+ },
1235
+ reconcileResult : reconcileResult {
1236
+ error : errors .New ("DHCP server creation failed and is in error state" ),
1237
+ },
1238
+ conditions : capiv1beta1.Conditions {
1239
+ capiv1beta1.Condition {
1240
+ Type : infrav1beta2 .NetworkReadyCondition ,
1241
+ Status : "False" ,
1242
+ Severity : capiv1beta1 .ConditionSeverityError ,
1243
+ LastTransitionTime : metav1.Time {},
1244
+ Reason : infrav1beta2 .NetworkReconciliationFailedReason ,
1245
+ Message : "DHCP server creation failed and is in error state" ,
1246
+ },
1247
+ getServiceInstanceReadyCondition (),
1248
+ },
1249
+ },
1250
+ {
1251
+ name : "When reconcile network returns with DHCP server in active state" ,
1252
+ powerVSClusterScopeFunc : func () * scope.PowerVSClusterScope {
1253
+ clusterScope := & scope.PowerVSClusterScope {
1254
+ IBMPowerVSCluster : & infrav1beta2.IBMPowerVSCluster {
1255
+ Spec : infrav1beta2.IBMPowerVSClusterSpec {
1256
+ ServiceInstanceID : "serviceInstanceID" ,
1257
+ },
1258
+ Status : infrav1beta2.IBMPowerVSClusterStatus {
1259
+ DHCPServer : & infrav1beta2.ResourceReference {ID : ptr .To ("DHCPServerID" )},
1260
+ ServiceInstance : & infrav1beta2.ResourceReference {ID : ptr .To ("serviceInstanceID" )},
1261
+ },
1262
+ },
1263
+ }
1264
+ mockPowerVS := powervsmock .NewMockPowerVS (gomock .NewController (t ))
1265
+ dhcpServer := & models.DHCPServerDetail {ID : ptr .To ("dhcpID" ), Status : ptr .To (string (infrav1beta2 .DHCPServerStateActive ))}
1266
+ mockPowerVS .EXPECT ().GetDHCPServer (gomock .Any ()).Return (dhcpServer , nil )
1267
+ mockPowerVS .EXPECT ().WithClients (gomock .Any ())
1268
+ mockResourceController := resourceclientmock .NewMockResourceController (gomock .NewController (t ))
1269
+ mockResourceController .EXPECT ().GetResourceInstance (gomock .Any ()).Return (& resourcecontrollerv2.ResourceInstance {State : ptr .To (string (infrav1beta2 .ServiceInstanceStateActive )), Name : ptr .To ("serviceInstanceName" )}, nil , nil )
1270
+ clusterScope .ResourceClient = mockResourceController
1271
+ clusterScope .IBMPowerVSClient = mockPowerVS
1272
+ return clusterScope
1273
+ },
1274
+ conditions : capiv1beta1.Conditions {
1275
+ getNetworkReadyCondition (),
1276
+ getServiceInstanceReadyCondition (),
1277
+ },
1278
+ },
1153
1279
}
1154
- }
1155
- func getNetworkReadyCondition () capiv1beta1.Condition {
1156
- return capiv1beta1.Condition {
1157
- Type : infrav1beta2 .NetworkReadyCondition ,
1158
- Status : "True" ,
1280
+ for _ , tc := range testCases {
1281
+ t .Run (tc .name , func (t * testing.T ) {
1282
+ g := NewWithT (t )
1283
+ reconciler := & IBMPowerVSClusterReconciler {
1284
+ Client : testEnv .Client ,
1285
+ }
1286
+ clusterScope := tc .powerVSClusterScopeFunc ()
1287
+ ch := make (chan reconcileResult , 1 )
1288
+ pvsCluster := & powerVSCluster {
1289
+ cluster : clusterScope .IBMPowerVSCluster ,
1290
+ }
1291
+ wg := & sync.WaitGroup {}
1292
+ wg .Add (1 )
1293
+ reconciler .reconcilePowerVSResources (clusterScope , pvsCluster , ch , wg )
1294
+ wg .Wait ()
1295
+ close (ch )
1296
+ g .Expect (<- ch ).To (Equal (tc .reconcileResult ))
1297
+ ignoreLastTransitionTime := cmp .Transformer ("" , func (metav1.Time ) metav1.Time {
1298
+ return metav1.Time {}
1299
+ })
1300
+ g .Expect (pvsCluster .cluster .GetConditions ()).To (BeComparableTo (tc .conditions , ignoreLastTransitionTime ))
1301
+ })
1159
1302
}
1160
1303
}
1161
1304
@@ -1328,3 +1471,16 @@ func cleanupCluster(g *WithT, powervsCluster *infrav1beta2.IBMPowerVSCluster, na
1328
1471
}(powervsCluster , namespace )
1329
1472
}
1330
1473
}
1474
+
1475
+ func getServiceInstanceReadyCondition () capiv1beta1.Condition {
1476
+ return capiv1beta1.Condition {
1477
+ Type : infrav1beta2 .ServiceInstanceReadyCondition ,
1478
+ Status : "True" ,
1479
+ }
1480
+ }
1481
+ func getNetworkReadyCondition () capiv1beta1.Condition {
1482
+ return capiv1beta1.Condition {
1483
+ Type : infrav1beta2 .NetworkReadyCondition ,
1484
+ Status : "True" ,
1485
+ }
1486
+ }
0 commit comments