Merge "Add 8 port topology file for agnostic vnf with ixia tg"
[yardstick.git] / yardstick / tests / unit / benchmark / scenarios / networking / test_vnf_generic.py
index ec22d61..90248d1 100644 (file)
@@ -20,11 +20,11 @@ import mock
 import unittest
 
 from yardstick import tests
+from yardstick.common import exceptions
 from yardstick.common import utils
 from yardstick.network_services.collector.subscriber import Collector
 from yardstick.network_services.traffic_profile import base
 from yardstick.network_services.vnf_generic import vnfdgen
-from yardstick.error import IncorrectConfig
 from yardstick.network_services.vnf_generic.vnf.base import GenericTrafficGen
 from yardstick.network_services.vnf_generic.vnf.base import GenericVNF
 
@@ -355,43 +355,56 @@ class TestNetworkServiceTestCase(unittest.TestCase):
         return file_path
 
     def test___init__(self):
-        assert self.topology
+        self.assertIsNotNone(self.topology)
 
     def test__get_ip_flow_range_string(self):
-        self.scenario_cfg["traffic_options"]["flow"] = \
-            self._get_file_abspath("ipv4_1flow_Packets_vpe.yaml")
         result = '152.16.100.2-152.16.100.254'
         self.assertEqual(result, self.s._get_ip_flow_range(
             '152.16.100.2-152.16.100.254'))
 
-    def test__get_ip_flow_range(self):
-        self.scenario_cfg["traffic_options"]["flow"] = \
-            self._get_file_abspath("ipv4_1flow_Packets_vpe.yaml")
-        result = '152.16.100.2-152.16.100.254'
-        self.assertEqual(result, self.s._get_ip_flow_range({"tg__1": 'xe0'}))
+    def test__get_ip_flow_range_no_nodes(self):
+        self.assertEqual('0.0.0.0', self.s._get_ip_flow_range({}))
 
-    @mock.patch('yardstick.benchmark.scenarios.networking.vnf_generic.ipaddress')
-    def test__get_ip_flow_range_no_node_data(self, mock_ipaddress):
-        scenario_cfg = deepcopy(self.scenario_cfg)
-        scenario_cfg["traffic_options"]["flow"] = \
-            self._get_file_abspath("ipv4_1flow_Packets_vpe.yaml")
+    def test__get_ip_flow_range_no_node_data(self):
+        node_data = {'tg__0': 'xe0'}
+        self.s.context_cfg['nodes']['tg__0'] = {}
+        result = self.s._get_ip_flow_range(node_data)
+        self.assertEqual('0.0.0.2-0.0.0.254', result)
 
-        mock_ipaddress.ip_network.return_value = ipaddr = mock.Mock()
-        ipaddr.hosts.return_value = []
+    def test__et_ip_flow_range_ipv4(self):
+        node_data = {'tg__0': 'xe0'}
+        self.s.context_cfg['nodes']['tg__0'] = {
+            'interfaces': {
+                'xe0': {'local_ip': '192.168.1.15',
+                        'netmask': '255.255.255.128'}
+            }
+        }
+        result = self.s._get_ip_flow_range(node_data)
+        self.assertEqual('192.168.1.2-192.168.1.126', result)
 
-        expected = '0.0.0.0'
-        result = self.s._get_ip_flow_range({"tg__2": 'xe0'})
-        self.assertEqual(result, expected)
+    def test__get_ip_flow_range_ipv4_mask_30(self):
+        node_data = {'tg__0': 'xe0'}
+        self.s.context_cfg['nodes']['tg__0'] = {
+            'interfaces': {
+                'xe0': {'local_ip': '192.168.1.15', 'netmask': 30}
+            }
+        }
+        result = self.s._get_ip_flow_range(node_data)
+        self.assertEqual('192.168.1.15', result)
 
