Skip to content

Commit 33f465a

Browse files
auniyal61openshift-merge-bot[bot]
authored andcommitted
Refactor multicell tests
Adds a common function to create multiple cells fot multi cell tests
1 parent 0c2b93a commit 33f465a

File tree

4 files changed

+134
-304
lines changed

4 files changed

+134
-304
lines changed

test/functional/base_test.go

Lines changed: 131 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,12 @@ import (
1919
"fmt"
2020
"time"
2121

22-
. "github.com/onsi/gomega" //revive:disable:dot-imports
22+
. "github.com/onsi/ginkgo/v2" //revive:disable:dot-imports
23+
. "github.com/onsi/gomega" //revive:disable:dot-imports
24+
25+
//revive:disable-next-line:dot-imports
26+
. "github.com/openstack-k8s-operators/lib-common/modules/common/test/helpers"
27+
mariadbv1 "github.com/openstack-k8s-operators/mariadb-operator/api/v1beta1"
2328

2429
"maps"
2530

@@ -972,3 +977,128 @@ func AssertHaveNotificationTransportURL(notificationsTransportURLName string, co
972977
ContainSubstring(expectedConf2))
973978

974979
}
980+
981+
func CreateNovaWithNCellsAndEnsureReady(cellNumber int, novaNames *NovaNames) {
982+
if cellNumber < 1 {
983+
panic("At least 1 cell, cell0 must required for Nova CR")
984+
}
985+
986+
serviceSpec := corev1.ServiceSpec{Ports: []corev1.ServicePort{{Port: 3306}}}
987+
cellTemplates := make(map[string]interface{})
988+
989+
DeferCleanup(k8sClient.Delete, ctx, CreateNovaSecret(novaNames.NovaName.Namespace, SecretName))
990+
DeferCleanup(
991+
mariadb.DeleteDBService,
992+
mariadb.CreateDBService(novaNames.APIMariaDBDatabaseName.Namespace, novaNames.APIMariaDBDatabaseName.Name, serviceSpec))
993+
994+
apiAccount, apiSecret := mariadb.CreateMariaDBAccountAndSecret(
995+
novaNames.APIMariaDBDatabaseAccount, mariadbv1.MariaDBAccountSpec{})
996+
DeferCleanup(k8sClient.Delete, ctx, apiAccount)
997+
DeferCleanup(k8sClient.Delete, ctx, apiSecret)
998+
999+
for i := 0; i < cellNumber; i++ {
1000+
cellName := fmt.Sprintf("cell%d", i)
1001+
cell := novaNames.Cells[cellName]
1002+
1003+
// rabbit and galera
1004+
DeferCleanup(k8sClient.Delete, ctx, CreateNovaMessageBusSecret(cell))
1005+
DeferCleanup(mariadb.DeleteDBService, mariadb.CreateDBService(cell.MariaDBDatabaseName.Namespace, cell.MariaDBDatabaseName.Name, serviceSpec))
1006+
1007+
// account & Secret
1008+
account, secret := mariadb.CreateMariaDBAccountAndSecret(cell.MariaDBAccountName, mariadbv1.MariaDBAccountSpec{})
1009+
1010+
// Defer cleanup based on cell only for default cell (cell0), others might be deleted in caller test
1011+
if i == 0 {
1012+
DeferCleanup(k8sClient.Delete, ctx, account)
1013+
DeferCleanup(k8sClient.Delete, ctx, secret)
1014+
} else {
1015+
logger.Info(fmt.Sprintf("Not creating defer cleanup for %s ...", cellName), " -- ", secret)
1016+
}
1017+
1018+
// Build cell template
1019+
template := GetDefaultNovaCellTemplate()
1020+
template["cellDatabaseInstance"] = cell.MariaDBDatabaseName.Name
1021+
template["cellDatabaseAccount"] = account.Name
1022+
if i != 0 {
1023+
// cell0
1024+
template["cellMessageBusInstance"] = cell.TransportURLName.Name
1025+
}
1026+
1027+
if i == 1 {
1028+
// cell1
1029+
template["novaComputeTemplates"] = map[string]interface{}{
1030+
ironicComputeName: GetDefaultNovaComputeTemplate(),
1031+
}
1032+
}
1033+
if i != 0 && i != 1 {
1034+
// cell2 ..
1035+
template["hasAPIAccess"] = false
1036+
}
1037+
1038+
cellTemplates[cellName] = template
1039+
}
1040+
1041+
// Create Nova spec
1042+
spec := GetDefaultNovaSpec()
1043+
spec["cellTemplates"] = cellTemplates
1044+
spec["apiDatabaseInstance"] = novaNames.APIMariaDBDatabaseName.Name
1045+
spec["apiMessageBusInstance"] = novaNames.Cells["cell0"].TransportURLName.Name
1046+
1047+
// Deploy Nova and simulate its dependencies
1048+
DeferCleanup(th.DeleteInstance, CreateNova(novaNames.NovaName, spec))
1049+
// DeferCleanup(keystone.DeleteKeystoneAPI, keystone.CreateKeystoneAPI(novaNames.NovaName.Namespace))
1050+
novaNames.KeystoneAPIName = keystone.CreateKeystoneAPI(novaNames.NovaName.Namespace)
1051+
DeferCleanup(keystone.DeleteKeystoneAPI, novaNames.KeystoneAPIName)
1052+
1053+
memcachedSpec := infra.GetDefaultMemcachedSpec()
1054+
DeferCleanup(infra.DeleteMemcached, infra.CreateMemcached(novaNames.NovaName.Namespace, MemcachedInstance, memcachedSpec))
1055+
1056+
infra.SimulateMemcachedReady(novaNames.MemcachedNamespace)
1057+
keystone.SimulateKeystoneServiceReady(novaNames.KeystoneServiceName)
1058+
1059+
mariadb.SimulateMariaDBDatabaseCompleted(novaNames.APIMariaDBDatabaseName)
1060+
mariadb.SimulateMariaDBAccountCompleted(novaNames.APIMariaDBDatabaseAccount)
1061+
1062+
for i := 0; i < cellNumber; i++ {
1063+
cell := novaNames.Cells[fmt.Sprintf("cell%d", i)]
1064+
mariadb.SimulateMariaDBDatabaseCompleted(cell.MariaDBDatabaseName)
1065+
mariadb.SimulateMariaDBAccountCompleted(cell.MariaDBAccountName)
1066+
infra.SimulateTransportURLReady(cell.TransportURLName)
1067+
1068+
if i != 0 {
1069+
// cell0
1070+
th.SimulateStatefulSetReplicaReady(cell.NoVNCProxyStatefulSetName)
1071+
}
1072+
1073+
th.SimulateJobSuccess(cell.DBSyncJobName)
1074+
th.SimulateStatefulSetReplicaReady(cell.ConductorStatefulSetName)
1075+
1076+
if i == 1 {
1077+
// only cell1 will have computes
1078+
th.SimulateStatefulSetReplicaReady(cell.NovaComputeStatefulSetName)
1079+
}
1080+
1081+
th.SimulateJobSuccess(cell.CellMappingJobName)
1082+
1083+
if i == 1 {
1084+
// run cell1 computes host discovery
1085+
th.SimulateJobSuccess(cell1.HostDiscoveryJobName)
1086+
}
1087+
1088+
}
1089+
1090+
// Final Ready condition check
1091+
th.ExpectCondition(
1092+
novaNames.NovaName,
1093+
ConditionGetterFunc(NovaConditionGetter),
1094+
novav1.NovaAllCellsReadyCondition,
1095+
corev1.ConditionTrue,
1096+
)
1097+
SimulateReadyOfNovaTopServices()
1098+
th.ExpectCondition(
1099+
novaNames.NovaName,
1100+
ConditionGetterFunc(NovaConditionGetter),
1101+
condition.ReadyCondition,
1102+
corev1.ConditionTrue,
1103+
)
1104+
}

