Add and update tests

This commit is contained in:
Rafia Sabih 2020-09-23 17:09:36 +02:00
parent 1ee79887cf
commit 683cb15b0d
3 changed files with 76 additions and 27 deletions

View File

@ -46,6 +46,7 @@ func TestConnectionPoolerCreationAndDeletion(t *testing.T) {
cluster.Spec = acidv1.PostgresSpec{ cluster.Spec = acidv1.PostgresSpec{
ConnectionPooler: &acidv1.ConnectionPooler{}, ConnectionPooler: &acidv1.ConnectionPooler{},
EnableReplicaConnectionPooler: boolToPointer(true),
} }
poolerResources, err := cluster.createConnectionPooler(mockInstallLookupFunction) poolerResources, err := cluster.createConnectionPooler(mockInstallLookupFunction)

View File

@ -912,9 +912,14 @@ func (c *Cluster) syncConnectionPooler(oldSpec,
otherRole = Master otherRole = Master
} }
} }
if c.ConnectionPooler != nil &&
(c.ConnectionPooler.Deployment[role] != nil ||
c.ConnectionPooler.Service[role] != nil) {
if err = c.deleteConnectionPooler(role); err != nil { if err = c.deleteConnectionPooler(role); err != nil {
c.logger.Warningf("could not remove connection pooler: %v", err) c.logger.Warningf("could not remove connection pooler: %v", err)
} }
}
if c.ConnectionPooler != nil && c.ConnectionPooler.Deployment[otherRole] == nil && c.ConnectionPooler.Service[otherRole] == nil { if c.ConnectionPooler != nil && c.ConnectionPooler.Deployment[otherRole] == nil && c.ConnectionPooler.Service[otherRole] == nil {
c.ConnectionPooler = nil c.ConnectionPooler = nil
} }

View File

