LISP - implement changes done in VPP-376
[csit.git] / resources / libraries / python / LispUtil.py
index 219d2c7..556ae1b 100644 (file)
@@ -15,7 +15,7 @@
 
 from resources.libraries.python.parsers.JsonParser import JsonParser
 from resources.libraries.python.topology import Topology
-from resources.libraries.python.VatExecutor import VatExecutor
+from resources.libraries.python.VatExecutor import VatExecutor, VatTerminal
 
 
 class LispUtil(object):
@@ -35,27 +35,34 @@ class LispUtil(object):
         """
 
         vat = VatExecutor()
-        vat.execute_script_json_out('lisp/show_lisp_enable_disable.vat',
+        vat.execute_script_json_out('lisp/show_lisp_status.vat',
                                     node)
         return JsonParser().parse_data(vat.get_script_stdout())
 
     @staticmethod
-    def vpp_show_lisp_locator_set(node):
+    def vpp_show_lisp_locator_set(node, items_filter):
         """Get lisp locator_set from VPP node.
 
         :param node: VPP node.
+        :param items_filter: Filter which specifies which items should be
+        retrieved - local, remote, empty string = both.
         :type node: dict
+        :type items_filter: str
         :return: Lisp locator_set data as python list.
         :rtype: list
         """
 
-        vat = VatExecutor()
-        vat.execute_script_json_out('lisp/show_lisp_locator_set.vat', node)
-        return JsonParser().parse_data(vat.get_script_stdout())
+        try:
+            with VatTerminal(node) as vat:
+                response = vat.vat_terminal_exec_cmd_from_template(
+                    'lisp/show_lisp_locator_set.vat', filter=items_filter)
+            return response[0]
+        except ValueError:
+            return []
 
     @staticmethod
-    def vpp_show_lisp_local_eid_table(node):
-        """Get lisp local eid table from VPP node.
+    def vpp_show_lisp_eid_table(node):
+        """Get lisp eid table from VPP node.
 
         :param node: VPP node.
         :type node: dict
@@ -64,7 +71,7 @@ class LispUtil(object):
         """
 
         vat = VatExecutor()
-        vat.execute_script_json_out('lisp/show_lisp_local_eid_table.vat', node)
+        vat.execute_script_json_out('lisp/show_lisp_eid_table.vat', node)
         return JsonParser().parse_data(vat.get_script_stdout())
 
     @staticmethod
@@ -101,7 +108,7 @@ class LispUtil(object):
 
         for tmp in lisp_val1:
             if tmp not in lisp_val2:
