Merge "Fix vCGNAPT name in ansible constants"
[yardstick.git] / yardstick / tests / unit / benchmark / scenarios / networking / test_vsperf_dpdk.py
index 1d2278e..db6f9cc 100644 (file)
@@ -18,6 +18,7 @@ import time
 import mock
 import unittest
 
+from yardstick import exceptions as y_exc
 from yardstick.benchmark.scenarios.networking import vsperf_dpdk
 
 
@@ -58,17 +59,18 @@ class VsperfDPDKTestCase(unittest.TestCase):
 
         self.scenario = vsperf_dpdk.VsperfDPDK(self.args, self.ctx)
 
-        self._mock_ssh = mock.patch(
-            'yardstick.benchmark.scenarios.networking.vsperf_dpdk.ssh')
+        self._mock_ssh = mock.patch.object(vsperf_dpdk, 'ssh')
         self.mock_ssh = self._mock_ssh.start()
         self._mock_subprocess_call = mock.patch.object(subprocess, 'call')
         self.mock_subprocess_call = self._mock_subprocess_call.start()
-
+        self._mock_log_info = mock.patch.object(vsperf_dpdk.LOG, 'info')
+        self.mock_log_info = self._mock_log_info.start()
         self.addCleanup(self._cleanup)
 
     def _cleanup(self):
         self._mock_ssh.stop()
         self._mock_subprocess_call.stop()
+        self._mock_log_info.stop()
 
     def test_setup(self):
         # setup() specific mocks
@@ -211,3 +213,47 @@ class VsperfDPDKTestCase(unittest.TestCase):
 
         result = {}
         self.assertRaises(RuntimeError, self.scenario.run, result)
+
+    @mock.patch.object(time, 'sleep')
+    @mock.patch.object(subprocess, 'check_output')
+    def test_vsperf_run_sla_fail(self, *args):
+        self.scenario.setup()
+
+        self.mock_ssh.SSH.from_node().execute.return_value = (
+            0, 'throughput_rx_fps\r\n123456.000\r\n', '')
+
+        with self.assertRaises(y_exc.SLAValidationError) as raised:
+            self.scenario.run({})
+
+        self.assertIn('VSPERF_throughput_rx_fps(123456.000000) < '
+                      'SLA_throughput_rx_fps(500000.000000)',
+                      str(raised.exception))
+
+    @mock.patch.object(time, 'sleep')
+    @mock.patch.object(subprocess, 'check_output')
+    def test_vsperf_run_sla_fail_metric_not_collected(self, *args):
+        self.scenario.setup()
+
+        self.mock_ssh.SSH.from_node().execute.return_value = (
+            0, 'nonexisting_metric\r\n123456.000\r\n', '')
+
+        with self.assertRaises(y_exc.SLAValidationError) as raised:
+            self.scenario.run({})
+
+        self.assertIn('throughput_rx_fps was not collected by VSPERF',
+                      str(raised.exception))
+
+    @mock.patch.object(time, 'sleep')
+    @mock.patch.object(subprocess, 'check_output')
+    def test_vsperf_run_sla_fail_sla_not_defined(self, *args):
+        del self.scenario.scenario_cfg['sla']['throughput_rx_fps']
+        self.scenario.setup()
+
+        self.mock_ssh.SSH.from_node().execute.return_value = (
+            0, 'throughput_rx_fps\r\n14797660.000\r\n', '')
+
+        with self.assertRaises(y_exc.SLAValidationError) as raised:
+            self.scenario.run({})
+
+        self.assertIn('throughput_rx_fps is not defined in SLA',
+                      str(raised.exception))