@ -34,8 +34,7 @@ func objectsAreSaved(cluster *Cluster, err error, reason SyncReason) error {
return fmt.Errorf("Connection pooler resources are empty") return fmt.Errorf("Connection pooler resources are empty")
} }
for _, role := range cluster.RolesConnectionPooler() { for _, role := range []PostgresRole{Master, Replica} {
if role != "" {
if cluster.ConnectionPooler.Deployment[role] == nil { if cluster.ConnectionPooler.Deployment[role] == nil {
return fmt.Errorf("Deployment was not saved %s", role) return fmt.Errorf("Deployment was not saved %s", role)
} }
@ -44,6 +43,37 @@ func objectsAreSaved(cluster *Cluster, err error, reason SyncReason) error {
return fmt.Errorf("Service was not saved %s", role) return fmt.Errorf("Service was not saved %s", role)
} }
} }
return nil
}
func MasterobjectsAreSaved(cluster *Cluster, err error, reason SyncReason) error {
if cluster.ConnectionPooler == nil {
return fmt.Errorf("Connection pooler resources are empty")
}
if cluster.ConnectionPooler.Deployment[Master] == nil {
return fmt.Errorf("Deployment was not saved")
}
if cluster.ConnectionPooler.Service[Master] == nil {
return fmt.Errorf("Service was not saved")
}
return nil
}
func ReplicaobjectsAreSaved(cluster *Cluster, err error, reason SyncReason) error {
if cluster.ConnectionPooler == nil {
return fmt.Errorf("Connection pooler resources are empty")
}
if cluster.ConnectionPooler.Deployment[Replica] == nil {
return fmt.Errorf("Deployment was not saved")
}
if cluster.ConnectionPooler.Service[Replica] == nil {
return fmt.Errorf("Service was not saved")
} }
return nil return nil
@ -59,23 +89,19 @@ func objectsAreDeleted(cluster *Cluster, err error, reason SyncReason) error {
func OnlyMasterDeleted(cluster *Cluster, err error, reason SyncReason) error { func OnlyMasterDeleted(cluster *Cluster, err error, reason SyncReason) error {
for _, role := range cluster.RolesConnectionPooler() {
if cluster.ConnectionPooler != nil && if cluster.ConnectionPooler != nil &&
(cluster.ConnectionPooler.Deployment[role] != nil && cluster.ConnectionPooler.Service[role] != nil) { (cluster.ConnectionPooler.Deployment[Master] != nil || cluster.ConnectionPooler.Service[Master] != nil) {
return fmt.Errorf("Connection pooler master was not deleted") return fmt.Errorf("Connection pooler master was not deleted")
} }
}
return nil return nil
} }
func OnlyReplicaDeleted(cluster *Cluster, err error, reason SyncReason) error { func OnlyReplicaDeleted(cluster *Cluster, err error, reason SyncReason) error {
for _, role := range cluster.RolesConnectionPooler() {
if cluster.ConnectionPooler != nil && if cluster.ConnectionPooler != nil &&
(cluster.ConnectionPooler.Deployment[role] != nil && cluster.ConnectionPooler.Service[role] != nil) { (cluster.ConnectionPooler.Deployment[Replica] != nil || cluster.ConnectionPooler.Service[Replica] != nil) {
return fmt.Errorf("Connection pooler replica was not deleted") return fmt.Errorf("Connection pooler replica was not deleted")
} }
}
return nil return nil
} }
@ -141,6 +167,7 @@ func TestConnectionPoolerSynchronization(t *testing.T) {
clusterDirtyMock.ConnectionPooler.Deployment[Replica] = &appsv1.Deployment{} clusterDirtyMock.ConnectionPooler.Deployment[Replica] = &appsv1.Deployment{}
clusterDirtyMock.ConnectionPooler.Service[Replica] = &v1.Service{} clusterDirtyMock.ConnectionPooler.Service[Replica] = &v1.Service{}
clusterNewDefaultsMock := newCluster() clusterNewDefaultsMock := newCluster()
clusterNewDefaultsMock.KubeClient = k8sutil.NewMockKubernetesClient() clusterNewDefaultsMock.KubeClient = k8sutil.NewMockKubernetesClient()
@ -168,7 +195,7 @@ func TestConnectionPoolerSynchronization(t *testing.T) {
cluster: clusterMissingObjects, cluster: clusterMissingObjects,
defaultImage: "pooler:1.0", defaultImage: "pooler:1.0",
defaultInstances: 1, defaultInstances: 1,
check: objectsAreSaved, check: MasterobjectsAreSaved,
}, },
{ {
subTest: "create if doesn't exist with a flag", subTest: "create if doesn't exist with a flag",
@ -183,7 +210,7 @@ func TestConnectionPoolerSynchronization(t *testing.T) {
cluster: clusterMissingObjects, cluster: clusterMissingObjects,
defaultImage: "pooler:1.0", defaultImage: "pooler:1.0",
defaultInstances: 1, defaultInstances: 1,
check: objectsAreSaved, check: MasterobjectsAreSaved,
}, },
{ {
subTest: "create replica if doesn't exist with a flag", subTest: "create replica if doesn't exist with a flag",
@ -192,13 +219,29 @@ func TestConnectionPoolerSynchronization(t *testing.T) {
}, },
newSpec: &acidv1.Postgresql{ newSpec: &acidv1.Postgresql{
Spec: acidv1.PostgresSpec{ Spec: acidv1.PostgresSpec{
ConnectionPooler: &acidv1.ConnectionPooler{},
EnableReplicaConnectionPooler: boolToPointer(true), EnableReplicaConnectionPooler: boolToPointer(true),
}, },
}, },
cluster: clusterReplicaDirtyMock, cluster: clusterDirtyMock,
defaultImage: "pooler:1.0", defaultImage: "pooler:1.0",
defaultInstances: 1, defaultInstances: 1,
check: objectsAreSaved, check: ReplicaobjectsAreSaved,
},
{
subTest: "create no replica with flag",
oldSpec: &acidv1.Postgresql{
Spec: acidv1.PostgresSpec{},
},
newSpec: &acidv1.Postgresql{
Spec: acidv1.PostgresSpec{
EnableReplicaConnectionPooler: boolToPointer(false),
},
},
cluster: clusterDirtyMock,
defaultImage: "pooler:1.0",
defaultInstances: 1,
check: objectsAreDeleted,
}, },
{ {
subTest: "create from scratch", subTest: "create from scratch",
@ -213,7 +256,7 @@ func TestConnectionPoolerSynchronization(t *testing.T) {
cluster: clusterMissingObjects, cluster: clusterMissingObjects,
defaultImage: "pooler:1.0", defaultImage: "pooler:1.0",
defaultInstances: 1, defaultInstances: 1,
check: objectsAreSaved, check: MasterobjectsAreSaved,
}, },
{ {
subTest: "create both master and replica", subTest: "create both master and replica",