aboutsummaryrefslogtreecommitdiffstats
path: root/tests/unit/network_services/traffic_profile
diff options
context:
space:
mode:
authorKubi <jean.gaoliang@huawei.com>2017-02-06 09:47:50 +0000
committerGerrit Code Review <gerrit@opnfv.org>2017-02-06 09:47:50 +0000
commit0c99c83ffaa58757dd8d9c0bb3adef783f5cb037 (patch)
treee3e90cb135eb491b4cb94231e15645badf5f846c /tests/unit/network_services/traffic_profile
parent4b86cc0678bcbd2ad2aac571bb40eb97a7ea65f7 (diff)
parentc1d6fd53c49a2cc5c0a7eab82e15dcf1a08f4e32 (diff)
Merge "Adding generic traffic profiles for trex traffic generator"
Diffstat (limited to 'tests/unit/network_services/traffic_profile')
-rw-r--r--tests/unit/network_services/traffic_profile/test_http.py45
-rw-r--r--tests/unit/network_services/traffic_profile/test_rfc2544.py181
-rw-r--r--tests/unit/network_services/traffic_profile/test_traffic_profile.py269
3 files changed, 495 insertions, 0 deletions
diff --git a/tests/unit/network_services/traffic_profile/test_http.py b/tests/unit/network_services/traffic_profile/test_http.py
new file mode 100644
index 000000000..e818a0528
--- /dev/null
+++ b/tests/unit/network_services/traffic_profile/test_http.py
@@ -0,0 +1,45 @@
+#!/usr/bin/env python
+
+# Copyright (c) 2016-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+from __future__ import absolute_import
+import unittest
+
+from yardstick.network_services.traffic_profile.base import TrafficProfile
+from yardstick.network_services.traffic_profile.http import \
+ TrafficProfileGenericHTTP
+
+
+class TestTrafficProfileGenericHTTP(unittest.TestCase):
+ def test___init__(self):
+ traffic_profile_generic_htt_p = \
+ TrafficProfileGenericHTTP(TrafficProfile)
+ self.assertIsNotNone(traffic_profile_generic_htt_p)
+
+ def test_execute(self):
+ traffic_profile_generic_htt_p = \
+ TrafficProfileGenericHTTP(TrafficProfile)
+ traffic_generator = {}
+ self.assertEqual(None,
+ traffic_profile_generic_htt_p.execute(
+ traffic_generator))
+
+ def test__send_http_request(self):
+ traffic_profile_generic_htt_p = \
+ TrafficProfileGenericHTTP(TrafficProfile)
+ self.assertEqual(None,
+ traffic_profile_generic_htt_p._send_http_request(
+ "10.1.1.1", "250", "/req"))
diff --git a/tests/unit/network_services/traffic_profile/test_rfc2544.py b/tests/unit/network_services/traffic_profile/test_rfc2544.py
new file mode 100644
index 000000000..3e553dd0f
--- /dev/null
+++ b/tests/unit/network_services/traffic_profile/test_rfc2544.py
@@ -0,0 +1,181 @@
+#!/usr/bin/env python
+
+# Copyright (c) 2016-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+from __future__ import absolute_import
+import unittest
+import mock
+
+from yardstick.network_services.traffic_profile.traffic_profile \
+ import TrexProfile
+from yardstick.network_services.traffic_profile.rfc2544 import \
+ RFC2544Profile
+
+
+class TestRFC2544Profile(unittest.TestCase):
+ TRAFFIC_PROFILE = {
+ "schema": "isb:traffic_profile:0.1",
+ "name": "fixed",
+ "description": "Fixed traffic profile to run UDP traffic",
+ "traffic_profile": {
+ "traffic_type": "FixedTraffic",
+ "frame_rate": 100, # pps
+ "flow_number": 10,
+ "frame_size": 64}}
+
+ PROFILE = {'description': 'Traffic profile to run RFC2544 latency',
+ 'name': 'rfc2544',
+ 'traffic_profile': {'traffic_type': 'RFC2544Profile',
+ 'frame_rate': 100},
+ 'public': {'ipv4':
+ {'outer_l2': {'framesize':
+ {'64B': '100', '1518B': '0',
+ '128B': '0', '1400B': '0',
+ '256B': '0', '373b': '0',
+ '570B': '0'}},
+ 'outer_l3v4': {'dstip4': '1.1.1.1-1.15.255.255',
+ 'proto': 'udp',
+ 'srcip4': '90.90.1.1-90.105.255.255',
+ 'dscp': 0, 'ttl': 32},
+ 'outer_l4': {'srcport': '2001',
+ 'dsrport': '1234'}}},
+ 'private': {'ipv4':
+ {'outer_l2': {'framesize':
+ {'64B': '100', '1518B': '0',
+ '128B': '0', '1400B': '0',
+ '256B': '0', '373b': '0',
+ '570B': '0'}},
+ 'outer_l3v4': {'dstip4': '9.9.1.1-90.105.255.255',
+ 'proto': 'udp',
+ 'srcip4': '1.1.1.1-1.15.255.255',
+ 'dscp': 0, 'ttl': 32},
+ 'outer_l4': {'dstport': '2001',
+ 'srcport': '1234'}}},
+ 'schema': 'isb:traffic_profile:0.1'}
+
+ def test___init__(self):
+ r_f_c2544_profile = RFC2544Profile(self.TRAFFIC_PROFILE)
+ assert r_f_c2544_profile.rate
+
+ def test_execute(self):
+ traffic_generator = mock.Mock(autospec=TrexProfile)
+ traffic_generator.my_ports = [0, 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
+ self.assertEqual(None, r_f_c2544_profile.execute(traffic_generator))
+
+ 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)
+ 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))
+ 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': 33,
+ 'TxThroughput': 33, 'CurrentDropPercentage': 0.0,
+ 'Throughput': 33,
+ '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))
+
+ def test_get_drop_percentage_update(self):
+ traffic_generator = mock.Mock(autospec=TrexProfile)
+ traffic_generator.my_ports = [0, 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))
+ 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}
+ tol_min = 0.0
+ tolerance = 1.0
+ expected = {'DropPercentage': 0.2, 'RxThroughput': 33,
+ 'TxThroughput': 33, 'CurrentDropPercentage': 0.2,
+ 'Throughput': 33,
+ '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))
+
+ def test_get_drop_percentage_div_zero(self):
+ traffic_generator = mock.Mock(autospec=TrexProfile)
+ traffic_generator.my_ports = [0, 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))
+ 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}
+ tol_min = 0.0
+ tolerance = 0.0
+ r_f_c2544_profile.tmp_throughput = 0
+ expected = {'DropPercentage': 100.0, 'RxThroughput': 33,
+ 'TxThroughput': 0, 'CurrentDropPercentage': 100.0,
+ 'Throughput': 33,
+ 'xe0': {'tx_throughput_fps': 20, 'in_packets': 1000,
+ 'out_packets': 0, '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))
+
+ def test_get_multiplier(self):
+ r_f_c2544_profile = RFC2544Profile(self.TRAFFIC_PROFILE)
+ r_f_c2544_profile.max_rate = 100
+ r_f_c2544_profile.min_rate = 100
+ self.assertEqual("1.0", r_f_c2544_profile.get_multiplier())
+
+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
new file mode 100644
index 000000000..126a4a2a4
--- /dev/null
+++ b/tests/unit/network_services/traffic_profile/test_traffic_profile.py
@@ -0,0 +1,269 @@
+#!/usr/bin/env python
+
+# Copyright (c) 2016-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+from __future__ import absolute_import
+import unittest
+
+from yardstick.network_services.traffic_profile.base import TrafficProfile
+from yardstick.network_services.traffic_profile.traffic_profile import \
+ TrexProfile
+
+
+class TestTrexProfile(unittest.TestCase):
+ TRAFFIC_PROFILE = {
+ "schema": "isb:traffic_profile:0.1",
+ "name": "fixed",
+ "description": "Fixed traffic profile to run UDP traffic",
+ "traffic_profile": {
+ "traffic_type": "FixedTraffic",
+ "frame_rate": 100, # pps
+ "flow_number": 10,
+ "frame_size": 64}}
+
+ PROFILE = {'description': 'Traffic profile to run RFC2544 latency',
+ 'name': 'rfc2544',
+ 'traffic_profile': {'traffic_type': 'RFC2544Profile',
+ 'frame_rate': 100},
+ 'public': {'ipv4': {'outer_l2': {'framesize': {'64B': '100',
+ '1518B': '0',
+ '128B': '0',
+ '1400B': '0',
+ '256B': '0',
+ '373b': '0',
+ '570B': '0'},
+ "srcmac": "00:00:00:00:00:02",
+ "dstmac": "00:00:00:00:00:01"},
+ 'outer_l3v4': {'dstip4': '1.1.1.1-1.1.2.2',
+ 'proto': 'udp',
+ 'srcip4': '9.9.1.1-90.1.2.2',
+ 'dscp': 0, 'ttl': 32},
+ 'outer_l4': {'srcport': '2001',
+ 'dsrport': '1234'}}},
+ 'private': {'ipv4':
+ {'outer_l2': {'framesize':
+ {'64B': '100', '1518B': '0',
+ '128B': '0', '1400B': '0',
+ '256B': '0', '373b': '0',
+ '570B': '0'},
+ "srcmac": "00:00:00:00:00:01",
+ "dstmac": "00:00:00:00:00:02"},
+ 'outer_l3v4': {'dstip4': '9.9.1.1-90.105.255.255',
+ 'proto': 'udp',
+ 'srcip4': '1.1.1.1-1.15.255.255',
+ 'dscp': 0, 'ttl': 32},
+ 'outer_l4': {'dstport': '2001',
+ 'srcport': '1234'}}},
+ 'schema': 'isb:traffic_profile:0.1'}
+ PROFILE_v6 = {'description': 'Traffic profile to run RFC2544 latency',
+ 'name': 'rfc2544',
+ 'traffic_profile': {'traffic_type': 'RFC2544Profile',
+ 'frame_rate': 100},
+ 'public': {'ipv6': {'outer_l2': {'framesize':
+ {'64B': '100', '1518B': '0',
+ '128B': '0', '1400B': '0',
+ '256B': '0', '373b': '0',
+ '570B': '0'},
+ "srcmac": "00:00:00:00:00:02",
+ "dstmac": "00:00:00:00:00:01"},
+ 'outer_l3v4': {'dstip6': '0064:ff9b:0:0:0:0:9810:6414-0064:ff9b:0:0:0:0:9810:6420',
+ 'proto': 'udp',
+ 'srcip6': '0064:ff9b:0:0:0:0:9810:2814-0064:ff9b:0:0:0:0:9810:2820',
+ 'dscp': 0, 'ttl': 32},
+ 'outer_l4': {'srcport': '2001',
+ 'dsrport': '1234'}}},
+ 'private':
+ {'ipv6': {'outer_l2': {'framesize':
+ {'64B': '100', '1518B': '0',
+ '128B': '0', '1400B': '0',
+ '256B': '0', '373b': '0',
+ '570B': '0'},
+ "srcmac": "00:00:00:00:00:01",
+ "dstmac": "00:00:00:00:00:02"},
+ 'outer_l3v4': {'dstip6': '0064:ff9b:0:0:0:0:9810:2814-0064:ff9b:0:0:0:0:9810:2820',
+ 'proto': 'udp',
+ 'srcip6': '0064:ff9b:0:0:0:0:9810:6414-0064:ff9b:0:0:0:0:9810:6420',
+ 'dscp': 0, 'ttl': 32},
+ 'outer_l4': {'dstport': '2001',
+ 'srcport': '1234'}}},
+ 'schema': 'isb:traffic_profile:0.1'}
+
+ def test___init__(self):
+ TrafficProfile.params = self.PROFILE
+ trex_profile = \
+ TrexProfile(TrafficProfile)
+ self.assertEqual(trex_profile.pps, 100)
+
+ def test_execute(self):
+ trex_profile = \
+ TrexProfile(TrafficProfile)
+ self.assertEqual(None, trex_profile.execute({}))
+
+ def test_set_src_mac(self):
+ src_mac = "00:00:00:00:00:01"
+ trex_profile = \
+ TrexProfile(TrafficProfile)
+ self.assertEqual(None, trex_profile.set_src_mac(src_mac))
+
+ src_mac = "00:00:00:00:00:01-00:00:00:00:00:02"
+ self.assertEqual(None, trex_profile.set_src_mac(src_mac))
+
+ def test_set_dst_mac(self):
+ dst_mac = "00:00:00:00:00:03"
+ trex_profile = \
+ TrexProfile(TrafficProfile)
+ self.assertEqual(None, trex_profile.set_dst_mac(dst_mac))
+
+ dst_mac = "00:00:00:00:00:03-00:00:00:00:00:04"
+ self.assertEqual(None, trex_profile.set_dst_mac(dst_mac))
+
+ def test_set_src_ip4(self):
+ src_ipv4 = "152.16.100.20"
+ trex_profile = \
+ TrexProfile(TrafficProfile)
+ self.assertEqual(None, trex_profile.set_src_ip4(src_ipv4))
+
+ src_ipv4 = "152.16.100.20-152.16.100.30"
+ self.assertEqual(None, trex_profile.set_src_ip4(src_ipv4))
+
+ def test_set_dst_ip4(self):
+ dst_ipv4 = "152.16.100.20"
+ trex_profile = \
+ TrexProfile(TrafficProfile)
+ self.assertEqual(None, trex_profile.set_dst_ip4(dst_ipv4))
+
+ dst_ipv4 = "152.16.100.20-152.16.100.30"
+ self.assertEqual(None, trex_profile.set_dst_ip4(dst_ipv4))
+
+ def test_set_src_ip6(self):
+ src_ipv6 = "0064:ff9b:0:0:0:0:9810:6414"
+ trex_profile = \
+ TrexProfile(TrafficProfile)
+ self.assertEqual(None, trex_profile.set_src_ip6(src_ipv6))
+
+ src_ipv6 = "0064:ff9b:0:0:0:0:9810:6414-0064:ff9b:0:0:0:0:9810:6420"
+ self.assertEqual(None, trex_profile.set_src_ip6(src_ipv6))
+
+ def test_set_dst_ip6(self):
+ dst_ipv6 = "0064:ff9b:0:0:0:0:9810:6414"
+ trex_profile = \
+ TrexProfile(TrafficProfile)
+ self.assertEqual(None, trex_profile.set_dst_ip6(dst_ipv6))
+
+ dst_ipv6 = "0064:ff9b:0:0:0:0:9810:6414-0064:ff9b:0:0:0:0:9810:6420"
+ self.assertEqual(None, trex_profile.set_dst_ip6(dst_ipv6))
+
+ def test_dscp(self):
+ dscp = "0"
+ trex_profile = \
+ TrexProfile(TrafficProfile)
+ self.assertEqual(None, trex_profile.set_dscp(dscp))
+
+ dscp = "0-1"
+ self.assertEqual(None, trex_profile.set_dscp(dscp))
+
+ def test_src_port(self):
+ port = "1234"
+ trex_profile = \
+ TrexProfile(TrafficProfile)
+ self.assertEqual(None, trex_profile.set_src_port(port))
+
+ port = "1234-5678"
+ self.assertEqual(None, trex_profile.set_src_port(port))
+
+ def test_dst_port(self):
+ port = "1234"
+ trex_profile = \
+ TrexProfile(TrafficProfile)
+ self.assertEqual(None, trex_profile.set_dst_port(port))
+
+ port = "1234-5678"
+ self.assertEqual(None, trex_profile.set_dst_port(port))
+
+ def test_qinq(self):
+ qinq = {"S-VLAN": {"id": 128, "priority": 0, "cfi": 0},
+ "C-VLAN": {"id": 512, "priority": 0, "cfi": 0}}
+
+ trex_profile = \
+ TrexProfile(TrafficProfile)
+ self.assertEqual(None, trex_profile.set_qinq(qinq))
+
+ qinq = {"S-VLAN": {"id": "128-130", "priority": 0, "cfi": 0},
+ "C-VLAN": {"id": "512-515", "priority": 0, "cfi": 0}}
+ self.assertEqual(None, trex_profile.set_qinq(qinq))
+
+ def test_set_outer_l2_fields(self):
+ trex_profile = \
+ TrexProfile(TrafficProfile)
+ qinq = {"S-VLAN": {"id": 128, "priority": 0, "cfi": 0},
+ "C-VLAN": {"id": 512, "priority": 0, "cfi": 0}}
+ outer_l2 = self.PROFILE['private']['ipv4']['outer_l2']
+ outer_l2['QinQ'] = qinq
+ self.assertEqual(None, trex_profile.set_outer_l2_fields(outer_l2))
+
+ def test_set_outer_l3v4_fields(self):
+ trex_profile = \
+ TrexProfile(TrafficProfile)
+ outer_l3v4 = self.PROFILE['private']['ipv4']['outer_l3v4']
+ outer_l3v4['proto'] = 'tcp'
+ self.assertEqual(None, trex_profile.set_outer_l3v4_fields(outer_l3v4))
+
+ def test_set_outer_l3v6_fields(self):
+ trex_profile = \
+ TrexProfile(TrafficProfile)
+ outer_l3v6 = self.PROFILE_v6['private']['ipv6']['outer_l3v4']
+ outer_l3v6['proto'] = 'tcp'
+ outer_l3v6['tc'] = 1
+ outer_l3v6['hlim'] = 10
+ self.assertEqual(None, trex_profile.set_outer_l3v6_fields(outer_l3v6))
+
+ def test_set_outer_l4_fields(self):
+ trex_profile = \
+ TrexProfile(TrafficProfile)
+ outer_l4 = self.PROFILE['private']['ipv4']['outer_l4']
+ self.assertEqual(None, trex_profile.set_outer_l4_fields(outer_l4))
+
+ def test_get_streams(self):
+ trex_profile = \
+ TrexProfile(TrafficProfile)
+ trex_profile.params = self.PROFILE
+ trex_profile.profile_data = self.PROFILE["private"]
+ self.assertIsNotNone(trex_profile.get_streams())
+ trex_profile.pg_id = 1
+ self.assertIsNotNone(trex_profile.get_streams())
+ trex_profile.params = self.PROFILE_v6
+ trex_profile.profile_data = self.PROFILE_v6["private"]
+ self.assertIsNotNone(trex_profile.get_streams())
+ trex_profile.pg_id = 1
+ self.assertIsNotNone(trex_profile.get_streams())
+
+ def test_generate_packets(self):
+ trex_profile = \
+ TrexProfile(TrafficProfile)
+ trex_profile.fsize = 10
+ trex_profile.base_pkt = [10]
+ self.assertIsNone(trex_profile.generate_packets())
+
+ def test_generate_imix_data_error(self):
+ trex_profile = \
+ TrexProfile(TrafficProfile)
+ self.assertEqual({}, trex_profile.generate_imix_data(False))
+
+ def test__get_start_end_ipv6(self):
+ trex_profile = \
+ TrexProfile(TrafficProfile)
+ self.assertRaises(SystemExit, trex_profile._get_start_end_ipv6,
+ "1.1.1.3", "1.1.1.1")