-    def test__get_ip_flow_range_no_nodes(self):
-        expected = '0.0.0.0'
-        result = self.s._get_ip_flow_range({})
-        self.assertEqual(result, expected)
+    def test__get_ip_flow_range_ipv6(self):
+        node_data = {'tg__0': 'xe0'}
+        self.s.context_cfg['nodes']['tg__0'] = {
+            'interfaces': {
+                'xe0': {'local_ip': '2001::11', 'netmask': 64}
+            }
+        }
+        result = self.s._get_ip_flow_range(node_data)
+        self.assertEqual('2001::2-2001::ffff:ffff:ffff:fffe', result)
 
     def test___get_traffic_flow(self):
         self.scenario_cfg["traffic_options"]["flow"] = \
             self._get_file_abspath("ipv4_1flow_Packets_vpe.yaml")
-        self.scenario_cfg["options"] = {}
         self.scenario_cfg['options'] = {
             'flow': {
                 'src_ip': [
@@ -407,11 +420,10 @@ class TestNetworkServiceTestCase(unittest.TestCase):
                 'public_ip': ['1.1.1.1'],
             },
         }
-        # NOTE(ralonsoh): check the expected output. This test could be
-        # incorrect
-        # result = {'flow': {'dst_ip0': '152.16.40.2-152.16.40.254',
-        #                    'src_ip0': '152.16.100.2-152.16.100.254'}}
-        self.assertEqual({'flow': {}}, self.s._get_traffic_flow())
+        expected_flow = {'flow': {'dst_ip_0': '152.16.40.2-152.16.40.254',
+                                  'public_ip_0': '1.1.1.1',
+                                  'src_ip_0': '152.16.100.2-152.16.100.254'}}
+        self.assertEqual(expected_flow, self.s._get_traffic_flow())
 
     def test___get_traffic_flow_error(self):
         self.scenario_cfg["traffic_options"]["flow"] = \
@@ -423,7 +435,7 @@ class TestNetworkServiceTestCase(unittest.TestCase):
         with mock.patch.dict(sys.modules, tests.STL_MOCKS):
             self.assertIsNotNone(self.s.get_vnf_impl(vnfd))
 
-        with self.assertRaises(vnf_generic.IncorrectConfig) as raised:
+        with self.assertRaises(exceptions.IncorrectConfig) as raised:
             self.s.get_vnf_impl('NonExistentClass')
 
         exc_str = str(raised.exception)
@@ -436,6 +448,7 @@ class TestNetworkServiceTestCase(unittest.TestCase):
             self._get_file_abspath("tg_trex_tpl.yaml")
         self.context_cfg["nodes"]['vnf__1']['VNF model'] = \
             self._get_file_abspath("tg_trex_tpl.yaml")
+        self.context_cfg['task_id'] = 'fake_task_id'
 
         vnf = mock.Mock(autospec=GenericVNF)
         self.s.get_vnf_impl = mock.Mock(return_value=vnf)
@@ -465,7 +478,7 @@ class TestNetworkServiceTestCase(unittest.TestCase):
 
         cfg_patch = mock.patch.object(self.s, 'context_cfg', cfg)
         with cfg_patch:
-            with self.assertRaises(IncorrectConfig):
+            with self.assertRaises(exceptions.IncorrectConfig):
                 self.s.map_topology_to_infrastructure()
 
     def test_map_topology_to_infrastructure_config_invalid(self):
@@ -482,7 +495,7 @@ class TestNetworkServiceTestCase(unittest.TestCase):
 
         config_patch = mock.patch.object(self.s, 'context_cfg', cfg)
         with config_patch:
-            with self.assertRaises(IncorrectConfig):
+            with self.assertRaises(exceptions.IncorrectConfig):
                 self.s.map_topology_to_infrastructure()
 
     def test__resolve_topology_invalid_config(self):
@@ -496,7 +509,7 @@ class TestNetworkServiceTestCase(unittest.TestCase):
             for interface in self.tg__1['interfaces'].values():
                 del interface['local_mac']
 
-            with self.assertRaises(vnf_generic.IncorrectConfig) as raised:
+            with self.assertRaises(exceptions.IncorrectConfig) as raised:
                 self.s._resolve_topology()
 
             self.assertIn('not found', str(raised.exception))
@@ -509,7 +522,7 @@ class TestNetworkServiceTestCase(unittest.TestCase):
             self.s.topology["vld"][0]['vnfd-connection-point-ref'].append(
                 self.s.topology["vld"][0]['vnfd-connection-point-ref'][0])
 
-            with self.assertRaises(vnf_generic.IncorrectConfig) as raised:
+            with self.assertRaises(exceptions.IncorrectConfig) as raised:
                 self.s._resolve_topology()
 
             self.assertIn('wrong endpoint count', str(raised.exception))
@@ -518,7 +531,7 @@ class TestNetworkServiceTestCase(unittest.TestCase):
             self.s.topology["vld"][0]['vnfd-connection-point-ref'] = \
                 self.s.topology["vld"][0]['vnfd-connection-point-ref'][:1]
 
-            with self.assertRaises(vnf_generic.IncorrectConfig) as raised:
+            with self.assertRaises(exceptions.IncorrectConfig) as raised:
                 self.s._resolve_topology()
 
             self.assertIn('wrong endpoint count', str(raised.exception))
@@ -553,6 +566,7 @@ class TestNetworkServiceTestCase(unittest.TestCase):
             tgen.verify_traffic = lambda x: verified_dict
             tgen.terminate = mock.Mock(return_value=True)
             tgen.name = "tgen__1"
+            tgen.run_traffic.return_value = 'tg_id'
             vnf = mock.Mock(autospec=GenericVNF)
             vnf.runs_traffic = False
             vnf.terminate = mock.Mock(return_value=True)
@@ -565,7 +579,6 @@ class TestNetworkServiceTestCase(unittest.TestCase):
             self.s.load_vnf_models = mock.Mock(return_value=self.s.vnfs)
             self.s._fill_traffic_profile = \
                 mock.Mock(return_value=TRAFFIC_PROFILE)
-            self.assertIsNone(self.s.setup())
 
     def test_setup_exception(self):
         with mock.patch("yardstick.ssh.SSH") as ssh:
@@ -616,7 +629,7 @@ class TestNetworkServiceTestCase(unittest.TestCase):
     @mock.patch.object(vnfdgen, 'generate_vnfd')
     def test__fill_traffic_profile(self, mock_generate, mock_tprofile_get):
         fake_tprofile = mock.Mock()
-        fake_vnfd = mock.Mock()
+        fake_vnfd = mock.MagicMock()
         with mock.patch.object(self.s, '_get_traffic_profile',
                                return_value=fake_tprofile) as mock_get_tp:
             mock_generate.return_value = fake_vnfd
@@ -628,10 +641,27 @@ class TestNetworkServiceTestCase(unittest.TestCase):
                  'extra_args': {'arg1': 'value1', 'arg2': 'value2'},
                  'flow': {'flow': {}},
                  'imix': {'imix': {'64B': 100}},
-                 'uplink': {}}
+                 'uplink': {},
+                 'duration': 30}
             )
             mock_tprofile_get.assert_called_once_with(fake_vnfd)
 
