Skip to content

Commit 09ca074

Browse files
committed
WIP: Added a functional test
1 parent 90ab8b8 commit 09ca074

File tree

2 files changed

+210
-1
lines changed

2 files changed

+210
-1
lines changed

test/functional/nova_multicell_test.go

Lines changed: 207 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -952,3 +952,210 @@ var _ = Describe("Nova multi cell", func() {
952952
})
953953
})
954954
})
955+
956+
func CreateNovaWith4CellsAndEnsureReady(novaNames NovaNames) {
957+
cell0 := novaNames.Cells["cell0"]
958+
cell1 := novaNames.Cells["cell1"]
959+
cell2 := novaNames.Cells["cell2"]
960+
cell3 := novaNames.Cells["cell3"]
961+
962+
DeferCleanup(k8sClient.Delete, ctx, CreateNovaSecret(novaNames.NovaName.Namespace, SecretName))
963+
DeferCleanup(k8sClient.Delete, ctx, CreateNovaMessageBusSecret(cell0))
964+
DeferCleanup(k8sClient.Delete, ctx, CreateNovaMessageBusSecret(cell1))
965+
DeferCleanup(k8sClient.Delete, ctx, CreateNovaMessageBusSecret(cell2))
966+
DeferCleanup(k8sClient.Delete, ctx, CreateNovaMessageBusSecret(cell3))
967+
968+
serviceSpec := corev1.ServiceSpec{Ports: []corev1.ServicePort{{Port: 3306}}}
969+
DeferCleanup(
970+
mariadb.DeleteDBService,
971+
mariadb.CreateDBService(novaNames.APIMariaDBDatabaseName.Namespace, novaNames.APIMariaDBDatabaseName.Name, serviceSpec))
972+
DeferCleanup(mariadb.DeleteDBService, mariadb.CreateDBService(cell0.MariaDBDatabaseName.Namespace, cell0.MariaDBDatabaseName.Name, serviceSpec))
973+
DeferCleanup(mariadb.DeleteDBService, mariadb.CreateDBService(cell1.MariaDBDatabaseName.Namespace, cell1.MariaDBDatabaseName.Name, serviceSpec))
974+
DeferCleanup(mariadb.DeleteDBService, mariadb.CreateDBService(cell2.MariaDBDatabaseName.Namespace, cell2.MariaDBDatabaseName.Name, serviceSpec))
975+
DeferCleanup(mariadb.DeleteDBService, mariadb.CreateDBService(cell3.MariaDBDatabaseName.Namespace, cell3.MariaDBDatabaseName.Name, serviceSpec))
976+
977+
apiMariaDBAccount, apiMariaDBSecret := mariadb.CreateMariaDBAccountAndSecret(
978+
novaNames.APIMariaDBDatabaseAccount, mariadbv1.MariaDBAccountSpec{})
979+
DeferCleanup(k8sClient.Delete, ctx, apiMariaDBAccount)
980+
DeferCleanup(k8sClient.Delete, ctx, apiMariaDBSecret)
981+
982+
cell0Account, cell0Secret := mariadb.CreateMariaDBAccountAndSecret(
983+
cell0.MariaDBAccountName, mariadbv1.MariaDBAccountSpec{})
984+
DeferCleanup(k8sClient.Delete, ctx, cell0Account)
985+
DeferCleanup(k8sClient.Delete, ctx, cell0Secret)
986+
987+
cell1Account, cell1Secret := mariadb.CreateMariaDBAccountAndSecret(
988+
cell1.MariaDBAccountName, mariadbv1.MariaDBAccountSpec{})
989+
DeferCleanup(th.DeleteInstance, cell1Account)
990+
DeferCleanup(
991+
th.DeleteSecret,
992+
types.NamespacedName{Name: cell1Secret.Name, Namespace: cell1Secret.Namespace})
993+
994+
cell2Account, cell2Secret := mariadb.CreateMariaDBAccountAndSecret(
995+
cell2.MariaDBAccountName, mariadbv1.MariaDBAccountSpec{})
996+
DeferCleanup(k8sClient.Delete, ctx, cell2Account)
997+
DeferCleanup(k8sClient.Delete, ctx, cell2Secret)
998+
999+
cell3Account, cell3Secret := mariadb.CreateMariaDBAccountAndSecret(
1000+
cell3.MariaDBAccountName, mariadbv1.MariaDBAccountSpec{})
1001+
// DeferCleanup(k8sClient.Delete, ctx, cell3Account)
1002+
// DeferCleanup(k8sClient.Delete, ctx, cell3Secret)
1003+
logger.Info("Not Creating defercleanup for cell3 ...", " -- ", cell3Secret)
1004+
1005+
spec := GetDefaultNovaSpec()
1006+
cell0Template := GetDefaultNovaCellTemplate()
1007+
cell0Template["cellDatabaseInstance"] = cell0.MariaDBDatabaseName.Name
1008+
cell0Template["cellDatabaseAccount"] = cell0Account.Name
1009+
1010+
cell1Template := GetDefaultNovaCellTemplate()
1011+
cell1Template["cellDatabaseInstance"] = cell1.MariaDBDatabaseName.Name
1012+
cell1Template["cellDatabaseAccount"] = cell1Account.Name
1013+
cell1Template["cellMessageBusInstance"] = cell1.TransportURLName.Name
1014+
cell1Template["novaComputeTemplates"] = map[string]interface{}{
1015+
ironicComputeName: GetDefaultNovaComputeTemplate(),
1016+
}
1017+
1018+
cell2Template := GetDefaultNovaCellTemplate()
1019+
cell2Template["cellDatabaseInstance"] = cell2.MariaDBDatabaseName.Name
1020+
cell2Template["cellDatabaseAccount"] = cell2Account.Name
1021+
cell2Template["cellMessageBusInstance"] = cell2.TransportURLName.Name
1022+
cell2Template["hasAPIAccess"] = false
1023+
1024+
cell3Template := GetDefaultNovaCellTemplate()
1025+
cell3Template["cellDatabaseInstance"] = cell3.MariaDBDatabaseName.Name
1026+
cell3Template["cellDatabaseAccount"] = cell3Account.Name
1027+
cell3Template["cellMessageBusInstance"] = cell3.TransportURLName.Name
1028+
cell3Template["hasAPIAccess"] = false
1029+
1030+
spec["cellTemplates"] = map[string]interface{}{
1031+
"cell0": cell0Template,
1032+
"cell1": cell1Template,
1033+
"cell2": cell2Template,
1034+
"cell3": cell3Template,
1035+
}
1036+
spec["apiDatabaseInstance"] = novaNames.APIMariaDBDatabaseName.Name
1037+
spec["apiMessageBusInstance"] = cell0.TransportURLName.Name
1038+
1039+
DeferCleanup(th.DeleteInstance, CreateNova(novaNames.NovaName, spec))
1040+
DeferCleanup(keystone.DeleteKeystoneAPI, keystone.CreateKeystoneAPI(novaNames.NovaName.Namespace))
1041+
memcachedSpec := memcachedv1.MemcachedSpec{
1042+
MemcachedSpecCore: memcachedv1.MemcachedSpecCore{
1043+
Replicas: ptr.To(int32(3)),
1044+
},
1045+
}
1046+
1047+
DeferCleanup(infra.DeleteMemcached, infra.CreateMemcached(novaNames.NovaName.Namespace, MemcachedInstance, memcachedSpec))
1048+
infra.SimulateMemcachedReady(novaNames.MemcachedNamespace)
1049+
keystone.SimulateKeystoneServiceReady(novaNames.KeystoneServiceName)
1050+
// END of common logic with Nova multi cell test
1051+
1052+
mariadb.SimulateMariaDBDatabaseCompleted(novaNames.APIMariaDBDatabaseName)
1053+
mariadb.SimulateMariaDBDatabaseCompleted(cell0.MariaDBDatabaseName)
1054+
mariadb.SimulateMariaDBDatabaseCompleted(cell1.MariaDBDatabaseName)
1055+
mariadb.SimulateMariaDBDatabaseCompleted(cell2.MariaDBDatabaseName)
1056+
mariadb.SimulateMariaDBDatabaseCompleted(cell3.MariaDBDatabaseName)
1057+
1058+
mariadb.SimulateMariaDBAccountCompleted(novaNames.APIMariaDBDatabaseAccount)
1059+
mariadb.SimulateMariaDBAccountCompleted(cell0.MariaDBAccountName)
1060+
mariadb.SimulateMariaDBAccountCompleted(cell1.MariaDBAccountName)
1061+
mariadb.SimulateMariaDBAccountCompleted(cell2.MariaDBAccountName)
1062+
mariadb.SimulateMariaDBAccountCompleted(cell3.MariaDBAccountName)
1063+
1064+
infra.SimulateTransportURLReady(cell0.TransportURLName)
1065+
infra.SimulateTransportURLReady(cell1.TransportURLName)
1066+
infra.SimulateTransportURLReady(cell2.TransportURLName)
1067+
infra.SimulateTransportURLReady(cell3.TransportURLName)
1068+
1069+
th.SimulateJobSuccess(cell0.DBSyncJobName)
1070+
th.SimulateStatefulSetReplicaReady(cell0.ConductorStatefulSetName)
1071+
th.SimulateJobSuccess(cell0.CellMappingJobName)
1072+
1073+
th.SimulateStatefulSetReplicaReady(cell1.NoVNCProxyStatefulSetName)
1074+
th.SimulateJobSuccess(cell1.DBSyncJobName)
1075+
th.SimulateStatefulSetReplicaReady(cell1.ConductorStatefulSetName)
1076+
th.SimulateStatefulSetReplicaReady(cell1.NovaComputeStatefulSetName)
1077+
th.SimulateJobSuccess(cell1.CellMappingJobName)
1078+
th.SimulateJobSuccess(cell1.HostDiscoveryJobName)
1079+
1080+
th.SimulateStatefulSetReplicaReady(cell2.NoVNCProxyStatefulSetName)
1081+
th.SimulateJobSuccess(cell2.DBSyncJobName)
1082+
th.SimulateStatefulSetReplicaReady(cell2.ConductorStatefulSetName)
1083+
th.SimulateJobSuccess(cell2.CellMappingJobName)
1084+
1085+
th.SimulateStatefulSetReplicaReady(cell3.NoVNCProxyStatefulSetName)
1086+
th.SimulateJobSuccess(cell3.DBSyncJobName)
1087+
th.SimulateStatefulSetReplicaReady(cell3.ConductorStatefulSetName)
1088+
th.SimulateJobSuccess(cell3.CellMappingJobName)
1089+
1090+
th.ExpectCondition(
1091+
novaNames.NovaName,
1092+
ConditionGetterFunc(NovaConditionGetter),
1093+
novav1.NovaAllCellsReadyCondition,
1094+
corev1.ConditionTrue,
1095+
)
1096+
SimulateReadyOfNovaTopServices()
1097+
th.ExpectCondition(
1098+
novaNames.NovaName,
1099+
ConditionGetterFunc(NovaConditionGetter),
1100+
condition.ReadyCondition,
1101+
corev1.ConditionTrue,
1102+
)
1103+
}
1104+
1105+
var _ = Describe("Nova multi cell deletion", func() {
1106+
BeforeEach(func() {
1107+
1108+
CreateNovaWith4CellsAndEnsureReady(novaNames)
1109+
1110+
})
1111+
1112+
When("Nova CR instance is created with 4 cells", func() {
1113+
It("delete cell2 and cell3, verify for cell3", func() {
1114+
1115+
nova := GetNova(novaNames.NovaName)
1116+
Expect(nova.Status.RegisteredCells).To(HaveKey(cell0.CellCRName.Name), "cell0 is not in the RegisteredCells", nova.Status.RegisteredCells)
1117+
Expect(nova.Status.RegisteredCells).To(HaveKey(cell1.CellCRName.Name), "cell1 is not in the RegisteredCells", nova.Status.RegisteredCells)
1118+
Expect(nova.Status.RegisteredCells).To(HaveKey(cell2.CellCRName.Name), "cell2 is not in the RegisteredCells", nova.Status.RegisteredCells)
1119+
Expect(nova.Status.RegisteredCells).To(HaveKey(cell3.CellCRName.Name), "cell3 is not in the RegisteredCells", nova.Status.RegisteredCells)
1120+
1121+
// manually delete DB for cell3, to reproduce the error in cell3 deletion
1122+
// Expect(k8sClient.Delete(ctx, mariadb.GetMariaDBAccount(cell3.MariaDBDatabaseName))).To(Succeed())
1123+
1124+
Expect(k8sClient.Delete(
1125+
ctx,
1126+
mariadb.GetMariaDBDatabase(cell3.MariaDBDatabaseName))).To(Succeed())
1127+
1128+
cell3Account := mariadb.GetMariaDBAccount(cell3.MariaDBAccountName)
1129+
cell3Secret := th.GetSecret(types.NamespacedName{
1130+
Name: cell3Account.Spec.Secret,
1131+
Namespace: cell3.MariaDBAccountName.Namespace})
1132+
1133+
// Expect(k8sClient.Delete(ctx, mariadb.GetSecret(cell3Secret))).To(Succeed())
1134+
1135+
th.DeleteSecret(
1136+
types.NamespacedName{
1137+
Name: cell3Secret.Name,
1138+
Namespace: cell3Secret.Namespace})
1139+
1140+
cell3Secret = th.GetSecret(types.NamespacedName{
1141+
Name: cell3Account.Spec.Secret,
1142+
Namespace: cell0.MariaDBAccountName.Namespace})
1143+
1144+
Eventually(func(g Gomega) {
1145+
nova := GetNova(novaNames.NovaName)
1146+
// delete(nova.Spec.CellTemplates, "cell2")
1147+
delete(nova.Spec.CellTemplates, "cell3")
1148+
g.Expect(k8sClient.Update(ctx, nova)).To(Succeed())
1149+
}, timeout, interval).Should(Succeed())
1150+
1151+
Eventually(func(g Gomega) {
1152+
nova := GetNova(novaNames.NovaName)
1153+
// g.Expect(nova.Status.RegisteredCells).NotTo(HaveKey(cell2.CellCRName.Name))
1154+
g.Expect(nova.Status.RegisteredCells).NotTo(HaveKey(cell3.CellCRName.Name))
1155+
}, timeout, interval).Should(Succeed())
1156+
1157+
NovaCellNotExists(cell3.CellCRName)
1158+
1159+
})
1160+
})
1161+
})

test/functional/suite_test.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ var (
8383
cell0 CellNames
8484
cell1 CellNames
8585
cell2 CellNames
86+
cell3 CellNames
8687
)
8788

8889
func TestAPIs(t *testing.T) {
@@ -280,8 +281,9 @@ var _ = BeforeEach(func() {
280281
Name: uuid.New().String()[:25],
281282
}
282283

283-
novaNames = GetNovaNames(novaName, []string{"cell0", "cell1", "cell2"})
284+
novaNames = GetNovaNames(novaName, []string{"cell0", "cell1", "cell2", "cell3"})
284285
cell0 = novaNames.Cells["cell0"]
285286
cell1 = novaNames.Cells["cell1"]
286287
cell2 = novaNames.Cells["cell2"]
288+
cell3 = novaNames.Cells["cell3"]
287289
})

0 commit comments

Comments
 (0)