Merge "Add pod.yaml files for Apex"
[yardstick.git] / tests / unit / network_services / vnf_generic / vnf / test_tg_trex.py
index 4fd4c4c..f80d1f9 100644 (file)
@@ -1,5 +1,3 @@
-#!/usr/bin/env python
-
 # Copyright (c) 2016-2017 Intel Corporation
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # limitations under the License.
 #
 
-from __future__ import absolute_import
-
-import unittest
+import copy
 import mock
 
-SSH_HELPER = 'yardstick.network_services.vnf_generic.vnf.sample_vnf.VnfSshHelper'
+import unittest
 
 from tests.unit.network_services.vnf_generic.vnf.test_base import mock_ssh
 from tests.unit import STL_MOCKS
 
+
+SSH_HELPER = 'yardstick.network_services.vnf_generic.vnf.sample_vnf.VnfSshHelper'
 NAME = 'vnf_1'
 
 STLClient = mock.MagicMock()
@@ -75,6 +73,8 @@ class TestTrexTrafficGen(unittest.TestCase):
                                         'driver': "i40e",
                                         'dst_ip': '152.16.100.20',
                                         'local_iface_name': 'xe0',
+                                        'vld_id': 'downlink_0',
+                                        'ifname': 'xe0',
                                         'local_mac': '00:00:00:00:00:02'},
                                    'vnfd-connection-point-ref': 'xe0',
                                    'name': 'xe0'},
@@ -89,6 +89,8 @@ class TestTrexTrafficGen(unittest.TestCase):
                                         'bandwidth': '10 Gbps',
                                         'dst_ip': '152.16.40.20',
                                         'local_iface_name': 'xe1',
+                                        'vld_id': 'uplink_0',
+                                        'ifname': 'xe1',
                                         'local_mac': '00:00:00:00:00:01'},
                                    'vnfd-connection-point-ref': 'xe1',
                                    'name': 'xe1'}]}],
