CSIT-229: ip4-lispgpe-ip4
[csit.git] / resources / libraries / python / DUTSetup.py
1 # Copyright (c) 2016 Cisco and/or its affiliates.
2 # Licensed under the Apache License, Version 2.0 (the "License");
3 # you may not use this file except in compliance with the License.
4 # You may obtain a copy of the License at:
5 #
6 #     http://www.apache.org/licenses/LICENSE-2.0
7 #
8 # Unless required by applicable law or agreed to in writing, software
9 # distributed under the License is distributed on an "AS IS" BASIS,
10 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11 # See the License for the specific language governing permissions and
12 # limitations under the License.
13
14 from robot.api import logger
15
16 from resources.libraries.python.topology import NodeType
17 from resources.libraries.python.ssh import SSH
18 from resources.libraries.python.constants import Constants
19 from resources.libraries.python.VatExecutor import VatExecutor
20
21
22 class DUTSetup(object):
23     @staticmethod
24     def start_vpp_service_on_all_duts(nodes):
25         """Start up the VPP service on all nodes."""
26         ssh = SSH()
27         for node in nodes.values():
28             if node['type'] == NodeType.DUT:
29                 ssh.connect(node)
30                 (ret_code, stdout, stderr) = \
31                     ssh.exec_command_sudo('service vpp restart')
32                 if 0 != int(ret_code):
33                     logger.debug('stdout: {0}'.format(stdout))
34                     logger.debug('stderr: {0}'.format(stderr))
35                     raise Exception('DUT {0} failed to start VPP service'.
36                                     format(node['host']))
37
38     @staticmethod
39     def vpp_show_version_verbose(node):
40         """Run "show version verbose" CLI command.
41
42         :param node: Node to run command on.
43         :type node: dict
44         """
45         vat = VatExecutor()
46         vat.execute_script("show_version_verbose.vat", node, json_out=False)
47
48     @staticmethod
49     def vpp_api_trace_save(node):
50         """Run "api trace save" CLI command.
51
52         :param node: Node to run command on.
53         :type node: dict
54         """
55         vat = VatExecutor()
56         vat.execute_script("api_trace_save.vat", node, json_out=False)
57
58     @staticmethod
59     def vpp_api_trace_dump(node):
60         """Run "api trace custom-dump" CLI command.
61
62         :param node: Node to run command on.
63         :type node: dict
64         """
65         vat = VatExecutor()
66         vat.execute_script("api_trace_dump.vat", node, json_out=False)
67
68     @staticmethod
69     def setup_all_duts(nodes):
70         """Prepare all DUTs in given topology for test execution."""
71         for node in nodes.values():
72             if node['type'] == NodeType.DUT:
73                 DUTSetup.setup_dut(node)
74
75     @staticmethod
76     def setup_dut(node):
77         ssh = SSH()
78         ssh.connect(node)
79
80         (ret_code, stdout, stderr) = \
81             ssh.exec_command('sudo -Sn bash {0}/{1}/dut_setup.sh'.format(
82                 Constants.REMOTE_FW_DIR, Constants.RESOURCES_LIB_SH))
83         logger.trace(stdout)
84         logger.trace(stderr)
85         if 0 != int(ret_code):
86             logger.debug('DUT {0} setup script failed: "{1}"'.
87                          format(node['host'], stdout + stderr))
88             raise Exception('DUT test setup script failed at node {}'.
89                             format(node['host']))