diff --git a/e2e/tests/k8s_api.py b/e2e/tests/k8s_api.py index f1930efdf..86be7d0d1 100644 --- a/e2e/tests/k8s_api.py +++ b/e2e/tests/k8s_api.py @@ -262,10 +262,10 @@ class K8sBase: self.labels=labels self.namespace=namespace - def get_pg_nodes(self, pg_cluster_name, namespace='default'): + def get_pg_nodes(self, pg_cluster_labels='cluster-name=acid-minimal-cluster', namespace='default'): master_pod_node = '' replica_pod_nodes = [] - podsList = self.api.core_v1.list_namespaced_pod(namespace, label_selector=pg_cluster_name) + podsList = self.api.core_v1.list_namespaced_pod(namespace, label_selector=pg_cluster_labels) for pod in podsList.items: if pod.metadata.labels.get('spilo-role') == 'master': master_pod_node = pod.spec.node_name @@ -274,6 +274,18 @@ class K8sBase: return master_pod_node, replica_pod_nodes + def get_cluster_nodes(self, cluster_labels='cluster-name=acid-minimal-cluster', namespace='default'): + m = [] + r = [] + podsList = self.api.core_v1.list_namespaced_pod(namespace, label_selector=cluster_labels) + for pod in podsList.items: + if pod.metadata.labels.get('spilo-role') == 'master' and pod.status.phase == 'Running': + m.append(pod.spec.node_name) + elif pod.metadata.labels.get('spilo-role') == 'replica' and pod.status.phase == 'Running': + r.append(pod.spec.node_name) + + return m, r + def wait_for_operator_pod_start(self): self.wait_for_pod_start("name=postgres-operator") diff --git a/e2e/tests/test_e2e.py b/e2e/tests/test_e2e.py index 128d3eddf..3121fd2de 100644 --- a/e2e/tests/test_e2e.py +++ b/e2e/tests/test_e2e.py @@ -691,12 +691,10 @@ class EndToEndTestCase(unittest.TestCase): self.eventuallyEqual(lambda: len(k8s.get_patroni_running_members("acid-minimal-cluster-0")), 2, "Postgres status did not enter running") # get nodes of master and replica(s) (expected target of new master) - current_master_node, current_replica_nodes = k8s.get_pg_nodes(cluster_label) - num_replicas = len(current_replica_nodes) + master_nodes, replica_nodes = k8s.get_cluster_nodes() - self.assertNotEqual(current_master_node, '') - self.assertTrue(num_replicas, 1) - failover_targets = self.get_failover_targets(current_master_node, current_replica_nodes) + self.assertNotEqual(master_nodes, []) + self.assertNotEqual(replica_nodes, []) # taint node with postgres=:NoExecute to force failover body = { @@ -710,8 +708,9 @@ class EndToEndTestCase(unittest.TestCase): } } - k8s.api.core_v1.patch_node(current_master_node, body) - new_master_node, new_replica_nodes = self.assert_failover(current_master_node, num_replicas, failover_targets, cluster_label) + k8s.api.core_v1.patch_node(master_nodes[0], body) + self.eventuallyTrue(k8s.get_closter_nodes()[0], replica_nodes) + self.assertNotEqual(k8s.get_closter_nodes()[0], master_nodes) # add toleration to pods patch_toleration_config = {