Add test library name update in DMF and mainflows 97/64197/1
authorOrest Voznyy <orestx.voznyy@intel.com>
Mon, 22 Oct 2018 15:27:31 +0000 (18:27 +0300)
committerAbhijit Sinha <abhijit.sinha@intel.com>
Tue, 30 Oct 2018 10:44:12 +0000 (10:44 +0000)
Add automatic update of traffic profile items library name update, as well
as update of session profile Dmf library name, to avoid the need of user
changing it in template files.

Update affected unit tests.

JIRA: YARDSTICK-1474

Change-Id: I18cc8ca99a47da862753329c87d1a560a97f76fa
Signed-off-by: Orest Voznyy <orestx.voznyy@intel.com>
(cherry picked from commit 1fd3806d6a6bac19f3173da4d6cb94cef81fd7f5)

yardstick/network_services/vnf_generic/vnf/tg_landslide.py
yardstick/tests/unit/network_services/vnf_generic/vnf/test_tg_landslide.py

index a146b72..68021c9 100644 (file)
@@ -129,6 +129,17 @@ class LandslideTrafficGen(sample_vnf.SampleVNFTrafficGen):
                 self.session_profile['reservePorts'] = 'true'
                 self.session_profile['reservations'] = [reservation]
 
+    def _update_session_library_name(self, test_session):
+        """Update DMF library name in session profile"""
+        for _ts_group in test_session['tsGroups']:
+            for _tc in _ts_group['testCases']:
+                try:
+                    for _mainflow in _tc['parameters']['Dmf']['mainflows']:
+                        _mainflow['library'] = \
+                            self.vnfd_helper.mgmt_interface['user']
+                except KeyError:
+                    pass
+
     @staticmethod
     def _update_session_tc_params(tc_options, testcase):
         for _param_key in tc_options:
@@ -206,6 +217,8 @@ class LandslideTrafficGen(sample_vnf.SampleVNFTrafficGen):
                 _testcase_idx].update(
                 self._update_session_tc_params(tc_options, _testcase))
 
+        self._update_session_library_name(self.session_profile)
+
 
 class LandslideResourceHelper(sample_vnf.ClientResourceHelper):
     """Landslide TG helper class"""
@@ -459,11 +472,14 @@ class LandslideResourceHelper(sample_vnf.ClientResourceHelper):
         self._terminated.value = 1
 
     def create_dmf(self, dmf):
-        if isinstance(dmf, list):
-            for _dmf in dmf:
-                self._tcl.create_dmf(_dmf)
-        else:
-            self._tcl.create_dmf(dmf)
+        if isinstance(dmf, dict):
+            dmf = [dmf]
+        for _dmf in dmf:
+            # Update DMF library name in traffic profile
+            _dmf['dmf'].update(
+                {'library': self.vnfd_helper.mgmt_interface['user']})
+            # Create DMF on Landslide server
+            self._tcl.create_dmf(_dmf)
 
     def delete_dmf(self, dmf):
         if isinstance(dmf, list):
index 5343997..fcf0fa1 100644 (file)
@@ -27,7 +27,7 @@ from yardstick.network_services import utils as net_serv_utils
 from yardstick.network_services.traffic_profile import landslide_profile
 from yardstick.network_services.vnf_generic.vnf import sample_vnf
 from yardstick.network_services.vnf_generic.vnf import tg_landslide
-
+from yardstick.network_services.vnf_generic.vnf import base as vnf_base
 
 NAME = "tg__0"
 
@@ -465,8 +465,10 @@ class TestLandslideTrafficGen(unittest.TestCase):
         self.ls_tg.scenario_helper.scenario_cfg = self.SCENARIO_CFG
         mock_traffic_profile = mock.Mock(
             spec=landslide_profile.LandslideProfile)
