diff options
author | Deepak S <deepak.s@linux.intel.com> | 2017-06-20 14:31:19 -0700 |
---|---|---|
committer | Ross Brattain <ross.b.brattain@intel.com> | 2017-08-08 08:54:23 -0700 |
commit | 5ce3b6f8c8b3217091e51a6041455738603d90b8 (patch) | |
tree | ca34e15a85d69e2b23ce498fead47761624ae42c /tests/unit/network_services/traffic_profile | |
parent | 72778951d6b8968f562fb8fefa02a57159ea1b83 (diff) |
NSB update
Refactored main NSB VNF classes accroding to class diagram
https://wiki.opnfv.org/display/yardstick/NSB+class+diagram
All the SampleVNFs have been separated and placed under
the SampleVNF class.
Added AutoConnectSSH to automatically create SSH conneciton on demand.
Added VnfdHelper class to wrap the VNFD dictionary in prepartion for
class-based modeling.
Extracted DpdkVnfSetupEnvHelper for DPDK based VNF setup.
Extracted Stats and other client config to ResourceHelper
Had to replace dict_key_flatten with deepgetitem due to Python 2.7
Jinja2 infinite recursion.
Change-Id: Ia8840e9c44cdbdf39aab6b02e6d2176b31937dc9
Signed-off-by: Deepak S <deepak.s@linux.intel.com>
Signed-off-by: Edward MacGillivray <edward.s.macgillivray@intel.com>
Signed-off-by: Ross Brattain <ross.b.brattain@intel.com>
Diffstat (limited to 'tests/unit/network_services/traffic_profile')
-rw-r--r-- | tests/unit/network_services/traffic_profile/test_rfc2544.py | 200 | ||||
-rw-r--r-- | tests/unit/network_services/traffic_profile/test_traffic_profile.py | 10 |
2 files changed, 152 insertions, 58 deletions
diff --git a/tests/unit/network_services/traffic_profile/test_rfc2544.py b/tests/unit/network_services/traffic_profile/test_rfc2544.py index 1e9409b2a..dcaf43dc5 100644 --- a/tests/unit/network_services/traffic_profile/test_rfc2544.py +++ b/tests/unit/network_services/traffic_profile/test_rfc2544.py @@ -106,7 +106,7 @@ class TestRFC2544Profile(unittest.TestCase): 'name': 'rfc2544', 'traffic_profile': {'traffic_type': 'RFC2544Profile', 'frame_rate': 100}, - 'public': {'ipv4': + 'public_1': {'ipv4': {'outer_l2': {'framesize': {'64B': '100', '1518B': '0', '128B': '0', '1400B': '0', @@ -118,7 +118,7 @@ class TestRFC2544Profile(unittest.TestCase): 'dscp': 0, 'ttl': 32}, 'outer_l4': {'srcport': '2001', 'dsrport': '1234'}}}, - 'private': {'ipv4': + 'private_1': {'ipv4': {'outer_l2': {'framesize': {'64B': '100', '1518B': '0', '128B': '0', '1400B': '0', @@ -139,6 +139,8 @@ class TestRFC2544Profile(unittest.TestCase): def test_execute(self): traffic_generator = mock.Mock(autospec=TrexProfile) traffic_generator.my_ports = [0, 1] + traffic_generator.priv_ports = [-1] + traffic_generator.pub_ports = [1] traffic_generator.client = \ mock.Mock(return_value=True) r_f_c2544_profile = RFC2544Profile(self.TRAFFIC_PROFILE) @@ -149,66 +151,101 @@ class TestRFC2544Profile(unittest.TestCase): def test_get_drop_percentage(self): traffic_generator = mock.Mock(autospec=TrexProfile) traffic_generator.my_ports = [0, 1] - traffic_generator.client = \ - mock.Mock(return_value=True) + traffic_generator.priv_ports = [0] + traffic_generator.pub_ports = [1] + traffic_generator.client = mock.Mock(return_value=True) + r_f_c2544_profile = RFC2544Profile(self.TRAFFIC_PROFILE) r_f_c2544_profile.params = self.PROFILE - self.assertEqual(None, r_f_c2544_profile.execute(traffic_generator)) + r_f_c2544_profile.register_generator(traffic_generator) + self.assertIsNone(r_f_c2544_profile.execute(traffic_generator)) + samples = {} for ifname in range(1): name = "xe{}".format(ifname) - samples[name] = {"rx_throughput_fps": 20, - "tx_throughput_fps": 20, - "rx_throughput_mbps": 10, - "tx_throughput_mbps": 10, - "in_packets": 1000, - "out_packets": 1000} - tol_min = 100.0 - tolerance = 0.0 - expected = {'DropPercentage': 0.0, 'RxThroughput': 100/3.0, - 'TxThroughput': 100/3.0, 'CurrentDropPercentage': 0.0, - 'Throughput': 100/3.0, - 'xe0': {'tx_throughput_fps': 20, 'in_packets': 1000, - 'out_packets': 1000, 'rx_throughput_mbps': 10, - 'tx_throughput_mbps': 10, 'rx_throughput_fps': 20}} - self.assertDictEqual(expected, - r_f_c2544_profile.get_drop_percentage( - traffic_generator, samples, - tol_min, tolerance)) + samples[name] = { + "rx_throughput_fps": 20, + "tx_throughput_fps": 20, + "rx_throughput_mbps": 10, + "tx_throughput_mbps": 10, + "in_packets": 1000, + "out_packets": 1000, + } + + expected = { + 'DropPercentage': 0.0, + 'RxThroughput': 100 / 3.0, + 'TxThroughput': 100 / 3.0, + 'CurrentDropPercentage': 0.0, + 'Throughput': 66.66666666666667, + 'xe0': { + 'tx_throughput_fps': 20, + 'in_packets': 1000, + 'out_packets': 1000, + 'rx_throughput_mbps': 10, + 'tx_throughput_mbps': 10, + 'rx_throughput_fps': 20, + }, + } + traffic_generator.generate_samples = mock.MagicMock(return_value=samples) + traffic_generator.RUN_DURATION = 30 + traffic_generator.rfc2544_helper.tolerance_low = 0.0001 + traffic_generator.rfc2544_helper.tolerance_high = 0.0001 + result = r_f_c2544_profile.get_drop_percentage(traffic_generator) + self.assertDictEqual(result, expected) def test_get_drop_percentage_update(self): - traffic_generator = mock.Mock(autospec=TrexProfile) + traffic_generator = mock.Mock(autospec=RFC2544Profile) traffic_generator.my_ports = [0, 1] - traffic_generator.client = \ - mock.Mock(return_value=True) + traffic_generator.priv_ports = [0] + traffic_generator.pub_ports = [1] + traffic_generator.client = mock.Mock(return_value=True) + r_f_c2544_profile = RFC2544Profile(self.TRAFFIC_PROFILE) r_f_c2544_profile.params = self.PROFILE - self.assertEqual(None, r_f_c2544_profile.execute(traffic_generator)) + r_f_c2544_profile.register_generator(traffic_generator) + self.assertIsNone(r_f_c2544_profile.execute()) + samples = {} for ifname in range(1): name = "xe{}".format(ifname) - samples[name] = {"rx_throughput_fps": 20, - "tx_throughput_fps": 20, - "rx_throughput_mbps": 10, - "tx_throughput_mbps": 10, - "in_packets": 1000, - "out_packets": 1002} + samples[name] = { + "rx_throughput_fps": 20, + "tx_throughput_fps": 20, + "rx_throughput_mbps": 10, + "tx_throughput_mbps": 10, + "in_packets": 1000, + "out_packets": 1002, + } tol_min = 0.0 tolerance = 1.0 - expected = {'DropPercentage': 0.2, 'RxThroughput': 100/3.0, - 'TxThroughput': 33.4, 'CurrentDropPercentage': 0.2, - 'Throughput': 100/3.0, - 'xe0': {'tx_throughput_fps': 20, 'in_packets': 1000, - 'out_packets': 1002, 'rx_throughput_mbps': 10, - 'tx_throughput_mbps': 10, 'rx_throughput_fps': 20}} - self.assertDictEqual(expected, - r_f_c2544_profile.get_drop_percentage( - traffic_generator, samples, - tol_min, tolerance)) + expected = { + 'DropPercentage': 0.1996, + 'RxThroughput': 33.333333333333336, + 'TxThroughput': 33.4, + 'CurrentDropPercentage': 0.1996, + 'Throughput': 66.66666666666667, + 'xe0': { + 'tx_throughput_fps': 20, + 'in_packets': 1000, + 'out_packets': 1002, + 'rx_throughput_mbps': 10, + 'tx_throughput_mbps': 10, + 'rx_throughput_fps': 20, + }, + } + traffic_generator.generate_samples = mock.MagicMock(return_value=samples) + traffic_generator.RUN_DURATION = 30 + traffic_generator.rfc2544_helper.tolerance_low = 0.0001 + traffic_generator.rfc2544_helper.tolerance_high = 0.0001 + result = r_f_c2544_profile.get_drop_percentage(traffic_generator) + self.assertDictEqual(expected, result) def test_get_drop_percentage_div_zero(self): traffic_generator = mock.Mock(autospec=TrexProfile) traffic_generator.my_ports = [0, 1] + traffic_generator.priv_ports = [0] + traffic_generator.pub_ports = [1] traffic_generator.client = \ mock.Mock(return_value=True) r_f_c2544_profile = RFC2544Profile(self.TRAFFIC_PROFILE) @@ -225,17 +262,23 @@ class TestRFC2544Profile(unittest.TestCase): "out_packets": 0} tol_min = 0.0 tolerance = 0.0 - r_f_c2544_profile.tmp_throughput = 0 - expected = {'DropPercentage': 100.0, 'RxThroughput': 100/3.0, - 'TxThroughput': 0.0, 'CurrentDropPercentage': 100.0, - 'Throughput': 100/3.0, - 'xe0': {'tx_throughput_fps': 20, 'in_packets': 1000, - 'out_packets': 0, 'rx_throughput_mbps': 10, - 'tx_throughput_mbps': 10, 'rx_throughput_fps': 20}} + r_f_c2544_profile.throughput_max = 0 + expected = { + 'DropPercentage': 100.0, 'RxThroughput': 100 / 3.0, + 'TxThroughput': 0.0, 'CurrentDropPercentage': 100.0, + 'Throughput': 66.66666666666667, + 'xe0': { + 'tx_throughput_fps': 20, 'in_packets': 1000, + 'out_packets': 0, 'rx_throughput_mbps': 10, + 'tx_throughput_mbps': 10, 'rx_throughput_fps': 20 + } + } + traffic_generator.generate_samples = mock.MagicMock(return_value=samples) + traffic_generator.RUN_DURATION = 30 + traffic_generator.rfc2544_helper.tolerance_low = 0.0001 + traffic_generator.rfc2544_helper.tolerance_high = 0.0001 self.assertDictEqual(expected, - r_f_c2544_profile.get_drop_percentage( - traffic_generator, samples, - tol_min, tolerance)) + r_f_c2544_profile.get_drop_percentage(traffic_generator)) def test_get_multiplier(self): r_f_c2544_profile = RFC2544Profile(self.TRAFFIC_PROFILE) @@ -243,5 +286,56 @@ class TestRFC2544Profile(unittest.TestCase): r_f_c2544_profile.min_rate = 100 self.assertEqual("1.0", r_f_c2544_profile.get_multiplier()) + def test_calculate_pps(self): + r_f_c2544_profile = RFC2544Profile(self.TRAFFIC_PROFILE) + r_f_c2544_profile.rate = 100 + r_f_c2544_profile.pps = 100 + samples = {'Throughput': 4549093.33} + self.assertEqual((2274546.67, 1.0), + r_f_c2544_profile.calculate_pps(samples)) + + def test_create_single_stream(self): + r_f_c2544_profile = RFC2544Profile(self.TRAFFIC_PROFILE) + r_f_c2544_profile._create_single_packet = mock.MagicMock() + r_f_c2544_profile.pg_id = 1 + self.assertIsNotNone( + r_f_c2544_profile.create_single_stream(64, 2274546.67)) + + def test_create_single_stream_no_pg_id(self): + r_f_c2544_profile = RFC2544Profile(self.TRAFFIC_PROFILE) + r_f_c2544_profile._create_single_packet = mock.MagicMock() + r_f_c2544_profile.pg_id = 0 + self.assertIsNotNone( + r_f_c2544_profile.create_single_stream(64, 2274546.67)) + + def test_execute_latency(self): + traffic_generator = mock.Mock(autospec=TrexProfile) + traffic_generator.my_ports = [0, 1] + traffic_generator.priv_ports = [-1] + traffic_generator.pub_ports = [1] + traffic_generator.client = \ + mock.Mock(return_value=True) + r_f_c2544_profile = RFC2544Profile(self.TRAFFIC_PROFILE) + r_f_c2544_profile.params = self.PROFILE + r_f_c2544_profile.first_run = True + samples = {} + for ifname in range(1): + name = "xe{}".format(ifname) + samples[name] = {"rx_throughput_fps": 20, + "tx_throughput_fps": 20, + "rx_throughput_mbps": 10, + "tx_throughput_mbps": 10, + "in_packets": 1000, + "out_packets": 0} + + samples['Throughput'] = 4549093.33 + r_f_c2544_profile.calculate_pps = mock.Mock(return_value=[2274546.67, + 1.0]) + + self.assertEqual(None, + r_f_c2544_profile.execute_latency(traffic_generator, + samples)) + + if __name__ == '__main__': unittest.main() diff --git a/tests/unit/network_services/traffic_profile/test_traffic_profile.py b/tests/unit/network_services/traffic_profile/test_traffic_profile.py index ec07e83a6..fd769e6e0 100644 --- a/tests/unit/network_services/traffic_profile/test_traffic_profile.py +++ b/tests/unit/network_services/traffic_profile/test_traffic_profile.py @@ -307,15 +307,15 @@ class TestTrexProfile(unittest.TestCase): trex_profile = \ TrexProfile(TrafficProfile) trex_profile.params = self.PROFILE - trex_profile.profile_data = self.PROFILE["private"] - self.assertIsNotNone(trex_profile.get_streams()) + profile_data = self.PROFILE["private"] + self.assertIsNotNone(trex_profile.get_streams(profile_data)) trex_profile.pg_id = 1 - self.assertIsNotNone(trex_profile.get_streams()) + self.assertIsNotNone(trex_profile.get_streams(profile_data)) trex_profile.params = self.PROFILE_v6 trex_profile.profile_data = self.PROFILE_v6["private"] - self.assertIsNotNone(trex_profile.get_streams()) + self.assertIsNotNone(trex_profile.get_streams(profile_data)) trex_profile.pg_id = 1 - self.assertIsNotNone(trex_profile.get_streams()) + self.assertIsNotNone(trex_profile.get_streams(profile_data)) def test_generate_packets(self): trex_profile = \ |