Merge "Added functionality to wait for port creation"
This commit is contained in:
commit
1b05230073
|
@ -604,6 +604,22 @@ def wait_for_ping(server_ip, timeout=30, interval=1):
|
||||||
raise lib_exc.TimeoutException()
|
raise lib_exc.TimeoutException()
|
||||||
|
|
||||||
|
|
||||||
|
def wait_for_port_status(client, port_id, status):
|
||||||
|
"""Wait for a port reach a certain status : ["BUILD" | "DOWN" | "ACTIVE"]
|
||||||
|
:param client: The network client to use when querying the port's
|
||||||
|
status
|
||||||
|
:param status: A string to compare the current port status-to.
|
||||||
|
:param port_id: The uuid of the port we would like queried for status.
|
||||||
|
"""
|
||||||
|
start_time = time.time()
|
||||||
|
while (time.time() - start_time <= client.build_timeout):
|
||||||
|
result = client.show_port(port_id)
|
||||||
|
if result['port']['status'].lower() == status.lower():
|
||||||
|
return result
|
||||||
|
time.sleep(client.build_interval)
|
||||||
|
raise lib_exc.TimeoutException
|
||||||
|
|
||||||
|
|
||||||
def wait_for_ssh(ssh_client, timeout=30):
|
def wait_for_ssh(ssh_client, timeout=30):
|
||||||
"""Waits for SSH connection to become usable"""
|
"""Waits for SSH connection to become usable"""
|
||||||
start_time = int(time.time())
|
start_time = int(time.time())
|
||||||
|
|
|
@ -145,6 +145,7 @@ class ScenarioTest(tempest.test.BaseTestCase):
|
||||||
- 'binding:vnic_type' - defaults to CONF.network.port_vnic_type
|
- 'binding:vnic_type' - defaults to CONF.network.port_vnic_type
|
||||||
- 'binding:profile' - defaults to CONF.network.port_profile
|
- 'binding:profile' - defaults to CONF.network.port_profile
|
||||||
"""
|
"""
|
||||||
|
|
||||||
if not client:
|
if not client:
|
||||||
client = self.ports_client
|
client = self.ports_client
|
||||||
name = data_utils.rand_name(
|
name = data_utils.rand_name(
|
||||||
|
@ -158,10 +159,12 @@ class ScenarioTest(tempest.test.BaseTestCase):
|
||||||
network_id=network_id,
|
network_id=network_id,
|
||||||
**kwargs)
|
**kwargs)
|
||||||
self.assertIsNotNone(result, 'Unable to allocate port')
|
self.assertIsNotNone(result, 'Unable to allocate port')
|
||||||
port = result['port']
|
port_id = result['port']['id']
|
||||||
self.addCleanup(test_utils.call_and_ignore_notfound_exc,
|
self.addCleanup(test_utils.call_and_ignore_notfound_exc,
|
||||||
client.delete_port, port['id'])
|
client.delete_port, port_id)
|
||||||
return port
|
port = waiters.wait_for_port_status(
|
||||||
|
client=client, port_id=port_id, status="DOWN")
|
||||||
|
return port["port"]
|
||||||
|
|
||||||
def create_keypair(self, client=None, **kwargs):
|
def create_keypair(self, client=None, **kwargs):
|
||||||
"""Creates keypair
|
"""Creates keypair
|
||||||
|
|
|
@ -21,6 +21,7 @@ from tempest.common import waiters
|
||||||
from tempest import exceptions
|
from tempest import exceptions
|
||||||
from tempest.lib import exceptions as lib_exc
|
from tempest.lib import exceptions as lib_exc
|
||||||
from tempest.lib.services.compute import servers_client
|
from tempest.lib.services.compute import servers_client
|
||||||
|
from tempest.lib.services.network import ports_client
|
||||||
from tempest.lib.services.volume.v2 import volumes_client
|
from tempest.lib.services.volume.v2 import volumes_client
|
||||||
from tempest.tests import base
|
from tempest.tests import base
|
||||||
import tempest.tests.utils as utils
|
import tempest.tests.utils as utils
|
||||||
|
@ -612,6 +613,48 @@ class TestVolumeWaiters(base.TestCase):
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class TestPortCreationWaiter(base.TestCase):
|
||||||
|
def test_wait_for_port_status(self):
|
||||||
|
"""Test that the waiter replies with the port before the timeout"""
|
||||||
|
|
||||||
|
def client_response(self):
|
||||||
|
"""Mock client response, replies with the final status after
|
||||||
|
2 calls
|
||||||
|
"""
|
||||||
|
if mock_client.call_count >= 2:
|
||||||
|
return mock_port
|
||||||
|
else:
|
||||||
|
mock_client.call_count += 1
|
||||||
|
return mock_port_build
|
||||||
|
|
||||||
|
mock_port = {'port': {'id': '1234', 'status': "DOWN"}}
|
||||||
|
mock_port_build = {'port': {'id': '1234', 'status': "BUILD"}}
|
||||||
|
mock_client = mock.Mock(
|
||||||
|
spec=ports_client.PortsClient,
|
||||||
|
build_timeout=30, build_interval=1,
|
||||||
|
show_port=client_response)
|
||||||
|
fake_port_id = "1234"
|
||||||
|
fake_status = "DOWN"
|
||||||
|
self.assertEqual(mock_port, waiters.wait_for_port_status(
|
||||||
|
mock_client, fake_port_id, fake_status))
|
||||||
|
|
||||||
|
def test_wait_for_port_status_timeout(self):
|
||||||
|
"""Negative test - checking that a timeout
|
||||||
|
presented by a small 'fake_timeout' and a static status of
|
||||||
|
'BUILD' in the mock will raise a timeout exception
|
||||||
|
"""
|
||||||
|
mock_port = {'port': {'id': '1234', 'status': "BUILD"}}
|
||||||
|
mock_client = mock.Mock(
|
||||||
|
spec=ports_client.PortsClient,
|
||||||
|
build_timeout=2, build_interval=1,
|
||||||
|
show_port=lambda id: mock_port)
|
||||||
|
fake_port_id = "1234"
|
||||||
|
fake_status = "ACTIVE"
|
||||||
|
self.assertRaises(lib_exc.TimeoutException,
|
||||||
|
waiters.wait_for_port_status, mock_client,
|
||||||
|
fake_port_id, fake_status)
|
||||||
|
|
||||||
|
|
||||||
class TestServerFloatingIPWaiters(base.TestCase):
|
class TestServerFloatingIPWaiters(base.TestCase):
|
||||||
|
|
||||||
def test_wait_for_server_floating_ip_associate_timeout(self):
|
def test_wait_for_server_floating_ip_associate_timeout(self):
|
||||||
|
|
Loading…
Reference in New Issue