-        mock_traffic_profile.dmf_config = {'keywords': 'UDP',
-                                           'dataProtocol': 'udp'}
+        mock_traffic_profile.dmf_config = {
+            'keywords': 'UDP',
+            'dataProtocol': 'udp',
+            'dmf': {'library': 'test', 'name': 'name'}}
         mock_traffic_profile.params = self.TRAFFIC_PROFILE
         self.ls_tg.resource_helper._user_id = self.TEST_USER_ID
         mock_get_tests.return_value = [{'id': self.SUCCESS_RECORD_ID,
@@ -598,6 +600,28 @@ class TestLandslideTrafficGen(unittest.TestCase):
                         get_session_tc_param_value(_key, _tc.get('type'),
                                                    self.ls_tg.session_profile))
 
+    def test__update_session_library_name(self, *args):
+        _session = copy.deepcopy(SESSION_PROFILE)
+        _session['tsGroups'].pop(0)
+        self.ls_tg.vnfd_helper = mock.MagicMock()
+        self.ls_tg.vnfd_helper.mgmt_interface.__getitem__.side_effect = {
+            'user': TAS_INFO['user']}
+        self.ls_tg._update_session_library_name(_session)
+        _dmf = _session['tsGroups'][0]['testCases'][0]['parameters']['Dmf']
+        # Expect DMF library name updated in Nodal test types
+        self.assertEqual(TAS_INFO['user'], _dmf['mainflows'][0]['library'])
+
+    def test__update_session_library_name_wrong_tc_type(self, *args):
+        _session = copy.deepcopy(SESSION_PROFILE)
+        _session['tsGroups'].pop(1)
+        self.ls_tg.vnfd_helper = mock.MagicMock()
+        self.ls_tg.vnfd_helper.mgmt_interface.__getitem__.side_effect = {
+            'user': TAS_INFO['user']}
+        # Expect DMF library name not updated in Node test types
+        self.assertNotIn('Dmf',
+                         _session['tsGroups'][0]['testCases'][0]['parameters'])
+        self.ls_tg._update_session_library_name(_session)
+
     @mock.patch.object(common_utils, 'open_relative_file')
     @mock.patch.object(yaml_loader, 'yaml_load')
     @mock.patch.object(tg_landslide.LandslideTrafficGen,
@@ -986,11 +1010,15 @@ class TestLandslideResourceHelper(unittest.TestCase):
 
     def test_create_dmf(self, *args):
         self.res_helper._tcl = mock.Mock()
+        self.res_helper.vnfd_helper = mock.Mock(spec=vnf_base.VnfdHelper)
+        self.res_helper.vnfd_helper.mgmt_interface = {'user': TAS_INFO['user']}
         self.assertIsNone(self.res_helper.create_dmf(DMF_CFG))
         self.res_helper._tcl.create_dmf.assert_called_once_with(DMF_CFG)
 
     def test_create_dmf_as_list(self, *args):
         self.res_helper._tcl = mock.Mock()
+        self.res_helper.vnfd_helper = mock.Mock(spec=vnf_base.VnfdHelper)
+        self.res_helper.vnfd_helper.mgmt_interface = {'user': TAS_INFO['user']}
         self.assertIsNone(self.res_helper.create_dmf([DMF_CFG]))
         self.res_helper._tcl.create_dmf.assert_called_once_with(DMF_CFG)
 
@@ -1597,7 +1625,7 @@ class TestLandslideTclClient(unittest.TestCase):
         self.mock_tcl_handler.execute.assert_has_calls([
             mock.call('set dmf_ [ls::create Dmf]'),
             mock.call(
-                'ls::get [ls::query LibraryInfo -systemLibraryName test] -Id'),
+                'ls::get [ls::query LibraryInfo -systemLibraryName user] -Id'),
             mock.call('ls::config $dmf_ -Library 2 -Name "Basic UDP"'),
             mock.call('ls::config $dmf_ -dataProtocol "udp"'),
             # mock.call(
@@ -1623,7 +1651,7 @@ class TestLandslideTclClient(unittest.TestCase):
         self.mock_tcl_handler.execute.assert_has_calls([
             mock.call('set dmf_ [ls::create Dmf]'),
             mock.call(
-                'ls::get [ls::query LibraryInfo -systemLibraryName test] -Id'),
+                'ls::get [ls::query LibraryInfo -systemLibraryName user] -Id'),
             mock.call('ls::config $dmf_ -Library 2 -Name "Basic UDP"'),
             mock.call('ls::config $dmf_ -dataProtocol "udp"'),
             # mock.call(