diff --git a/kuryr_tempest_plugin/tests/scenario/base.py b/kuryr_tempest_plugin/tests/scenario/base.py index 290e0bd9..8825a78c 100644 --- a/kuryr_tempest_plugin/tests/scenario/base.py +++ b/kuryr_tempest_plugin/tests/scenario/base.py @@ -16,6 +16,7 @@ import time from kubernetes import client as k8s_client from kubernetes import config as k8s_config +from kubernetes.stream import stream from tempest import config from tempest.lib.common.utils import data_utils @@ -104,6 +105,12 @@ class BaseKuryrScenarioTest(manager.NetworkScenarioTest): if pod_name == port['name']: return port + def exec_command_in_pod(self, pod_name, command, namespace="default"): + api = self.k8s_client.CoreV1Api() + return stream(api.connect_get_namespaced_pod_exec, pod_name, namespace, + command=command, stderr=False, stdin=False, stdout=True, + tty=False) + def assign_fip_to_pod(self, pod_name, namespace="default"): ext_net_id = CONF.network.public_network_id pod_fip = self.os_admin.floating_ips_client.create_floatingip( diff --git a/kuryr_tempest_plugin/tests/scenario/test_cross_ping.py b/kuryr_tempest_plugin/tests/scenario/test_cross_ping.py index 6d11fea0..825c1407 100644 --- a/kuryr_tempest_plugin/tests/scenario/test_cross_ping.py +++ b/kuryr_tempest_plugin/tests/scenario/test_cross_ping.py @@ -12,6 +12,8 @@ # See the License for the specific language governing permissions and # limitations under the License. +import time + from oslo_log import log as logging from tempest import config from tempest.lib.common.utils import data_utils @@ -63,3 +65,18 @@ class TestCrossPingScenario(base.BaseKuryrScenarioTest): self.assertEqual('0', result.rstrip('\n')) except exceptions.SSHExecCommandFailed: LOG.error("Couldn't ping server") + + @decorators.idempotent_id('bddf5441-1244-449d-a125-b5fddfb1a2a9') + def test_pod_pod_ping(self): + pod_name_list, pod_fip_list = [], [] + for i in range(2): + pod_name, pod = self.create_pod() + self.addCleanup(self.delete_pod, pod_name, pod) + pod_name_list.append(pod_name) + pod_fip_list.append(self.assign_fip_to_pod(pod_name)) + + cmd = [ + "/bin/sh", "-c", "ping -c 1 {dst_ip}>/dev/null ; echo $?".format( + dst_ip=pod_fip_list[1]['floatingip']['floating_ip_address'])] + time.sleep(20) + self.assertEqual(self.exec_command_in_pod(pod_name_list[0], cmd), '0')