3 # Copyright (c) 2016-2017 Intel Corporation
5 # Licensed under the Apache License, Version 2.0 (the "License");
6 # you may not use this file except in compliance with the License.
7 # You may obtain a copy of the License at
9 # http://www.apache.org/licenses/LICENSE-2.0
11 # Unless required by applicable law or agreed to in writing, software
12 # distributed under the License is distributed on an "AS IS" BASIS,
13 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 # See the License for the specific language governing permissions and
15 # limitations under the License.
18 from itertools import repeat, chain
26 from tests.unit import STL_MOCKS
27 from yardstick.network_services.vnf_generic.vnf.base import VnfdHelper
30 STLClient = mock.MagicMock()
31 stl_patch = mock.patch.dict("sys.modules", STL_MOCKS)
35 from yardstick.network_services.vnf_generic.vnf.sample_vnf import ScenarioHelper
36 from yardstick.network_services.vnf_generic.vnf.prox_helpers import ProxSocketHelper
37 from yardstick.network_services.vnf_generic.vnf.prox_helpers import PacketDump
38 from yardstick.network_services.vnf_generic.vnf.prox_helpers import CoreSocketTuple
39 from yardstick.network_services.vnf_generic.vnf.prox_helpers import ProxTestDataTuple
40 from yardstick.network_services.vnf_generic.vnf.prox_helpers import ProxDpdkVnfSetupEnvHelper
41 from yardstick.network_services.vnf_generic.vnf.prox_helpers import TotStatsTuple
42 from yardstick.network_services.vnf_generic.vnf.prox_helpers import ProxDataHelper
43 from yardstick.network_services.vnf_generic.vnf.prox_helpers import ProxResourceHelper
44 from yardstick.network_services.vnf_generic.vnf.prox_helpers import ProxProfileHelper
45 from yardstick.network_services.vnf_generic.vnf.prox_helpers import ProxMplsProfileHelper
46 from yardstick.network_services.vnf_generic.vnf.prox_helpers import ProxBngProfileHelper
47 from yardstick.network_services.vnf_generic.vnf.prox_helpers import ProxVpeProfileHelper
48 from yardstick.network_services.vnf_generic.vnf.prox_helpers import ProxlwAFTRProfileHelper
51 class TestCoreTuple(unittest.TestCase):
52 def test___init__(self):
53 core_tuple = CoreSocketTuple('core 5s6')
54 self.assertEqual(core_tuple.core_id, 5)
55 self.assertEqual(core_tuple.socket_id, 6)
56 self.assertFalse(core_tuple.is_hyperthread())
58 core_tuple = CoreSocketTuple('core 5s6h')
59 self.assertEqual(core_tuple.core_id, 5)
60 self.assertEqual(core_tuple.socket_id, 6)
61 self.assertTrue(core_tuple.is_hyperthread())
63 def test___init__negative(self):
84 for bad_input in bad_inputs:
85 with self.assertRaises(ValueError):
86 CoreSocketTuple(bad_input)
88 def test_find_in_topology(self):
98 core_tuple = CoreSocketTuple('core 5s6')
101 result = core_tuple.find_in_topology(topology_in)
102 self.assertEqual(result, expected)
104 core_tuple = CoreSocketTuple('core 5s6h')
107 result = core_tuple.find_in_topology(topology_in)
108 self.assertEqual(result, expected)
110 def test_find_in_topology_negative(self):
111 core_tuple = CoreSocketTuple('core 6s5')
112 with self.assertRaises(ValueError):
114 core_tuple.find_in_topology({})
116 with self.assertRaises(ValueError):
118 core_tuple.find_in_topology({5: {}})
120 with self.assertRaises(ValueError):
121 # no first value (as needed by non-hyperthread core)
122 core_tuple.find_in_topology({5: {6: {'key1': []}}})
124 core_tuple = CoreSocketTuple('core 6s5h')
125 with self.assertRaises(ValueError):
126 # no second value (as needed by hyperthread core)
127 core_tuple.find_in_topology({5: {6: {'key1': ['e']}}})
130 class TestTotStatsTuple(unittest.TestCase):
131 def test___new___negative(self):
132 with self.assertRaises(TypeError):
136 with self.assertRaises(TypeError):
137 # one, non-integer value
140 with self.assertRaises(TypeError):
142 TotStatsTuple(3, 4, 5, 6, 7)
145 class TestProxTestDataTuple(unittest.TestCase):
146 def test___init__(self):
147 prox_test_data = ProxTestDataTuple(1, 2, 3, 4, 5, 6, 7, 8, 9)
148 self.assertEqual(prox_test_data.tolerated, 1)
149 self.assertEqual(prox_test_data.tsc_hz, 2)
150 self.assertEqual(prox_test_data.delta_rx, 3)
151 self.assertEqual(prox_test_data.delta_tx, 4)
152 self.assertEqual(prox_test_data.delta_tsc, 5)
153 self.assertEqual(prox_test_data.latency, 6)
154 self.assertEqual(prox_test_data.rx_total, 7)
155 self.assertEqual(prox_test_data.tx_total, 8)
156 self.assertEqual(prox_test_data.pps, 9)
158 def test_properties(self):
159 prox_test_data = ProxTestDataTuple(1, 2, 3, 4, 5, 6, 7, 8, 9)
160 self.assertEqual(prox_test_data.pkt_loss, 12.5)
161 self.assertEqual(prox_test_data.mpps, 1.6 / 1e6)
162 self.assertEqual(prox_test_data.can_be_lost, 0)
163 self.assertEqual(prox_test_data.drop_total, 1)
164 self.assertFalse(prox_test_data.success)
166 prox_test_data = ProxTestDataTuple(10, 2, 3, 4, 5, 6, 997, 998, 9)
167 self.assertTrue(prox_test_data.success)
169 def test_pkt_loss_zero_division(self):
170 prox_test_data = ProxTestDataTuple(1, 2, 3, 4, 5, 6, 7, 0, 9)
171 self.assertEqual(prox_test_data.pkt_loss, 100.0)
173 def test_get_samples(self):
174 prox_test_data = ProxTestDataTuple(1, 2, 3, 4, 5, [6.1, 6.9, 6.4], 7, 8, 9)
177 "Throughput": 1.6 / 1e6,
179 "CurrentDropPackets": 12.5,
180 "TxThroughput": 9 / 1e6,
181 "RxThroughput": 1.6 / 1e6,
188 result = prox_test_data.get_samples(64, port_samples={"PortSample": 1})
189 self.assertDictEqual(result, expected)
192 "Throughput": 1.6 / 1e6,
193 "DropPackets": 0.123,
194 "CurrentDropPackets": 0.123,
195 "TxThroughput": 9 / 1e6,
196 "RxThroughput": 1.6 / 1e6,
202 result = prox_test_data.get_samples(64, 0.123)
203 self.assertDictEqual(result, expected)
205 @mock.patch('yardstick.network_services.vnf_generic.vnf.prox_helpers.LOG')
206 def test_log_data(self, mock_logger):
207 my_mock_logger = mock.MagicMock()
208 prox_test_data = ProxTestDataTuple(1, 2, 3, 4, 5, [6.1, 6.9, 6.4], 7, 8, 9)
209 prox_test_data.log_data()
210 self.assertEqual(my_mock_logger.debug.call_count, 0)
211 self.assertEqual(mock_logger.debug.call_count, 2)
213 mock_logger.debug.reset_mock()
214 prox_test_data.log_data(my_mock_logger)
215 self.assertEqual(my_mock_logger.debug.call_count, 2)
216 self.assertEqual(mock_logger.debug.call_count, 0)
219 class TestPacketDump(unittest.TestCase):
222 def test__init__(self):
223 PacketDump("port_id", len(self.PAYLOAD), self.PAYLOAD)
225 def test___str__(self):
226 expected = '<PacketDump port: port_id payload: {}>'.format(self.PAYLOAD)
227 dump1 = PacketDump("port_id", len(self.PAYLOAD), self.PAYLOAD)
228 self.assertEqual(str(dump1), expected)
230 def test_port_id(self):
231 p = PacketDump("port_id", len(self.PAYLOAD), self.PAYLOAD)
232 self.assertEqual(p.port_id, "port_id")
234 def test_data_len(self):
235 p = PacketDump("port_id", len(self.PAYLOAD), self.PAYLOAD)
236 self.assertEqual(p.data_len, len(self.PAYLOAD))
238 def test_payload(self):
239 p = PacketDump("port_id", len(self.PAYLOAD), self.PAYLOAD)
240 self.assertEqual(p.payload(), self.PAYLOAD)
242 self.assertEqual(p.payload(3), self.PAYLOAD[3:])
244 self.assertEqual(p.payload(end=3), self.PAYLOAD[:4])
246 self.assertEqual(p.payload(2, 4), self.PAYLOAD[2:5])
258 brown fox jumped over
264 PACKET_DUMP_NON_1 = """\
269 PACKET_DUMP_MIXED_1 = """\
276 PACKET_DUMP_BAD_1 = """\
281 PACKET_DUMP_BAD_2 = """\
286 PACKET_DUMP_BAD_3 = """\
292 class TestProxSocketHelper(unittest.TestCase):
295 self.mock_time_sleep = mock.patch.object(time, 'sleep').start()
297 @mock.patch('yardstick.network_services.vnf_generic.vnf.prox_helpers.socket')
298 def test___init__(self, mock_socket):
299 expected = mock_socket.socket()
300 prox = ProxSocketHelper()
302 self.assertEqual(result, expected)
304 def test_connect(self):
305 mock_sock = mock.MagicMock()
306 prox = ProxSocketHelper(mock_sock)
307 prox.connect('10.20.30.40', 23456)
308 self.assertEqual(mock_sock.connect.call_count, 1)
310 def test_get_sock(self):
311 mock_sock = mock.MagicMock()
312 prox = ProxSocketHelper(mock_sock)
313 result = prox.get_socket()
314 self.assertIs(result, mock_sock)
316 @mock.patch('yardstick.network_services.vnf_generic.vnf.prox_helpers.select')
317 def test_get_data(self, mock_select):
318 mock_select.select.side_effect = [[1], [0]]
319 mock_socket = mock.MagicMock()
320 mock_recv = mock_socket.recv()
321 mock_recv.decode.return_value = ""
322 prox = ProxSocketHelper(mock_socket)
323 ret = prox.get_data()
324 self.assertEqual(ret, "")
325 self.assertEqual(len(prox._pkt_dumps), 0)
327 mock_select.select.reset_mock()
328 mock_select.select.side_effect = chain([['a'], ['']], repeat([1], 3))
329 mock_recv.decode.return_value = PACKET_DUMP_1
330 ret = prox.get_data()
331 self.assertEqual(mock_select.select.call_count, 2)
332 self.assertEqual(ret, 'pktdump,3,11')
333 self.assertEqual(len(prox._pkt_dumps), 1)
335 mock_select.select.reset_mock()
336 mock_select.select.side_effect = chain([[object()], [None]], repeat([1], 3))
337 mock_recv.decode.return_value = PACKET_DUMP_2
338 ret = prox.get_data()
339 self.assertEqual(mock_select.select.call_count, 2)
340 self.assertEqual(ret, 'jumped over')
341 self.assertEqual(len(prox._pkt_dumps), 3)
343 def test__parse_socket_data_mixed_data(self):
344 prox = ProxSocketHelper(mock.MagicMock())
345 ret = prox._parse_socket_data(PACKET_DUMP_NON_1, False)
346 self.assertEqual(ret, 'not_a_dump,1,2')
347 self.assertEqual(len(prox._pkt_dumps), 0)
349 ret = prox._parse_socket_data(PACKET_DUMP_MIXED_1, False)
350 self.assertEqual(ret, 'not_a_dump,1,2')
351 self.assertEqual(len(prox._pkt_dumps), 1)
353 def test__parse_socket_data_bad_data(self):
354 prox = ProxSocketHelper(mock.MagicMock())
355 with self.assertRaises(ValueError):
356 prox._parse_socket_data(PACKET_DUMP_BAD_1, False)
358 with self.assertRaises(ValueError):
359 prox._parse_socket_data(PACKET_DUMP_BAD_2, False)
361 ret = prox._parse_socket_data(PACKET_DUMP_BAD_3, False)
362 self.assertEqual(ret, 'pktdump,3')
364 def test__parse_socket_data_pkt_dump_only(self):
365 prox = ProxSocketHelper(mock.MagicMock())
366 ret = prox._parse_socket_data('', True)
367 self.assertFalse(ret)
369 ret = prox._parse_socket_data(PACKET_DUMP_1, True)
372 ret = prox._parse_socket_data(PACKET_DUMP_2, True)
375 def test_put_command(self):
376 mock_socket = mock.MagicMock()
377 prox = ProxSocketHelper(mock_socket)
378 prox.put_command("data")
379 mock_socket.sendall.assert_called_once()
381 def test_put_command_socket_error(self):
382 mock_socket = mock.MagicMock()
383 mock_socket.sendall.side_effect = OSError
384 prox = ProxSocketHelper(mock_socket)
385 prox.put_command("data")
386 mock_socket.sendall.assert_called_once()
388 def test_get_packet_dump(self):
389 mock_socket = mock.MagicMock()
390 prox = ProxSocketHelper(mock_socket)
392 self.assertIsNone(prox.get_packet_dump())
394 prox._pkt_dumps = [234]
395 self.assertEqual(prox.get_packet_dump(), 234)
396 self.assertEqual(prox._pkt_dumps, [])
398 def test_stop_all_reset(self):
399 mock_socket = mock.MagicMock()
400 prox = ProxSocketHelper(mock_socket)
401 prox.stop_all_reset()
402 mock_socket.sendall.assert_called()
404 def test_stop_all(self):
405 mock_socket = mock.MagicMock()
406 prox = ProxSocketHelper(mock_socket)
408 mock_socket.sendall.assert_called()
411 mock_socket = mock.MagicMock()
412 prox = ProxSocketHelper(mock_socket)
413 prox.stop([3, 4, 5], 16)
414 mock_socket.sendall.assert_called()
416 def test_start_all(self):
417 mock_socket = mock.MagicMock()
418 prox = ProxSocketHelper(mock_socket)
420 mock_socket.sendall.assert_called()
422 def test_start(self):
423 mock_socket = mock.MagicMock()
424 prox = ProxSocketHelper(mock_socket)
425 prox.start([3, 4, 5])
426 mock_socket.sendall.assert_called()
428 def test_reset_stats(self):
429 mock_socket = mock.MagicMock()
430 prox = ProxSocketHelper(mock_socket)
432 mock_socket.sendall.assert_called()
434 def test_set_pkt_size(self):
435 mock_socket = mock.MagicMock()
436 prox = ProxSocketHelper(mock_socket)
437 prox.set_pkt_size([3, 4, 5], 1024)
438 self.assertEqual(mock_socket.sendall.call_count, 3)
440 def test_set_value(self):
441 mock_socket = mock.MagicMock()
442 prox = ProxSocketHelper(mock_socket)
443 prox.set_value([3, 4, 5], 10, 20, 30)
444 self.assertEqual(mock_socket.sendall.call_count, 3)
446 def test_reset_values(self):
447 mock_socket = mock.MagicMock()
448 prox = ProxSocketHelper(mock_socket)
449 prox.reset_values([3, 4, 5])
450 self.assertEqual(mock_socket.sendall.call_count, 3)
452 def test_set_speed(self):
453 mock_socket = mock.MagicMock()
454 prox = ProxSocketHelper(mock_socket)
455 prox.set_speed([3, 4, 5], 1000)
456 self.assertEqual(mock_socket.sendall.call_count, 3)
458 def test_slope_speed(self):
465 'cores': [9, 10, 11],
470 mock_socket = mock.MagicMock()
471 prox = ProxSocketHelper(mock_socket)
472 prox.set_speed = set_speed = mock.MagicMock()
473 prox.slope_speed(core_data, 5)
474 self.assertEqual(set_speed.call_count, 20)
476 set_speed.reset_mock()
477 prox.slope_speed(core_data, 5, 5)
478 self.assertEqual(set_speed.call_count, 10)
480 def test_set_pps(self):
481 mock_socket = mock.MagicMock()
482 prox = ProxSocketHelper(mock_socket)
483 prox.set_pps([3, 4, 5], 1000, 512)
484 self.assertEqual(mock_socket.sendall.call_count, 3)
486 def test_lat_stats(self):
488 '1, 2 , 3', # has white space
490 '7,8,9,10.5,11', # too long with float, but float is in unused portion
491 'twelve,13,14', # value as English word
492 '15,16.2,17', # float in used portion
495 mock_socket = mock.MagicMock()
496 prox = ProxSocketHelper(mock_socket)
497 prox.get_data = mock.MagicMock(side_effect=latency_output)
513 result = prox.lat_stats([3, 4, 5, 6, 7], 16)
514 self.assertEqual(mock_socket.sendall.call_count, 5)
515 self.assertEqual(result, expected)
517 def test_get_all_tot_stats_error(self):
518 mock_socket = mock.MagicMock()
519 prox = ProxSocketHelper(mock_socket)
520 prox.get_data = mock.MagicMock(return_value='3,4,5')
521 expected = [0, 0, 0, 0]
522 result = prox.get_all_tot_stats()
523 self.assertEqual(result, expected)
525 def test_get_all_tot_stats(self):
526 mock_socket = mock.MagicMock()
527 prox = ProxSocketHelper(mock_socket)
528 prox.get_data = mock.MagicMock(return_value='3,4,5,6')
529 expected = 3, 4, 5, 6
530 result = prox.get_all_tot_stats()
531 self.assertEqual(result, expected)
534 mock_socket = mock.MagicMock()
535 prox = ProxSocketHelper(mock_socket)
536 prox.get_data = mock.MagicMock(return_value='3,4,5,6')
539 self.assertEqual(result, expected)
541 def test_core_stats(self):
548 mock_socket = mock.MagicMock()
549 prox = ProxSocketHelper(mock_socket)
550 prox.get_data = mock.MagicMock(side_effect=core_stats)
551 expected = 21, 24, 27, 14
552 result = prox.core_stats([3, 4, 5], 16)
553 self.assertEqual(result, expected)
555 def test_port_stats(self):
557 ','.join(str(n) for n in range(3, 15)),
558 ','.join(str(n) for n in range(8, 32, 2)),
559 ','.join(str(n) for n in range(5, 89, 7)),
562 mock_socket = mock.MagicMock()
563 prox = ProxSocketHelper(mock_socket)
564 prox.get_data = mock.MagicMock(side_effect=port_stats)
565 expected = [16, 26, 36, 46, 56, 66, 76, 86, 96, 106, 116, 126]
566 result = prox.port_stats([3, 4, 5])
567 self.assertEqual(result, expected)
569 def test_measure_tot_stats(self):
570 start_tot = 3, 4, 5, 6
571 end_tot = 7, 9, 11, 13
572 delta_tot = 4, 5, 6, 7
575 ','.join(str(n) for n in start_tot),
576 ','.join(str(n) for n in end_tot),
579 mock_socket = mock.MagicMock()
580 prox = ProxSocketHelper(mock_socket)
581 prox.get_data = mock.MagicMock(side_effect=get_data_output)
583 'start_tot': start_tot,
587 with prox.measure_tot_stats() as result:
589 self.assertEqual(result, expected)
591 def test_tot_stats(self):
592 mock_socket = mock.MagicMock()
593 prox = ProxSocketHelper(mock_socket)
594 prox.get_data = mock.MagicMock(return_value='3,4,5,6')
596 result = prox.tot_stats()
597 self.assertEqual(result, expected)
599 def test_tot_ierrors(self):
600 mock_socket = mock.MagicMock()
601 prox = ProxSocketHelper(mock_socket)
602 prox.get_data = mock.MagicMock(return_value='3,4,5,6')
604 result = prox.tot_ierrors()
605 self.assertEqual(result, expected)
607 def test_set_count(self):
608 mock_socket = mock.MagicMock()
609 prox = ProxSocketHelper(mock_socket)
610 prox.set_count(432, [3, 4, 5])
611 self.assertEqual(mock_socket.sendall.call_count, 3)
613 def test_dump_rx(self):
614 mock_socket = mock.MagicMock()
615 prox = ProxSocketHelper(mock_socket)
616 prox.dump_rx(3, 5, 8)
617 self.assertEqual(mock_socket.sendall.call_count, 1)
620 mock_socket = mock.MagicMock()
621 prox = ProxSocketHelper(mock_socket)
623 mock_socket.sendall.assert_called()
625 def test_force_quit(self):
626 mock_socket = mock.MagicMock()
627 prox = ProxSocketHelper(mock_socket)
629 mock_socket.sendall.assert_called()
632 class TestProxDpdkVnfSetupEnvHelper(unittest.TestCase):
635 'short-name': 'ProxVnf',
640 'network': '152.16.100.20',
641 'netmask': '255.255.255.0',
642 'gateway': '152.16.100.20',
646 'network': '152.16.40.20',
647 'netmask': '255.255.255.0',
648 'gateway': '152.16.40.20',
652 'description': 'PROX approximation using DPDK',
653 'name': 'proxvnf-baremetal',
656 'network': '0064:ff9b:0:0:0:0:9810:6414',
658 'gateway': '0064:ff9b:0:0:0:0:9810:6414',
662 'network': '0064:ff9b:0:0:0:0:9810:2814',
664 'gateway': '0064:ff9b:0:0:0:0:9810:2814',
668 'id': 'proxvnf-baremetal',
669 'external-interface': [
671 'virtual-interface': {
672 'dst_mac': '00:00:00:00:00:04',
673 'vpci': '0000:05:00.0',
674 'local_ip': '152.16.100.19',
675 'type': 'PCI-PASSTHROUGH',
676 'vld_id': 'uplink_0',
677 'netmask': '255.255.255.0',
679 'bandwidth': '10 Gbps',
681 'dst_ip': '152.16.100.19',
682 'local_iface_name': 'xe0',
683 'local_mac': '00:00:00:00:00:02',
686 'vnfd-connection-point-ref': 'xe0',
690 'virtual-interface': {
691 'dst_mac': '00:00:00:00:00:03',
692 'vpci': '0000:05:00.1',
693 'local_ip': '152.16.40.19',
694 'type': 'PCI-PASSTHROUGH',
695 'vld_id': 'downlink_0',
697 'netmask': '255.255.255.0',
699 'bandwidth': '10 Gbps',
700 'dst_ip': '152.16.40.20',
701 'local_iface_name': 'xe1',
702 'local_mac': '00:00:00:00:00:01',
705 'vnfd-connection-point-ref': 'xe1',
711 'description': 'PROX approximation using DPDK',
713 'vdu-id': 'proxvnf-baremetal',
726 'id': 'ProxApproxVnf',
731 'vnfd:vnfd-catalog': {
738 def test_global_section(self):
739 setup_helper = ProxDpdkVnfSetupEnvHelper(mock.MagicMock(), mock.MagicMock(),
742 setup_helper._prox_config_data = [('a', [])]
744 with self.assertRaises(KeyError):
745 _ = setup_helper.global_section
749 ('not_name', 'other data'),
750 ('name_not', 'more data'),
751 ('name', 'prox type'),
755 setup_helper._prox_config_data = [
784 result = setup_helper.global_section
785 self.assertEqual(result, global_section[1])
787 def test_find_in_section(self):
788 setup_helper = ProxDpdkVnfSetupEnvHelper(mock.MagicMock(), mock.MagicMock(),
791 setup_helper._prox_config_data = [
793 ('not_name', 'other data'),
794 ('name_not', 'more data'),
795 ('name', 'prox type'),
825 result = setup_helper.find_in_section('section3', 'key3')
826 self.assertEqual(result, expected)
828 expected = 'default value'
829 result = setup_helper.find_in_section('section3', 'key4', 'default value')
830 self.assertEqual(result, expected)
832 with self.assertRaises(KeyError):
833 setup_helper.find_in_section('section4', 'key1')
835 with self.assertRaises(KeyError):
836 setup_helper.find_in_section('section1', 'key1')
838 def test__replace_quoted_with_value(self):
842 result = ProxDpdkVnfSetupEnvHelper._replace_quoted_with_value(input_str, 'cat')
843 self.assertEqual(result, expected)
845 # no quoted substring
846 input_str = 'lion tiger bear'
847 expected = 'lion tiger bear'
848 result = ProxDpdkVnfSetupEnvHelper._replace_quoted_with_value(input_str, 'cat')
849 self.assertEqual(result, expected)
851 # partially quoted substring
852 input_str = 'lion "tiger bear'
853 expected = 'lion "tiger bear'
854 result = ProxDpdkVnfSetupEnvHelper._replace_quoted_with_value(input_str, 'cat')
855 self.assertEqual(result, expected)
857 # one quoted substring
858 input_str = 'lion "tiger" bear'
859 expected = 'lion "cat" bear'
860 result = ProxDpdkVnfSetupEnvHelper._replace_quoted_with_value(input_str, 'cat')
861 self.assertEqual(result, expected)
863 # two quoted substrings
864 input_str = 'lion "tiger" bear "shark" whale'
865 expected = 'lion "cat" bear "shark" whale'
866 result = ProxDpdkVnfSetupEnvHelper._replace_quoted_with_value(input_str, 'cat')
867 self.assertEqual(result, expected)
869 # two quoted substrings, both replaced
870 input_str = 'lion "tiger" bear "shark" whale'
871 expected = 'lion "cat" bear "cat" whale'
872 result = ProxDpdkVnfSetupEnvHelper._replace_quoted_with_value(input_str, 'cat', 2)
873 self.assertEqual(result, expected)
875 def test__get_tx_port(self):
877 input_data = {'section1': []}
879 result = ProxDpdkVnfSetupEnvHelper._get_tx_port('section1', input_data)
880 self.assertEqual(result, expected)
882 # data for other section
891 result = ProxDpdkVnfSetupEnvHelper._get_tx_port('section1', input_data)
892 self.assertEqual(result, expected)
895 input_data['section1'] = section1 = [
896 ('rx port', '4', 'more', 432),
900 result = ProxDpdkVnfSetupEnvHelper._get_tx_port('section1', input_data)
901 self.assertEqual(result, expected)
903 # more data for section,
906 ('tx port', '1', 'and more', 234),
909 result = ProxDpdkVnfSetupEnvHelper._get_tx_port('section1', input_data)
910 self.assertEqual(result, expected)
912 def test_write_prox_config(self):
915 result = ProxDpdkVnfSetupEnvHelper.write_prox_config(input_data)
916 self.assertEqual(result, expected)
924 expected = '[section1]'
925 result = ProxDpdkVnfSetupEnvHelper.write_prox_config(input_data)
926 self.assertEqual(result, expected)
937 ['__name__', 'not this one'],
940 ['key4', 'multi-line\nvalue'],
944 expected = os.linesep.join([
950 'key4=multi-line\n\tvalue',
952 result = ProxDpdkVnfSetupEnvHelper.write_prox_config(input_data)
953 self.assertEqual(result, expected)
955 def test_prox_config_data(self):
956 setup_helper = ProxDpdkVnfSetupEnvHelper(mock.MagicMock(), mock.MagicMock(),
959 setup_helper.config_queue = config_queue = mock.MagicMock()
960 config_queue.get.return_value = expected = [('s', [('a', 3), ('b', 45)])]
962 result = setup_helper.prox_config_data
963 self.assertEqual(result, expected)
965 @mock.patch('yardstick.network_services.vnf_generic.vnf.prox_helpers.find_relative_file')
966 def test_build_config_file_no_additional_file(self, mock_find_path):
968 'prox_args': {'-c': ""},
970 'prox_config': 'e/f',
971 'prox_generate_parameter': False,
974 mock_find_path.side_effect = ['1', '2']
976 vnfd_helper = mock.MagicMock()
977 ssh_helper = mock.MagicMock()
978 scenario_helper = ScenarioHelper('vnf1')
979 scenario_helper.scenario_cfg = {
986 helper = ProxDpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
987 helper.copy_to_target = mock.MagicMock(return_value='3')
988 helper.generate_prox_config_file = mock.MagicMock(return_value='4')
989 helper.upload_prox_config = mock.MagicMock(return_value='5')
991 self.assertEqual(helper.additional_files, {})
992 self.assertNotEqual(helper._prox_config_data, '4')
993 self.assertNotEqual(helper.remote_path, '5')
994 helper.build_config_file()
995 self.assertEqual(helper.additional_files, {})
996 self.assertEqual(helper._prox_config_data, '4')
997 self.assertEqual(helper.remote_path, '5')
999 @mock.patch('yardstick.network_services.vnf_generic.vnf.prox_helpers.find_relative_file')
1000 def test_build_config_file_additional_file_string(self, mock_find_path):
1002 'prox_args': {'-c': ""},
1004 'prox_config': 'e/f',
1005 'prox_files': 'g/h.i',
1006 'prox_generate_parameter': True,
1009 mock_find_path.side_effect = ['1', '2']
1010 vnfd_helper = mock.MagicMock()
1011 ssh_helper = mock.MagicMock()
1012 scenario_helper = ScenarioHelper('vnf1')
1013 scenario_helper.scenario_cfg = {
1020 vnfd_helper.port_pairs.all_ports = ['xe0', 'xe1', 'xe2', 'xe3']
1021 helper = ProxDpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
1022 helper.copy_to_target = mock.MagicMock(side_effect=['33', '34', '35'])
1023 helper.generate_prox_config_file = mock.MagicMock(return_value='44')
1024 helper.upload_prox_config = mock.MagicMock(return_value='55')
1026 self.assertEqual(helper.additional_files, {})
1027 expected = {'h.i': '33'}
1028 helper.build_config_file()
1029 self.assertDictEqual(helper.additional_files, expected)
1031 @mock.patch('yardstick.network_services.vnf_generic.vnf.prox_helpers.find_relative_file')
1032 def test_build_config_file_additional_file(self, mock_find_path):
1034 'prox_args': {'-c': ""},
1036 'prox_config': 'e/f',
1044 mock_find_path.side_effect = ['1', '2'] + [str(i) for i in range(len(vnf1['prox_files']))]
1045 vnfd_helper = mock.MagicMock()
1046 ssh_helper = mock.MagicMock()
1047 scenario_helper = ScenarioHelper('vnf1')
1048 scenario_helper.scenario_cfg = {
1055 helper = ProxDpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
1056 helper.copy_to_target = mock.MagicMock(side_effect=['33', '34', '35'])
1057 helper.generate_prox_config_file = mock.MagicMock(return_value='44')
1058 helper.upload_prox_config = mock.MagicMock(return_value='55')
1060 self.assertEqual(helper.additional_files, {})
1061 self.assertNotEqual(helper._prox_config_data, '44')
1062 self.assertNotEqual(helper.remote_path, '55')
1063 expected = {'h.i': '33', 'l': '34', 'm_n': '35'}
1064 helper.build_config_file()
1065 self.assertDictEqual(helper.additional_files, expected)
1066 self.assertEqual(helper._prox_config_data, '44')
1067 self.assertEqual(helper.remote_path, '55')
1069 def test_build_config(self):
1071 'prox_args': {'-f': ""},
1072 'prox_path': '/opt/nsb_bin/prox',
1073 'prox_config': 'configs/gen_l2fwd-2.cfg',
1081 vnfd_helper = mock.Mock()
1082 ssh_helper = mock.Mock()
1083 ssh_helper.join_bin_path.return_value = '/opt/nsb_bin/prox'
1084 scenario_helper = ScenarioHelper('vnf1')
1085 scenario_helper.scenario_cfg = {
1092 expected = ("sudo bash -c 'cd /opt/nsb_bin; /opt/nsb_bin/prox -o cli "
1093 "-f -f /tmp/prox.cfg '")
1095 helper = ProxDpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper,
1097 with mock.patch.object(helper, 'build_config_file') as mock_cfg_file:
1098 helper.remote_path = '/tmp/prox.cfg'
1099 prox_cmd = helper.build_config()
1100 self.assertEqual(prox_cmd, expected)
1101 mock_cfg_file.assert_called_once()
1103 def test__insert_additional_file(self):
1104 vnfd_helper = mock.MagicMock()
1105 ssh_helper = mock.MagicMock()
1106 scenario_helper = mock.MagicMock()
1108 helper = ProxDpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
1109 helper.additional_files = {"ipv4.lua": "/tmp/ipv4.lua"}
1110 res = helper._insert_additional_file('dofile("ipv4.lua")')
1111 self.assertEqual(res, 'dofile("/tmp/ipv4.lua")')
1113 @mock.patch('yardstick.network_services.vnf_generic.vnf.prox_helpers.ConfigParser')
1114 def test_generate_prox_config_file(self, mock_parser_type):
1117 args[-1].extend(sections_data)
1118 return mock.MagicMock()
1122 mock_parser_type.side_effect = init
1124 vnfd_helper = VnfdHelper(self.VNFD0)
1125 ssh_helper = mock.MagicMock()
1126 scenario_helper = mock.MagicMock()
1128 helper = ProxDpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
1129 helper.additional_files = {}
1132 result = helper.generate_prox_config_file('a/b')
1133 self.assertEqual(result, expected)
1135 helper.additional_files = {"ipv4.lua": "/tmp/ipv4.lua"}
1137 helper.remote_prox_file_name = 'remote'
1142 ['dofile("ipv4.lua")', ''],
1158 ['$sut_mac0', '@@dst_mac0'],
1161 ['user_table', 'dofile("ipv4.lua")'],
1162 ['missing_addtional_file', 'dofile("nosuch")'],
1171 ['dofile("/tmp/ipv4.lua")', ''],
1178 ['mac', 'hardware'],
1179 ['dst mac', '00:00:00:00:00:03'],
1187 ['$sut_mac0', '00 00 00 00 00 04'],
1190 ['user_table', 'dofile("/tmp/ipv4.lua")'],
1191 ['missing_addtional_file', 'dofile("nosuch")'],
1195 result = helper.generate_prox_config_file('/c/d/e')
1196 self.assertEqual(result, expected, str(result))
1198 @mock.patch('yardstick.network_services.vnf_generic.vnf.prox_helpers.ConfigParser')
1199 def test_generate_prox_config_file_negative(self, mock_parser_type):
1201 args[-1].update(sections_data)
1202 return mock.MagicMock()
1206 mock_parser_type.side_effect = init
1208 vnfd_helper = mock.MagicMock()
1209 vnfd_helper.interfaces = []
1210 ssh_helper = mock.MagicMock()
1211 scenario_helper = mock.MagicMock()
1213 helper = ProxDpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
1214 helper.additional_files = {}
1215 helper.remote_prox_file_name = 'remote'
1216 vnfd_helper.interfaces = [
1218 'virtual-interface': {
1220 'dst_mac': '00:00:00:de:ad:88',
1224 'virtual-interface': {
1226 'dst_mac': '00:00:00:de:ad:ff',
1230 'virtual-interface': {
1232 'dst_mac': '00:00:00:de:ad:ff',
1246 ['???', 'dofile "here" 23'],
1250 with self.assertRaises(Exception):
1251 helper.generate_prox_config_file('a/b')
1253 def test_put_string_to_file(self):
1254 vnfd_helper = mock.MagicMock()
1255 vnfd_helper.interfaces = []
1256 ssh_helper = mock.MagicMock()
1257 scenario_helper = mock.MagicMock()
1259 helper = ProxDpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
1262 result = helper.put_string_to_file('my long string', 'a/b')
1263 self.assertEqual(result, expected)
1265 def test_copy_to_target(self):
1266 vnfd_helper = mock.MagicMock()
1267 vnfd_helper.interfaces = []
1268 ssh_helper = mock.MagicMock()
1269 scenario_helper = mock.MagicMock()
1271 helper = ProxDpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
1273 result = helper.copy_to_target('a/b', 'c')
1274 self.assertEqual(result, expected)
1276 def test_upload_prox_config(self):
1277 vnfd_helper = mock.MagicMock()
1278 vnfd_helper.interfaces = []
1279 ssh_helper = mock.MagicMock()
1280 scenario_helper = mock.MagicMock()
1282 helper = ProxDpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
1283 helper.write_prox_config = mock.MagicMock(return_value='a long string')
1285 result = helper.upload_prox_config('a', {})
1286 self.assertEqual(result, expected)
1289 class TestProxResourceHelper(unittest.TestCase):
1292 'short-name': 'ProxVnf',
1297 'network': '152.16.100.20',
1298 'netmask': '255.255.255.0',
1299 'gateway': '152.16.100.20',
1303 'network': '152.16.40.20',
1304 'netmask': '255.255.255.0',
1305 'gateway': '152.16.40.20',
1309 'description': 'PROX approximation using DPDK',
1310 'name': 'proxvnf-baremetal',
1313 'network': '0064:ff9b:0:0:0:0:9810:6414',
1315 'gateway': '0064:ff9b:0:0:0:0:9810:6414',
1319 'network': '0064:ff9b:0:0:0:0:9810:2814',
1321 'gateway': '0064:ff9b:0:0:0:0:9810:2814',
1325 'id': 'proxvnf-baremetal',
1326 'external-interface': [
1328 'virtual-interface': {
1329 'dst_mac': '00:00:00:00:00:04',
1330 'vpci': '0000:05:00.0',
1331 'local_ip': '152.16.100.19',
1332 'type': 'PCI-PASSTHROUGH',
1333 'vld_id': 'uplink_0',
1334 'netmask': '255.255.255.0',
1336 'bandwidth': '10 Gbps',
1338 'dst_ip': '152.16.100.19',
1339 'local_iface_name': 'xe0',
1340 'local_mac': '00:00:00:00:00:02',
1343 'vnfd-connection-point-ref': 'xe0',
1347 'virtual-interface': {
1348 'dst_mac': '00:00:00:00:00:03',
1349 'vpci': '0000:05:00.1',
1350 'local_ip': '152.16.40.19',
1351 'type': 'PCI-PASSTHROUGH',
1352 'vld_id': 'downlink_0',
1354 'netmask': '255.255.255.0',
1356 'bandwidth': '10 Gbps',
1357 'dst_ip': '152.16.40.20',
1358 'local_iface_name': 'xe1',
1359 'local_mac': '00:00:00:00:00:01',
1362 'vnfd-connection-point-ref': 'xe1',
1368 'description': 'PROX approximation using DPDK',
1370 'vdu-id': 'proxvnf-baremetal',
1383 'id': 'ProxApproxVnf',
1388 'vnfd:vnfd-catalog': {
1395 def test_find_pci(self):
1401 result = ProxResourceHelper.find_pci('target', input_str_list)
1402 self.assertFalse(result)
1410 result = ProxResourceHelper.find_pci('target', input_str_list)
1411 self.assertTrue(result)
1413 @mock.patch('yardstick.network_services.vnf_generic.vnf.prox_helpers.RETRY_INTERVAL', 0)
1414 @mock.patch('yardstick.network_services.vnf_generic.vnf.prox_helpers.ProxSocketHelper')
1415 def test_sut(self, *args):
1416 helper = ProxResourceHelper(mock.MagicMock())
1417 self.assertIsNone(helper.client)
1419 self.assertIsNotNone(result)
1420 self.assertIs(result, helper.client)
1421 self.assertIs(result, helper.sut)
1423 def test_test_type(self):
1424 setup_helper = mock.MagicMock()
1425 setup_helper.find_in_section.return_value = expected = 'prox type'
1427 helper = ProxResourceHelper(setup_helper)
1429 self.assertIsNone(helper._test_type)
1430 self.assertEqual(helper.test_type, expected)
1431 self.assertEqual(helper._test_type, expected)
1432 self.assertEqual(helper.test_type, expected)
1434 def test_collect_collectd_kpi(self):
1435 helper = ProxResourceHelper(mock.MagicMock())
1436 helper.resource = resource = mock.MagicMock()
1438 resource.check_if_system_agent_running.return_value = 0, '1234'
1439 resource.amqp_collect_nfvi_kpi.return_value = 543
1440 resource.check_if_system_agent_running.return_value = (0, None)
1442 expected = {'core': 543}
1443 result = helper.collect_collectd_kpi()
1444 self.assertDictEqual(result, expected)
1446 def test_collect_kpi(self):
1447 helper = ProxResourceHelper(mock.MagicMock())
1448 helper._queue = queue = mock.MagicMock()
1449 helper._result = {'z': 123}
1450 helper.resource = resource = mock.MagicMock()
1452 resource.check_if_system_agent_running.return_value = 0, '1234'
1453 resource.amqp_collect_nfvi_kpi.return_value = 543
1454 resource.check_if_system_agent_running.return_value = (0, None)
1456 queue.empty.return_value = False
1457 queue.get.return_value = {'a': 789}
1459 expected = {'z': 123, 'a': 789, 'collect_stats': {'core': 543}}
1460 result = helper.collect_kpi()
1461 self.assertDictEqual(result, expected)
1463 @mock.patch('yardstick.network_services.vnf_generic.vnf.prox_helpers.time')
1464 @mock.patch('yardstick.network_services.vnf_generic.vnf.prox_helpers.ProxSocketHelper')
1465 def test__connect(self, mock_socket_helper_type, *args):
1466 client = mock_socket_helper_type()
1467 client.connect.side_effect = chain(repeat(socket.error, 5), [None])
1469 setup_helper = mock.MagicMock()
1470 setup_helper.vnfd_helper.interfaces = []
1472 helper = ProxResourceHelper(setup_helper)
1474 result = helper._connect()
1475 self.assertIs(result, client)
1477 client.connect.side_effect = chain(repeat(socket.error, 65), [None])
1479 with self.assertRaises(Exception):
1482 def test_run_traffic(self):
1483 setup_helper = mock.MagicMock()
1484 helper = ProxResourceHelper(setup_helper)
1485 traffic_profile = mock.MagicMock(**{"done": True})
1486 helper.run_traffic(traffic_profile)
1487 self.assertEqual(helper._terminated.value, 1)
1489 def test__run_traffic_once(self):
1490 setup_helper = mock.MagicMock()
1491 helper = ProxResourceHelper(setup_helper)
1492 traffic_profile = mock.MagicMock(**{"done": True})
1493 helper._run_traffic_once(traffic_profile)
1494 self.assertEqual(helper._terminated.value, 1)
1496 def test_start_collect(self):
1497 setup_helper = mock.MagicMock()
1498 helper = ProxResourceHelper(setup_helper)
1499 helper.resource = resource = mock.MagicMock()
1500 self.assertIsNone(helper.start_collect())
1501 resource.start.assert_called_once()
1503 def test_terminate(self):
1504 setup_helper = mock.MagicMock()
1505 helper = ProxResourceHelper(setup_helper)
1506 with self.assertRaises(NotImplementedError):
1509 def test_up_post(self):
1510 setup_helper = mock.MagicMock()
1511 helper = ProxResourceHelper(setup_helper)
1512 helper.client = expected = mock.MagicMock()
1513 result = helper.up_post()
1514 self.assertEqual(result, expected)
1516 def test_execute(self):
1517 setup_helper = mock.MagicMock()
1518 helper = ProxResourceHelper(setup_helper)
1519 helper.client = mock.MagicMock()
1521 expected = helper.client.my_command()
1522 result = helper.execute('my_command')
1523 self.assertEqual(result, expected)
1525 helper.client = object()
1527 result = helper.execute('my_command')
1528 self.assertIsNone(result)
1531 class TestProxDataHelper(unittest.TestCase):
1533 def test_totals_and_pps(self):
1535 vnfd_helper = mock.MagicMock()
1536 vnfd_helper.port_pairs.all_ports = list(range(4))
1538 sut = mock.MagicMock()
1539 sut.port_stats.return_value = list(range(10))
1541 data_helper = ProxDataHelper(vnfd_helper, sut, pkt_size, 25, None)
1543 self.assertEqual(data_helper.rx_total, 6)
1544 self.assertEqual(data_helper.tx_total, 7)
1545 self.assertEqual(data_helper.pps, 6.25e6)
1547 def test_samples(self):
1548 vnfd_helper = mock.MagicMock()
1549 vnfd_helper.port_pairs.all_ports = list(range(4))
1550 vnfd_helper.ports_iter.return_value = [('xe1', 3), ('xe2', 7)]
1552 sut = mock.MagicMock()
1553 sut.port_stats.return_value = list(range(10))
1555 data_helper = ProxDataHelper(vnfd_helper, sut, None, None, None)
1567 result = data_helper.samples
1568 self.assertDictEqual(result, expected)
1570 def test___enter__(self):
1571 vnfd_helper = mock.MagicMock()
1572 vnfd_helper.port_pairs.all_ports = list(range(4))
1573 vnfd_helper.ports_iter.return_value = [('xe1', 3), ('xe2', 7)]
1575 sut = mock.MagicMock()
1576 sut.port_stats.return_value = list(range(10))
1578 data_helper = ProxDataHelper(vnfd_helper, sut, None, None, 5.4)
1579 data_helper._totals_and_pps = 12, 32, 4.5
1580 data_helper.tsc_hz = 9.8
1581 data_helper.measured_stats = {'delta': TotStatsTuple(6.1, 6.2, 6.3, 6.4)}
1582 data_helper.latency = 7
1584 self.assertIsNone(data_helper.result_tuple)
1586 expected = ProxTestDataTuple(5.4, 9.8, 6.1, 6.2, 6.3, 7, 12, 32, 4.5)
1590 result = data_helper.result_tuple
1591 self.assertEqual(result, expected)
1593 data_helper.make_tuple()
1594 self.assertIs(data_helper.result_tuple, result)
1596 def test___enter___negative(self):
1597 vnfd_helper = mock.MagicMock()
1599 data_helper = ProxDataHelper(vnfd_helper, None, None, None, None)
1601 vnfd_helper.port_pairs.all_ports = []
1602 with self.assertRaises(AssertionError):
1606 vnfd_helper.port_pairs.all_ports = [0, 1, 2]
1607 with self.assertRaises(AssertionError):
1611 def test_measure_tot_stats(self):
1612 vnfd_helper = mock.MagicMock()
1613 vnfd_helper.port_pairs.all_ports = list(range(4))
1615 start = (3, 4, 1, 2)
1618 sut = ProxSocketHelper(mock.MagicMock())
1619 sut.get_all_tot_stats = mock.MagicMock(side_effect=[start, end])
1621 data_helper = ProxDataHelper(vnfd_helper, sut, None, None, 5.4)
1623 self.assertIsNone(data_helper.measured_stats)
1628 'delta': TotStatsTuple(6, 3, 5, 6),
1630 with data_helper.measure_tot_stats():
1633 self.assertEqual(data_helper.measured_stats, expected)
1635 def test_capture_tsc_hz(self):
1636 vnfd_helper = mock.MagicMock()
1637 vnfd_helper.port_pairs.all_ports = list(range(4))
1639 sut = mock.MagicMock()
1640 sut.hz.return_value = '54.6'
1642 data_helper = ProxDataHelper(vnfd_helper, sut, None, None, None)
1644 self.assertIsNone(data_helper.tsc_hz)
1647 data_helper.capture_tsc_hz()
1648 self.assertEqual(data_helper.tsc_hz, expected)
1651 class TestProxProfileHelper(unittest.TestCase):
1653 @mock.patch('yardstick.network_services.vnf_generic.vnf.prox_helpers.utils')
1654 def test_get_cls(self, mock_utils):
1655 mock_type1 = mock.MagicMock()
1656 mock_type1.__prox_profile_type__ = 'another_type'
1657 mock_type2 = mock.MagicMock()
1658 mock_type2.__prox_profile_type__ = 'my_type'
1659 mock_utils.itersubclasses.return_value = [mock_type1, mock_type2]
1661 self.assertEqual(ProxProfileHelper.get_cls('my_type'), mock_type2)
1663 @mock.patch('yardstick.network_services.vnf_generic.vnf.prox_helpers.utils')
1664 def test_get_cls_default(self, mock_utils):
1665 mock_utils.itersubclasses.return_value = []
1666 ProxProfileHelper.get_cls('my_type')
1668 @mock.patch('yardstick.network_services.vnf_generic.vnf.prox_helpers.SocketTopology')
1669 def test_cpu_topology(self, mock_socket_topology):
1670 mock_socket_topology.parse_cpuinfo.return_value = 432
1672 resource_helper = mock.MagicMock()
1673 resource_helper.setup_helper.ssh_helper.execute.return_value = 0, 'output', ''
1675 helper = ProxProfileHelper(resource_helper)
1676 self.assertIsNone(helper._cpu_topology)
1677 result = helper.cpu_topology
1678 self.assertEqual(result, 432)
1679 self.assertIs(result, helper._cpu_topology)
1680 self.assertIs(result, helper.cpu_topology)
1682 def test_test_cores(self):
1683 resource_helper = mock.MagicMock()
1684 resource_helper.setup_helper.prox_config_data = []
1686 helper = ProxProfileHelper(resource_helper)
1687 helper._cpu_topology = []
1690 result = helper.test_cores
1691 self.assertEqual(result, expected)
1693 resource_helper.setup_helper.prox_config_data = [
1714 helper = ProxProfileHelper(resource_helper)
1715 helper._cpu_topology = {
1732 self.assertIsNone(helper._test_cores)
1734 result = helper.test_cores
1735 self.assertEqual(result, expected)
1736 self.assertIs(result, helper._test_cores)
1737 self.assertIs(result, helper.test_cores)
1739 def test_latency_cores(self):
1740 resource_helper = mock.MagicMock()
1741 resource_helper.setup_helper.prox_config_data = []
1743 helper = ProxProfileHelper(resource_helper)
1744 helper._cpu_topology = []
1747 result = helper.latency_cores
1748 self.assertEqual(result, expected)
1750 resource_helper.setup_helper.prox_config_data = [
1771 helper = ProxProfileHelper(resource_helper)
1772 helper._cpu_topology = {
1789 self.assertIsNone(helper._latency_cores)
1791 result = helper.latency_cores
1792 self.assertEqual(result, expected)
1793 self.assertIs(result, helper._latency_cores)
1794 self.assertIs(result, helper.latency_cores)
1796 def test_all_rx_cores(self):
1797 helper = ProxBngProfileHelper(mock.MagicMock())
1798 helper._latency_cores = expected = [3, 4, 6]
1799 helper._test_cores = [5, 2, 1]
1801 result = helper.all_rx_cores
1802 self.assertEqual(result, expected)
1804 def test_get_cores(self):
1805 resource_helper = mock.MagicMock()
1806 resource_helper.setup_helper.prox_config_data = [
1827 helper = ProxProfileHelper(resource_helper)
1828 helper._cpu_topology = {
1846 result = helper.get_cores(helper.PROX_CORE_GEN_MODE)
1847 self.assertEqual(result, expected)
1849 def test_get_latency(self):
1850 resource_helper = mock.MagicMock()
1851 resource_helper.setup_helper.vnfd_helper.interfaces = []
1853 helper = ProxProfileHelper(resource_helper)
1854 helper._latency_cores = []
1857 result = helper.get_latency()
1858 self.assertEqual(result, expected)
1860 helper._latency_cores = [1, 2]
1861 helper.client = mock.MagicMock()
1863 expected = helper.sut.lat_stats()
1864 result = helper.get_latency()
1865 self.assertIs(result, expected)
1867 @mock.patch('yardstick.network_services.vnf_generic.vnf.prox_helpers.time')
1868 def test_traffic_context(self, *args):
1869 setup_helper = mock.MagicMock()
1870 setup_helper.vnfd_helper.interfaces = []
1872 helper = ProxProfileHelper(setup_helper)
1873 helper._cpu_topology = {
1890 setup_helper.prox_config_data = [
1892 ('not_name', 'other data'),
1893 ('name_not', 'more data'),
1894 ('name', helper.__prox_profile_type__),
1918 client = mock.MagicMock()
1919 client.hz.return_value = 2
1920 client.port_stats.return_value = tuple(range(12))
1922 helper.client = client
1923 helper.get_latency = mock.MagicMock(return_value=[3.3, 3.6, 3.8])
1925 helper._test_cores = [3, 4]
1927 with helper.traffic_context(64, 1):
1930 @mock.patch('yardstick.network_services.vnf_generic.vnf.prox_helpers.time')
1931 def test_run_test(self, _):
1932 resource_helper = mock.MagicMock()
1933 resource_helper.step_delta = 0.4
1934 resource_helper.vnfd_helper.port_pairs.all_ports = list(range(2))
1935 resource_helper.sut.port_stats.return_value = list(range(10))
1937 helper = ProxProfileHelper(resource_helper)
1939 helper.run_test(120, 5, 6.5)
1942 class TestProxMplsProfileHelper(unittest.TestCase):
1944 def test_mpls_cores(self):
1945 resource_helper = mock.MagicMock()
1946 resource_helper.setup_helper.prox_config_data = [
1969 helper = ProxMplsProfileHelper(resource_helper)
1970 helper._cpu_topology = {
1987 expected_tagged = [3]
1988 expected_plain = [4]
1989 self.assertIsNone(helper._cores_tuple)
1990 self.assertEqual(helper.tagged_cores, expected_tagged)
1991 self.assertEqual(helper.plain_cores, expected_plain)
1992 self.assertEqual(helper._cores_tuple, (expected_tagged, expected_plain))
1994 def test_traffic_context(self):
1995 setup_helper = mock.MagicMock()
1996 helper = ProxMplsProfileHelper(setup_helper)
1998 with helper.traffic_context(120, 5.4):
2002 class TestProxBngProfileHelper(unittest.TestCase):
2004 def test_bng_cores(self):
2005 resource_helper = mock.MagicMock()
2006 resource_helper.setup_helper.prox_config_data = [
2030 ('name', 'arp_task'),
2039 helper = ProxBngProfileHelper(resource_helper)
2040 helper._cpu_topology = {
2065 expected_arp = [6, 9]
2066 expected_arp_task = [0, 6]
2067 expected_combined = (expected_cpe, expected_inet, expected_arp, expected_arp_task)
2069 self.assertIsNone(helper._cores_tuple)
2070 self.assertEqual(helper.cpe_cores, expected_cpe)
2071 self.assertEqual(helper.inet_cores, expected_inet)
2072 self.assertEqual(helper.arp_cores, expected_arp)
2073 self.assertEqual(helper.arp_task_cores, expected_arp_task)
2074 self.assertEqual(helper._cores_tuple, expected_combined)
2076 @mock.patch('yardstick.network_services.vnf_generic.vnf.prox_helpers.time')
2077 def test_run_test(self, _):
2078 resource_helper = mock.MagicMock()
2079 resource_helper.step_delta = 0.4
2080 resource_helper.vnfd_helper.port_pairs.all_ports = list(range(2))
2081 resource_helper.sut.port_stats.return_value = list(range(10))
2083 helper = ProxBngProfileHelper(resource_helper)
2085 helper.run_test(120, 5, 6.5)
2086 helper.run_test(-1000, 5, 6.5) # negative pkt_size is the only way to make ratio > 1
2089 class TestProxVpeProfileHelper(unittest.TestCase):
2091 def test_vpe_cores(self):
2092 resource_helper = mock.MagicMock()
2093 resource_helper.setup_helper.prox_config_data = [
2116 helper = ProxVpeProfileHelper(resource_helper)
2117 helper._cpu_topology = {
2136 expected_combined = (expected_cpe, expected_inet)
2138 self.assertIsNone(helper._cores_tuple)
2139 self.assertEqual(helper.cpe_cores, expected_cpe)
2140 self.assertEqual(helper.inet_cores, expected_inet)
2141 self.assertEqual(helper._cores_tuple, expected_combined)
2143 def test_vpe_ports(self):
2144 resource_helper = mock.MagicMock()
2145 resource_helper.setup_helper.prox_config_data = [
2154 ('mac', 'hardware'),
2159 ('mac', 'hardware'),
2163 helper = ProxVpeProfileHelper(resource_helper)
2164 helper._port_list = {
2183 expected_combined = (expected_cpe, expected_inet)
2185 self.assertIsNone(helper._ports_tuple)
2186 self.assertEqual(helper.cpe_ports, expected_cpe)
2187 self.assertEqual(helper.inet_ports, expected_inet)
2188 self.assertEqual(helper._ports_tuple, expected_combined)
2190 @mock.patch('yardstick.network_services.vnf_generic.vnf.prox_helpers.time')
2191 def test_run_test(self, _):
2192 resource_helper = mock.MagicMock()
2193 resource_helper.step_delta = 0.4
2194 resource_helper.vnfd_helper.port_pairs.all_ports = list(range(2))
2195 resource_helper.sut.port_stats.return_value = list(range(10))
2197 helper = ProxVpeProfileHelper(resource_helper)
2199 helper.run_test(120, 5, 6.5)
2200 helper.run_test(-1000, 5, 6.5) # negative pkt_size is the only way to make ratio > 1
2203 class TestProxlwAFTRProfileHelper(unittest.TestCase):
2205 def test_lwaftr_cores(self):
2206 resource_helper = mock.MagicMock()
2207 resource_helper.setup_helper.prox_config_data = [
2230 helper = ProxlwAFTRProfileHelper(resource_helper)
2231 helper._cpu_topology = {
2250 expected_combined = (expected_tun, expected_inet)
2252 self.assertIsNone(helper._cores_tuple)
2253 self.assertEqual(helper.tun_cores, expected_tun)
2254 self.assertEqual(helper.inet_cores, expected_inet)
2255 self.assertEqual(helper._cores_tuple, expected_combined)
2257 def test_tun_ports(self):
2258 resource_helper = mock.MagicMock()
2259 resource_helper.setup_helper.prox_config_data = [
2268 ('mac', 'hardware'),
2273 ('mac', 'hardware'),
2277 helper = ProxlwAFTRProfileHelper(resource_helper)
2278 helper._port_list = {
2297 expected_combined = (expected_tun, expected_inet)
2299 self.assertIsNone(helper._ports_tuple)
2300 self.assertEqual(helper.tun_ports, expected_tun)
2301 self.assertEqual(helper.inet_ports, expected_inet)
2302 self.assertEqual(helper._ports_tuple, expected_combined)
2304 @mock.patch('yardstick.network_services.vnf_generic.vnf.prox_helpers.time')
2305 def test_run_test(self, _):
2306 resource_helper = mock.MagicMock()
2307 resource_helper.step_delta = 0.4
2308 resource_helper.vnfd_helper.port_pairs.all_ports = list(range(2))
2309 resource_helper.sut.port_stats.return_value = list(range(10))
2311 helper = ProxlwAFTRProfileHelper(resource_helper)
2313 helper.run_test(120, 5, 6.5)
2314 helper.run_test(-1000, 5, 6.5) # negative pkt_size is the only way to make ratio > 1