Merge "Fixed test_sg_quota_increased test"
diff --git a/neutron_tempest_plugin/api/test_security_groups.py b/neutron_tempest_plugin/api/test_security_groups.py
index 686abec..dab183f 100644
--- a/neutron_tempest_plugin/api/test_security_groups.py
+++ b/neutron_tempest_plugin/api/test_security_groups.py
@@ -278,6 +278,11 @@
@decorators.idempotent_id('77ec038c-5638-11ea-8e2d-0242ac130003')
def test_sg_rules_quota_increased(self):
+ """Test security group rules quota increased.
+
+ This test checks if it is possible to increase the SG rules Quota
+ value and creates security group rules according to new quota value.
+ """
self._create_max_allowed_sg_rules_amount()
new_quota = self._increase_sg_rules_quota()
port_index = new_quota
diff --git a/neutron_tempest_plugin/scenario/base.py b/neutron_tempest_plugin/scenario/base.py
index 7b66494..fa91b31 100644
--- a/neutron_tempest_plugin/scenario/base.py
+++ b/neutron_tempest_plugin/scenario/base.py
@@ -273,6 +273,11 @@
servers = self.os_primary.servers_client.list_servers()
servers = servers['servers']
for server in servers:
+ # NOTE(slaweq): sometimes servers are passed in dictionary with
+ # "server" key as first level key and in other cases it may be that
+ # it is just the "inner" dict without "server" key. Lets try to
+ # handle both cases
+ server = server.get("server") or server
try:
console_output = (
self.os_primary.servers_client.get_console_output(
diff --git a/neutron_tempest_plugin/scenario/test_floatingip.py b/neutron_tempest_plugin/scenario/test_floatingip.py
index 37df5be..ed5d239 100644
--- a/neutron_tempest_plugin/scenario/test_floatingip.py
+++ b/neutron_tempest_plugin/scenario/test_floatingip.py
@@ -378,7 +378,6 @@
self.fip['id'])['floatingip']
self.assertEqual(policy_id, fip['qos_policy_id'])
- self._create_file_for_bw_tests(ssh_client)
common_utils.wait_until_true(lambda: self._check_bw(
ssh_client,
self.fip['floating_ip_address'],
diff --git a/neutron_tempest_plugin/scenario/test_qos.py b/neutron_tempest_plugin/scenario/test_qos.py
index e84fb3c..7540741 100644
--- a/neutron_tempest_plugin/scenario/test_qos.py
+++ b/neutron_tempest_plugin/scenario/test_qos.py
@@ -70,41 +70,27 @@
credentials = ['primary', 'admin']
force_tenant_isolation = False
- FILE_SIZE = 1024 * 1024
TOLERANCE_FACTOR = 1.5
BUFFER_SIZE = 512
- COUNT = FILE_SIZE / BUFFER_SIZE
LIMIT_BYTES_SEC = (constants.LIMIT_KILO_BITS_PER_SECOND * 1024 *
TOLERANCE_FACTOR / 8.0)
- FILE_PATH = "/tmp/img"
-
NC_PORT = 1234
- FILE_DOWNLOAD_TIMEOUT = 120
-
- def _create_file_for_bw_tests(self, ssh_client):
- cmd = ("(dd if=/dev/zero bs=%(bs)d count=%(count)d of=%(file_path)s) "
- % {'bs': self.BUFFER_SIZE, 'count': self.COUNT,
- 'file_path': self.FILE_PATH})
- ssh_client.exec_command(cmd, timeout=5)
- cmd = "stat -c %%s %s" % self.FILE_PATH
- filesize = ssh_client.exec_command(cmd, timeout=5)
- if int(filesize.strip()) != self.FILE_SIZE:
- raise sc_exceptions.FileCreationFailedException(
- file=self.FILE_PATH)
+ DOWNLOAD_DURATION = 5
+ # NOTE(mjozefcz): This makes around 10 retries.
+ CHECK_TIMEOUT = DOWNLOAD_DURATION * 10
def _check_bw(self, ssh_client, host, port, expected_bw=LIMIT_BYTES_SEC):
utils.kill_nc_process(ssh_client)
- cmd = ("(nc -ll -p %(port)d < %(file_path)s > /dev/null &)" % {
- 'port': port, 'file_path': self.FILE_PATH})
+ cmd = ("(nc -ll -p %d < /dev/zero > /dev/null &)" % port)
ssh_client.exec_command(cmd, timeout=5)
# Open TCP socket to remote VM and download big file
start_time = time.time()
- socket_timeout = self.FILE_SIZE * self.TOLERANCE_FACTOR / expected_bw
- client_socket = _connect_socket(host, port, socket_timeout)
+ client_socket = _connect_socket(
+ host, port, constants.SOCKET_CONNECT_TIMEOUT)
total_bytes_read = 0
try:
- while total_bytes_read < self.FILE_SIZE:
+ while time.time() - start_time < self.DOWNLOAD_DURATION:
data = client_socket.recv(self.BUFFER_SIZE)
total_bytes_read += len(data)
@@ -114,10 +100,12 @@
LOG.debug("time_elapsed = %(time_elapsed).16f, "
"total_bytes_read = %(total_bytes_read)d, "
- "bytes_per_second = %(bytes_per_second)d",
+ "bytes_per_second = %(bytes_per_second)d, "
+ "expected_bw = %(expected_bw)d.",
{'time_elapsed': time_elapsed,
'total_bytes_read': total_bytes_read,
- 'bytes_per_second': bytes_per_second})
+ 'bytes_per_second': bytes_per_second,
+ 'expected_bw': expected_bw})
return bytes_per_second <= expected_bw
except socket.timeout:
LOG.warning('Socket timeout while reading the remote file, bytes '
@@ -249,16 +237,13 @@
self.os_admin.network_client.update_network(
self.network['id'], qos_policy_id=bw_limit_policy_id)
- # Create file on VM
- self._create_file_for_bw_tests(ssh_client)
-
# Basic test, Check that actual BW while downloading file
# is as expected (Original BW)
utils.wait_until_true(lambda: self._check_bw(
ssh_client,
self.fip['floating_ip_address'],
port=self.NC_PORT),
- timeout=self.FILE_DOWNLOAD_TIMEOUT,
+ timeout=self.CHECK_TIMEOUT,
sleep=1)
# As admin user update QoS rule
@@ -275,7 +260,7 @@
self.fip['floating_ip_address'],
port=self.NC_PORT,
expected_bw=QoSTest.LIMIT_BYTES_SEC * 2),
- timeout=self.FILE_DOWNLOAD_TIMEOUT,
+ timeout=self.CHECK_TIMEOUT,
sleep=1)
# Create a new QoS policy
@@ -298,7 +283,7 @@
ssh_client,
self.fip['floating_ip_address'],
port=self.NC_PORT),
- timeout=self.FILE_DOWNLOAD_TIMEOUT,
+ timeout=self.CHECK_TIMEOUT,
sleep=1)
# As admin user update QoS rule
@@ -313,8 +298,9 @@
utils.wait_until_true(lambda: self._check_bw(
ssh_client,
self.fip['floating_ip_address'],
- port=self.NC_PORT, expected_bw=QoSTest.LIMIT_BYTES_SEC * 3),
- timeout=self.FILE_DOWNLOAD_TIMEOUT,
+ port=self.NC_PORT,
+ expected_bw=QoSTest.LIMIT_BYTES_SEC * 3),
+ timeout=self.CHECK_TIMEOUT,
sleep=1)
@decorators.idempotent_id('66e5673e-0522-11ea-8d71-362b9e155667')
@@ -371,3 +357,39 @@
"""The expected rule ID is {0},
the actual value is {1}""".
format(rule['id'], retrieved_rule_id))
+
+ @decorators.idempotent_id('4eee64da-5646-11ea-82b4-0242ac130003')
+ def test_create_instance_using_network_with_existing_policy(self):
+ network = self.create_network()
+
+ qos_policy = self.os_admin.network_client.create_qos_policy(
+ name='network-policy',
+ shared=False)['policy']
+
+ rule = self.os_admin.network_client.create_bandwidth_limit_rule(
+ policy_id=qos_policy['id'],
+ max_kbps=constants.LIMIT_KILO_BITS_PER_SECOND,
+ max_burst_kbps=constants.LIMIT_KILO_BITS_PER_SECOND)
+
+ network = self.os_admin.network_client.update_network(
+ network['id'],
+ qos_policy_id=qos_policy['id'])['network']
+ self.setup_network_and_server(network=network)
+ retrieved_net = self.client.show_network(network['id'])
+ self.assertEqual(qos_policy['id'],
+ retrieved_net['network']['qos_policy_id'],
+ """The expected policy ID is {0},
+ the actual value is {1}""".
+ format(qos_policy['id'],
+ retrieved_net['network']['qos_policy_id']))
+
+ retrieved_policy = self.os_admin.network_client.show_qos_policy(
+ retrieved_net['network']['qos_policy_id'])
+ retrieved_rule_id = retrieved_policy['policy']['rules'][0]['id']
+
+ self.assertEqual(rule['bandwidth_limit_rule']['id'],
+ retrieved_rule_id,
+ """The expected rule ID is {0},
+ the actual value is {1}""".
+ format(rule['bandwidth_limit_rule']['id'],
+ retrieved_rule_id))