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

@ -45,7 +45,8 @@ 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,8 +912,13 @@ func (c *Cluster) syncConnectionPooler(oldSpec,
otherRole = Master otherRole = Master
} }
} }
if err = c.deleteConnectionPooler(role); err != nil { if c.ConnectionPooler != nil &&
c.logger.Warningf("could not remove connection pooler: %v", err) (c.ConnectionPooler.Deployment[role] != nil ||
c.ConnectionPooler.Service[role] != nil) {
if err = c.deleteConnectionPooler(role); err != nil {
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,16 +34,46 @@ 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)
}
if cluster.ConnectionPooler.Service[role] == nil {
return fmt.Errorf("Service was not saved %s", role)
}
} }
if cluster.ConnectionPooler.Service[role] == nil {
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,22 +89,18 @@ 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[Master] != nil || cluster.ConnectionPooler.Service[Master] != nil) {
(cluster.ConnectionPooler.Deployment[role] != nil && cluster.ConnectionPooler.Service[role] != 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[Replica] != nil || cluster.ConnectionPooler.Service[Replica] != nil) {
(cluster.ConnectionPooler.Deployment[role] != nil && cluster.ConnectionPooler.Service[role] != 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",