1 # Copyright (c) 2016-2017 Intel Corporation
3 # Licensed under the Apache License, Version 2.0 (the "License");
4 # you may not use this file except in compliance with the License.
5 # You may obtain a copy of the License at
7 # http://www.apache.org/licenses/LICENSE-2.0
9 # Unless required by applicable law or agreed to in writing, software
10 # distributed under the License is distributed on an "AS IS" BASIS,
11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 # See the License for the specific language governing permissions and
13 # limitations under the License.
16 from itertools import repeat, chain
24 from tests.unit import STL_MOCKS
25 from yardstick.common import utils
26 from yardstick.network_services.vnf_generic.vnf.base import VnfdHelper
29 STLClient = mock.MagicMock()
30 stl_patch = mock.patch.dict("sys.modules", STL_MOCKS)
34 from yardstick.network_services.vnf_generic.vnf.sample_vnf import ScenarioHelper
35 from yardstick.network_services.vnf_generic.vnf.prox_helpers import ProxSocketHelper
36 from yardstick.network_services.vnf_generic.vnf.prox_helpers import PacketDump
37 from yardstick.network_services.vnf_generic.vnf.prox_helpers import CoreSocketTuple
38 from yardstick.network_services.vnf_generic.vnf.prox_helpers import ProxTestDataTuple
39 from yardstick.network_services.vnf_generic.vnf.prox_helpers import ProxDpdkVnfSetupEnvHelper
40 from yardstick.network_services.vnf_generic.vnf.prox_helpers import TotStatsTuple
41 from yardstick.network_services.vnf_generic.vnf.prox_helpers import ProxDataHelper
42 from yardstick.network_services.vnf_generic.vnf.prox_helpers import ProxResourceHelper
43 from yardstick.network_services.vnf_generic.vnf.prox_helpers import ProxProfileHelper
44 from yardstick.network_services.vnf_generic.vnf.prox_helpers import ProxMplsProfileHelper
45 from yardstick.network_services.vnf_generic.vnf.prox_helpers import ProxBngProfileHelper
46 from yardstick.network_services.vnf_generic.vnf.prox_helpers import ProxVpeProfileHelper
47 from yardstick.network_services.vnf_generic.vnf.prox_helpers import ProxlwAFTRProfileHelper
50 class TestCoreTuple(unittest.TestCase):
51 def test___init__(self):
52 core_tuple = CoreSocketTuple('core 5s6')
53 self.assertEqual(core_tuple.core_id, 5)
54 self.assertEqual(core_tuple.socket_id, 6)
55 self.assertFalse(core_tuple.is_hyperthread())
57 core_tuple = CoreSocketTuple('core 5s6h')
58 self.assertEqual(core_tuple.core_id, 5)
59 self.assertEqual(core_tuple.socket_id, 6)
60 self.assertTrue(core_tuple.is_hyperthread())
62 def test___init__negative(self):
83 for bad_input in bad_inputs:
84 with self.assertRaises(ValueError):
85 CoreSocketTuple(bad_input)
87 def test_find_in_topology(self):
97 core_tuple = CoreSocketTuple('core 5s6')
100 result = core_tuple.find_in_topology(topology_in)
101 self.assertEqual(result, expected)
103 core_tuple = CoreSocketTuple('core 5s6h')
106 result = core_tuple.find_in_topology(topology_in)
107 self.assertEqual(result, expected)
109 def test_find_in_topology_negative(self):
110 core_tuple = CoreSocketTuple('core 6s5')
111 with self.assertRaises(ValueError):
113 core_tuple.find_in_topology({})
115 with self.assertRaises(ValueError):
117 core_tuple.find_in_topology({5: {}})
119 with self.assertRaises(ValueError):
120 # no first value (as needed by non-hyperthread core)
121 core_tuple.find_in_topology({5: {6: {'key1': []}}})
123 core_tuple = CoreSocketTuple('core 6s5h')
124 with self.assertRaises(ValueError):
125 # no second value (as needed by hyperthread core)
126 core_tuple.find_in_topology({5: {6: {'key1': ['e']}}})
129 class TestTotStatsTuple(unittest.TestCase):
130 def test___new___negative(self):
131 with self.assertRaises(TypeError):
135 with self.assertRaises(TypeError):
136 # one, non-integer value
139 with self.assertRaises(TypeError):
141 TotStatsTuple(3, 4, 5, 6, 7)
144 class TestProxTestDataTuple(unittest.TestCase):
145 def test___init__(self):
146 prox_test_data = ProxTestDataTuple(1, 2, 3, 4, 5, 6, 7, 8, 9)
147 self.assertEqual(prox_test_data.tolerated, 1)
148 self.assertEqual(prox_test_data.tsc_hz, 2)
149 self.assertEqual(prox_test_data.delta_rx, 3)
150 self.assertEqual(prox_test_data.delta_tx, 4)
151 self.assertEqual(prox_test_data.delta_tsc, 5)
152 self.assertEqual(prox_test_data.latency, 6)
153 self.assertEqual(prox_test_data.rx_total, 7)
154 self.assertEqual(prox_test_data.tx_total, 8)
155 self.assertEqual(prox_test_data.pps, 9)
157 def test_properties(self):
158 prox_test_data = ProxTestDataTuple(1, 2, 3, 4, 5, 6, 7, 8, 9)
159 self.assertEqual(prox_test_data.pkt_loss, 12.5)
160 self.assertEqual(prox_test_data.mpps, 1.6 / 1e6)
161 self.assertEqual(prox_test_data.can_be_lost, 0)
162 self.assertEqual(prox_test_data.drop_total, 1)
163 self.assertFalse(prox_test_data.success)
165 prox_test_data = ProxTestDataTuple(10, 2, 3, 4, 5, 6, 997, 998, 9)
166 self.assertTrue(prox_test_data.success)
168 def test_pkt_loss_zero_division(self):
169 prox_test_data = ProxTestDataTuple(1, 2, 3, 4, 5, 6, 7, 0, 9)
170 self.assertEqual(prox_test_data.pkt_loss, 100.0)
172 def test_get_samples(self):
173 prox_test_data = ProxTestDataTuple(1, 2, 3, 4, 5, [6.1, 6.9, 6.4], 7, 8, 9)
176 "Throughput": 1.6 / 1e6,
178 "CurrentDropPackets": 12.5,
179 "TxThroughput": 9 / 1e6,
180 "RxThroughput": 1.6 / 1e6,
187 result = prox_test_data.get_samples(64, port_samples={"PortSample": 1})
188 self.assertDictEqual(result, expected)
191 "Throughput": 1.6 / 1e6,
192 "DropPackets": 0.123,
193 "CurrentDropPackets": 0.123,
194 "TxThroughput": 9 / 1e6,
195 "RxThroughput": 1.6 / 1e6,
201 result = prox_test_data.get_samples(64, 0.123)
202 self.assertDictEqual(result, expected)
204 @mock.patch('yardstick.network_services.vnf_generic.vnf.prox_helpers.LOG')
205 def test_log_data(self, mock_logger):
206 my_mock_logger = mock.MagicMock()
207 prox_test_data = ProxTestDataTuple(1, 2, 3, 4, 5, [6.1, 6.9, 6.4], 7, 8, 9)
208 prox_test_data.log_data()
209 self.assertEqual(my_mock_logger.debug.call_count, 0)
210 self.assertEqual(mock_logger.debug.call_count, 2)
212 mock_logger.debug.reset_mock()
213 prox_test_data.log_data(my_mock_logger)
214 self.assertEqual(my_mock_logger.debug.call_count, 2)
215 self.assertEqual(mock_logger.debug.call_count, 0)
218 class TestPacketDump(unittest.TestCase):
221 def test__init__(self):
222 PacketDump("port_id", len(self.PAYLOAD), self.PAYLOAD)
224 def test___str__(self):
225 expected = '<PacketDump port: port_id payload: {}>'.format(self.PAYLOAD)
226 dump1 = PacketDump("port_id", len(self.PAYLOAD), self.PAYLOAD)
227 self.assertEqual(str(dump1), expected)
229 def test_port_id(self):
230 p = PacketDump("port_id", len(self.PAYLOAD), self.PAYLOAD)
231 self.assertEqual(p.port_id, "port_id")
233 def test_data_len(self):
234 p = PacketDump("port_id", len(self.PAYLOAD), self.PAYLOAD)
235 self.assertEqual(p.data_len, len(self.PAYLOAD))
237 def test_payload(self):
238 p = PacketDump("port_id", len(self.PAYLOAD), self.PAYLOAD)
239 self.assertEqual(p.payload(), self.PAYLOAD)
241 self.assertEqual(p.payload(3), self.PAYLOAD[3:])
243 self.assertEqual(p.payload(end=3), self.PAYLOAD[:4])
245 self.assertEqual(p.payload(2, 4), self.PAYLOAD[2:5])
257 brown fox jumped over
263 PACKET_DUMP_NON_1 = """\
268 PACKET_DUMP_MIXED_1 = """\
275 PACKET_DUMP_BAD_1 = """\
280 PACKET_DUMP_BAD_2 = """\
285 PACKET_DUMP_BAD_3 = """\
291 class TestProxSocketHelper(unittest.TestCase):
294 self.mock_time_sleep = mock.patch.object(time, 'sleep').start()
296 @mock.patch('yardstick.network_services.vnf_generic.vnf.prox_helpers.socket')
297 def test___init__(self, mock_socket):
298 expected = mock_socket.socket()
299 prox = ProxSocketHelper()
301 self.assertEqual(result, expected)
303 def test_connect(self):
304 mock_sock = mock.MagicMock()
305 prox = ProxSocketHelper(mock_sock)
306 prox.connect('10.20.30.40', 23456)
307 self.assertEqual(mock_sock.connect.call_count, 1)
309 def test_get_sock(self):
310 mock_sock = mock.MagicMock()
311 prox = ProxSocketHelper(mock_sock)
312 result = prox.get_socket()
313 self.assertIs(result, mock_sock)
315 @mock.patch('yardstick.network_services.vnf_generic.vnf.prox_helpers.select')
316 def test_get_data(self, mock_select):
317 mock_select.select.side_effect = [[1], [0]]
318 mock_socket = mock.MagicMock()
319 mock_recv = mock_socket.recv()
320 mock_recv.decode.return_value = ""
321 prox = ProxSocketHelper(mock_socket)
322 ret = prox.get_data()
323 self.assertEqual(ret, "")
324 self.assertEqual(len(prox._pkt_dumps), 0)
326 mock_select.select.reset_mock()
327 mock_select.select.side_effect = chain([['a'], ['']], repeat([1], 3))
328 mock_recv.decode.return_value = PACKET_DUMP_1
329 ret = prox.get_data()
330 self.assertEqual(mock_select.select.call_count, 2)
331 self.assertEqual(ret, 'pktdump,3,11')
332 self.assertEqual(len(prox._pkt_dumps), 1)
334 mock_select.select.reset_mock()
335 mock_select.select.side_effect = chain([[object()], [None]], repeat([1], 3))
336 mock_recv.decode.return_value = PACKET_DUMP_2
337 ret = prox.get_data()
338 self.assertEqual(mock_select.select.call_count, 2)
339 self.assertEqual(ret, 'jumped over')
340 self.assertEqual(len(prox._pkt_dumps), 3)
342 def test__parse_socket_data_mixed_data(self):
343 prox = ProxSocketHelper(mock.MagicMock())
344 ret = prox._parse_socket_data(PACKET_DUMP_NON_1, False)
345 self.assertEqual(ret, 'not_a_dump,1,2')
346 self.assertEqual(len(prox._pkt_dumps), 0)
348 ret = prox._parse_socket_data(PACKET_DUMP_MIXED_1, False)
349 self.assertEqual(ret, 'not_a_dump,1,2')
350 self.assertEqual(len(prox._pkt_dumps), 1)
352 def test__parse_socket_data_bad_data(self):
353 prox = ProxSocketHelper(mock.MagicMock())
354 with self.assertRaises(ValueError):
355 prox._parse_socket_data(PACKET_DUMP_BAD_1, False)
357 with self.assertRaises(ValueError):
358 prox._parse_socket_data(PACKET_DUMP_BAD_2, False)
360 ret = prox._parse_socket_data(PACKET_DUMP_BAD_3, False)
361 self.assertEqual(ret, 'pktdump,3')
363 def test__parse_socket_data_pkt_dump_only(self):
364 prox = ProxSocketHelper(mock.MagicMock())
365 ret = prox._parse_socket_data('', True)
366 self.assertFalse(ret)
368 ret = prox._parse_socket_data(PACKET_DUMP_1, True)
371 ret = prox._parse_socket_data(PACKET_DUMP_2, True)
374 def test_put_command(self):
375 mock_socket = mock.MagicMock()
376 prox = ProxSocketHelper(mock_socket)
377 prox.put_command("data")
378 mock_socket.sendall.assert_called_once()
380 def test_put_command_socket_error(self):
381 mock_socket = mock.MagicMock()
382 mock_socket.sendall.side_effect = OSError
383 prox = ProxSocketHelper(mock_socket)
384 prox.put_command("data")
385 mock_socket.sendall.assert_called_once()
387 def test_get_packet_dump(self):
388 mock_socket = mock.MagicMock()
389 prox = ProxSocketHelper(mock_socket)
391 self.assertIsNone(prox.get_packet_dump())
393 prox._pkt_dumps = [234]
394 self.assertEqual(prox.get_packet_dump(), 234)
395 self.assertEqual(prox._pkt_dumps, [])
397 def test_stop_all_reset(self):
398 mock_socket = mock.MagicMock()
399 prox = ProxSocketHelper(mock_socket)
400 prox.stop_all_reset()
401 mock_socket.sendall.assert_called()
403 def test_stop_all(self):
404 mock_socket = mock.MagicMock()
405 prox = ProxSocketHelper(mock_socket)
407 mock_socket.sendall.assert_called()
410 mock_socket = mock.MagicMock()
411 prox = ProxSocketHelper(mock_socket)
412 prox.stop([3, 4, 5], 16)
413 mock_socket.sendall.assert_called()
415 def test_start_all(self):
416 mock_socket = mock.MagicMock()
417 prox = ProxSocketHelper(mock_socket)
419 mock_socket.sendall.assert_called()
421 def test_start(self):
422 mock_socket = mock.MagicMock()
423 prox = ProxSocketHelper(mock_socket)
424 prox.start([3, 4, 5])
425 mock_socket.sendall.assert_called()
427 def test_reset_stats(self):
428 mock_socket = mock.MagicMock()
429 prox = ProxSocketHelper(mock_socket)
431 mock_socket.sendall.assert_called()
433 def test_set_pkt_size(self):
434 mock_socket = mock.MagicMock()
435 prox = ProxSocketHelper(mock_socket)
436 prox.set_pkt_size([3, 4, 5], 1024)
437 self.assertEqual(mock_socket.sendall.call_count, 3)
439 def test_set_value(self):
440 mock_socket = mock.MagicMock()
441 prox = ProxSocketHelper(mock_socket)
442 prox.set_value([3, 4, 5], 10, 20, 30)
443 self.assertEqual(mock_socket.sendall.call_count, 3)
445 def test_reset_values(self):
446 mock_socket = mock.MagicMock()
447 prox = ProxSocketHelper(mock_socket)
448 prox.reset_values([3, 4, 5])
449 self.assertEqual(mock_socket.sendall.call_count, 3)
451 def test_set_speed(self):
452 mock_socket = mock.MagicMock()
453 prox = ProxSocketHelper(mock_socket)
454 prox.set_speed([3, 4, 5], 1000)
455 self.assertEqual(mock_socket.sendall.call_count, 3)
457 def test_slope_speed(self):
464 'cores': [9, 10, 11],
469 mock_socket = mock.MagicMock()
470 prox = ProxSocketHelper(mock_socket)
471 prox.set_speed = set_speed = mock.MagicMock()
472 prox.slope_speed(core_data, 5)
473 self.assertEqual(set_speed.call_count, 20)
475 set_speed.reset_mock()
476 prox.slope_speed(core_data, 5, 5)
477 self.assertEqual(set_speed.call_count, 10)
479 def test_set_pps(self):
480 mock_socket = mock.MagicMock()
481 prox = ProxSocketHelper(mock_socket)
482 prox.set_pps([3, 4, 5], 1000, 512)
483 self.assertEqual(mock_socket.sendall.call_count, 3)
485 def test_lat_stats(self):
487 '1, 2 , 3', # has white space
489 '7,8,9,10.5,11', # too long with float, but float is in unused portion
490 'twelve,13,14', # value as English word
491 '15,16.2,17', # float in used portion
494 mock_socket = mock.MagicMock()
495 prox = ProxSocketHelper(mock_socket)
496 prox.get_data = mock.MagicMock(side_effect=latency_output)
512 result = prox.lat_stats([3, 4, 5, 6, 7], 16)
513 self.assertEqual(mock_socket.sendall.call_count, 5)
514 self.assertEqual(result, expected)
516 def test_get_all_tot_stats_error(self):
517 mock_socket = mock.MagicMock()
518 prox = ProxSocketHelper(mock_socket)
519 prox.get_data = mock.MagicMock(return_value='3,4,5')
520 expected = [0, 0, 0, 0]
521 result = prox.get_all_tot_stats()
522 self.assertEqual(result, expected)
524 def test_get_all_tot_stats(self):
525 mock_socket = mock.MagicMock()
526 prox = ProxSocketHelper(mock_socket)
527 prox.get_data = mock.MagicMock(return_value='3,4,5,6')
528 expected = 3, 4, 5, 6
529 result = prox.get_all_tot_stats()
530 self.assertEqual(result, expected)
533 mock_socket = mock.MagicMock()
534 prox = ProxSocketHelper(mock_socket)
535 prox.get_data = mock.MagicMock(return_value='3,4,5,6')
538 self.assertEqual(result, expected)
540 def test_core_stats(self):
547 mock_socket = mock.MagicMock()
548 prox = ProxSocketHelper(mock_socket)
549 prox.get_data = mock.MagicMock(side_effect=core_stats)
550 expected = 21, 24, 27, 14
551 result = prox.core_stats([3, 4, 5], 16)
552 self.assertEqual(result, expected)
554 def test_port_stats(self):
556 ','.join(str(n) for n in range(3, 15)),
557 ','.join(str(n) for n in range(8, 32, 2)),
558 ','.join(str(n) for n in range(5, 89, 7)),
561 mock_socket = mock.MagicMock()
562 prox = ProxSocketHelper(mock_socket)
563 prox.get_data = mock.MagicMock(side_effect=port_stats)
564 expected = [16, 26, 36, 46, 56, 66, 76, 86, 96, 106, 116, 126]
565 result = prox.port_stats([3, 4, 5])
566 self.assertEqual(result, expected)
568 def test_measure_tot_stats(self):
569 start_tot = 3, 4, 5, 6
570 end_tot = 7, 9, 11, 13
571 delta_tot = 4, 5, 6, 7
574 ','.join(str(n) for n in start_tot),
575 ','.join(str(n) for n in end_tot),
578 mock_socket = mock.MagicMock()
579 prox = ProxSocketHelper(mock_socket)
580 prox.get_data = mock.MagicMock(side_effect=get_data_output)
582 'start_tot': start_tot,
586 with prox.measure_tot_stats() as result:
588 self.assertEqual(result, expected)
590 def test_tot_stats(self):
591 mock_socket = mock.MagicMock()
592 prox = ProxSocketHelper(mock_socket)
593 prox.get_data = mock.MagicMock(return_value='3,4,5,6')
595 result = prox.tot_stats()
596 self.assertEqual(result, expected)
598 def test_tot_ierrors(self):
599 mock_socket = mock.MagicMock()
600 prox = ProxSocketHelper(mock_socket)
601 prox.get_data = mock.MagicMock(return_value='3,4,5,6')
603 result = prox.tot_ierrors()
604 self.assertEqual(result, expected)
606 def test_set_count(self):
607 mock_socket = mock.MagicMock()
608 prox = ProxSocketHelper(mock_socket)
609 prox.set_count(432, [3, 4, 5])
610 self.assertEqual(mock_socket.sendall.call_count, 3)
612 def test_dump_rx(self):
613 mock_socket = mock.MagicMock()
614 prox = ProxSocketHelper(mock_socket)
615 prox.dump_rx(3, 5, 8)
616 self.assertEqual(mock_socket.sendall.call_count, 1)
619 mock_socket = mock.MagicMock()
620 prox = ProxSocketHelper(mock_socket)
622 mock_socket.sendall.assert_called()
624 def test_force_quit(self):
625 mock_socket = mock.MagicMock()
626 prox = ProxSocketHelper(mock_socket)
628 mock_socket.sendall.assert_called()
631 class TestProxDpdkVnfSetupEnvHelper(unittest.TestCase):
634 'short-name': 'ProxVnf',
639 'network': '152.16.100.20',
640 'netmask': '255.255.255.0',
641 'gateway': '152.16.100.20',
645 'network': '152.16.40.20',
646 'netmask': '255.255.255.0',
647 'gateway': '152.16.40.20',
651 'description': 'PROX approximation using DPDK',
652 'name': 'proxvnf-baremetal',
655 'network': '0064:ff9b:0:0:0:0:9810:6414',
657 'gateway': '0064:ff9b:0:0:0:0:9810:6414',
661 'network': '0064:ff9b:0:0:0:0:9810:2814',
663 'gateway': '0064:ff9b:0:0:0:0:9810:2814',
667 'id': 'proxvnf-baremetal',
668 'external-interface': [
670 'virtual-interface': {
671 'dst_mac': '00:00:00:00:00:04',
672 'vpci': '0000:05:00.0',
673 'local_ip': '152.16.100.19',
674 'type': 'PCI-PASSTHROUGH',
675 'vld_id': 'uplink_0',
676 'netmask': '255.255.255.0',
678 'bandwidth': '10 Gbps',
680 'dst_ip': '152.16.100.19',
681 'local_iface_name': 'xe0',
682 'local_mac': '00:00:00:00:00:02',
685 'vnfd-connection-point-ref': 'xe0',
689 'virtual-interface': {
690 'dst_mac': '00:00:00:00:00:03',
691 'vpci': '0000:05:00.1',
692 'local_ip': '152.16.40.19',
693 'type': 'PCI-PASSTHROUGH',
694 'vld_id': 'downlink_0',
696 'netmask': '255.255.255.0',
698 'bandwidth': '10 Gbps',
699 'dst_ip': '152.16.40.20',
700 'local_iface_name': 'xe1',
701 'local_mac': '00:00:00:00:00:01',
704 'vnfd-connection-point-ref': 'xe1',
710 'description': 'PROX approximation using DPDK',
712 'vdu-id': 'proxvnf-baremetal',
725 'id': 'ProxApproxVnf',
730 'vnfd:vnfd-catalog': {
737 def test_global_section(self):
738 setup_helper = ProxDpdkVnfSetupEnvHelper(mock.MagicMock(), mock.MagicMock(),
741 setup_helper._prox_config_data = [('a', [])]
743 with self.assertRaises(KeyError):
744 _ = setup_helper.global_section
748 ('not_name', 'other data'),
749 ('name_not', 'more data'),
750 ('name', 'prox type'),
754 setup_helper._prox_config_data = [
783 result = setup_helper.global_section
784 self.assertEqual(result, global_section[1])
786 def test_find_in_section(self):
787 setup_helper = ProxDpdkVnfSetupEnvHelper(mock.MagicMock(), mock.MagicMock(),
790 setup_helper._prox_config_data = [
792 ('not_name', 'other data'),
793 ('name_not', 'more data'),
794 ('name', 'prox type'),
824 result = setup_helper.find_in_section('section3', 'key3')
825 self.assertEqual(result, expected)
827 expected = 'default value'
828 result = setup_helper.find_in_section('section3', 'key4', 'default value')
829 self.assertEqual(result, expected)
831 with self.assertRaises(KeyError):
832 setup_helper.find_in_section('section4', 'key1')
834 with self.assertRaises(KeyError):
835 setup_helper.find_in_section('section1', 'key1')
837 def test__replace_quoted_with_value(self):
841 result = ProxDpdkVnfSetupEnvHelper._replace_quoted_with_value(input_str, 'cat')
842 self.assertEqual(result, expected)
844 # no quoted substring
845 input_str = 'lion tiger bear'
846 expected = 'lion tiger bear'
847 result = ProxDpdkVnfSetupEnvHelper._replace_quoted_with_value(input_str, 'cat')
848 self.assertEqual(result, expected)
850 # partially quoted substring
851 input_str = 'lion "tiger bear'
852 expected = 'lion "tiger bear'
853 result = ProxDpdkVnfSetupEnvHelper._replace_quoted_with_value(input_str, 'cat')
854 self.assertEqual(result, expected)
856 # one quoted substring
857 input_str = 'lion "tiger" bear'
858 expected = 'lion "cat" bear'
859 result = ProxDpdkVnfSetupEnvHelper._replace_quoted_with_value(input_str, 'cat')
860 self.assertEqual(result, expected)
862 # two quoted substrings
863 input_str = 'lion "tiger" bear "shark" whale'
864 expected = 'lion "cat" bear "shark" whale'
865 result = ProxDpdkVnfSetupEnvHelper._replace_quoted_with_value(input_str, 'cat')
866 self.assertEqual(result, expected)
868 # two quoted substrings, both replaced
869 input_str = 'lion "tiger" bear "shark" whale'
870 expected = 'lion "cat" bear "cat" whale'
871 result = ProxDpdkVnfSetupEnvHelper._replace_quoted_with_value(input_str, 'cat', 2)
872 self.assertEqual(result, expected)
874 def test__get_tx_port(self):
876 input_data = {'section1': []}
878 result = ProxDpdkVnfSetupEnvHelper._get_tx_port('section1', input_data)
879 self.assertEqual(result, expected)
881 # data for other section
890 result = ProxDpdkVnfSetupEnvHelper._get_tx_port('section1', input_data)
891 self.assertEqual(result, expected)
894 input_data['section1'] = section1 = [
895 ('rx port', '4', 'more', 432),
899 result = ProxDpdkVnfSetupEnvHelper._get_tx_port('section1', input_data)
900 self.assertEqual(result, expected)
902 # more data for section,
905 ('tx port', '1', 'and more', 234),
908 result = ProxDpdkVnfSetupEnvHelper._get_tx_port('section1', input_data)
909 self.assertEqual(result, expected)
911 def test_write_prox_config(self):
914 result = ProxDpdkVnfSetupEnvHelper.write_prox_config(input_data)
915 self.assertEqual(result, expected)
923 expected = '[section1]'
924 result = ProxDpdkVnfSetupEnvHelper.write_prox_config(input_data)
925 self.assertEqual(result, expected)
936 ['__name__', 'not this one'],
939 ['key4', 'multi-line\nvalue'],
943 expected = os.linesep.join([
949 'key4=multi-line\n\tvalue',
951 result = ProxDpdkVnfSetupEnvHelper.write_prox_config(input_data)
952 self.assertEqual(result, expected)
954 def test_prox_config_data(self):
955 setup_helper = ProxDpdkVnfSetupEnvHelper(mock.MagicMock(), mock.MagicMock(),
958 setup_helper.config_queue = config_queue = mock.MagicMock()
959 config_queue.get.return_value = expected = [('s', [('a', 3), ('b', 45)])]
961 result = setup_helper.prox_config_data
962 self.assertEqual(result, expected)
964 @mock.patch.object(utils, 'find_relative_file')
965 def test_build_config_file_no_additional_file(self, mock_find_path):
967 'prox_args': {'-c': ""},
969 'prox_config': 'e/f',
970 'prox_generate_parameter': False,
973 mock_find_path.side_effect = ['1', '2']
975 vnfd_helper = mock.MagicMock()
976 ssh_helper = mock.MagicMock()
977 scenario_helper = ScenarioHelper('vnf1')
978 scenario_helper.scenario_cfg = {
985 helper = ProxDpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
986 helper.copy_to_target = mock.MagicMock(return_value='3')
987 helper.generate_prox_config_file = mock.MagicMock(return_value='4')
988 helper.upload_prox_config = mock.MagicMock(return_value='5')
990 self.assertEqual(helper.additional_files, {})
991 self.assertNotEqual(helper._prox_config_data, '4')
992 self.assertNotEqual(helper.remote_path, '5')
993 helper.build_config_file()
994 self.assertEqual(helper.additional_files, {})
995 self.assertEqual(helper._prox_config_data, '4')
996 self.assertEqual(helper.remote_path, '5')
998 @mock.patch.object(utils, 'find_relative_file')
999 def test_build_config_file_additional_file_string(self, mock_find_path):
1001 'prox_args': {'-c': ""},
1003 'prox_config': 'e/f',
1004 'prox_files': 'g/h.i',
1005 'prox_generate_parameter': True,
1008 mock_find_path.side_effect = ['1', '2']
1009 vnfd_helper = mock.MagicMock()
1010 ssh_helper = mock.MagicMock()
1011 scenario_helper = ScenarioHelper('vnf1')
1012 scenario_helper.scenario_cfg = {
1019 vnfd_helper.port_pairs.all_ports = ['xe0', 'xe1', 'xe2', 'xe3']
1020 helper = ProxDpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
1021 helper.copy_to_target = mock.MagicMock(side_effect=['33', '34', '35'])
1022 helper.generate_prox_config_file = mock.MagicMock(return_value='44')
1023 helper.upload_prox_config = mock.MagicMock(return_value='55')
1025 self.assertEqual(helper.additional_files, {})
1026 expected = {'h.i': '33'}
1027 helper.build_config_file()
1028 self.assertDictEqual(helper.additional_files, expected)
1030 @mock.patch.object(utils, 'find_relative_file')
1031 def test_build_config_file_additional_file(self, mock_find_path):
1033 'prox_args': {'-c': ""},
1035 'prox_config': 'e/f',
1043 mock_find_path.side_effect = ['1', '2'] + [str(i) for i in range(len(vnf1['prox_files']))]
1044 vnfd_helper = mock.MagicMock()
1045 ssh_helper = mock.MagicMock()
1046 scenario_helper = ScenarioHelper('vnf1')
1047 scenario_helper.scenario_cfg = {
1054 helper = ProxDpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
1055 helper.copy_to_target = mock.MagicMock(side_effect=['33', '34', '35'])
1056 helper.generate_prox_config_file = mock.MagicMock(return_value='44')
1057 helper.upload_prox_config = mock.MagicMock(return_value='55')
1059 self.assertEqual(helper.additional_files, {})
1060 self.assertNotEqual(helper._prox_config_data, '44')
1061 self.assertNotEqual(helper.remote_path, '55')
1062 expected = {'h.i': '33', 'l': '34', 'm_n': '35'}
1063 helper.build_config_file()
1064 self.assertDictEqual(helper.additional_files, expected)
1065 self.assertEqual(helper._prox_config_data, '44')
1066 self.assertEqual(helper.remote_path, '55')
1068 def test_build_config(self):
1070 'prox_args': {'-f': ""},
1071 'prox_path': '/opt/nsb_bin/prox',
1072 'prox_config': 'configs/gen_l2fwd-2.cfg',
1080 vnfd_helper = mock.Mock()
1081 ssh_helper = mock.Mock()
1082 ssh_helper.join_bin_path.return_value = '/opt/nsb_bin/prox'
1083 scenario_helper = ScenarioHelper('vnf1')
1084 scenario_helper.scenario_cfg = {
1091 expected = ("sudo bash -c 'cd /opt/nsb_bin; /opt/nsb_bin/prox -o cli "
1092 "-f -f /tmp/prox.cfg '")
1094 helper = ProxDpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper,
1096 with mock.patch.object(helper, 'build_config_file') as mock_cfg_file:
1097 helper.remote_path = '/tmp/prox.cfg'
1098 prox_cmd = helper.build_config()
1099 self.assertEqual(prox_cmd, expected)
1100 mock_cfg_file.assert_called_once()
1102 def test__insert_additional_file(self):
1103 vnfd_helper = mock.MagicMock()
1104 ssh_helper = mock.MagicMock()
1105 scenario_helper = mock.MagicMock()
1107 helper = ProxDpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
1108 helper.additional_files = {"ipv4.lua": "/tmp/ipv4.lua"}
1109 res = helper._insert_additional_file('dofile("ipv4.lua")')
1110 self.assertEqual(res, 'dofile("/tmp/ipv4.lua")')
1112 @mock.patch('yardstick.network_services.vnf_generic.vnf.prox_helpers.ConfigParser')
1113 def test_generate_prox_config_file(self, mock_parser_type):
1116 args[-1].extend(sections_data)
1117 return mock.MagicMock()
1121 mock_parser_type.side_effect = init
1123 vnfd_helper = VnfdHelper(self.VNFD0)
1124 ssh_helper = mock.MagicMock()
1125 scenario_helper = mock.MagicMock()
1127 helper = ProxDpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
1128 helper.additional_files = {}
1131 result = helper.generate_prox_config_file('a/b')
1132 self.assertEqual(result, expected)
1134 helper.additional_files = {"ipv4.lua": "/tmp/ipv4.lua"}
1136 helper.remote_prox_file_name = 'remote'
1141 ['dofile("ipv4.lua")', ''],
1157 ['$sut_mac0', '@@dst_mac0'],
1160 ['user_table', 'dofile("ipv4.lua")'],
1161 ['missing_addtional_file', 'dofile("nosuch")'],
1170 ['dofile("/tmp/ipv4.lua")', ''],
1177 ['mac', 'hardware'],
1178 ['dst mac', '00:00:00:00:00:03'],
1186 ['$sut_mac0', '00 00 00 00 00 04'],
1189 ['user_table', 'dofile("/tmp/ipv4.lua")'],
1190 ['missing_addtional_file', 'dofile("nosuch")'],
1194 result = helper.generate_prox_config_file('/c/d/e')
1195 self.assertEqual(result, expected, str(result))
1197 @mock.patch('yardstick.network_services.vnf_generic.vnf.prox_helpers.ConfigParser')
1198 def test_generate_prox_config_file_negative(self, mock_parser_type):
1200 args[-1].update(sections_data)
1201 return mock.MagicMock()
1205 mock_parser_type.side_effect = init
1207 vnfd_helper = mock.MagicMock()
1208 vnfd_helper.interfaces = []
1209 ssh_helper = mock.MagicMock()
1210 scenario_helper = mock.MagicMock()
1212 helper = ProxDpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
1213 helper.additional_files = {}
1214 helper.remote_prox_file_name = 'remote'
1215 vnfd_helper.interfaces = [
1217 'virtual-interface': {
1219 'dst_mac': '00:00:00:de:ad:88',
1223 'virtual-interface': {
1225 'dst_mac': '00:00:00:de:ad:ff',
1229 'virtual-interface': {
1231 'dst_mac': '00:00:00:de:ad:ff',
1245 ['???', 'dofile "here" 23'],
1249 with self.assertRaises(Exception):
1250 helper.generate_prox_config_file('a/b')
1252 def test_put_string_to_file(self):
1253 vnfd_helper = mock.MagicMock()
1254 vnfd_helper.interfaces = []
1255 ssh_helper = mock.MagicMock()
1256 scenario_helper = mock.MagicMock()
1258 helper = ProxDpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
1261 result = helper.put_string_to_file('my long string', 'a/b')
1262 self.assertEqual(result, expected)
1264 def test_copy_to_target(self):
1265 vnfd_helper = mock.MagicMock()
1266 vnfd_helper.interfaces = []
1267 ssh_helper = mock.MagicMock()
1268 scenario_helper = mock.MagicMock()
1270 helper = ProxDpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
1272 result = helper.copy_to_target('a/b', 'c')
1273 self.assertEqual(result, expected)
1275 def test_upload_prox_config(self):
1276 vnfd_helper = mock.MagicMock()
1277 vnfd_helper.interfaces = []
1278 ssh_helper = mock.MagicMock()
1279 scenario_helper = mock.MagicMock()
1281 helper = ProxDpdkVnfSetupEnvHelper(vnfd_helper, ssh_helper, scenario_helper)
1282 helper.write_prox_config = mock.MagicMock(return_value='a long string')
1284 result = helper.upload_prox_config('a', {})
1285 self.assertEqual(result, expected)
1288 class TestProxResourceHelper(unittest.TestCase):
1291 'short-name': 'ProxVnf',
1296 'network': '152.16.100.20',
1297 'netmask': '255.255.255.0',
1298 'gateway': '152.16.100.20',
1302 'network': '152.16.40.20',
1303 'netmask': '255.255.255.0',
1304 'gateway': '152.16.40.20',
1308 'description': 'PROX approximation using DPDK',
1309 'name': 'proxvnf-baremetal',
1312 'network': '0064:ff9b:0:0:0:0:9810:6414',
1314 'gateway': '0064:ff9b:0:0:0:0:9810:6414',
1318 'network': '0064:ff9b:0:0:0:0:9810:2814',
1320 'gateway': '0064:ff9b:0:0:0:0:9810:2814',
1324 'id': 'proxvnf-baremetal',
1325 'external-interface': [
1327 'virtual-interface': {
1328 'dst_mac': '00:00:00:00:00:04',
1329 'vpci': '0000:05:00.0',
1330 'local_ip': '152.16.100.19',
1331 'type': 'PCI-PASSTHROUGH',
1332 'vld_id': 'uplink_0',
1333 'netmask': '255.255.255.0',
1335 'bandwidth': '10 Gbps',
1337 'dst_ip': '152.16.100.19',
1338 'local_iface_name': 'xe0',
1339 'local_mac': '00:00:00:00:00:02',
1342 'vnfd-connection-point-ref': 'xe0',
1346 'virtual-interface': {
1347 'dst_mac': '00:00:00:00:00:03',
1348 'vpci': '0000:05:00.1',
1349 'local_ip': '152.16.40.19',
1350 'type': 'PCI-PASSTHROUGH',
1351 'vld_id': 'downlink_0',
1353 'netmask': '255.255.255.0',
1355 'bandwidth': '10 Gbps',
1356 'dst_ip': '152.16.40.20',
1357 'local_iface_name': 'xe1',
1358 'local_mac': '00:00:00:00:00:01',
1361 'vnfd-connection-point-ref': 'xe1',
1367 'description': 'PROX approximation using DPDK',
1369 'vdu-id': 'proxvnf-baremetal',
1382 'id': 'ProxApproxVnf',
1387 'vnfd:vnfd-catalog': {
1394 def test_find_pci(self):
1400 result = ProxResourceHelper.find_pci('target', input_str_list)
1401 self.assertFalse(result)
1409 result = ProxResourceHelper.find_pci('target', input_str_list)
1410 self.assertTrue(result)
1412 @mock.patch('yardstick.network_services.vnf_generic.vnf.prox_helpers.RETRY_INTERVAL', 0)
1413 @mock.patch('yardstick.network_services.vnf_generic.vnf.prox_helpers.ProxSocketHelper')
1414 def test_sut(self, *args):
1415 helper = ProxResourceHelper(mock.MagicMock())
1416 self.assertIsNone(helper.client)
1418 self.assertIsNotNone(result)
1419 self.assertIs(result, helper.client)
1420 self.assertIs(result, helper.sut)
1422 def test_test_type(self):
1423 setup_helper = mock.MagicMock()
1424 setup_helper.find_in_section.return_value = expected = 'prox type'
1426 helper = ProxResourceHelper(setup_helper)
1428 self.assertIsNone(helper._test_type)
1429 self.assertEqual(helper.test_type, expected)
1430 self.assertEqual(helper._test_type, expected)
1431 self.assertEqual(helper.test_type, expected)
1433 def test_collect_collectd_kpi(self):
1434 helper = ProxResourceHelper(mock.MagicMock())
1435 helper.resource = resource = mock.MagicMock()
1437 resource.check_if_system_agent_running.return_value = 0, '1234'
1438 resource.amqp_collect_nfvi_kpi.return_value = 543
1439 resource.check_if_system_agent_running.return_value = (0, None)
1441 expected = {'core': 543}
1442 result = helper.collect_collectd_kpi()
1443 self.assertDictEqual(result, expected)
1445 def test_collect_kpi(self):
1446 helper = ProxResourceHelper(mock.MagicMock())
1447 helper._queue = queue = mock.MagicMock()
1448 helper._result = {'z': 123}
1449 helper.resource = resource = mock.MagicMock()
1451 resource.check_if_system_agent_running.return_value = 0, '1234'
1452 resource.amqp_collect_nfvi_kpi.return_value = 543
1453 resource.check_if_system_agent_running.return_value = (0, None)
1455 queue.empty.return_value = False
1456 queue.get.return_value = {'a': 789}
1458 expected = {'z': 123, 'a': 789, 'collect_stats': {'core': 543}}
1459 result = helper.collect_kpi()
1460 self.assertDictEqual(result, expected)
1462 @mock.patch('yardstick.network_services.vnf_generic.vnf.prox_helpers.time')
1463 @mock.patch('yardstick.network_services.vnf_generic.vnf.prox_helpers.ProxSocketHelper')
1464 def test__connect(self, mock_socket_helper_type, *args):
1465 client = mock_socket_helper_type()
1466 client.connect.side_effect = chain(repeat(socket.error, 5), [None])
1468 setup_helper = mock.MagicMock()
1469 setup_helper.vnfd_helper.interfaces = []
1471 helper = ProxResourceHelper(setup_helper)
1473 result = helper._connect()
1474 self.assertIs(result, client)
1476 client.connect.side_effect = chain(repeat(socket.error, 65), [None])
1478 with self.assertRaises(Exception):
1481 def test_run_traffic(self):
1482 setup_helper = mock.MagicMock()
1483 helper = ProxResourceHelper(setup_helper)
1484 traffic_profile = mock.MagicMock(**{"done": True})
1485 helper.run_traffic(traffic_profile)
1486 self.assertEqual(helper._terminated.value, 1)
1488 def test__run_traffic_once(self):
1489 setup_helper = mock.MagicMock()
1490 helper = ProxResourceHelper(setup_helper)
1491 traffic_profile = mock.MagicMock(**{"done": True})
1492 helper._run_traffic_once(traffic_profile)
1493 self.assertEqual(helper._terminated.value, 1)
1495 def test_start_collect(self):
1496 setup_helper = mock.MagicMock()
1497 helper = ProxResourceHelper(setup_helper)
1498 helper.resource = resource = mock.MagicMock()
1499 self.assertIsNone(helper.start_collect())
1500 resource.start.assert_called_once()
1502 def test_terminate(self):
1503 setup_helper = mock.MagicMock()
1504 helper = ProxResourceHelper(setup_helper)
1505 with self.assertRaises(NotImplementedError):
1508 def test_up_post(self):
1509 setup_helper = mock.MagicMock()
1510 helper = ProxResourceHelper(setup_helper)
1511 helper.client = expected = mock.MagicMock()
1512 result = helper.up_post()
1513 self.assertEqual(result, expected)
1515 def test_execute(self):
1516 setup_helper = mock.MagicMock()
1517 helper = ProxResourceHelper(setup_helper)
1518 helper.client = mock.MagicMock()
1520 expected = helper.client.my_command()
1521 result = helper.execute('my_command')
1522 self.assertEqual(result, expected)
1524 helper.client = object()
1526 result = helper.execute('my_command')
1527 self.assertIsNone(result)
1530 class TestProxDataHelper(unittest.TestCase):
1532 def test_totals_and_pps(self):
1534 vnfd_helper = mock.MagicMock()
1535 vnfd_helper.port_pairs.all_ports = list(range(4))
1537 sut = mock.MagicMock()
1538 sut.port_stats.return_value = list(range(10))
1540 data_helper = ProxDataHelper(vnfd_helper, sut, pkt_size, 25, None)
1542 self.assertEqual(data_helper.rx_total, 6)
1543 self.assertEqual(data_helper.tx_total, 7)
1544 self.assertEqual(data_helper.pps, 6.25e6)
1546 def test_samples(self):
1547 vnfd_helper = mock.MagicMock()
1548 vnfd_helper.port_pairs.all_ports = list(range(4))
1549 vnfd_helper.ports_iter.return_value = [('xe1', 3), ('xe2', 7)]
1551 sut = mock.MagicMock()
1552 sut.port_stats.return_value = list(range(10))
1554 data_helper = ProxDataHelper(vnfd_helper, sut, None, None, None)
1566 result = data_helper.samples
1567 self.assertDictEqual(result, expected)
1569 def test___enter__(self):
1570 vnfd_helper = mock.MagicMock()
1571 vnfd_helper.port_pairs.all_ports = list(range(4))
1572 vnfd_helper.ports_iter.return_value = [('xe1', 3), ('xe2', 7)]
1574 sut = mock.MagicMock()
1575 sut.port_stats.return_value = list(range(10))
1577 data_helper = ProxDataHelper(vnfd_helper, sut, None, None, 5.4)
1578 data_helper._totals_and_pps = 12, 32, 4.5
1579 data_helper.tsc_hz = 9.8
1580 data_helper.measured_stats = {'delta': TotStatsTuple(6.1, 6.2, 6.3, 6.4)}
1581 data_helper.latency = 7
1583 self.assertIsNone(data_helper.result_tuple)
1585 expected = ProxTestDataTuple(5.4, 9.8, 6.1, 6.2, 6.3, 7, 12, 32, 4.5)
1589 result = data_helper.result_tuple
1590 self.assertEqual(result, expected)
1592 data_helper.make_tuple()
1593 self.assertIs(data_helper.result_tuple, result)
1595 def test___enter___negative(self):
1596 vnfd_helper = mock.MagicMock()
1598 data_helper = ProxDataHelper(vnfd_helper, None, None, None, None)
1600 vnfd_helper.port_pairs.all_ports = []
1601 with self.assertRaises(AssertionError):
1605 vnfd_helper.port_pairs.all_ports = [0, 1, 2]
1606 with self.assertRaises(AssertionError):
1610 def test_measure_tot_stats(self):
1611 vnfd_helper = mock.MagicMock()
1612 vnfd_helper.port_pairs.all_ports = list(range(4))
1614 start = (3, 4, 1, 2)
1617 sut = ProxSocketHelper(mock.MagicMock())
1618 sut.get_all_tot_stats = mock.MagicMock(side_effect=[start, end])
1620 data_helper = ProxDataHelper(vnfd_helper, sut, None, None, 5.4)
1622 self.assertIsNone(data_helper.measured_stats)
1627 'delta': TotStatsTuple(6, 3, 5, 6),
1629 with data_helper.measure_tot_stats():
1632 self.assertEqual(data_helper.measured_stats, expected)
1634 def test_capture_tsc_hz(self):
1635 vnfd_helper = mock.MagicMock()
1636 vnfd_helper.port_pairs.all_ports = list(range(4))
1638 sut = mock.MagicMock()
1639 sut.hz.return_value = '54.6'
1641 data_helper = ProxDataHelper(vnfd_helper, sut, None, None, None)
1643 self.assertIsNone(data_helper.tsc_hz)
1646 data_helper.capture_tsc_hz()
1647 self.assertEqual(data_helper.tsc_hz, expected)
1650 class TestProxProfileHelper(unittest.TestCase):
1652 @mock.patch('yardstick.network_services.vnf_generic.vnf.prox_helpers.utils')
1653 def test_get_cls(self, mock_utils):
1654 mock_type1 = mock.MagicMock()
1655 mock_type1.__prox_profile_type__ = 'another_type'
1656 mock_type2 = mock.MagicMock()
1657 mock_type2.__prox_profile_type__ = 'my_type'
1658 mock_utils.itersubclasses.return_value = [mock_type1, mock_type2]
1660 self.assertEqual(ProxProfileHelper.get_cls('my_type'), mock_type2)
1662 @mock.patch('yardstick.network_services.vnf_generic.vnf.prox_helpers.utils')
1663 def test_get_cls_default(self, mock_utils):
1664 mock_utils.itersubclasses.return_value = []
1665 ProxProfileHelper.get_cls('my_type')
1667 @mock.patch('yardstick.network_services.vnf_generic.vnf.prox_helpers.SocketTopology')
1668 def test_cpu_topology(self, mock_socket_topology):
1669 mock_socket_topology.parse_cpuinfo.return_value = 432
1671 resource_helper = mock.MagicMock()
1672 resource_helper.setup_helper.ssh_helper.execute.return_value = 0, 'output', ''
1674 helper = ProxProfileHelper(resource_helper)
1675 self.assertIsNone(helper._cpu_topology)
1676 result = helper.cpu_topology
1677 self.assertEqual(result, 432)
1678 self.assertIs(result, helper._cpu_topology)
1679 self.assertIs(result, helper.cpu_topology)
1681 def test_test_cores(self):
1682 resource_helper = mock.MagicMock()
1683 resource_helper.setup_helper.prox_config_data = []
1685 helper = ProxProfileHelper(resource_helper)
1686 helper._cpu_topology = []
1689 result = helper.test_cores
1690 self.assertEqual(result, expected)
1692 resource_helper.setup_helper.prox_config_data = [
1713 helper = ProxProfileHelper(resource_helper)
1714 helper._cpu_topology = {
1731 self.assertIsNone(helper._test_cores)
1733 result = helper.test_cores
1734 self.assertEqual(result, expected)
1735 self.assertIs(result, helper._test_cores)
1736 self.assertIs(result, helper.test_cores)
1738 def test_latency_cores(self):
1739 resource_helper = mock.MagicMock()
1740 resource_helper.setup_helper.prox_config_data = []
1742 helper = ProxProfileHelper(resource_helper)
1743 helper._cpu_topology = []
1746 result = helper.latency_cores
1747 self.assertEqual(result, expected)
1749 resource_helper.setup_helper.prox_config_data = [
1770 helper = ProxProfileHelper(resource_helper)
1771 helper._cpu_topology = {
1788 self.assertIsNone(helper._latency_cores)
1790 result = helper.latency_cores
1791 self.assertEqual(result, expected)
1792 self.assertIs(result, helper._latency_cores)
1793 self.assertIs(result, helper.latency_cores)
1795 def test_all_rx_cores(self):
1796 helper = ProxBngProfileHelper(mock.MagicMock())
1797 helper._latency_cores = expected = [3, 4, 6]
1798 helper._test_cores = [5, 2, 1]
1800 result = helper.all_rx_cores
1801 self.assertEqual(result, expected)
1803 def test_get_cores(self):
1804 resource_helper = mock.MagicMock()
1805 resource_helper.setup_helper.prox_config_data = [
1826 helper = ProxProfileHelper(resource_helper)
1827 helper._cpu_topology = {
1845 result = helper.get_cores(helper.PROX_CORE_GEN_MODE)
1846 self.assertEqual(result, expected)
1848 def test_get_latency(self):
1849 resource_helper = mock.MagicMock()
1850 resource_helper.setup_helper.vnfd_helper.interfaces = []
1852 helper = ProxProfileHelper(resource_helper)
1853 helper._latency_cores = []
1856 result = helper.get_latency()
1857 self.assertEqual(result, expected)
1859 helper._latency_cores = [1, 2]
1860 helper.client = mock.MagicMock()
1862 expected = helper.sut.lat_stats()
1863 result = helper.get_latency()
1864 self.assertIs(result, expected)
1866 @mock.patch('yardstick.network_services.vnf_generic.vnf.prox_helpers.time')
1867 def test_traffic_context(self, *args):
1868 setup_helper = mock.MagicMock()
1869 setup_helper.vnfd_helper.interfaces = []
1871 helper = ProxProfileHelper(setup_helper)
1872 helper._cpu_topology = {
1889 setup_helper.prox_config_data = [
1891 ('not_name', 'other data'),
1892 ('name_not', 'more data'),
1893 ('name', helper.__prox_profile_type__),
1917 client = mock.MagicMock()
1918 client.hz.return_value = 2
1919 client.port_stats.return_value = tuple(range(12))
1921 helper.client = client
1922 helper.get_latency = mock.MagicMock(return_value=[3.3, 3.6, 3.8])
1924 helper._test_cores = [3, 4]
1926 with helper.traffic_context(64, 1):
1929 @mock.patch('yardstick.network_services.vnf_generic.vnf.prox_helpers.time')
1930 def test_run_test(self, _):
1931 resource_helper = mock.MagicMock()
1932 resource_helper.step_delta = 0.4
1933 resource_helper.vnfd_helper.port_pairs.all_ports = list(range(2))
1934 resource_helper.sut.port_stats.return_value = list(range(10))
1936 helper = ProxProfileHelper(resource_helper)
1938 helper.run_test(120, 5, 6.5)
1941 class TestProxMplsProfileHelper(unittest.TestCase):
1943 def test_mpls_cores(self):
1944 resource_helper = mock.MagicMock()
1945 resource_helper.setup_helper.prox_config_data = [
1968 helper = ProxMplsProfileHelper(resource_helper)
1969 helper._cpu_topology = {
1986 expected_tagged = [3]
1987 expected_plain = [4]
1988 self.assertIsNone(helper._cores_tuple)
1989 self.assertEqual(helper.tagged_cores, expected_tagged)
1990 self.assertEqual(helper.plain_cores, expected_plain)
1991 self.assertEqual(helper._cores_tuple, (expected_tagged, expected_plain))
1993 def test_traffic_context(self):
1994 setup_helper = mock.MagicMock()
1995 helper = ProxMplsProfileHelper(setup_helper)
1997 with helper.traffic_context(120, 5.4):
2001 class TestProxBngProfileHelper(unittest.TestCase):
2003 def test_bng_cores(self):
2004 resource_helper = mock.MagicMock()
2005 resource_helper.setup_helper.prox_config_data = [
2029 ('name', 'arp_task'),
2038 helper = ProxBngProfileHelper(resource_helper)
2039 helper._cpu_topology = {
2064 expected_arp = [6, 9]
2065 expected_arp_task = [0, 6]
2066 expected_combined = (expected_cpe, expected_inet, expected_arp, expected_arp_task)
2068 self.assertIsNone(helper._cores_tuple)
2069 self.assertEqual(helper.cpe_cores, expected_cpe)
2070 self.assertEqual(helper.inet_cores, expected_inet)
2071 self.assertEqual(helper.arp_cores, expected_arp)
2072 self.assertEqual(helper.arp_task_cores, expected_arp_task)
2073 self.assertEqual(helper._cores_tuple, expected_combined)
2075 @mock.patch('yardstick.network_services.vnf_generic.vnf.prox_helpers.time')
2076 def test_run_test(self, _):
2077 resource_helper = mock.MagicMock()
2078 resource_helper.step_delta = 0.4
2079 resource_helper.vnfd_helper.port_pairs.all_ports = list(range(2))
2080 resource_helper.sut.port_stats.return_value = list(range(10))
2082 helper = ProxBngProfileHelper(resource_helper)
2084 helper.run_test(120, 5, 6.5)
2085 helper.run_test(-1000, 5, 6.5) # negative pkt_size is the only way to make ratio > 1
2088 class TestProxVpeProfileHelper(unittest.TestCase):
2090 def test_vpe_cores(self):
2091 resource_helper = mock.MagicMock()
2092 resource_helper.setup_helper.prox_config_data = [
2115 helper = ProxVpeProfileHelper(resource_helper)
2116 helper._cpu_topology = {
2135 expected_combined = (expected_cpe, expected_inet)
2137 self.assertIsNone(helper._cores_tuple)
2138 self.assertEqual(helper.cpe_cores, expected_cpe)
2139 self.assertEqual(helper.inet_cores, expected_inet)
2140 self.assertEqual(helper._cores_tuple, expected_combined)
2142 def test_vpe_ports(self):
2143 resource_helper = mock.MagicMock()
2144 resource_helper.setup_helper.prox_config_data = [
2153 ('mac', 'hardware'),
2158 ('mac', 'hardware'),
2162 helper = ProxVpeProfileHelper(resource_helper)
2163 helper._port_list = {
2182 expected_combined = (expected_cpe, expected_inet)
2184 self.assertIsNone(helper._ports_tuple)
2185 self.assertEqual(helper.cpe_ports, expected_cpe)
2186 self.assertEqual(helper.inet_ports, expected_inet)
2187 self.assertEqual(helper._ports_tuple, expected_combined)
2189 @mock.patch('yardstick.network_services.vnf_generic.vnf.prox_helpers.time')
2190 def test_run_test(self, _):
2191 resource_helper = mock.MagicMock()
2192 resource_helper.step_delta = 0.4
2193 resource_helper.vnfd_helper.port_pairs.all_ports = list(range(2))
2194 resource_helper.sut.port_stats.return_value = list(range(10))
2196 helper = ProxVpeProfileHelper(resource_helper)
2198 helper.run_test(120, 5, 6.5)
2199 helper.run_test(-1000, 5, 6.5) # negative pkt_size is the only way to make ratio > 1
2202 class TestProxlwAFTRProfileHelper(unittest.TestCase):
2204 def test_lwaftr_cores(self):
2205 resource_helper = mock.MagicMock()
2206 resource_helper.setup_helper.prox_config_data = [
2229 helper = ProxlwAFTRProfileHelper(resource_helper)
2230 helper._cpu_topology = {
2249 expected_combined = (expected_tun, expected_inet)
2251 self.assertIsNone(helper._cores_tuple)
2252 self.assertEqual(helper.tun_cores, expected_tun)
2253 self.assertEqual(helper.inet_cores, expected_inet)
2254 self.assertEqual(helper._cores_tuple, expected_combined)
2256 def test_tun_ports(self):
2257 resource_helper = mock.MagicMock()
2258 resource_helper.setup_helper.prox_config_data = [
2267 ('mac', 'hardware'),
2272 ('mac', 'hardware'),
2276 helper = ProxlwAFTRProfileHelper(resource_helper)
2277 helper._port_list = {
2296 expected_combined = (expected_tun, expected_inet)
2298 self.assertIsNone(helper._ports_tuple)
2299 self.assertEqual(helper.tun_ports, expected_tun)
2300 self.assertEqual(helper.inet_ports, expected_inet)
2301 self.assertEqual(helper._ports_tuple, expected_combined)
2303 @mock.patch('yardstick.network_services.vnf_generic.vnf.prox_helpers.time')
2304 def test_run_test(self, _):
2305 resource_helper = mock.MagicMock()
2306 resource_helper.step_delta = 0.4
2307 resource_helper.vnfd_helper.port_pairs.all_ports = list(range(2))
2308 resource_helper.sut.port_stats.return_value = list(range(10))
2310 helper = ProxlwAFTRProfileHelper(resource_helper)
2312 helper.run_test(120, 5, 6.5)
2313 helper.run_test(-1000, 5, 6.5) # negative pkt_size is the only way to make ratio > 1