@@ -165,7 +167,7 @@ class TestTrexTrafficGen(unittest.TestCase):
                 "interfaces": {
                     "xe0": {
                         "local_iface_name": "ens786f0",
-                        "vld_id": "private",
+                        "vld_id": TrafficProfile.UPLINK,
                         "netmask": "255.255.255.0",
                         "vpci": "0000:05:00.0",
                         "local_ip": "152.16.100.19",
@@ -177,7 +179,7 @@ class TestTrexTrafficGen(unittest.TestCase):
                     },
                     "xe1": {
                         "local_iface_name": "ens786f1",
-                        "vld_id": "public",
+                        "vld_id": TrafficProfile.DOWNLINK,
                         "netmask": "255.255.255.0",
                         "vpci": "0000:05:00.1",
                         "local_ip": "152.16.40.19",
@@ -233,7 +235,7 @@ class TestTrexTrafficGen(unittest.TestCase):
                 "interfaces": {
                     "xe0": {
                         "local_iface_name": "ens513f0",
-                        "vld_id": "public",
+                        "vld_id": TrafficProfile.DOWNLINK,
                         "netmask": "255.255.255.0",
                         "vpci": "0000:02:00.0",
                         "local_ip": "152.16.40.20",
@@ -267,7 +269,7 @@ class TestTrexTrafficGen(unittest.TestCase):
                 "interfaces": {
                     "xe0": {
                         "local_iface_name": "ens785f0",
-                        "vld_id": "private",
+                        "vld_id": TrafficProfile.UPLINK,
                         "netmask": "255.255.255.0",
                         "vpci": "0000:05:00.0",
                         "local_ip": "152.16.100.20",
@@ -356,6 +358,17 @@ class TestTrexTrafficGen(unittest.TestCase):
         trex_traffic_gen = TrexTrafficGen(NAME, vnfd)
         trex_traffic_gen.ssh_helper = mock.MagicMock()
         trex_traffic_gen.resource_helper.ssh_helper = mock.MagicMock()
+        trex_traffic_gen.scenario_helper.scenario_cfg = {}
+        self.assertIsNone(trex_traffic_gen._start_server())
+
+    @mock.patch(SSH_HELPER)
+    def test__start_server_multiple_queues(self, ssh):
+        mock_ssh(ssh)
+        vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
+        trex_traffic_gen = TrexTrafficGen(NAME, vnfd)
+        trex_traffic_gen.ssh_helper = mock.MagicMock()
+        trex_traffic_gen.resource_helper.ssh_helper = mock.MagicMock()
+        trex_traffic_gen.scenario_helper.scenario_cfg = {"options": {NAME: {"queues_per_port": 2}}}
         self.assertIsNone(trex_traffic_gen._start_server())
 
     @mock.patch(SSH_HELPER)
@@ -371,11 +384,12 @@ class TestTrexTrafficGen(unittest.TestCase):
         self.sut = TrexTrafficGen(NAME, vnfd)
         self.sut.ssh_helper = mock.Mock()
         self.sut.ssh_helper.run = mock.Mock()
-        self.sut._vpci_ascending = ["0000:05:00.0", "0000:05:00.1"]
         self.sut._connect_client = mock.Mock(autospec=STLClient)
         self.sut._connect_client.get_stats = mock.Mock(return_value="0")
         self.sut.resource_helper.RUN_DURATION = 0
         self.sut.resource_helper.QUEUE_WAIT_TIME = 0
+        # must generate cfg before we can run traffic so Trex port mapping is created
+        self.sut.resource_helper.generate_cfg()
         self.sut._traffic_runner(mock_traffic_profile)
 
     @mock.patch(SSH_HELPER)
@@ -386,6 +400,52 @@ class TestTrexTrafficGen(unittest.TestCase):
         trex_traffic_gen.resource_helper.ssh_helper = mock.MagicMock()
         self.assertIsNone(trex_traffic_gen.resource_helper.generate_cfg())
 
+    @mock.patch(SSH_HELPER)
+    def test_build_ports_reversed_pci_ordering(self, ssh):
+        mock_ssh(ssh)
+        vnfd = copy.deepcopy(self.VNFD['vnfd:vnfd-catalog']['vnfd'][0])
+        vnfd['vdu'][0]['external-interface'] = [
+            {'virtual-interface':
+                 {'dst_mac': '00:00:00:00:00:04',
+                  'vpci': '0000:05:00.0',
+                  'local_ip': '152.16.100.19',
+                  'type': 'PCI-PASSTHROUGH',
+                  'netmask': '255.255.255.0',
+                  'dpdk_port_num': 2,
+                  'bandwidth': '10 Gbps',
+                  'driver': "i40e",
+                  'dst_ip': '152.16.100.20',
+                  'local_iface_name': 'xe0',
+                  'vld_id': 'downlink_0',
+                  'ifname': 'xe0',
+                  'local_mac': '00:00:00:00:00:02'},
+             'vnfd-connection-point-ref': 'xe0',
+             'name': 'xe0'},
+            {'virtual-interface':
+                 {'dst_mac': '00:00:00:00:00:03',
+                  'vpci': '0000:04:00.0',
+                  'local_ip': '152.16.40.19',
+                  'type': 'PCI-PASSTHROUGH',
+                  'driver': "i40e",
+                  'netmask': '255.255.255.0',
+                  'dpdk_port_num': 0,
+                  'bandwidth': '10 Gbps',
+                  'dst_ip': '152.16.40.20',
+                  'local_iface_name': 'xe1',
+                  'vld_id': 'uplink_0',
+                  'ifname': 'xe1',
+                  'local_mac': '00:00:00:00:00:01'},
+             'vnfd-connection-point-ref': 'xe1',
+             'name': 'xe1'}]
+        trex_traffic_gen = TrexTrafficGen(NAME, vnfd)
+        trex_traffic_gen.resource_helper.ssh_helper = mock.MagicMock()
+        trex_traffic_gen.resource_helper.generate_cfg()
+        trex_traffic_gen.resource_helper._build_ports()
+        self.assertEqual(sorted(trex_traffic_gen.resource_helper.all_ports), [0, 1])
+        # there is a gap in ordering
+        self.assertEqual(dict(trex_traffic_gen.resource_helper.dpdk_to_trex_port_map),
+                         {0: 0, 2: 1})
+
     @mock.patch(SSH_HELPER)
     def test_run_traffic(self, ssh):
         mock_ssh(ssh)
@@ -404,13 +464,6 @@ class TestTrexTrafficGen(unittest.TestCase):
         self.sut._traffic_process.terminate()
         self.assertIsNotNone(result)
 
-    @mock.patch(SSH_HELPER)
-    def test_scale(self, ssh):
-        mock_ssh(ssh, exec_result=(1, "", ""))
-        vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
-        trex_traffic_gen = TrexTrafficGen(NAME, vnfd)
-        trex_traffic_gen.scale('')
-
     @mock.patch(SSH_HELPER)
     def test_terminate(self, ssh):
         mock_ssh(ssh)
@@ -428,7 +481,3 @@ class TestTrexTrafficGen(unittest.TestCase):
         client = mock.Mock(autospec=STLClient)
         client.connect = mock.Mock(return_value=0)
         self.assertIsNotNone(trex_traffic_gen.resource_helper._connect(client))
-
-
-if __name__ == '__main__':
-    unittest.main()