CSIT python API introduction
[csit.git] / resources / libraries / python / VPPUtil.py
index 3714d3b..d6c02a3 100644 (file)
 
 import time
 
+from robot.api import logger
+
 from resources.libraries.python.constants import Constants
 from resources.libraries.python.DUTSetup import DUTSetup
+from resources.libraries.python.PapiExecutor import PapiExecutor
+from resources.libraries.python.PapiErrors import PapiError
 from resources.libraries.python.ssh import exec_cmd, exec_cmd_no_error
 from resources.libraries.python.topology import NodeType
 from resources.libraries.python.VatExecutor import VatExecutor
@@ -135,24 +139,64 @@ class VPPUtil(object):
                 VPPUtil.verify_vpp_on_dut(node)
 
     @staticmethod
-    def vpp_show_version_verbose(node):
-        """Run "show version verbose" CLI command.
+    def vpp_show_version(node, verbose=False):
+        """Run "show_version" API command.
 
         :param node: Node to run command on.
+        :param verbose: Show version, compile date and compile location if True
+            otherwise show only version.
         :type node: dict
+        :type verbose: bool
+        :raises PapiError: If no reply received for show_version API command.
         """
-        vat = VatExecutor()
-        vat.execute_script("show_version_verbose.vat", node, json_out=False)
+        # TODO: move composition of api data to separate method
+        api_data = list()
+        api = dict(api_name='show_version')
+        api_args = dict()
+        api['api_args'] = api_args
+        api_data.append(api)
+
+        api_reply = None
+        with PapiExecutor(node) as papi_executor:
+            papi_executor.execute_papi(api_data)
+            try:
+                papi_executor.papi_should_have_passed()
+            except AssertionError:
+                raise RuntimeError('Failed to get VPP version on host: {host}'.
+                                   format(host=node['host']))
+            api_reply = papi_executor.get_papi_reply()
+
+        if api_reply is not None:
+            version_data = api_reply[0]['api_reply']['show_version_reply']
+            ver = version_data['version'].rstrip('\0x00')
+            if verbose:
+                date = version_data['build_date'].rstrip('\0x00')
+                loc = version_data['build_directory'].rstrip('\0x00')
+                version = \
+                    'VPP Version:        {ver}\n' \
+                    'Compile date:       {date}\n' \
+                    'Compile location:   {loc}\n '\
+                    .format(ver=ver, date=date, loc=loc)
+            else:
+                version = 'VPP version:{ver}'.format(ver=ver)
+            logger.info(version)
+        else:
+            raise PapiError('No reply received for show_version API command on '
+                            'host {host}'.format(host=node['host']))
 
-        try:
-            vat.script_should_have_passed()
-        except AssertionError:
-            raise RuntimeError('Failed to get VPP version on host: {name}'.
-                               format(name=node['host']))
+    @staticmethod
+    def vpp_show_version_verbose(node):
+        """Run "show_version" API command and return verbose string of version
+        data.
+
+        :param node: Node to run command on.
+        :type node: dict
+        """
+        VPPUtil.vpp_show_version(node, verbose=True)
 
     @staticmethod
     def show_vpp_version_on_all_duts(nodes):
-        """Show VPP version verbose on all DUTs.
+        """Show VPP version on all DUTs.
 
         :param nodes: VPP nodes.
         :type nodes: dict