From 7b36391800ef250735b204d389b9453b346a5cd0 Mon Sep 17 00:00:00 2001 From: Peter Stachowski Date: Thu, 17 Nov 2016 16:20:33 -0500 Subject: [PATCH] Have scenario tests use ipv4 The scenario tests currently use the first ip address (or in the case of clusters, all) that is found. Unfortunately some datastores don't support IPV6, so if a non-ipv4 ip is used, the test will fail. Until all datastores support IPV6 (or we can come up with a strategy to intelligently decide which to use) we should only use the IPV4 ips, so the tests have been changed to accomodate this. Closes-Bug: 1642741 Depends-On: Ia4fc545a10c7c16532aefd73818dd7d90c9c271b Change-Id: I6aff776680c9c0632d8965c3ed70ed26db0a63f2 --- .../runners/cluster_actions_runners.py | 20 +++++++++---------- .../scenario/runners/replication_runners.py | 3 +-- trove/tests/scenario/runners/test_runners.py | 9 ++++++++- 3 files changed, 19 insertions(+), 13 deletions(-) diff --git a/trove/tests/scenario/runners/cluster_actions_runners.py b/trove/tests/scenario/runners/cluster_actions_runners.py index ad863870ed..2a2f075976 100644 --- a/trove/tests/scenario/runners/cluster_actions_runners.py +++ b/trove/tests/scenario/runners/cluster_actions_runners.py @@ -168,13 +168,12 @@ class ClusterActionsRunner(TestRunner): instance['id']) self.assert_true(root_enabled_test.rootEnabled) - for ip in cluster.ip: - self.report.log("Pinging cluster as superuser via node: %s" % ip) + for ipv4 in self.extract_ipv4s(cluster.ip): + self.report.log("Pinging cluster as superuser via node: %s" % ipv4) ping_response = self.test_helper.ping( - ip, + ipv4, username=self.current_root_creds[0], - password=self.current_root_creds[1] - ) + password=self.current_root_creds[1]) self.assert_true(ping_response) def run_add_initial_cluster_data(self, data_type=DataType.tiny): @@ -185,7 +184,7 @@ class ClusterActionsRunner(TestRunner): def assert_add_cluster_data(self, data_type, cluster_id): cluster = self.auth_client.clusters.get(cluster_id) - self.test_helper.add_data(data_type, cluster.ip[0]) + self.test_helper.add_data(data_type, self.extract_ipv4s(cluster.ip)[0]) def run_verify_initial_cluster_data(self, data_type=DataType.tiny): self.assert_verify_cluster_data(data_type, self.cluster_id) @@ -195,9 +194,9 @@ class ClusterActionsRunner(TestRunner): def assert_verify_cluster_data(self, data_type, cluster_id): cluster = self.auth_client.clusters.get(cluster_id) - for ip in cluster.ip: - self.report.log("Verifying cluster data via node: %s" % ip) - self.test_helper.verify_data(data_type, ip) + for ipv4 in self.extract_ipv4s(cluster.ip): + self.report.log("Verifying cluster data via node: %s" % ipv4) + self.test_helper.verify_data(data_type, ipv4) def run_remove_initial_cluster_data(self, data_type=DataType.tiny): self.assert_remove_cluster_data(data_type, self.cluster_id) @@ -207,7 +206,8 @@ class ClusterActionsRunner(TestRunner): def assert_remove_cluster_data(self, data_type, cluster_id): cluster = self.auth_client.clusters.get(cluster_id) - self.test_helper.remove_data(data_type, cluster.ip[0]) + self.test_helper.remove_data( + data_type, self.extract_ipv4s(cluster.ip)[0]) def run_cluster_grow(self, expected_task_name='GROWING_CLUSTER', expected_http_code=202): diff --git a/trove/tests/scenario/runners/replication_runners.py b/trove/tests/scenario/runners/replication_runners.py index 2d40232116..b6a178eada 100644 --- a/trove/tests/scenario/runners/replication_runners.py +++ b/trove/tests/scenario/runners/replication_runners.py @@ -206,8 +206,7 @@ class ReplicationRunner(TestRunner): def assert_verify_replica_data(self, master_id, data_type): replica_ids = self._get_replica_set(master_id) for replica_id in replica_ids: - replica_instance = self.get_instance(replica_id) - host = str(replica_instance._info['ip'][0]) + host = self.get_instance_host(replica_id) self.report.log("Checking data on host %s" % host) self.assert_verify_replication_data(data_type, host) diff --git a/trove/tests/scenario/runners/test_runners.py b/trove/tests/scenario/runners/test_runners.py index ebf1ecb469..3b610c3ddb 100644 --- a/trove/tests/scenario/runners/test_runners.py +++ b/trove/tests/scenario/runners/test_runners.py @@ -14,6 +14,7 @@ # under the License. import datetime +import netaddr import os import proboscis import time as timer @@ -628,10 +629,16 @@ class TestRunner(object): client = client or self.auth_client return client.instances.get(instance_id) + def extract_ipv4s(self, ips): + ipv4s = [str(ip) for ip in ips if netaddr.valid_ipv4(ip)] + if not ipv4s: + self.fail("No IPV4 ip found") + return ipv4s + def get_instance_host(self, instance_id=None): instance_id = instance_id or self.instance_info.id instance = self.get_instance(instance_id) - host = str(instance._info['ip'][0]) + host = self.extract_ipv4s(instance._info['ip'])[0] self.report.log("Found host %s for instance %s." % (host, instance_id)) return host