test/functional/nova_controller_test.go

Lines changed: 1 addition & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -42,36 +42,7 @@ var _ = Describe("Nova controller - notifications", func() {
4242

4343
When("Nova CR instance is created", func() {
4444
BeforeEach(func() {
45-
DeferCleanup(
46-
k8sClient.Delete, ctx, CreateNovaSecret(novaNames.NovaName.Namespace, SecretName))
47-
DeferCleanup(
48-
k8sClient.Delete, ctx, CreateNovaMessageBusSecret(cell0))
49-
DeferCleanup(
50-
mariadb.DeleteDBService,
51-
mariadb.CreateDBService(
52-
novaNames.NovaName.Namespace,
53-
"openstack",
54-
corev1.ServiceSpec{
55-
Ports: []corev1.ServicePort{{Port: 3306}},
56-
},
57-
),
58-
)
59-
memcachedSpec := infra.GetDefaultMemcachedSpec()
60-
61-
DeferCleanup(infra.DeleteMemcached, infra.CreateMemcached(novaNames.NovaName.Namespace, MemcachedInstance, memcachedSpec))
62-
infra.SimulateMemcachedReady(novaNames.MemcachedNamespace)
63-
64-
DeferCleanup(keystone.DeleteKeystoneAPI, keystone.CreateKeystoneAPI(novaNames.NovaName.Namespace))
65-
66-
DeferCleanup(th.DeleteInstance, CreateNovaWithCell0(novaNames.NovaName))
67-
68-
keystone.SimulateKeystoneServiceReady(novaNames.KeystoneServiceName)
69-
mariadb.SimulateMariaDBDatabaseCompleted(novaNames.APIMariaDBDatabaseName)
70-
mariadb.SimulateMariaDBAccountCompleted(novaNames.APIMariaDBDatabaseAccount)
71-
mariadb.SimulateMariaDBDatabaseCompleted(cell0.MariaDBDatabaseName)
72-
mariadb.SimulateMariaDBAccountCompleted(cell0.MariaDBAccountName)
73-
infra.SimulateTransportURLReady(cell0.TransportURLName)
74-
SimulateReadyOfNovaTopServices()
45+
CreateNovaWithNCellsAndEnsureReady(1, &novaNames)
7546
})
7647
It("notification transport url is not set", func() {
7748

test/functional/nova_multicell_test.go

Lines changed: 1 addition & 149 deletions
Original file line numberDiff line numberDiff line change
@@ -941,157 +941,9 @@ var _ = Describe("Nova multi cell", func() {
941941
})
942942
})
943943

944-
func CreateNovaWith4CellsAndEnsureReady(novaNames NovaNames) {
945-
cell0 := novaNames.Cells["cell0"]
946-
cell1 := novaNames.Cells["cell1"]
947-
cell2 := novaNames.Cells["cell2"]
948-
cell3 := novaNames.Cells["cell3"]
949-
950-
DeferCleanup(k8sClient.Delete, ctx, CreateNovaSecret(novaNames.NovaName.Namespace, SecretName))
951-
DeferCleanup(k8sClient.Delete, ctx, CreateNovaMessageBusSecret(cell0))
952-
DeferCleanup(k8sClient.Delete, ctx, CreateNovaMessageBusSecret(cell1))
953-
DeferCleanup(k8sClient.Delete, ctx, CreateNovaMessageBusSecret(cell2))
954-
DeferCleanup(k8sClient.Delete, ctx, CreateNovaMessageBusSecret(cell3))
955-
956-
serviceSpec := corev1.ServiceSpec{Ports: []corev1.ServicePort{{Port: 3306}}}
957-
DeferCleanup(
958-
mariadb.DeleteDBService,
959-
mariadb.CreateDBService(novaNames.APIMariaDBDatabaseName.Namespace, novaNames.APIMariaDBDatabaseName.Name, serviceSpec))
960-
DeferCleanup(mariadb.DeleteDBService, mariadb.CreateDBService(cell0.MariaDBDatabaseName.Namespace, cell0.MariaDBDatabaseName.Name, serviceSpec))
961-
DeferCleanup(mariadb.DeleteDBService, mariadb.CreateDBService(cell1.MariaDBDatabaseName.Namespace, cell1.MariaDBDatabaseName.Name, serviceSpec))
962-
DeferCleanup(mariadb.DeleteDBService, mariadb.CreateDBService(cell2.MariaDBDatabaseName.Namespace, cell2.MariaDBDatabaseName.Name, serviceSpec))
963-
DeferCleanup(mariadb.DeleteDBService, mariadb.CreateDBService(cell3.MariaDBDatabaseName.Namespace, cell3.MariaDBDatabaseName.Name, serviceSpec))
964-
965-
apiMariaDBAccount, apiMariaDBSecret := mariadb.CreateMariaDBAccountAndSecret(
966-
novaNames.APIMariaDBDatabaseAccount, mariadbv1.MariaDBAccountSpec{})
967-
DeferCleanup(k8sClient.Delete, ctx, apiMariaDBAccount)
968-
DeferCleanup(k8sClient.Delete, ctx, apiMariaDBSecret)
969-
970-
cell0Account, cell0Secret := mariadb.CreateMariaDBAccountAndSecret(
971-
cell0.MariaDBAccountName, mariadbv1.MariaDBAccountSpec{})
972-
DeferCleanup(k8sClient.Delete, ctx, cell0Account)
973-
DeferCleanup(k8sClient.Delete, ctx, cell0Secret)
974-
975-
cell1Account, cell1Secret := mariadb.CreateMariaDBAccountAndSecret(
976-
cell1.MariaDBAccountName, mariadbv1.MariaDBAccountSpec{})
977-
DeferCleanup(th.DeleteInstance, cell1Account)
978-
DeferCleanup(
979-
th.DeleteSecret,
980-
types.NamespacedName{Name: cell1Secret.Name, Namespace: cell1Secret.Namespace})
981-
982-
cell2Account, cell2Secret := mariadb.CreateMariaDBAccountAndSecret(
983-
cell2.MariaDBAccountName, mariadbv1.MariaDBAccountSpec{})
984-
// DeferCleanup(k8sClient.Delete, ctx, cell2Account)
985-
// DeferCleanup(k8sClient.Delete, ctx, cell2Secret)
986-
logger.Info("Not Creating defercleanup for cell2 ...", " -- ", cell2Secret)
987-
988-
cell3Account, cell3Secret := mariadb.CreateMariaDBAccountAndSecret(
989-
cell3.MariaDBAccountName, mariadbv1.MariaDBAccountSpec{})
990-
// DeferCleanup(k8sClient.Delete, ctx, cell3Account)
991-
// DeferCleanup(k8sClient.Delete, ctx, cell3Secret)
992-
logger.Info("Not Creating defercleanup for cell3 ...", " -- ", cell3Secret)
993-
994-
spec := GetDefaultNovaSpec()
995-
cell0Template := GetDefaultNovaCellTemplate()
996-
cell0Template["cellDatabaseInstance"] = cell0.MariaDBDatabaseName.Name
997-
cell0Template["cellDatabaseAccount"] = cell0Account.Name
998-
999-
cell1Template := GetDefaultNovaCellTemplate()
1000-
cell1Template["cellDatabaseInstance"] = cell1.MariaDBDatabaseName.Name
1001-
cell1Template["cellDatabaseAccount"] = cell1Account.Name
1002-
cell1Template["cellMessageBusInstance"] = cell1.TransportURLName.Name
1003-
cell1Template["novaComputeTemplates"] = map[string]interface{}{
1004-
ironicComputeName: GetDefaultNovaComputeTemplate(),
1005-
}
1006-
1007-
cell2Template := GetDefaultNovaCellTemplate()
1008-
cell2Template["cellDatabaseInstance"] = cell2.MariaDBDatabaseName.Name
1009-
cell2Template["cellDatabaseAccount"] = cell2Account.Name
1010-
cell2Template["cellMessageBusInstance"] = cell2.TransportURLName.Name
1011-
cell2Template["hasAPIAccess"] = false
1012-
1013-
cell3Template := GetDefaultNovaCellTemplate()
1014-
cell3Template["cellDatabaseInstance"] = cell3.MariaDBDatabaseName.Name
1015-
cell3Template["cellDatabaseAccount"] = cell3Account.Name
1016-
cell3Template["cellMessageBusInstance"] = cell3.TransportURLName.Name
1017-
cell3Template["hasAPIAccess"] = false
1018-
1019-
spec["cellTemplates"] = map[string]interface{}{
1020-
"cell0": cell0Template,
1021-
"cell1": cell1Template,
1022-
"cell2": cell2Template,
1023-
"cell3": cell3Template,
1024-
}
1025-
spec["apiDatabaseInstance"] = novaNames.APIMariaDBDatabaseName.Name
1026-
spec["apiMessageBusInstance"] = cell0.TransportURLName.Name
1027-
1028-
DeferCleanup(th.DeleteInstance, CreateNova(novaNames.NovaName, spec))
1029-
DeferCleanup(keystone.DeleteKeystoneAPI, keystone.CreateKeystoneAPI(novaNames.NovaName.Namespace))
1030-
memcachedSpec := infra.GetDefaultMemcachedSpec()
1031-
1032-
DeferCleanup(infra.DeleteMemcached, infra.CreateMemcached(novaNames.NovaName.Namespace, MemcachedInstance, memcachedSpec))
1033-
infra.SimulateMemcachedReady(novaNames.MemcachedNamespace)
1034-
keystone.SimulateKeystoneServiceReady(novaNames.KeystoneServiceName)
1035-
// END of common logic with Nova multi cell test
1036-
1037-
mariadb.SimulateMariaDBDatabaseCompleted(novaNames.APIMariaDBDatabaseName)
1038-
mariadb.SimulateMariaDBDatabaseCompleted(cell0.MariaDBDatabaseName)
1039-
mariadb.SimulateMariaDBDatabaseCompleted(cell1.MariaDBDatabaseName)
1040-
mariadb.SimulateMariaDBDatabaseCompleted(cell2.MariaDBDatabaseName)
1041-
mariadb.SimulateMariaDBDatabaseCompleted(cell3.MariaDBDatabaseName)
1042-
1043-
mariadb.SimulateMariaDBAccountCompleted(novaNames.APIMariaDBDatabaseAccount)
1044-
mariadb.SimulateMariaDBAccountCompleted(cell0.MariaDBAccountName)
1045-
mariadb.SimulateMariaDBAccountCompleted(cell1.MariaDBAccountName)
1046-
mariadb.SimulateMariaDBAccountCompleted(cell2.MariaDBAccountName)
1047-
mariadb.SimulateMariaDBAccountCompleted(cell3.MariaDBAccountName)
1048-
1049-
infra.SimulateTransportURLReady(cell0.TransportURLName)
1050-
infra.SimulateTransportURLReady(cell1.TransportURLName)
1051-
infra.SimulateTransportURLReady(cell2.TransportURLName)
1052-
infra.SimulateTransportURLReady(cell3.TransportURLName)
1053-
1054-
th.SimulateJobSuccess(cell0.DBSyncJobName)
1055-
th.SimulateStatefulSetReplicaReady(cell0.ConductorStatefulSetName)
1056-
th.SimulateJobSuccess(cell0.CellMappingJobName)
1057-
1058-
th.SimulateStatefulSetReplicaReady(cell1.NoVNCProxyStatefulSetName)
1059-
th.SimulateJobSuccess(cell1.DBSyncJobName)
1060-
th.SimulateStatefulSetReplicaReady(cell1.ConductorStatefulSetName)
1061-
th.SimulateStatefulSetReplicaReady(cell1.NovaComputeStatefulSetName)
1062-
th.SimulateJobSuccess(cell1.CellMappingJobName)
1063-
th.SimulateJobSuccess(cell1.HostDiscoveryJobName)
1064-
1065-
th.SimulateStatefulSetReplicaReady(cell2.NoVNCProxyStatefulSetName)
1066-
th.SimulateJobSuccess(cell2.DBSyncJobName)
1067-
th.SimulateStatefulSetReplicaReady(cell2.ConductorStatefulSetName)
1068-
th.SimulateJobSuccess(cell2.CellMappingJobName)
1069-
1070-
th.SimulateStatefulSetReplicaReady(cell3.NoVNCProxyStatefulSetName)
1071-
th.SimulateJobSuccess(cell3.DBSyncJobName)
1072-
th.SimulateStatefulSetReplicaReady(cell3.ConductorStatefulSetName)
1073-
th.SimulateJobSuccess(cell3.CellMappingJobName)
1074-
1075-
th.ExpectCondition(
1076-
novaNames.NovaName,
1077-
ConditionGetterFunc(NovaConditionGetter),
1078-
novav1.NovaAllCellsReadyCondition,
1079-
corev1.ConditionTrue,
1080-
)
1081-
SimulateReadyOfNovaTopServices()
1082-
th.ExpectCondition(
1083-
novaNames.NovaName,
1084-
ConditionGetterFunc(NovaConditionGetter),
1085-
condition.ReadyCondition,
1086-
corev1.ConditionTrue,
1087-
)
1088-
}
1089-
1090944
var _ = Describe("Nova multi cell deletion", func() {
1091945
BeforeEach(func() {
1092-
1093-
CreateNovaWith4CellsAndEnsureReady(novaNames)
1094-
946+
CreateNovaWithNCellsAndEnsureReady(4, &novaNames)
1095947
})
1096948

1097949
When("Nova CR instance is created with 4 cells", func() {

0 commit comments

Comments
 (0)