+    @mock.patch.object(base.TrafficProfile, 'get')
+    @mock.patch.object(vnfdgen, 'generate_vnfd')
+    def test__fill_traffic_profile2(self, mock_generate, mock_tprofile_get):
+        fake_tprofile = mock.Mock()
+        fake_vnfd = {}
+        with mock.patch.object(self.s, '_get_traffic_profile',
+                               return_value=fake_tprofile) as mock_get_tp:
+            mock_generate.return_value = fake_vnfd
+
+            self.s.scenario_cfg["options"] = {"traffic_config": {"duration": 99899}}
+            self.s._fill_traffic_profile()
+            mock_get_tp.assert_called_once()
+            self.assertIn("traffic_profile", fake_vnfd)
+            self.assertIn("duration", fake_vnfd["traffic_profile"])
+            self.assertEqual(99899, fake_vnfd["traffic_profile"]["duration"])
+
     @mock.patch.object(utils, 'open_relative_file')
     def test__get_topology(self, mock_open_path):
         self.s.scenario_cfg['topology'] = 'fake_topology'
@@ -655,6 +685,9 @@ class TestNetworkServiceTestCase(unittest.TestCase):
         )
         self.assertEqual(self.s.topology, 'fake_nsd')
 
+    def test_get_mq_ids(self):
+        self.assertEqual(self.s._mq_ids, self.s.get_mq_ids())
+
     def test_teardown(self):
         vnf = mock.Mock(autospec=GenericVNF)
         vnf.terminate = mock.Mock(return_value=True)