diff options
author | Manuel Buil <manuel.buil@ericsson.com> | 2016-11-08 18:16:35 +0100 |
---|---|---|
committer | Manuel Buil <manuel.buil@ericsson.com> | 2016-11-10 15:24:30 +0100 |
commit | a4ecec5b8dc4041df494a837f5030d73b15c1d3b (patch) | |
tree | c2584ef7794418d69fbc1513acd7bdf652462f04 | |
parent | dfcd85351d55c49f1a49e11663f4a00b07220093 (diff) |
Feature to know the time it takes to update OVS
ODL takes too much time to update the classification rules and we would like
to measure it to use it as a proof point that it is not acceptable.
This feature allows to measure it.
Change-Id: I00ade7e4aee7c9c81843077104727b98ad9bfea3
Signed-off-by: Manuel Buil <manuel.buil@ericsson.com>
-rw-r--r-- | functest/opnfv_tests/features/sfc/ovs_utils.py | 20 | ||||
-rwxr-xr-x | functest/opnfv_tests/features/sfc/sfc.py | 40 |
2 files changed, 60 insertions, 0 deletions
diff --git a/functest/opnfv_tests/features/sfc/ovs_utils.py b/functest/opnfv_tests/features/sfc/ovs_utils.py index 20ab5a7e3..af1f232c8 100644 --- a/functest/opnfv_tests/features/sfc/ovs_utils.py +++ b/functest/opnfv_tests/features/sfc/ovs_utils.py @@ -11,6 +11,7 @@ import functest.utils.functest_logger as rl import os import time import shutil +import re logger = rl.Logger('ovs_utils').getLogger() @@ -115,3 +116,22 @@ class OVSLogger(object): dumpdir = os.path.join(self.ovs_dir, timestamp) with open(os.path.join(dumpdir, 'error'), 'w') as f: f.write(related_error) + + def ofctl_time_counter(self, ssh_conn): + try: + # We get the flows from table 11 + table = 11 + br = "br-int" + output = self.ofctl_dump_flows(ssh_conn, br, table) + pattern = "NXM_NX_NSP" + rsps = [] + lines = output.split(",") + for line in lines: + is_there = re.findall(pattern, line) + if is_there: + value = line.split(":")[1].split("-")[0] + rsps.append(value) + return rsps + except Exception, e: + logger.error('Error when countering %s' % e) + return None diff --git a/functest/opnfv_tests/features/sfc/sfc.py b/functest/opnfv_tests/features/sfc/sfc.py index 17ffef225..32cd2d256 100755 --- a/functest/opnfv_tests/features/sfc/sfc.py +++ b/functest/opnfv_tests/features/sfc/sfc.py @@ -10,6 +10,7 @@ import re import json import SSHUtils as ssh_utils import ovs_utils +import thread parser = argparse.ArgumentParser() @@ -401,6 +402,31 @@ def check_ssh(ips, retries=100): return False +# Measure the time it takes to update the classification rules + + +def capture_time_log(compute_clients): + ovs_logger = ovs_utils.OVSLogger( + os.path.join(os.getcwd(), 'ovs-logs'), + "test") + i = 0 + first_RSP = "" + start_time = time.time() + while True: + rsps = ovs_logger.ofctl_time_counter(compute_clients[0]) + if not i: + first_RSP = rsps[0] + i = i + 1 + if(first_RSP != rsps[0]): + if (rsps[0] == rsps[1]): + stop_time = time.time() + logger.info("classification rules updated") + difference = stop_time - start_time + logger.info("It took %s seconds" % difference) + break + time.sleep(1) + return + def main(): installer_type = os.environ.get("INSTALLER_TYPE") @@ -454,6 +480,13 @@ def main(): nova_client, SERVER, FLAVOR, image_id, network_id, sg_id) subprocess.call(TACKER_SCRIPT, shell=True) + + # Start measuring the time it takes to implement the classification rules + try: + thread.start_new_thread(capture_time_log, (compute_clients,)) + except Exception, e: + logger.error("Unable to start the thread that counts time %s" % e) + server_ip, client_ip, sf1, sf2 = get_floating_ips( nova_client, neutron_client) @@ -497,6 +530,13 @@ def main(): logger.info("Changing the classification") subprocess.call(TACKER_CHANGECLASSI, shell=True) + + # Start measuring the time it takes to implement the classification rules + try: + thread.start_new_thread(capture_time_log, (compute_clients,)) + except Exception, e: + logger.error("Unable to start the thread that counts time %s" % e) + logger.info("Wait for ODL to update the classification rules in OVS") time.sleep(100) |