-                raise RuntimeError('Value {} is not find in vpp:\n'
+                raise RuntimeError('Value {} not found in vpp:\n'
                                    '{}'.format(tmp, lisp_val2))
 
     def lisp_locator_s_should_be_equal(self, locator_set1, locator_set2):
@@ -109,46 +116,37 @@ class LispUtil(object):
 
         :param locator_set1: Generate lisp value.
         :param locator_set2: Lisp value from VPP.
-        :type locator_set1: dict
+        :type locator_set1: list
         :type locator_set2: list
         """
 
-        reset_list = []
         locator_set_list = []
-        for locator_set_type, item in locator_set1.iteritems():
-            if locator_set_type == 'normal':
-                self.lisp_should_be_equal(item, locator_set2)
-            elif locator_set_type == 'reset':
-                for locator_list in reversed(item):
-                    name = locator_list.get('locator-set')
-                    if name not in locator_set_list:
-                        reset_list.insert(0, locator_list)
-                        locator_set_list.append(name)
-                self.lisp_should_be_equal(reset_list, locator_set2)
-            else:
-                raise ValueError('Unknown locator_set_type value: '
-                                 '{}'.format(locator_set_type))
+        for item in locator_set1:
+            if item not in locator_set_list:
+                locator_set_list.append(item)
+        self.lisp_should_be_equal(locator_set_list, locator_set2)
 
     @staticmethod
-    def generate_lisp_locator_set_data(node, locator_set_number):
+    def generate_unique_lisp_locator_set_data(node, locator_set_number):
         """Generate a list of lisp locator_set we want set to VPP and
-        then check if is set correct.
-
-        "normal" type of data set locator_set just once.
+        then check if it is set correctly. All locator_sets are unique.
 
         :param node: VPP node.
         :param locator_set_number: Generate n locator_set.
         :type node: dict
         :type locator_set_number: str
-        :return: dict of lisp locator_set.
-        :rtype: dict
+        :return: list of lisp locator_set, list of lisp locator_set expected
+        from VAT.
+        :rtype: tuple
         """
 
         topo = Topology()
 
         locator_set_list = []
+        locator_set_list_vat = []
         i = 0
         for num in range(0, int(locator_set_number)):
+            locator_list = []
             for interface in node['interfaces'].values():
                 link = interface.get('link')
                 i += 1
@@ -158,38 +156,45 @@ class LispUtil(object):
                 if_name = topo.get_interface_by_link_name(node, link)
                 sw_if_index = topo.get_interface_sw_index(node, if_name)
                 if if_name is not None:
-                    l_name = 'ls{0}'.format(num)
-                    locator_set = {'locator-set': l_name,
-                                   'locator': sw_if_index,
-                                   'priority': i,
-                                   'weight': i}
-                    locator_set_list.append(locator_set)
+                    locator = {'locator-index': sw_if_index,
+                               'priority': i,
+                               'weight': i}
+                    locator_list.append(locator)
+
+            l_name = 'ls{0}'.format(num)
+            locator_set = {'locator-set': l_name,
+                           'locator': locator_list}
+            locator_set_list.append(locator_set)
 
-        loc_type = {'normal': locator_set_list}
-        return loc_type
+            locator_set_vat = {"ls_name": l_name,
+                               "ls_index": num}
+            locator_set_list_vat.append(locator_set_vat)
+
+        return locator_set_list, locator_set_list_vat
 
     @staticmethod
-    def generate_lisp_locator_set_reset_data(node, locator_set_number):
+    def generate_duplicate_lisp_locator_set_data(node, locator_set_number):
         """Generate a list of lisp locator_set we want set to VPP and
-        then check if is set correct.
-
-        "reset" type of data set locator_set multiple times,
-        use to test reset locator_set in vpp.
+        then check if it is set correctly. Some locator_sets are duplicated.
 
         :param node: VPP node.
         :param locator_set_number: Generate n locator_set.
         :type node: dict
         :type locator_set_number: str
-        :return: dict of lisp locator_set.
-        :rtype: dict
+        :return: list of lisp locator_set, list of lisp locator_set expected
+        from VAT.
+        :rtype: tuple
         """
 
         topo = Topology()
-
         locator_set_list = []
+        locator_set_list_vat = []
+        i = 0
         for num in range(0, int(locator_set_number)):
+            locator_list = []
             for interface in node['interfaces'].values():
                 link = interface.get('link')
+                i += 1
                 if link is None:
                     continue
 
@@ -197,14 +202,19 @@ class LispUtil(object):
                 sw_if_index = topo.get_interface_sw_index(node, if_name)
                 if if_name is not None:
                     l_name = 'ls{0}'.format(num)
+                    locator = {'locator-index': sw_if_index,
+                               'priority': i,
+                               'weight': i}
+                    locator_list.append(locator)
                     locator_set = {'locator-set': l_name,
-                                   'locator': sw_if_index,
-                                   'priority': 1,
-                                   'weight': 1}
+                                   'locator': locator_list}
                     locator_set_list.append(locator_set)
 
-        loc_type = {'reset': locator_set_list}
-        return loc_type
+                    locator_set_vat = {"ls_name": l_name,
+                               "ls_index": num}
+                    locator_set_list_vat.append(locator_set_vat)
+
+        return locator_set_list, locator_set_list_vat
 
     def lisp_is_empty(self, lisp_params):
         """Check if the input param are empty.