Remove tool provisioning from DpdkVnfSetupEnvHelper._setup_dpdk 55/51855/3
authorRodolfo Alonso Hernandez <rodolfo.alonso.hernandez@intel.com>
Wed, 7 Feb 2018 16:20:56 +0000 (16:20 +0000)
committerRodolfo Alonso Hernandez <rodolfo.alonso.hernandez@intel.com>
Mon, 12 Feb 2018 10:21:26 +0000 (10:21 +0000)
Both "uio" and "igb_uio" drivers are present in the VM image generated
using "./nsb_setup.sh" script. "igb_uio" driver is compiled along with
the DPDK library compilation.

Tool "nsb_setup.sh" provisioning and execution should be removed from
this function because there is not needed anymore.

In case "igb_uio" driver is not loaded, an exception should be raised.

JIRA: YARDSTICK-999

Change-Id: I89174f84ac36d8231587402c96751746cb18e290
Signed-off-by: Rodolfo Alonso Hernandez <rodolfo.alonso.hernandez@intel.com>
tests/unit/network_services/vnf_generic/vnf/test_sample_vnf.py
yardstick/common/exceptions.py
yardstick/network_services/vnf_generic/vnf/sample_vnf.py

index af941c0..2563338 100644 (file)
@@ -624,37 +624,34 @@ class TestDpdkVnfSetupEnvHelper(unittest.TestCase):
 
         self.assertIsInstance(dpdk_vnf_setup_env_helper.setup_vnf_environment(), ResourceProfile)
 
-    def test__setup_dpdk_early_success(self):
-        vnfd_helper = VnfdHelper(self.VNFD_0)
+    def test__setup_dpdk(self):
         ssh_helper = mock.Mock()
-        ssh_helper.execute.return_value = 0, 'output', ''
-        ssh_helper.join_bin_path.return_value = 'joined_path'
-        ssh_helper.provision_tool.return_value = 'provision string'
-        scenario_helper = mock.Mock()
-        dpdk_setup_helper = DpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
-        dpdk_setup_helper._setup_hugepages = mock.Mock()
-
-        self.assertIsNone(dpdk_setup_helper._setup_dpdk())
-        self.assertEqual(dpdk_setup_helper.ssh_helper.execute.call_count, 2)
-
-    @mock.patch('yardstick.ssh.SSH')
-    def test__setup_dpdk_short(self, _):
-        def execute_side(cmd):
-            if 'joined_path' in cmd:
-                return 0, 'output', ''
-            return 1, 'bad output', 'error output'
+        ssh_helper.execute = mock.Mock()
+        ssh_helper.execute.return_value = (0, 0, 0)
+        dpdk_setup_helper = DpdkVnfSetupEnvHelper(mock.ANY, ssh_helper, mock.ANY)
+        with mock.patch.object(dpdk_setup_helper, '_setup_hugepages') as \
+                mock_setup_hp:
+            dpdk_setup_helper._setup_dpdk()
+        mock_setup_hp.assert_called_once()
+        ssh_helper.execute.assert_has_calls([
+            mock.call('sudo modprobe uio && sudo modprobe igb_uio'),
+            mock.call('lsmod | grep -i igb_uio')
+        ])
 
-        vnfd_helper = VnfdHelper(self.VNFD_0)
+    def test__setup_dpdk_igb_uio_not_loaded(self):
         ssh_helper = mock.Mock()
-        ssh_helper.execute.side_effect = execute_side
-        ssh_helper.join_bin_path.return_value = 'joined_path'
-        ssh_helper.provision_tool.return_value = 'provision string'
-        scenario_helper = mock.Mock()
-        dpdk_setup_helper = DpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
-        dpdk_setup_helper._setup_hugepages = mock.Mock()
-
-        self.assertIsNone(dpdk_setup_helper._setup_dpdk())
-        self.assertEqual(dpdk_setup_helper.ssh_helper.execute.call_count, 3)
+        ssh_helper.execute = mock.Mock()
+        ssh_helper.execute.side_effect = [(0, 0, 0), (1, 0, 0)]
+        dpdk_setup_helper = DpdkVnfSetupEnvHelper(mock.ANY, ssh_helper, mock.ANY)
+        with mock.patch.object(dpdk_setup_helper, '_setup_hugepages') as \
+                mock_setup_hp:
+            with self.assertRaises(y_exceptions.DPDKSetupDriverError):
+                dpdk_setup_helper._setup_dpdk()
+        mock_setup_hp.assert_called_once()
+        ssh_helper.execute.assert_has_calls([
+            mock.call('sudo modprobe uio && sudo modprobe igb_uio'),
+            mock.call('lsmod | grep -i igb_uio')
+        ])
 
     @mock.patch('yardstick.ssh.SSH')
     def test__setup_resources(self, _):
index e38dd24..a86d863 100644 (file)
@@ -63,3 +63,7 @@ class HeatTemplateError(YardstickException):
     """Error in Heat during the stack deployment"""
     message = ('Error in Heat during the creation of the OpenStack stack '
                '"%(stack_name)"')
+
+
+class DPDKSetupDriverError(YardstickException):
+    message = '"igb_uio" driver is not loaded'
index fbaaa0c..d57d7e6 100644 (file)
@@ -250,20 +250,12 @@ class DpdkVnfSetupEnvHelper(SetupEnvHelper):
         self.ssh_helper.execute("sudo killall %s" % self.APP_NAME)
 
     def _setup_dpdk(self):
-        """ setup dpdk environment needed for vnf to run """
-
+        """Setup DPDK environment needed for VNF to run"""
         self._setup_hugepages()
-        self.ssh_helper.execute("sudo modprobe uio && sudo modprobe igb_uio")
-
-        exit_status = self.ssh_helper.execute("lsmod | grep -i igb_uio")[0]
-        if exit_status == 0:
-            return
-
-        dpdk = self.ssh_helper.join_bin_path(DPDK_VERSION)
-        dpdk_setup = self.ssh_helper.provision_tool(tool_file="nsb_setup.sh")
-        exit_status = self.ssh_helper.execute("which {} >/dev/null 2>&1".format(dpdk))[0]
-        if exit_status != 0:
-            self.ssh_helper.execute("bash %s dpdk >/dev/null 2>&1" % dpdk_setup)
+        self.ssh_helper.execute('sudo modprobe uio && sudo modprobe igb_uio')
+        exit_status = self.ssh_helper.execute('lsmod | grep -i igb_uio')[0]
+        if exit_status:
+            raise y_exceptions.DPDKSetupDriverError()
 
     def get_collectd_options(self):
         options = self.scenario_helper.all_options.get("collectd", {})