Merge "Change logic of wait_for_ping"

This commit is contained in:
Jenkins 2015-06-01 12:39:05 +00:00 committed by Gerrit Code Review
commit b3563501e9
2 changed files with 32 additions and 20 deletions

View File

@ -29,6 +29,9 @@ from rally import exceptions
LOG = logging.getLogger(__name__) LOG = logging.getLogger(__name__)
ICMP_UP_STATUS = "ICMP UP"
ICMP_DOWN_STATUS = "ICMP DOWN"
class VMScenario(base.Scenario): class VMScenario(base.Scenario):
"""Base class for VM scenarios with basic atomic actions. """Base class for VM scenarios with basic atomic actions.
@ -124,9 +127,11 @@ class VMScenario(base.Scenario):
@base.atomic_action_timer("vm.wait_for_ping") @base.atomic_action_timer("vm.wait_for_ping")
def _wait_for_ping(self, server_ip): def _wait_for_ping(self, server_ip):
server_ip = netaddr.IPAddress(server_ip)
bench_utils.wait_for( bench_utils.wait_for(
server_ip, server_ip,
is_ready=self._ping_ip_address, is_ready=bench_utils.resource_is(ICMP_UP_STATUS,
self._ping_ip_address),
timeout=120 timeout=120
) )
@ -156,13 +161,16 @@ class VMScenario(base.Scenario):
script, is_file) script, is_file)
@staticmethod @staticmethod
def _ping_ip_address(host, should_succeed=True): def _ping_ip_address(host):
ip = netaddr.IPAddress(host) """Check ip address that it is pingable.
ping = "ping" if ip.version == 4 else "ping6"
:param host: instance of `netaddr.IPAddress`
"""
ping = "ping" if host.version == 4 else "ping6"
if sys.platform.startswith("linux"): if sys.platform.startswith("linux"):
cmd = [ping, "-c1", "-w1", host] cmd = [ping, "-c1", "-w1", str(host)]
else: else:
cmd = [ping, "-c1", host] cmd = [ping, "-c1", str(host)]
proc = subprocess.Popen(cmd, proc = subprocess.Popen(cmd,
stdout=subprocess.PIPE, stdout=subprocess.PIPE,
@ -170,4 +178,4 @@ class VMScenario(base.Scenario):
proc.wait() proc.wait()
LOG.debug("Host %s is ICMP %s" LOG.debug("Host %s is ICMP %s"
% (host, proc.returncode and "down" or "up")) % (host, proc.returncode and "down" or "up"))
return (proc.returncode == 0) == should_succeed return ICMP_UP_STATUS if (proc.returncode == 0) else ICMP_DOWN_STATUS

View File

@ -17,6 +17,7 @@
import subprocess import subprocess
import mock import mock
import netaddr
from oslotest import mockpatch from oslotest import mockpatch
import six import six
@ -64,14 +65,17 @@ class VMScenarioTestCase(test.TestCase):
vm_scenario._wait_for_ssh(ssh) vm_scenario._wait_for_ssh(ssh)
ssh.wait.assert_called_once_with() ssh.wait.assert_called_once_with()
@mock.patch(VMTASKS_UTILS + ".bench_utils.resource_is")
@mock.patch(VMTASKS_UTILS + ".VMScenario._ping_ip_address", @mock.patch(VMTASKS_UTILS + ".VMScenario._ping_ip_address",
return_value=True) return_value=True)
def test__wait_for_ping(self, mock__ping): def test__wait_for_ping(self, mock__ping, mock_resource_is):
vm_scenario = utils.VMScenario() vm_scenario = utils.VMScenario()
vm_scenario._wait_for_ping("1.2.3.4") vm_scenario._wait_for_ping(netaddr.IPAddress("1.2.3.4"))
self.wait_for.mock.assert_called_once_with("1.2.3.4", self.wait_for.mock.assert_called_once_with(
is_ready=mock__ping, netaddr.IPAddress("1.2.3.4"),
is_ready=mock_resource_is.return_value,
timeout=120) timeout=120)
mock_resource_is.assert_called_once_with("ICMP UP", mock__ping)
@mock.patch(VMTASKS_UTILS + ".VMScenario._run_command_over_ssh") @mock.patch(VMTASKS_UTILS + ".VMScenario._run_command_over_ssh")
@mock.patch("rally.common.sshutils.SSH") @mock.patch("rally.common.sshutils.SSH")
@ -120,11 +124,11 @@ class VMScenarioTestCase(test.TestCase):
mock_sys.platform = "linux2" mock_sys.platform = "linux2"
vm_scenario = utils.VMScenario() vm_scenario = utils.VMScenario()
host_ip = "1.2.3.4" host_ip = netaddr.IPAddress("1.2.3.4")
self.assertTrue(vm_scenario._ping_ip_address(host_ip)) self.assertTrue(vm_scenario._ping_ip_address(host_ip))
mock_subprocess.assert_called_once_with( mock_subprocess.assert_called_once_with(
["ping", "-c1", "-w1", host_ip], ["ping", "-c1", "-w1", str(host_ip)],
stderr=subprocess.PIPE, stdout=subprocess.PIPE) stderr=subprocess.PIPE, stdout=subprocess.PIPE)
ping_process.wait.assert_called_once_with() ping_process.wait.assert_called_once_with()
@ -137,11 +141,11 @@ class VMScenarioTestCase(test.TestCase):
mock_sys.platform = "linux2" mock_sys.platform = "linux2"
vm_scenario = utils.VMScenario() vm_scenario = utils.VMScenario()
host_ip = "1ce:c01d:bee2:15:a5:900d:a5:11fe" host_ip = netaddr.IPAddress("1ce:c01d:bee2:15:a5:900d:a5:11fe")
self.assertTrue(vm_scenario._ping_ip_address(host_ip)) self.assertTrue(vm_scenario._ping_ip_address(host_ip))
mock_subprocess.assert_called_once_with( mock_subprocess.assert_called_once_with(
["ping6", "-c1", "-w1", host_ip], ["ping6", "-c1", "-w1", str(host_ip)],
stderr=subprocess.PIPE, stdout=subprocess.PIPE) stderr=subprocess.PIPE, stdout=subprocess.PIPE)
ping_process.wait.assert_called_once_with() ping_process.wait.assert_called_once_with()
@ -154,11 +158,11 @@ class VMScenarioTestCase(test.TestCase):
mock_sys.platform = "freebsd10" mock_sys.platform = "freebsd10"
vm_scenario = utils.VMScenario() vm_scenario = utils.VMScenario()
host_ip = "1.2.3.4" host_ip = netaddr.IPAddress("1.2.3.4")
self.assertTrue(vm_scenario._ping_ip_address(host_ip)) self.assertTrue(vm_scenario._ping_ip_address(host_ip))
mock_subprocess.assert_called_once_with( mock_subprocess.assert_called_once_with(
["ping", "-c1", host_ip], ["ping", "-c1", str(host_ip)],
stderr=subprocess.PIPE, stdout=subprocess.PIPE) stderr=subprocess.PIPE, stdout=subprocess.PIPE)
ping_process.wait.assert_called_once_with() ping_process.wait.assert_called_once_with()
@ -171,11 +175,11 @@ class VMScenarioTestCase(test.TestCase):
mock_sys.platform = "freebsd10" mock_sys.platform = "freebsd10"
vm_scenario = utils.VMScenario() vm_scenario = utils.VMScenario()
host_ip = "1ce:c01d:bee2:15:a5:900d:a5:11fe" host_ip = netaddr.IPAddress("1ce:c01d:bee2:15:a5:900d:a5:11fe")
self.assertTrue(vm_scenario._ping_ip_address(host_ip)) self.assertTrue(vm_scenario._ping_ip_address(host_ip))
mock_subprocess.assert_called_once_with( mock_subprocess.assert_called_once_with(
["ping6", "-c1", host_ip], ["ping6", "-c1", str(host_ip)],
stderr=subprocess.PIPE, stdout=subprocess.PIPE) stderr=subprocess.PIPE, stdout=subprocess.PIPE)
ping_process.wait.assert_called_once_with() ping_process.wait.assert_called_once_with()