diff options
Diffstat (limited to 'resources/libraries')
-rw-r--r-- | resources/libraries/python/DUTSetup.py | 45 | ||||
-rw-r--r-- | resources/libraries/python/VppCounters.py | 17 | ||||
-rw-r--r-- | resources/libraries/robot/default.robot | 38 |
3 files changed, 100 insertions, 0 deletions
diff --git a/resources/libraries/python/DUTSetup.py b/resources/libraries/python/DUTSetup.py index 78caeb79a4..6b2f5edb83 100644 --- a/resources/libraries/python/DUTSetup.py +++ b/resources/libraries/python/DUTSetup.py @@ -97,3 +97,48 @@ class DUTSetup(object): format(node['host'], stdout + stderr)) raise Exception('DUT test setup script failed at node {}'. format(node['host'])) + + @staticmethod + def get_vpp_pid(node): + """Get PID of running VPP process. + + :param node: DUT node. + :type node: dict + :return: PID + :rtype: int + :raises RuntimeError if it is not possible to get the PID. + """ + + ssh = SSH() + ssh.connect(node) + ret_code, stdout, stderr = ssh.exec_command('pidof vpp') + + logger.trace(stdout) + logger.trace(stderr) + + if int(ret_code) != 0: + logger.debug('Not possible to get PID of VPP process on node: ' + '"{1}"'.format(node['host'], stdout + stderr)) + raise RuntimeError('Not possible to get PID of VPP process on node:' + ' {}'.format(node['host'])) + + if len(stdout.splitlines()) != 1: + raise RuntimeError("More then one VPP PID found on node {0}". + format(node['host'])) + return int(stdout) + + @staticmethod + def get_vpp_pids(nodes): + """Get PID of running VPP process on all DUTs. + + :param nodes: DUT nodes. + :type nodes: dict + :return: PIDs + :rtype: dict + """ + + pids = dict() + for node in nodes.values(): + if node['type'] == NodeType.DUT: + pids[node['host']] = DUTSetup.get_vpp_pid(node) + return pids diff --git a/resources/libraries/python/VppCounters.py b/resources/libraries/python/VppCounters.py index af3ea47560..e755c75673 100644 --- a/resources/libraries/python/VppCounters.py +++ b/resources/libraries/python/VppCounters.py @@ -58,6 +58,23 @@ class VppCounters(object): vat.execute_script("show_errors_verbose.vat", node, json_out=False) @staticmethod + def vpp_show_errors_on_all_duts(nodes, verbose=False): + """Show errors on all DUTs. + + :param nodes: VPP nodes + :param verbose: If True show verbose output. + :type nodes: dict + :type verbose: bool + """ + + for node in nodes.values(): + if node['type'] == NodeType.DUT: + if verbose: + VppCounters.vpp_show_errors_verbose(node) + else: + VppCounters.vpp_show_errors(node) + + @staticmethod def vpp_show_runtime(node): """Run "show runtime" CLI command. diff --git a/resources/libraries/robot/default.robot b/resources/libraries/robot/default.robot index 8602f705ef..dca7d53373 100644 --- a/resources/libraries/robot/default.robot +++ b/resources/libraries/robot/default.robot @@ -173,3 +173,41 @@ | | :FOR | ${dut} | IN | @{duts} | | | Apply Config | ${nodes['${dut}']} | | Update All Interface Data On All Nodes | ${nodes} | skip_tg=${TRUE} + +| Save VPP PIDs +| | [Documentation] | Get PIDs of VPP processes from all DUTs in topology and +| | ... | set it as a test variable. The PIDs are stored as dictionary items +| | ... | where the key is the host and the value is the PID. +| | ... +| | ${setup_vpp_pids}= | Get VPP PIDs | ${nodes} +| | Set Test Variable | ${setup_vpp_pids} + +| Check VPP PID in Teardown +| | [Documentation] | Check if the VPP PIDs on all DUTs are the same at the end +| | ... | of test as they were at the begining. If they are not, only a message +| | ... | is printed on console and to log. The test will not fail. +| | ... +| | ${teardown_vpp_pids}= | Get VPP PIDs | ${nodes} +| | ${err_msg}= | Catenate | \nThe VPP PIDs are not equal!\nTest Setup VPP PIDs: +| | ... | ${setup_vpp_pids}\nTest Teardown VPP PIDs: ${teardown_vpp_pids} +| | ${rc} | ${msg}= | Run keyword and ignore error +| | ... | Dictionaries Should Be Equal +| | ... | ${setup_vpp_pids} | ${teardown_vpp_pids} +| | Run Keyword And Return If | '${rc}'=='FAIL' | Log | ${err_msg} +| | ... | console=yes | level=WARN + +| Func Test Setup +| | [Documentation] | Common test setup for functional tests. +| | ... +| | Setup all DUTs before test +| | Save VPP PIDs +| | Setup all TGs before traffic script +| | Update All Interface Data On All Nodes | ${nodes} + +| Func Test Teardown +| | [Documentation] | Common test teardown for functional tests. +| | ... +| | Show Packet Trace on All DUTs | ${nodes} +| | Show vpp trace dump on all DUTs +| | Vpp Show Errors On All DUTs | ${nodes} +| | Check VPP PID in Teardown |