NSB support for [core x-y] NSB PROX NFVI configuration 89/65989/5
authorDanielMartinBuckley <daniel.m.buckley@intel.com>
Wed, 19 Dec 2018 17:41:42 +0000 (17:41 +0000)
committerDanielMartinBuckley <daniel.m.buckley@intel.com>
Thu, 27 Dec 2018 13:10:09 +0000 (13:10 +0000)
JIRA: YARDSTICK-1571

Cores in PROX support multiple configurations

NSB supports today the more basic one, i.e. [core x]

When one wants to use multiple cores sharing the same
configuration, instead of copying the whole [core]
section, PROX support the following syntax

[core x-y]
where x is the 1st core and y the last one
or (for instance) [core x,y,z]

NSB Now supports

[core a,b,c,d]
[core a-d]
[core a,c-d]

Change-Id: I34cd107143c89e16d58e7a99e1887ffbf720a5d1
Signed-off-by: Daniel Martin Buckley <daniel.m.buckley@intel.com>
yardstick/network_services/vnf_generic/vnf/prox_helpers.py
yardstick/tests/unit/network_services/vnf_generic/vnf/test_prox_helpers.py

index 5d98003..cd3035e 100644 (file)
@@ -870,6 +870,30 @@ class ProxDpdkVnfSetupEnvHelper(DpdkVnfSetupEnvHelper):
         file_str[1] = self.additional_files[base_name]
         return '"'.join(file_str)
 
+    def _make_core_list(self, inputStr):
+
+        my_input = inputStr.split("core ", 1)[1]
+        ok_list = set()
+
+        substrs = [x.strip() for x in my_input.split(',')]
+        for i in substrs:
+            try:
+                ok_list.add(int(i))
+
+            except ValueError:
+                try:
+                    substr = [int(k.strip()) for k in i.split('-')]
+                    if len(substr) > 1:
+                        startstr = substr[0]
+                        endstr = substr[len(substr) - 1]
+                        for z in range(startstr, endstr + 1):
+                            ok_list.add(z)
+                except ValueError:
+                    LOG.error("Error in cores list ... resuming ")
+                    return ok_list
+
+        return ok_list
+
     def generate_prox_config_file(self, config_path):
         sections = []
         prox_config = ConfigParser(config_path, sections)
@@ -889,6 +913,18 @@ class ProxDpdkVnfSetupEnvHelper(DpdkVnfSetupEnvHelper):
                     if section_data[0] == "mac":
                         section_data[1] = "hardware"
 
+        # adjust for range of cores
+        new_sections = []
+        for section_name, section in sections:
+            if section_name.startswith('core') and section_name.find('$') == -1:
+                    core_list = self._make_core_list(section_name)
+                    for core in core_list:
+                        new_sections.append(["core " + str(core), section])
+            else:
+                new_sections.append([section_name, section])
+
+        sections = new_sections
+
         # search for dst mac
         for _, section in sections:
             for section_data in section:
index 31f08da..9a30fb9 100644 (file)
@@ -1374,6 +1374,36 @@ class TestProxDpdkVnfSetupEnvHelper(unittest.TestCase):
                     ['missing_addtional_file', 'dofile("nosuch")'],
                 ],
             ],
+            [
+                'core 0',
+                [
+                    ['name', 'p0']
+                ]
+            ],
+            [
+                'core 1-4',
+                [
+                    ['name', 'p1']
+                ]
+            ],
+            [
+                'core 5,6',
+                [
+                    ['name', 'p2']
+                ]
+            ],
+            [
+                'core xx',
+                [
+                    ['name', 'p3']
+                ]
+            ],
+            [
+                'core $x',
+                [
+                    ['name', 'p4']
+                ]
+            ]
         ]
 
         expected = [
@@ -1403,6 +1433,54 @@ class TestProxDpdkVnfSetupEnvHelper(unittest.TestCase):
                     ['missing_addtional_file', 'dofile("nosuch")'],
                 ],
             ],
+            [
+                'core 0',
+                [
+                    ['name', 'p0']
+                ]
+            ],
+            [
+                'core 1',
+                [
+                    ['name', 'p1']
+                ]
+            ],
+            [
+                'core 2',
+                [
+                    ['name', 'p1']
+                ]
+            ],
+            [
+                'core 3',
+                [
+                    ['name', 'p1']
+                ]
+            ],
+            [
+                'core 4',
+                [
+                    ['name', 'p1']
+                ]
+            ],
+            [
+                'core 5',
+                [
+                    ['name', 'p2']
+                ]
+            ],
+            [
+                'core 6',
+                [
+                    ['name', 'p2']
+                ]
+            ],
+            [
+                'core $x',
+                [
+                    ['name', 'p4']
+                ]
+            ]
         ]
         result = helper.generate_prox_config_file('/c/d/e')
         self.assertEqual(result, expected, str(result))