1 # Copyright (c) 2019 Viosoft 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 multiprocessing import Process
20 from yardstick.benchmark.contexts import base as ctx_base
21 from yardstick.common import utils
22 from yardstick.network_services.helpers import cpu
23 from yardstick.network_services.nfvi.resource import ResourceProfile
24 from yardstick.network_services.vnf_generic.vnf import ipsec_vnf, vpp_helpers
25 from yardstick.network_services.vnf_generic.vnf.base import VnfdHelper
26 from yardstick.network_services.vnf_generic.vnf.ipsec_vnf import CryptoAlg, \
27 IntegAlg, VipsecApproxSetupEnvHelper
28 from yardstick.tests.unit.network_services.vnf_generic.vnf.test_base import \
31 SSH_HELPER = 'yardstick.network_services.vnf_generic.vnf.sample_vnf.VnfSshHelper'
36 class TestCryptoAlg(unittest.TestCase):
38 def test__init__(self):
39 encr_alg = CryptoAlg.AES_GCM_128
40 self.assertEqual('aes-gcm-128', encr_alg.alg_name)
41 self.assertEqual('AES-GCM', encr_alg.scapy_name)
42 self.assertEqual(20, encr_alg.key_len)
45 class TestIntegAlg(unittest.TestCase):
47 def test__init__(self):
48 auth_alg = IntegAlg.AES_GCM_128
49 self.assertEqual('aes-gcm-128', auth_alg.alg_name)
50 self.assertEqual('AES-GCM', auth_alg.scapy_name)
51 self.assertEqual(20, auth_alg.key_len)
54 @mock.patch("yardstick.network_services.vnf_generic.vnf.sample_vnf.Process")
55 class TestVipsecApproxVnf(unittest.TestCase):
56 VNFD = {'vnfd:vnfd-catalog':
76 "description": "VPP IPsec",
77 "id": "VipsecApproxVnf",
82 "vdu-id": "ipsecvnf-baremetal"
85 "short-name": "IpsecVnf",
88 "description": "VPP Ipsec",
89 "external-interface": [
92 "virtual-interface": {
95 "dst_ip": "192.168.100.1",
96 "dst_mac": "90:e2:ba:7c:30:e8",
98 "local_ip": "192.168.100.2",
99 "local_mac": "90:e2:ba:7c:41:a8",
100 "netmask": "255.255.255.0",
102 "node_name": "vnf__0",
103 "peer_ifname": "xe0",
107 "dst_ip": "192.168.100.2",
108 "dst_mac": "90:e2:ba:7c:41:a8",
110 "local_ip": "192.168.100.1",
111 "local_mac": "90:e2:ba:7c:30:e8",
112 "netmask": "255.255.255.0",
114 "node_name": "tg__0",
115 "peer_ifname": "xe0",
116 "peer_name": "vnf__0",
117 "vld_id": "uplink_0",
118 "vpci": "0000:81:00.0"
120 "peer_name": "tg__0",
121 "vld_id": "uplink_0",
122 "vpci": "0000:ff:06.0"
124 "vnfd-connection-point-ref": "xe0"
128 "virtual-interface": {
132 "dst_mac": "0a:b1:ec:fd:a2:66",
134 "local_ip": "1.1.1.1",
135 "local_mac": "4e:90:85:d3:c5:13",
136 "netmask": "255.255.255.0",
138 "node_name": "vnf__0",
139 "peer_ifname": "xe1",
143 "dst_mac": "4e:90:85:d3:c5:13",
145 "local_ip": "1.1.1.2",
146 "local_mac": "0a:b1:ec:fd:a2:66",
147 "netmask": "255.255.255.0",
149 "node_name": "vnf__1",
150 "peer_ifname": "xe1",
151 "peer_name": "vnf__0",
152 "vld_id": "ciphertext",
153 "vpci": "0000:00:07.0"
155 "peer_name": "vnf__1",
156 "vld_id": "ciphertext",
157 "vpci": "0000:ff:07.0"
159 "vnfd-connection-point-ref": "xe1"
162 "id": "ipsecvnf-baremetal",
163 "name": "ipsecvnf-baremetal",
170 VNFD_ERROR = {'vnfd:vnfd-catalog':
180 "connection-point": [
190 "description": "VPP IPsec",
191 "id": "VipsecApproxVnf",
193 "ip": "10.10.10.101",
196 "vdu-id": "ipsecvnf-baremetal"
199 "short-name": "IpsecVnf",
202 "description": "VPP Ipsec",
203 "external-interface": [
206 "virtual-interface": {
209 "dst_ip": "192.168.100.1",
210 "dst_mac": "90:e2:ba:7c:30:e8",
212 "local_ip": "192.168.100.2",
213 "local_mac": "90:e2:ba:7c:41:a8",
214 "netmask": "255.255.255.0",
216 "node_name": "vnf__0",
217 "peer_ifname": "xe0",
221 "dst_ip": "192.168.100.2",
222 "dst_mac": "90:e2:ba:7c:41:a8",
224 "local_ip": "192.168.100.1",
225 "local_mac": "90:e2:ba:7c:30:e8",
226 "netmask": "255.255.255.0",
228 "node_name": "tg__0",
229 "peer_ifname": "xe0",
230 "peer_name": "vnf__0",
231 "vld_id": "uplink_0",
232 "vpci": "0000:81:00.0"
234 "peer_name": "tg__0",
235 "vld_id": "uplink_1",
236 "vpci": "0000:ff:06.0"
238 "vnfd-connection-point-ref": "xe0"
242 "virtual-interface": {
246 "dst_mac": "0a:b1:ec:fd:a2:66",
248 "local_ip": "1.1.1.1",
249 "local_mac": "4e:90:85:d3:c5:13",
250 "netmask": "255.255.255.0",
252 "node_name": "vnf__1",
253 "peer_ifname": "xe1",
257 "dst_mac": "4e:90:85:d3:c5:13",
259 "local_ip": "1.1.1.2",
260 "local_mac": "0a:b1:ec:fd:a2:66",
261 "netmask": "255.255.255.0",
263 "node_name": "vnf__1",
264 "peer_ifname": "xe1",
265 "peer_name": "vnf__0",
266 "vld_id": "ciphertext",
267 "vpci": "0000:00:07.0"
269 "peer_name": "vnf__1",
270 "vld_id": "ciphertext",
271 "vpci": "0000:ff:07.0"
273 "vnfd-connection-point-ref": "xe1"
276 "id": "ipsecvnf-baremetal",
277 "name": "ipsecvnf-baremetal",
286 "tg__0": "trafficgen.yardstick-5486cc2f",
287 "vnf__0": "vnf0.yardstick-5486cc2f",
288 "vnf__1": "vnf1.yardstick-5486cc2f"
294 "20.0.0.0-20.0.0.100"
297 "10.0.0.0-10.0.0.100"
309 "allowed_drop_rate": "0.0 - 0.005"
323 "crypto_type": "SW_cryptodev",
325 "worker_config": "1C/1T",
334 "crypto_type": "SW_cryptodev",
336 "worker_config": "1C/1T",
341 "crypto_algorithms": "aes-gcm",
349 "yardstick.benchmark.scenarios.networking.vnf_generic.NetworkServiceTestCase",
359 "dispatcher": "influxdb",
360 "file_path": "/tmp/yardstick.out"
364 "dispatcher": "influxdb",
365 "target": "http://127.0.0.1:8000/results",
368 "dispatcher_influxdb": {
369 "db_name": "yardstick",
371 "dispatcher": "influxdb",
373 "target": "http://192.168.100.3:8086",
378 "bin_path": "/opt/nsb_bin",
380 "dispatcher": "influxdb",
381 "trex_client_lib": "/opt/nsb_bin/trex_client/stl",
382 "trex_path": "/opt/nsb_bin/trex/scripts"
388 "task_id": "5486cc2f-d4d3-4feb-b0df-5e0bcd584c9e",
389 "task_path": "samples/vnf_samples/nsut/ipsec",
390 "tc": "tc_baremetal_rfc2544_ipv4_1flow_sw_aesgcm_4cores_64B_trex",
391 "topology": "vpp-tg-topology-2.yaml",
392 "traffic_profile": "../../traffic_profiles/ipv4_throughput_latency_vpp.yaml",
400 "VNF model": "../../vnf_descriptors/tg_vpp_tpl.yaml",
406 "dst_ip": "192.168.100.2",
407 "dst_mac": "90:e2:ba:7c:41:a8",
409 "local_ip": "192.168.100.1",
410 "local_mac": "90:e2:ba:7c:30:e8",
411 "netmask": "255.255.255.0",
413 "node_name": "tg__0",
414 "peer_ifname": "xe0",
418 "dst_ip": "192.168.100.1",
419 "dst_mac": "90:e2:ba:7c:30:e8",
421 "local_ip": "192.168.100.2",
422 "local_mac": "90:e2:ba:7c:41:a8",
423 "netmask": "255.255.255.0",
425 "node_name": "vnf__0",
426 "peer_ifname": "xe0",
427 "peer_name": "tg__0",
428 "vld_id": "uplink_0",
429 "vpci": "0000:00:06.0"
431 "peer_name": "vnf__0",
432 "vld_id": "uplink_0",
433 "vpci": "0000:81:00.0"
438 "dst_ip": "192.168.101.2",
439 "dst_mac": "90:e2:ba:7c:41:a9",
441 "local_ip": "192.168.101.1",
442 "local_mac": "90:e2:ba:7c:30:e9",
443 "netmask": "255.255.255.0",
445 "node_name": "tg__0",
446 "peer_ifname": "xe0",
450 "dst_ip": "192.168.101.1",
451 "dst_mac": "90:e2:ba:7c:30:e9",
453 "local_ip": "192.168.101.2",
454 "local_mac": "90:e2:ba:7c:41:a9",
455 "netmask": "255.255.255.0",
457 "node_name": "vnf__1",
458 "peer_ifname": "xe1",
459 "peer_name": "tg__0",
460 "vld_id": "downlink_0",
461 "vpci": "0000:00:06.0"
463 "peer_name": "vnf__1",
464 "vld_id": "downlink_0",
465 "vpci": "0000:81:00.1"
469 "member-vnf-index": "1",
470 "name": "trafficgen.yardstick-5486cc2f",
473 "role": "TrafficGen",
476 "vnfd-id-ref": "tg__0"
479 "VNF model": "../../vnf_descriptors/vpp_vnfd.yaml",
485 "dst_ip": "192.168.100.1",
486 "dst_mac": "90:e2:ba:7c:30:e8",
488 "local_ip": "192.168.100.2",
489 "local_mac": "90:e2:ba:7c:41:a8",
490 "netmask": "255.255.255.0",
492 "node_name": "vnf__0",
493 "peer_ifname": "xe0",
497 "dst_ip": "192.168.100.2",
498 "dst_mac": "90:e2:ba:7c:41:a8",
500 "local_ip": "192.168.100.1",
501 "local_mac": "90:e2:ba:7c:30:e8",
502 "netmask": "255.255.255.0",
504 "node_name": "tg__0",
505 "peer_ifname": "xe0",
506 "peer_name": "vnf__0",
507 "vld_id": "uplink_0",
508 "vpci": "0000:81:00.0"
510 "peer_name": "tg__0",
511 "vld_id": "uplink_0",
512 "vpci": "0000:00:06.0"
518 "dst_mac": "0a:b1:ec:fd:a2:66",
520 "local_ip": "1.1.1.1",
521 "local_mac": "4e:90:85:d3:c5:13",
522 "netmask": "255.255.255.0",
524 "node_name": "vnf__0",
525 "peer_ifname": "xe1",
530 "dst_mac": "4e:90:85:d3:c5:13",
532 "local_ip": "1.1.1.2",
533 "local_mac": "0a:b1:ec:fd:a2:66",
534 "netmask": "255.255.255.0",
536 "node_name": "vnf__1",
537 "peer_ifname": "xe1",
538 "peer_name": "vnf__0",
539 "vld_id": "ciphertext",
540 "vpci": "0000:00:07.0"
542 "peer_name": "vnf__1",
543 "vld_id": "ciphertext",
544 "vpci": "0000:00:07.0"
547 "ip": "10.10.10.101",
548 "member-vnf-index": "2",
549 "name": "vnf0.yardstick-5486cc2f",
552 "role": "VirtualNetworkFunction",
555 "vnfd-id-ref": "vnf__0"
558 "VNF model": "../../vnf_descriptors/vpp_vnfd.yaml",
564 "dst_ip": "192.168.101.1",
565 "dst_mac": "90:e2:ba:7c:30:e9",
567 "local_ip": "192.168.101.2",
568 "local_mac": "90:e2:ba:7c:41:a9",
569 "netmask": "255.255.255.0",
571 "node_name": "vnf__1",
572 "peer_ifname": "xe1",
576 "dst_ip": "192.168.101.2",
577 "dst_mac": "90:e2:ba:7c:41:a9",
579 "local_ip": "192.168.101.1",
580 "local_mac": "90:e2:ba:7c:30:e9",
581 "netmask": "255.255.255.0",
583 "node_name": "tg__0",
584 "peer_ifname": "xe0",
585 "peer_name": "vnf__1",
586 "vld_id": "downlink_0",
587 "vpci": "0000:81:00.1"
589 "peer_name": "tg__0",
590 "vld_id": "downlink_0",
591 "vpci": "0000:00:06.0"
597 "dst_mac": "4e:90:85:d3:c5:13",
599 "local_ip": "1.1.1.2",
600 "local_mac": "0a:b1:ec:fd:a2:66",
601 "netmask": "255.255.255.0",
603 "node_name": "vnf__1",
604 "peer_ifname": "xe1",
609 "dst_mac": "0a:b1:ec:fd:a2:66",
611 "local_ip": "1.1.1.1",
612 "local_mac": "4e:90:85:d3:c5:13",
613 "netmask": "255.255.255.0",
615 "node_name": "vnf__0",
616 "peer_ifname": "xe1",
617 "peer_name": "vnf__1",
618 "vld_id": "ciphertext",
619 "vpci": "0000:00:07.0"
621 "peer_name": "vnf__0",
622 "vld_id": "ciphertext",
623 "vpci": "0000:00:07.0"
626 "ip": "10.10.10.102",
627 "member-vnf-index": "3",
628 "name": "vnf1.yardstick-5486cc2f",
631 "role": "VirtualNetworkFunction",
634 "vnfd-id-ref": "vnf__1"
639 def test___init__(self, *args):
640 vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
641 vipsec_vnf = ipsec_vnf.VipsecApproxVnf(NAME, vnfd)
642 self.assertIsNone(vipsec_vnf._vnf_process)
644 @mock.patch(SSH_HELPER)
645 def test__run(self, ssh, *args):
648 vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
649 vipsec_vnf = ipsec_vnf.VipsecApproxVnf(NAME, vnfd)
650 vipsec_vnf._build_config = mock.MagicMock()
651 vipsec_vnf.setup_helper.kill_vnf = mock.MagicMock()
652 vipsec_vnf.setup_helper.create_ipsec_tunnels = mock.MagicMock()
653 vipsec_vnf.queue_wrapper = mock.MagicMock()
654 vipsec_vnf.scenario_helper.scenario_cfg = self.scenario_cfg
655 vipsec_vnf.vnf_cfg = {'lb_config': 'SW',
657 'worker_config': '1C/1T',
659 vipsec_vnf.all_options = {'traffic_type': '4',
660 'topology': 'nsb_test_case.yaml'}
662 # vipsec_vnf.setup_helper.ssh_helper.execute.assert_called_once()
664 @mock.patch(SSH_HELPER)
665 def test_wait_for_instantiate(self, ssh, *args):
668 mock_process = mock.Mock(autospec=Process)
669 mock_process.is_alive.return_value = True
670 mock_process.exitcode = 432
672 vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
673 vipsec_vnf = ipsec_vnf.VipsecApproxVnf(NAME, vnfd)
674 vipsec_vnf.resource_helper.resource = mock.MagicMock()
675 vipsec_vnf.setup_helper = mock.MagicMock()
676 vipsec_vnf.setup_helper.check_status.return_value = True
677 vipsec_vnf._vnf_process = mock_process
678 vipsec_vnf.WAIT_TIME = 0
679 self.assertEqual(vipsec_vnf.wait_for_instantiate(), 432)
681 @mock.patch(SSH_HELPER)
682 def test_wait_for_instantiate_crash(self, ssh, *args):
685 mock_process = mock.Mock(autospec=Process)
686 mock_process.is_alive.return_value = False
687 mock_process.exitcode = 432
689 vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
690 vipsec_vnf = ipsec_vnf.VipsecApproxVnf(NAME, vnfd)
691 vipsec_vnf.resource_helper.resource = mock.MagicMock()
692 vipsec_vnf.setup_helper = mock.MagicMock()
693 vipsec_vnf.setup_helper.check_status.return_value = False
694 vipsec_vnf._vnf_process = mock_process
695 vipsec_vnf.WAIT_TIME = 0
696 vipsec_vnf.WAIT_TIME_FOR_SCRIPT = 0
698 with self.assertRaises(RuntimeError) as raised:
699 vipsec_vnf.wait_for_instantiate()
701 self.assertIn('VNF process died', str(raised.exception))
703 @mock.patch.object(ctx_base.Context, 'get_physical_node_from_server',
704 return_value='mock_node')
705 @mock.patch.object(ipsec_vnf.VipsecApproxSetupEnvHelper,
706 'get_vpp_statistics',
707 return_value={'packets_in': 0, 'packets_fwd': 0,
708 'packets_dropped': 0})
709 @mock.patch(SSH_HELPER)
710 def test_collect_kpi(self, ssh, *args):
713 vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
714 vipsec_vnf = ipsec_vnf.VipsecApproxVnf(NAME, vnfd)
715 vipsec_vnf.scenario_helper.scenario_cfg = {
716 'nodes': {vipsec_vnf.name: "mock"}
719 'collect_stats': {'packets_in': 0, 'packets_fwd': 0,
720 'packets_dropped': 0},
721 'physical_node': 'mock_node'
723 self.assertEqual(result, vipsec_vnf.collect_kpi())
725 @mock.patch.object(utils, 'find_relative_file')
727 "yardstick.network_services.vnf_generic.vnf.sample_vnf.Context")
728 @mock.patch(SSH_HELPER)
729 def test_instantiate(self, ssh, *args):
732 vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
733 vipsec_vnf = ipsec_vnf.VipsecApproxVnf(NAME, vnfd)
734 vipsec_vnf.deploy_helper = mock.MagicMock()
735 vipsec_vnf.resource_helper = mock.MagicMock()
736 vipsec_vnf._build_config = mock.MagicMock()
737 vipsec_vnf.WAIT_TIME = 0
738 self.scenario_cfg.update({"nodes": {"vnf__1": ""}})
739 self.assertIsNone(vipsec_vnf.instantiate(self.scenario_cfg,
742 @mock.patch.object(ipsec_vnf.VipsecApproxSetupEnvHelper, 'kill_vnf',
744 @mock.patch("yardstick.network_services.vnf_generic.vnf.sample_vnf.time")
745 @mock.patch(SSH_HELPER)
746 def test_terminate(self, ssh, *args):
749 vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
750 vipsec_vnf = ipsec_vnf.VipsecApproxVnf(NAME, vnfd)
751 vipsec_vnf._vnf_process = mock.MagicMock()
752 vipsec_vnf._vnf_process.terminate = mock.Mock()
753 self.assertIsNone(vipsec_vnf.terminate())
756 class TestVipsecApproxSetupEnvHelper(unittest.TestCase):
761 "20.0.0.0-20.0.0.100"
764 "10.0.0.0-10.0.0.100"
776 "allowed_drop_rate": "0.0 - 0.005"
790 "crypto_type": "SW_cryptodev",
792 "worker_config": "1C/1T",
801 "crypto_type": "SW_cryptodev",
803 "worker_config": "1C/1T",
808 "crypto_algorithms": "aes-gcm",
813 ALL_OPTIONS_CBC_ALGORITHMS = {
817 "20.0.0.0-20.0.0.100"
820 "10.0.0.0-10.0.0.100"
832 "allowed_drop_rate": "0.0 - 0.005"
846 "crypto_type": "SW_cryptodev",
848 "worker_config": "1C/1T",
857 "crypto_type": "SW_cryptodev",
859 "worker_config": "1C/1T",
864 "crypto_algorithms": "cbc-sha1",
869 ALL_OPTIONS_ERROR = {
873 "20.0.0.0-20.0.0.100"
876 "10.0.0.0-10.0.0.100"
888 "allowed_drop_rate": "0.0 - 0.005"
902 "crypto_type": "SW_cryptodev",
904 "worker_config": "1C/1T",
913 "crypto_type": "SW_cryptodev",
915 "worker_config": "1C/1T",
920 "crypto_algorithms": "aes-gcm",
930 "crypto_type": "SW_cryptodev",
932 "worker_config": "1C/1T",
942 "crypto_type": "HW_cryptodev",
944 "worker_config": "1C/1T",
949 CPU_LAYOUT = {'cpuinfo': [[0, 0, 0, 0, 0, 0, 0, 0],
950 [1, 0, 0, 0, 0, 1, 1, 0],
951 [2, 1, 0, 0, 0, 2, 2, 1],
952 [3, 1, 0, 0, 0, 3, 3, 1],
953 [4, 2, 0, 0, 0, 4, 4, 2],
954 [5, 2, 0, 0, 0, 5, 5, 2],
955 [6, 3, 0, 0, 0, 6, 6, 3],
956 [7, 3, 0, 0, 0, 7, 7, 3],
957 [8, 4, 0, 0, 0, 8, 8, 4],
958 [9, 5, 0, 1, 0, 9, 9, 4],
959 [10, 6, 0, 1, 0, 10, 10, 5],
960 [11, 6, 0, 1, 0, 11, 11, 5],
961 [12, 7, 0, 1, 0, 12, 12, 6],
962 [13, 7, 0, 1, 0, 13, 13, 6],
963 [14, 8, 0, 1, 0, 14, 14, 7],
964 [15, 8, 0, 1, 0, 15, 15, 7],
965 [16, 9, 0, 1, 0, 16, 16, 8],
966 [17, 9, 0, 1, 0, 17, 17, 8]]}
967 CPU_SMT = {'cpuinfo': [[0, 0, 0, 0, 0, 0, 0, 0],
968 [1, 0, 0, 0, 0, 1, 1, 0],
969 [2, 1, 0, 0, 0, 2, 2, 1],
970 [3, 1, 0, 0, 0, 3, 3, 1],
971 [4, 2, 0, 0, 0, 4, 4, 2],
972 [5, 2, 0, 0, 0, 5, 5, 2],
973 [6, 3, 0, 0, 0, 6, 6, 3],
974 [7, 3, 0, 0, 0, 7, 7, 3],
975 [8, 4, 0, 0, 0, 8, 8, 4],
976 [9, 5, 0, 1, 0, 0, 0, 0],
977 [10, 6, 0, 1, 0, 1, 1, 0],
978 [11, 6, 0, 1, 0, 2, 2, 1],
979 [12, 7, 0, 1, 0, 3, 3, 1],
980 [13, 7, 0, 1, 0, 4, 4, 2],
981 [14, 8, 0, 1, 0, 5, 5, 2],
982 [15, 8, 0, 1, 0, 6, 6, 3],
983 [16, 9, 0, 1, 0, 7, 7, 3],
984 [17, 9, 0, 1, 0, 8, 8, 4]]}
986 VPP_INTERFACES_DUMP = [
989 "sup_sw_if_index": 0,
990 "l2_address_length": 0,
991 "l2_address": [0, 0, 0, 0, 0, 0, 0, 0],
992 "interface_name": "local0",
1000 "sub_number_of_tags": 0,
1001 "sub_outer_vlan_id": 0,
1002 "sub_inner_vlan_id": 0,
1003 "sub_exact_match": 0,
1005 "sub_outer_vlan_id_any": 0,
1006 "sub_inner_vlan_id_any": 0,
1008 "vtr_push_dot1q": 0,
1014 "sup_sw_if_index": 1,
1015 "l2_address_length": 6,
1016 "l2_address": [144, 226, 186, 124, 65, 168, 0, 0],
1017 "interface_name": "TenGigabitEthernetff/6/0",
1025 "sub_number_of_tags": 0,
1026 "sub_outer_vlan_id": 0,
1027 "sub_inner_vlan_id": 0,
1028 "sub_exact_match": 0,
1030 "sub_outer_vlan_id_any": 0,
1031 "sub_inner_vlan_id_any": 0,
1033 "vtr_push_dot1q": 0,
1039 "sup_sw_if_index": 2,
1040 "l2_address_length": 6,
1041 "l2_address": [78, 144, 133, 211, 197, 19, 0, 0],
1042 "interface_name": "VirtualFunctionEthernetff/7/0",
1050 "sub_number_of_tags": 0,
1051 "sub_outer_vlan_id": 0,
1052 "sub_inner_vlan_id": 0,
1053 "sub_exact_match": 0,
1055 "sub_outer_vlan_id_any": 0,
1056 "sub_inner_vlan_id_any": 0,
1058 "vtr_push_dot1q": 0,
1064 VPP_INTERFACES_STATUS = \
1065 ' Name Idx State MTU (L3/IP4/IP6/MPLS)' \
1066 'Counter Count \n' \
1067 'TenGigabitEthernetff/6/0 1 up 9000/0/0/0 \n' \
1068 'VirtualFunctionEthernetff/7/0 2 up 9000/0/0/0 \n' \
1069 'ipsec0 2 up 9000/0/0/0 \n' \
1070 'local0 0 down 0/0/0/0 '
1072 VPP_INTERFACES_STATUS_FALSE = \
1073 ' Name Idx State MTU (L3/IP4/IP6/MPLS)' \
1074 'Counter Count \n' \
1075 'TenGigabitEthernetff/6/0 1 down 9000/0/0/0 \n' \
1076 'VirtualFunctionEthernetff/7/0 2 down 9000/0/0/0 \n' \
1077 'ipsec0 2 down 9000/0/0/0 \n' \
1078 'local0 0 down 0/0/0/0 '
1080 def test__get_crypto_type(self):
1081 vnfd_helper = VnfdHelper(
1082 TestVipsecApproxVnf.VNFD['vnfd:vnfd-catalog']['vnfd'][0])
1083 ssh_helper = mock.Mock()
1084 scenario_helper = mock.Mock()
1085 scenario_helper.options = self.OPTIONS
1087 ipsec_approx_setup_helper = VipsecApproxSetupEnvHelper(vnfd_helper,
1090 self.assertEqual('SW_cryptodev',
1091 ipsec_approx_setup_helper._get_crypto_type())
1093 def test__get_crypto_algorithms(self):
1094 vnfd_helper = VnfdHelper(
1095 TestVipsecApproxVnf.VNFD['vnfd:vnfd-catalog']['vnfd'][0])
1096 ssh_helper = mock.Mock()
1097 scenario_helper = mock.Mock()
1098 scenario_helper.all_options = self.ALL_OPTIONS
1100 ipsec_approx_setup_helper = VipsecApproxSetupEnvHelper(vnfd_helper,
1103 self.assertEqual('aes-gcm',
1104 ipsec_approx_setup_helper._get_crypto_algorithms())
1106 def test__get_n_tunnels(self):
1107 vnfd_helper = VnfdHelper(
1108 TestVipsecApproxVnf.VNFD['vnfd:vnfd-catalog']['vnfd'][0])
1109 ssh_helper = mock.Mock()
1110 scenario_helper = mock.Mock()
1111 scenario_helper.all_options = self.ALL_OPTIONS
1113 ipsec_approx_setup_helper = VipsecApproxSetupEnvHelper(vnfd_helper,
1116 self.assertEqual(1, ipsec_approx_setup_helper._get_n_tunnels())
1118 def test__get_n_connections(self):
1119 vnfd_helper = VnfdHelper(
1120 TestVipsecApproxVnf.VNFD['vnfd:vnfd-catalog']['vnfd'][0])
1121 ssh_helper = mock.Mock()
1122 scenario_helper = mock.Mock()
1123 scenario_helper.all_options = self.ALL_OPTIONS
1125 ipsec_approx_setup_helper = VipsecApproxSetupEnvHelper(vnfd_helper,
1128 self.assertEqual(1, ipsec_approx_setup_helper._get_n_connections())
1130 def test__get_n_connections_error(self):
1131 vnfd_helper = VnfdHelper(
1132 TestVipsecApproxVnf.VNFD['vnfd:vnfd-catalog']['vnfd'][0])
1133 ssh_helper = mock.Mock()
1134 scenario_helper = mock.Mock()
1135 scenario_helper.all_options = self.ALL_OPTIONS_ERROR
1137 ipsec_approx_setup_helper = VipsecApproxSetupEnvHelper(vnfd_helper,
1140 with self.assertRaises(KeyError) as raised:
1141 ipsec_approx_setup_helper._get_n_connections()
1143 'Missing flow definition in scenario section of the task definition file',
1144 str(raised.exception))
1146 def test__get_flow_src_start_ip(self):
1147 vnfd_helper = VnfdHelper(
1148 TestVipsecApproxVnf.VNFD['vnfd:vnfd-catalog']['vnfd'][0])
1149 ssh_helper = mock.Mock()
1150 scenario_helper = mock.Mock()
1151 scenario_helper.all_options = self.ALL_OPTIONS
1153 ipsec_approx_setup_helper = VipsecApproxSetupEnvHelper(vnfd_helper,
1156 self.assertEqual('10.0.0.0',
1157 ipsec_approx_setup_helper._get_flow_src_start_ip())
1159 def test__get_flow_src_start_ip_vnf1(self):
1160 vnfd_helper = VnfdHelper(
1161 TestVipsecApproxVnf.VNFD_ERROR['vnfd:vnfd-catalog']['vnfd'][0])
1162 ssh_helper = mock.Mock()
1163 scenario_helper = mock.Mock()
1164 scenario_helper.all_options = self.ALL_OPTIONS
1166 ipsec_approx_setup_helper = VipsecApproxSetupEnvHelper(vnfd_helper,
1169 self.assertEqual('20.0.0.0',
1170 ipsec_approx_setup_helper._get_flow_src_start_ip())
1172 def test__get_flow_src_start_ip_error(self):
1173 vnfd_helper = VnfdHelper(
1174 TestVipsecApproxVnf.VNFD['vnfd:vnfd-catalog']['vnfd'][0])
1175 ssh_helper = mock.Mock()
1176 scenario_helper = mock.Mock()
1177 scenario_helper.all_options = self.ALL_OPTIONS_ERROR
1179 ipsec_approx_setup_helper = VipsecApproxSetupEnvHelper(vnfd_helper,
1182 with self.assertRaises(KeyError) as raised:
1183 ipsec_approx_setup_helper._get_flow_src_start_ip()
1185 'Missing flow definition in scenario section of the task definition file',
1186 str(raised.exception))
1188 def test__get_flow_dst_start_ip(self):
1189 vnfd_helper = VnfdHelper(
1190 TestVipsecApproxVnf.VNFD['vnfd:vnfd-catalog']['vnfd'][0])
1191 ssh_helper = mock.Mock()
1192 scenario_helper = mock.Mock()
1193 scenario_helper.all_options = self.ALL_OPTIONS
1195 ipsec_approx_setup_helper = VipsecApproxSetupEnvHelper(vnfd_helper,
1198 self.assertEqual('20.0.0.0',
1199 ipsec_approx_setup_helper._get_flow_dst_start_ip())
1201 def test__get_flow_dst_start_ip_vnf1(self):
1202 vnfd_helper = VnfdHelper(
1203 TestVipsecApproxVnf.VNFD_ERROR['vnfd:vnfd-catalog']['vnfd'][0])
1204 ssh_helper = mock.Mock()
1205 scenario_helper = mock.Mock()
1206 scenario_helper.all_options = self.ALL_OPTIONS
1208 ipsec_approx_setup_helper = VipsecApproxSetupEnvHelper(vnfd_helper,
1211 self.assertEqual('10.0.0.0',
1212 ipsec_approx_setup_helper._get_flow_dst_start_ip())
1214 def test__get_flow_dst_start_ip_error(self):
1215 vnfd_helper = VnfdHelper(
1216 TestVipsecApproxVnf.VNFD['vnfd:vnfd-catalog']['vnfd'][0])
1217 ssh_helper = mock.Mock()
1218 scenario_helper = mock.Mock()
1219 scenario_helper.all_options = self.ALL_OPTIONS_ERROR
1221 ipsec_approx_setup_helper = VipsecApproxSetupEnvHelper(vnfd_helper,
1224 with self.assertRaises(KeyError) as raised:
1225 ipsec_approx_setup_helper._get_flow_dst_start_ip()
1227 'Missing flow definition in scenario section of the task definition file',
1228 str(raised.exception))
1230 def test_build_config(self):
1231 vnfd_helper = VnfdHelper(
1232 TestVipsecApproxVnf.VNFD['vnfd:vnfd-catalog']['vnfd'][0])
1233 ssh_helper = mock.Mock()
1234 ssh_helper.execute.return_value = 0, '0', ''
1235 scenario_helper = mock.Mock()
1236 scenario_helper.options = self.OPTIONS
1237 scenario_helper.all_options = self.ALL_OPTIONS
1239 ipsec_approx_setup_helper = VipsecApproxSetupEnvHelper(vnfd_helper,
1243 with mock.patch.object(cpu.CpuSysCores, 'get_cpu_layout') as \
1244 mock_get_cpu_layout, \
1245 mock.patch.object(ipsec_approx_setup_helper,
1246 'execute_script_json_out') as \
1247 mock_execute_script_json_out:
1248 mock_get_cpu_layout.return_value = self.CPU_LAYOUT
1249 mock_execute_script_json_out.return_value = str(
1250 self.VPP_INTERFACES_DUMP).replace("\'", "\"")
1251 ipsec_approx_setup_helper.sys_cores = cpu.CpuSysCores(ssh_helper)
1252 ipsec_approx_setup_helper.sys_cores.cpuinfo = self.CPU_LAYOUT
1253 ipsec_approx_setup_helper._update_vnfd_helper(
1254 ipsec_approx_setup_helper.sys_cores.get_cpu_layout())
1255 ipsec_approx_setup_helper.update_vpp_interface_data()
1256 ipsec_approx_setup_helper.iface_update_numa()
1257 self.assertIsNone(ipsec_approx_setup_helper.build_config())
1259 ipsec_approx_setup_helper.get_value_by_interface_key(
1260 'xe0', 'numa_node'))
1261 self.assertEqual('TenGigabitEthernetff/6/0',
1262 ipsec_approx_setup_helper.get_value_by_interface_key(
1265 ipsec_approx_setup_helper.get_value_by_interface_key(
1266 'xe0', 'vpp_sw_index'))
1268 ipsec_approx_setup_helper.get_value_by_interface_key(
1269 'xe1', 'numa_node'))
1270 self.assertEqual('VirtualFunctionEthernetff/7/0',
1271 ipsec_approx_setup_helper.get_value_by_interface_key(
1274 ipsec_approx_setup_helper.get_value_by_interface_key(
1275 'xe1', 'vpp_sw_index'))
1276 self.assertGreaterEqual(ssh_helper.execute.call_count, 4)
1278 def test_build_config_cbc_algorithms(self):
1279 vnfd_helper = VnfdHelper(
1280 TestVipsecApproxVnf.VNFD['vnfd:vnfd-catalog']['vnfd'][0])
1281 ssh_helper = mock.Mock()
1282 ssh_helper.execute.return_value = 0, '0', ''
1283 scenario_helper = mock.Mock()
1284 scenario_helper.options = self.OPTIONS
1285 scenario_helper.all_options = self.ALL_OPTIONS_CBC_ALGORITHMS
1287 ipsec_approx_setup_helper = VipsecApproxSetupEnvHelper(vnfd_helper,
1291 with mock.patch.object(cpu.CpuSysCores, 'get_cpu_layout') as \
1292 mock_get_cpu_layout, \
1293 mock.patch.object(ipsec_approx_setup_helper,
1294 'execute_script_json_out') as \
1295 mock_execute_script_json_out:
1296 mock_get_cpu_layout.return_value = self.CPU_LAYOUT
1297 mock_execute_script_json_out.return_value = str(
1298 self.VPP_INTERFACES_DUMP).replace("\'", "\"")
1299 ipsec_approx_setup_helper.sys_cores = cpu.CpuSysCores(ssh_helper)
1300 ipsec_approx_setup_helper.sys_cores.cpuinfo = self.CPU_LAYOUT
1301 ipsec_approx_setup_helper._update_vnfd_helper(
1302 ipsec_approx_setup_helper.sys_cores.get_cpu_layout())
1303 ipsec_approx_setup_helper.update_vpp_interface_data()
1304 ipsec_approx_setup_helper.iface_update_numa()
1305 self.assertIsNone(ipsec_approx_setup_helper.build_config())
1307 ipsec_approx_setup_helper.get_value_by_interface_key(
1308 'xe0', 'numa_node'))
1309 self.assertEqual('TenGigabitEthernetff/6/0',
1310 ipsec_approx_setup_helper.get_value_by_interface_key(
1313 ipsec_approx_setup_helper.get_value_by_interface_key(
1314 'xe0', 'vpp_sw_index'))
1316 ipsec_approx_setup_helper.get_value_by_interface_key(
1317 'xe1', 'numa_node'))
1318 self.assertEqual('VirtualFunctionEthernetff/7/0',
1319 ipsec_approx_setup_helper.get_value_by_interface_key(
1322 ipsec_approx_setup_helper.get_value_by_interface_key(
1323 'xe1', 'vpp_sw_index'))
1324 self.assertGreaterEqual(ssh_helper.execute.call_count, 4)
1326 @mock.patch.object(utils, 'setup_hugepages')
1327 def test_setup_vnf_environment(self, *args):
1328 vnfd_helper = VnfdHelper(
1329 TestVipsecApproxVnf.VNFD['vnfd:vnfd-catalog']['vnfd'][0])
1330 ssh_helper = mock.Mock()
1331 ssh_helper.execute.return_value = 0, '0', ''
1332 scenario_helper = mock.Mock()
1333 scenario_helper.nodes = [None, None]
1334 scenario_helper.options = self.OPTIONS
1335 scenario_helper.all_options = self.ALL_OPTIONS
1337 ipsec_approx_setup_helper = VipsecApproxSetupEnvHelper(vnfd_helper,
1340 with mock.patch.object(cpu.CpuSysCores, 'get_cpu_layout') as \
1341 mock_get_cpu_layout, \
1342 mock.patch.object(ipsec_approx_setup_helper,
1343 'execute_script_json_out') as \
1344 mock_execute_script_json_out:
1345 mock_get_cpu_layout.return_value = self.CPU_LAYOUT
1346 mock_execute_script_json_out.return_value = str(
1347 self.VPP_INTERFACES_DUMP).replace("\'", "\"")
1348 self.assertIsInstance(
1349 ipsec_approx_setup_helper.setup_vnf_environment(),
1352 ipsec_approx_setup_helper.get_value_by_interface_key(
1353 'xe0', 'numa_node'))
1354 self.assertEqual('TenGigabitEthernetff/6/0',
1355 ipsec_approx_setup_helper.get_value_by_interface_key(
1358 ipsec_approx_setup_helper.get_value_by_interface_key(
1359 'xe0', 'vpp_sw_index'))
1361 ipsec_approx_setup_helper.get_value_by_interface_key(
1362 'xe1', 'numa_node'))
1363 self.assertEqual('VirtualFunctionEthernetff/7/0',
1364 ipsec_approx_setup_helper.get_value_by_interface_key(
1367 ipsec_approx_setup_helper.get_value_by_interface_key(
1368 'xe1', 'vpp_sw_index'))
1369 self.assertGreaterEqual(ssh_helper.execute.call_count, 4)
1371 @mock.patch.object(utils, 'setup_hugepages')
1372 def test_setup_vnf_environment_hw(self, *args):
1373 vnfd_helper = VnfdHelper(
1374 TestVipsecApproxVnf.VNFD['vnfd:vnfd-catalog']['vnfd'][0])
1375 ssh_helper = mock.Mock()
1376 ssh_helper.execute.return_value = 0, '0', ''
1377 scenario_helper = mock.Mock()
1378 scenario_helper.nodes = [None, None]
1379 scenario_helper.options = self.OPTIONS_HW
1380 scenario_helper.all_options = self.ALL_OPTIONS
1382 ipsec_approx_setup_helper = VipsecApproxSetupEnvHelper(vnfd_helper,
1385 with mock.patch.object(cpu.CpuSysCores, 'get_cpu_layout') as \
1386 mock_get_cpu_layout, \
1387 mock.patch.object(ipsec_approx_setup_helper,
1388 'execute_script_json_out') as \
1389 mock_execute_script_json_out:
1390 mock_get_cpu_layout.return_value = self.CPU_LAYOUT
1391 mock_execute_script_json_out.return_value = str(
1392 self.VPP_INTERFACES_DUMP).replace("\'", "\"")
1393 self.assertIsInstance(
1394 ipsec_approx_setup_helper.setup_vnf_environment(),
1397 ipsec_approx_setup_helper.get_value_by_interface_key(
1398 'xe0', 'numa_node'))
1399 self.assertEqual('TenGigabitEthernetff/6/0',
1400 ipsec_approx_setup_helper.get_value_by_interface_key(
1403 ipsec_approx_setup_helper.get_value_by_interface_key(
1404 'xe0', 'vpp_sw_index'))
1406 ipsec_approx_setup_helper.get_value_by_interface_key(
1407 'xe1', 'numa_node'))
1408 self.assertEqual('VirtualFunctionEthernetff/7/0',
1409 ipsec_approx_setup_helper.get_value_by_interface_key(
1412 ipsec_approx_setup_helper.get_value_by_interface_key(
1413 'xe1', 'vpp_sw_index'))
1414 self.assertGreaterEqual(ssh_helper.execute.call_count, 4)
1416 def test_calculate_frame_size(self):
1417 vnfd_helper = VnfdHelper(
1418 TestVipsecApproxVnf.VNFD['vnfd:vnfd-catalog']['vnfd'][0])
1419 ssh_helper = mock.Mock()
1420 scenario_helper = mock.Mock()
1422 ipsec_approx_setup_helper = VipsecApproxSetupEnvHelper(vnfd_helper,
1425 self.assertEqual(16984 / 48,
1426 ipsec_approx_setup_helper.calculate_frame_size(
1427 {'64B': 28, '570B': 16, '1518B': 4}))
1429 def test_calculate_frame_size_64(self):
1430 vnfd_helper = VnfdHelper(
1431 TestVipsecApproxVnf.VNFD['vnfd:vnfd-catalog']['vnfd'][0])
1432 ssh_helper = mock.Mock()
1433 scenario_helper = mock.Mock()
1435 ipsec_approx_setup_helper = VipsecApproxSetupEnvHelper(vnfd_helper,
1438 self.assertEqual(64,
1439 ipsec_approx_setup_helper.calculate_frame_size({}))
1441 def test_calculate_frame_size_64_error(self):
1442 vnfd_helper = VnfdHelper(
1443 TestVipsecApproxVnf.VNFD['vnfd:vnfd-catalog']['vnfd'][0])
1444 ssh_helper = mock.Mock()
1445 scenario_helper = mock.Mock()
1447 ipsec_approx_setup_helper = VipsecApproxSetupEnvHelper(vnfd_helper,
1450 self.assertEqual(64,
1451 ipsec_approx_setup_helper.calculate_frame_size(
1452 {'64B': -28, '570B': 16, '1518B': 4}))
1454 def test_check_status(self):
1455 vnfd_helper = VnfdHelper(
1456 TestVipsecApproxVnf.VNFD['vnfd:vnfd-catalog']['vnfd'][0])
1457 ssh_helper = mock.Mock()
1458 ssh_helper.execute.return_value = 0, self.VPP_INTERFACES_STATUS, ''
1459 scenario_helper = mock.Mock()
1461 ipsec_approx_setup_helper = VipsecApproxSetupEnvHelper(vnfd_helper,
1464 self.assertTrue(ipsec_approx_setup_helper.check_status())
1466 def test_check_status_false(self):
1467 vnfd_helper = VnfdHelper(
1468 TestVipsecApproxVnf.VNFD['vnfd:vnfd-catalog']['vnfd'][0])
1469 ssh_helper = mock.Mock()
1470 ssh_helper.execute.return_value = 0, self.VPP_INTERFACES_STATUS_FALSE, ''
1471 scenario_helper = mock.Mock()
1473 ipsec_approx_setup_helper = VipsecApproxSetupEnvHelper(vnfd_helper,
1476 self.assertFalse(ipsec_approx_setup_helper.check_status())
1478 def test_get_vpp_statistics(self):
1480 if 'TenGigabitEthernetff/6/0' in cmd:
1481 return 0, output_xe0, ''
1482 elif 'VirtualFunctionEthernetff/7/0' in cmd:
1483 return 0, output_xe1, ''
1487 ' Name Idx State MTU (L3/IP4/IP6/MPLS)' \
1488 ' Counter Count \n' \
1489 'TenGigabitEthernetff/6/0 1 up 9200/0/0/0 ' \
1490 'rx packets 23373568\n' \
1492 'rx bytes 1402414080\n' \
1494 'tx packets 20476416\n' \
1496 'tx bytes 1228584960\n' \
1502 ' Name Idx State MTU (L3/IP4/IP6/MPLS)' \
1503 ' Counter Count \n' \
1504 'VirtualFunctionEthernetff/7/0 2 up 9200/0/0/0 ' \
1505 'rx packets 23373568\n' \
1507 'rx bytes 1402414080\n' \
1509 'tx packets 20476416\n' \
1511 'tx bytes 1228584960\n' \
1517 vnfd_helper = VnfdHelper(
1518 TestVipsecApproxVnf.VNFD['vnfd:vnfd-catalog']['vnfd'][0])
1519 ssh_helper = mock.Mock()
1520 ssh_helper.execute = execute
1521 scenario_helper = mock.Mock()
1523 ipsec_approx_setup_helper = VipsecApproxSetupEnvHelper(vnfd_helper,
1526 with mock.patch.object(cpu.CpuSysCores, 'get_cpu_layout') as \
1527 mock_get_cpu_layout, \
1528 mock.patch.object(ipsec_approx_setup_helper,
1529 'execute_script_json_out') as \
1530 mock_execute_script_json_out:
1531 mock_get_cpu_layout.return_value = self.CPU_LAYOUT
1532 mock_execute_script_json_out.return_value = str(
1533 self.VPP_INTERFACES_DUMP).replace("\'", "\"")
1534 sys_cores = cpu.CpuSysCores(ssh_helper)
1535 ipsec_approx_setup_helper._update_vnfd_helper(
1536 sys_cores.get_cpu_layout())
1537 ipsec_approx_setup_helper.update_vpp_interface_data()
1538 ipsec_approx_setup_helper.iface_update_numa()
1539 self.assertEqual({'xe0': {'packets_dropped': 27789925,
1540 'packets_fwd': 20476416,
1541 'packets_in': 23373568},
1542 'xe1': {'packets_dropped': 27789925,
1543 'packets_fwd': 20476416,
1544 'packets_in': 23373568}},
1545 ipsec_approx_setup_helper.get_vpp_statistics())
1547 def test_parser_vpp_stats(self):
1549 ' Name Idx State MTU (L3/IP4/IP6/MPLS)' \
1550 'Counter Count \n' \
1551 'TenGigabitEthernetff/6/0 1 up 9200/0/0/0 ' \
1552 'rx packets 23373568\n' \
1554 'rx bytes 1402414080\n' \
1556 'tx packets 20476416\n' \
1558 'tx bytes 1228584960\n' \
1563 vnfd_helper = VnfdHelper(
1564 TestVipsecApproxVnf.VNFD['vnfd:vnfd-catalog']['vnfd'][0])
1565 ssh_helper = mock.Mock()
1566 scenario_helper = mock.Mock()
1568 ipsec_approx_setup_helper = VipsecApproxSetupEnvHelper(vnfd_helper,
1571 self.assertEqual({'xe0': {'packets_dropped': 27789925,
1572 'packets_fwd': 20476416,
1573 'packets_in': 23373568}},
1574 ipsec_approx_setup_helper.parser_vpp_stats('xe0',
1575 'TenGigabitEthernetff/6/0',
1578 def test_parser_vpp_stats_no_miss(self):
1580 ' Name Idx State ' \
1581 'Counter Count \n' \
1582 'TenGigabitEthernetff/6/0 1 up ' \
1583 'rx packets 23373568\n' \
1585 'rx bytes 1402414080\n' \
1587 'tx packets 20476416\n' \
1589 'tx bytes 1228584960\n' \
1592 vnfd_helper = VnfdHelper(
1593 TestVipsecApproxVnf.VNFD['vnfd:vnfd-catalog']['vnfd'][0])
1594 ssh_helper = mock.Mock()
1595 scenario_helper = mock.Mock()
1597 ipsec_approx_setup_helper = VipsecApproxSetupEnvHelper(vnfd_helper,
1600 self.assertEqual({'xe0': {'packets_dropped': 2897152,
1601 'packets_fwd': 20476416,
1602 'packets_in': 23373568}},
1603 ipsec_approx_setup_helper.parser_vpp_stats('xe0',
1604 'TenGigabitEthernetff/6/0',
1607 def test_create_ipsec_tunnels(self):
1608 vnfd_helper = VnfdHelper(
1609 TestVipsecApproxVnf.VNFD['vnfd:vnfd-catalog']['vnfd'][0])
1610 ssh_helper = mock.Mock()
1611 ssh_helper.execute.return_value = 0, '0', ''
1612 scenario_helper = mock.Mock()
1613 scenario_helper.options = self.OPTIONS
1614 scenario_helper.all_options = self.ALL_OPTIONS
1616 ipsec_approx_setup_helper = VipsecApproxSetupEnvHelper(vnfd_helper,
1620 with mock.patch.object(cpu.CpuSysCores, 'get_cpu_layout') as \
1621 mock_get_cpu_layout, \
1622 mock.patch.object(ipsec_approx_setup_helper,
1623 'execute_script_json_out') as \
1624 mock_execute_script_json_out, \
1625 mock.patch.object(vpp_helpers.VatTerminal,
1626 'vat_terminal_exec_cmd_from_template') as \
1627 mock_vat_terminal_exec_cmd_from_template, \
1628 mock.patch.object(ipsec_approx_setup_helper,
1629 'vpp_get_interface_data') as \
1630 mock_ipsec_approx_setup_helper:
1631 mock_get_cpu_layout.return_value = self.CPU_LAYOUT
1632 mock_execute_script_json_out.return_value = str(
1633 self.VPP_INTERFACES_DUMP).replace("\'", "\"")
1634 mock_vat_terminal_exec_cmd_from_template.return_value = self.VPP_INTERFACES_DUMP
1635 mock_ipsec_approx_setup_helper.return_value = self.VPP_INTERFACES_DUMP
1636 sys_cores = cpu.CpuSysCores(ssh_helper)
1637 ipsec_approx_setup_helper._update_vnfd_helper(
1638 sys_cores.get_cpu_layout())
1639 ipsec_approx_setup_helper.update_vpp_interface_data()
1640 ipsec_approx_setup_helper.iface_update_numa()
1641 self.assertIsNone(ipsec_approx_setup_helper.create_ipsec_tunnels())
1642 self.assertGreaterEqual(
1643 mock_vat_terminal_exec_cmd_from_template.call_count, 9)
1645 def test_create_ipsec_tunnels_cbc_algorithms(self):
1646 vnfd_helper = VnfdHelper(
1647 TestVipsecApproxVnf.VNFD['vnfd:vnfd-catalog']['vnfd'][0])
1648 ssh_helper = mock.Mock()
1649 ssh_helper.execute.return_value = 0, '0', ''
1650 scenario_helper = mock.Mock()
1651 scenario_helper.options = self.OPTIONS
1652 scenario_helper.all_options = self.ALL_OPTIONS_CBC_ALGORITHMS
1654 ipsec_approx_setup_helper = VipsecApproxSetupEnvHelper(vnfd_helper,
1658 with mock.patch.object(cpu.CpuSysCores, 'get_cpu_layout') as \
1659 mock_get_cpu_layout, \
1660 mock.patch.object(ipsec_approx_setup_helper,
1661 'execute_script_json_out') as \
1662 mock_execute_script_json_out, \
1663 mock.patch.object(ipsec_approx_setup_helper,
1664 'find_encrypted_data_interface') as \
1665 mock_find_encrypted_data_interface, \
1666 mock.patch.object(vpp_helpers.VatTerminal,
1667 'vat_terminal_exec_cmd_from_template') as \
1668 mock_vat_terminal_exec_cmd_from_template, \
1669 mock.patch.object(ipsec_approx_setup_helper,
1670 'vpp_get_interface_data') as \
1671 mock_ipsec_approx_setup_helper:
1672 mock_get_cpu_layout.return_value = self.CPU_LAYOUT
1673 mock_execute_script_json_out.return_value = str(
1674 self.VPP_INTERFACES_DUMP).replace("\'", "\"")
1675 mock_find_encrypted_data_interface.return_value = {
1677 'driver': 'igb_uio',
1678 'dst_ip': '192.168.100.1',
1679 'dst_mac': '90:e2:ba:7c:30:e8',
1681 'local_ip': '192.168.100.2',
1682 'local_mac': '90:e2:ba:7c:41:a8',
1683 'netmask': '255.255.255.0',
1685 'node_name': 'vnf__1',
1687 'peer_ifname': 'xe0',
1688 'peer_intf': {'dpdk_port_num': 0,
1689 'driver': 'igb_uio',
1690 'dst_ip': '192.168.100.2',
1691 'dst_mac': '90:e2:ba:7c:41:a8',
1693 'local_ip': '192.168.100.1',
1694 'local_mac': '90:e2:ba:7c:30:e8',
1695 'netmask': '255.255.255.0',
1697 'node_name': 'tg__0',
1698 'peer_ifname': 'xe0',
1699 'peer_name': 'vnf__0',
1700 'vld_id': 'uplink_0',
1701 'vpci': '0000:81:00.0'},
1702 'peer_name': 'tg__0',
1703 'vld_id': 'uplink_0',
1704 'vpci': '0000:ff:06.0',
1705 'vpp_name': u'TenGigabitEthernetff/6/0',
1707 mock_vat_terminal_exec_cmd_from_template.return_value = self.VPP_INTERFACES_DUMP
1708 mock_ipsec_approx_setup_helper.return_value = self.VPP_INTERFACES_DUMP
1709 sys_cores = cpu.CpuSysCores(ssh_helper)
1710 ipsec_approx_setup_helper._update_vnfd_helper(
1711 sys_cores.get_cpu_layout())
1712 ipsec_approx_setup_helper.update_vpp_interface_data()
1713 ipsec_approx_setup_helper.iface_update_numa()
1714 self.assertIsNone(ipsec_approx_setup_helper.create_ipsec_tunnels())
1715 self.assertGreaterEqual(
1716 mock_vat_terminal_exec_cmd_from_template.call_count, 9)
1718 def test_find_raw_data_interface(self):
1719 expected = {'dpdk_port_num': 0,
1720 'driver': 'igb_uio',
1721 'dst_ip': '192.168.100.1',
1722 'dst_mac': '90:e2:ba:7c:30:e8',
1724 'local_ip': '192.168.100.2',
1725 'local_mac': '90:e2:ba:7c:41:a8',
1726 'netmask': '255.255.255.0',
1728 'node_name': 'vnf__0',
1730 'peer_ifname': 'xe0',
1731 'peer_intf': {'dpdk_port_num': 0,
1732 'driver': 'igb_uio',
1733 'dst_ip': '192.168.100.2',
1734 'dst_mac': '90:e2:ba:7c:41:a8',
1736 'local_ip': '192.168.100.1',
1737 'local_mac': '90:e2:ba:7c:30:e8',
1738 'netmask': '255.255.255.0',
1740 'node_name': 'tg__0',
1741 'peer_ifname': 'xe0',
1742 'peer_name': 'vnf__0',
1743 'vld_id': 'uplink_0',
1744 'vpci': '0000:81:00.0'},
1745 'peer_name': 'tg__0',
1746 'vld_id': 'uplink_0',
1747 'vpci': '0000:ff:06.0',
1748 'vpp_name': u'TenGigabitEthernetff/6/0',
1750 vnfd_helper = VnfdHelper(
1751 TestVipsecApproxVnf.VNFD['vnfd:vnfd-catalog']['vnfd'][0])
1752 ssh_helper = mock.Mock()
1753 scenario_helper = mock.Mock()
1755 ipsec_approx_setup_helper = VipsecApproxSetupEnvHelper(vnfd_helper,
1758 self.assertEqual(expected,
1759 ipsec_approx_setup_helper.find_raw_data_interface())
1761 def test_find_raw_data_interface_error(self):
1762 vnfd_helper = VnfdHelper(
1763 TestVipsecApproxVnf.VNFD_ERROR['vnfd:vnfd-catalog']['vnfd'][0])
1764 ssh_helper = mock.Mock()
1765 scenario_helper = mock.Mock()
1767 ipsec_approx_setup_helper = VipsecApproxSetupEnvHelper(vnfd_helper,
1770 with self.assertRaises(KeyError):
1771 ipsec_approx_setup_helper.find_raw_data_interface()
1773 def test_find_encrypted_data_interface(self):
1774 expected = {'dpdk_port_num': 1,
1775 'driver': 'igb_uio',
1776 'dst_ip': '1.1.1.2',
1777 'dst_mac': '0a:b1:ec:fd:a2:66',
1779 'local_ip': '1.1.1.1',
1780 'local_mac': '4e:90:85:d3:c5:13',
1781 'netmask': '255.255.255.0',
1783 'node_name': 'vnf__0',
1785 'peer_ifname': 'xe1',
1786 'peer_intf': {'driver': 'igb_uio',
1787 'dst_ip': '1.1.1.1',
1788 'dst_mac': '4e:90:85:d3:c5:13',
1790 'local_ip': '1.1.1.2',
1791 'local_mac': '0a:b1:ec:fd:a2:66',
1792 'netmask': '255.255.255.0',
1794 'node_name': 'vnf__1',
1795 'peer_ifname': 'xe1',
1796 'peer_name': 'vnf__0',
1797 'vld_id': 'ciphertext',
1798 'vpci': '0000:00:07.0'},
1799 'peer_name': 'vnf__1',
1800 'vld_id': 'ciphertext',
1801 'vpci': '0000:ff:07.0',
1802 'vpp_name': u'VirtualFunctionEthernetff/7/0',
1804 vnfd_helper = VnfdHelper(
1805 TestVipsecApproxVnf.VNFD['vnfd:vnfd-catalog']['vnfd'][0])
1806 ssh_helper = mock.Mock()
1807 scenario_helper = mock.Mock()
1809 ipsec_approx_setup_helper = VipsecApproxSetupEnvHelper(vnfd_helper,
1812 self.assertEqual(expected,
1813 ipsec_approx_setup_helper.find_encrypted_data_interface())
1815 def test_create_startup_configuration_of_vpp(self):
1816 vnfd_helper = VnfdHelper(
1817 TestVipsecApproxVnf.VNFD['vnfd:vnfd-catalog']['vnfd'][0])
1818 ssh_helper = mock.Mock()
1819 ssh_helper.execute.return_value = 0, '0', ''
1820 scenario_helper = mock.Mock()
1821 scenario_helper.options = self.OPTIONS
1822 scenario_helper.all_options = self.ALL_OPTIONS
1824 ipsec_approx_setup_helper = VipsecApproxSetupEnvHelper(vnfd_helper,
1828 with mock.patch.object(cpu.CpuSysCores, 'get_cpu_layout') as \
1829 mock_get_cpu_layout, \
1830 mock.patch.object(ipsec_approx_setup_helper,
1831 'execute_script_json_out') as \
1832 mock_execute_script_json_out:
1833 mock_get_cpu_layout.return_value = self.CPU_LAYOUT
1834 mock_execute_script_json_out.return_value = str(
1835 self.VPP_INTERFACES_DUMP).replace("\'", "\"")
1836 sys_cores = cpu.CpuSysCores(ssh_helper)
1837 ipsec_approx_setup_helper._update_vnfd_helper(
1838 sys_cores.get_cpu_layout())
1839 ipsec_approx_setup_helper.update_vpp_interface_data()
1840 ipsec_approx_setup_helper.iface_update_numa()
1841 self.assertIsInstance(
1842 ipsec_approx_setup_helper.create_startup_configuration_of_vpp(),
1843 vpp_helpers.VppConfigGenerator)
1845 def test_add_worker_threads_and_rxqueues(self):
1846 vnfd_helper = VnfdHelper(
1847 TestVipsecApproxVnf.VNFD['vnfd:vnfd-catalog']['vnfd'][0])
1848 ssh_helper = mock.Mock()
1849 ssh_helper.execute.return_value = 0, '0', ''
1850 scenario_helper = mock.Mock()
1851 scenario_helper.options = self.OPTIONS
1852 scenario_helper.all_options = self.ALL_OPTIONS
1853 vpp_config_generator = vpp_helpers.VppConfigGenerator()
1855 ipsec_approx_setup_helper = VipsecApproxSetupEnvHelper(vnfd_helper,
1859 with mock.patch.object(cpu.CpuSysCores, 'get_cpu_layout') as \
1860 mock_get_cpu_layout, \
1861 mock.patch.object(ipsec_approx_setup_helper,
1862 'execute_script_json_out') as \
1863 mock_execute_script_json_out:
1864 mock_get_cpu_layout.return_value = self.CPU_LAYOUT
1865 mock_execute_script_json_out.return_value = str(
1866 self.VPP_INTERFACES_DUMP).replace("\'", "\"")
1867 ipsec_approx_setup_helper.sys_cores = cpu.CpuSysCores(ssh_helper)
1868 ipsec_approx_setup_helper.sys_cores.cpuinfo = self.CPU_LAYOUT
1869 ipsec_approx_setup_helper._update_vnfd_helper(
1870 ipsec_approx_setup_helper.sys_cores.get_cpu_layout())
1871 ipsec_approx_setup_helper.update_vpp_interface_data()
1872 ipsec_approx_setup_helper.iface_update_numa()
1874 ipsec_approx_setup_helper.add_worker_threads_and_rxqueues(
1875 vpp_config_generator, 1, 1))
1877 'cpu\n{\n corelist-workers 2\n main-core 1\n}\ndpdk\n{\n ' \
1878 'dev default\n {\n num-rx-queues 1\n }\n num-mbufs 32768\n}\n',
1879 vpp_config_generator.dump_config())
1881 def test_add_worker_threads_and_rxqueues_smt(self):
1882 vnfd_helper = VnfdHelper(
1883 TestVipsecApproxVnf.VNFD['vnfd:vnfd-catalog']['vnfd'][0])
1884 ssh_helper = mock.Mock()
1885 ssh_helper.execute.return_value = 0, '0', ''
1886 scenario_helper = mock.Mock()
1887 scenario_helper.options = self.OPTIONS
1888 scenario_helper.all_options = self.ALL_OPTIONS
1889 vpp_config_generator = vpp_helpers.VppConfigGenerator()
1891 ipsec_approx_setup_helper = VipsecApproxSetupEnvHelper(vnfd_helper,
1895 with mock.patch.object(cpu.CpuSysCores, 'get_cpu_layout') as \
1896 mock_get_cpu_layout, \
1897 mock.patch.object(ipsec_approx_setup_helper,
1898 'execute_script_json_out') as \
1899 mock_execute_script_json_out:
1900 mock_get_cpu_layout.return_value = self.CPU_SMT
1901 mock_execute_script_json_out.return_value = str(
1902 self.VPP_INTERFACES_DUMP).replace("\'", "\"")
1903 ipsec_approx_setup_helper.sys_cores = cpu.CpuSysCores(ssh_helper)
1904 ipsec_approx_setup_helper.sys_cores.cpuinfo = self.CPU_SMT
1905 ipsec_approx_setup_helper._update_vnfd_helper(
1906 ipsec_approx_setup_helper.sys_cores.get_cpu_layout())
1907 ipsec_approx_setup_helper.update_vpp_interface_data()
1908 ipsec_approx_setup_helper.iface_update_numa()
1910 ipsec_approx_setup_helper.add_worker_threads_and_rxqueues(
1911 vpp_config_generator, 1))
1913 'cpu\n{\n corelist-workers 2,6\n main-core 1\n}\ndpdk\n{\n ' \
1914 'dev default\n {\n num-rx-queues 1\n }\n num-mbufs 32768\n}\n',
1915 vpp_config_generator.dump_config())
1917 def test_add_worker_threads_and_rxqueues_with_numa(self):
1918 vnfd_helper = VnfdHelper(
1919 TestVipsecApproxVnf.VNFD['vnfd:vnfd-catalog']['vnfd'][0])
1920 ssh_helper = mock.Mock()
1921 ssh_helper.execute.return_value = 0, '0', ''
1922 scenario_helper = mock.Mock()
1923 scenario_helper.options = self.OPTIONS
1924 scenario_helper.all_options = self.ALL_OPTIONS
1925 vpp_config_generator = vpp_helpers.VppConfigGenerator()
1927 ipsec_approx_setup_helper = VipsecApproxSetupEnvHelper(vnfd_helper,
1931 with mock.patch.object(cpu.CpuSysCores, 'get_cpu_layout') as \
1932 mock_get_cpu_layout, \
1933 mock.patch.object(ipsec_approx_setup_helper,
1934 'execute_script_json_out') as \
1935 mock_execute_script_json_out:
1936 mock_get_cpu_layout.return_value = self.CPU_LAYOUT
1937 mock_execute_script_json_out.return_value = str(
1938 self.VPP_INTERFACES_DUMP).replace("\'", "\"")
1939 ipsec_approx_setup_helper.sys_cores = cpu.CpuSysCores(ssh_helper)
1940 ipsec_approx_setup_helper.sys_cores.cpuinfo = self.CPU_LAYOUT
1941 ipsec_approx_setup_helper._update_vnfd_helper(
1942 ipsec_approx_setup_helper.sys_cores.get_cpu_layout())
1943 ipsec_approx_setup_helper.update_vpp_interface_data()
1944 ipsec_approx_setup_helper.iface_update_numa()
1946 ipsec_approx_setup_helper.add_worker_threads_and_rxqueues(
1947 vpp_config_generator, 1, 1))
1949 'cpu\n{\n corelist-workers 2\n main-core 1\n}\ndpdk\n{\n ' \
1950 'dev default\n {\n num-rx-queues 1\n }\n num-mbufs 32768\n}\n',
1951 vpp_config_generator.dump_config())
1953 def test_add_pci_devices(self):
1954 vnfd_helper = VnfdHelper(
1955 TestVipsecApproxVnf.VNFD['vnfd:vnfd-catalog']['vnfd'][0])
1956 ssh_helper = mock.Mock()
1957 ssh_helper.execute.return_value = 0, '0', ''
1958 scenario_helper = mock.Mock()
1959 scenario_helper.options = self.OPTIONS
1960 scenario_helper.all_options = self.ALL_OPTIONS
1961 vpp_config_generator = vpp_helpers.VppConfigGenerator()
1963 ipsec_approx_setup_helper = VipsecApproxSetupEnvHelper(vnfd_helper,
1967 with mock.patch.object(cpu.CpuSysCores, 'get_cpu_layout') as \
1968 mock_get_cpu_layout, \
1969 mock.patch.object(ipsec_approx_setup_helper,
1970 'execute_script_json_out') as \
1971 mock_execute_script_json_out:
1972 mock_get_cpu_layout.return_value = self.CPU_LAYOUT
1973 mock_execute_script_json_out.return_value = str(
1974 self.VPP_INTERFACES_DUMP).replace("\'", "\"")
1975 sys_cores = cpu.CpuSysCores(ssh_helper)
1976 ipsec_approx_setup_helper._update_vnfd_helper(
1977 sys_cores.get_cpu_layout())
1978 ipsec_approx_setup_helper.update_vpp_interface_data()
1979 ipsec_approx_setup_helper.iface_update_numa()
1980 self.assertIsNone(ipsec_approx_setup_helper.add_pci_devices(
1981 vpp_config_generator))
1983 'dpdk\n{\n dev 0000:ff:06.0 \n dev 0000:ff:07.0 \n}\n',
1984 vpp_config_generator.dump_config())
1986 def test_add_dpdk_cryptodev(self):
1987 vnfd_helper = VnfdHelper(
1988 TestVipsecApproxVnf.VNFD['vnfd:vnfd-catalog']['vnfd'][0])
1989 ssh_helper = mock.Mock()
1990 ssh_helper.execute.return_value = 0, '0', ''
1991 scenario_helper = mock.Mock()
1992 scenario_helper.options = self.OPTIONS
1993 scenario_helper.all_options = self.ALL_OPTIONS
1994 vpp_config_generator = vpp_helpers.VppConfigGenerator()
1996 ipsec_approx_setup_helper = VipsecApproxSetupEnvHelper(vnfd_helper,
2000 with mock.patch.object(cpu.CpuSysCores, 'get_cpu_layout') as \
2001 mock_get_cpu_layout, \
2002 mock.patch.object(ipsec_approx_setup_helper,
2003 'execute_script_json_out') as \
2004 mock_execute_script_json_out:
2005 mock_get_cpu_layout.return_value = self.CPU_LAYOUT
2006 mock_execute_script_json_out.return_value = str(
2007 self.VPP_INTERFACES_DUMP).replace("\'", "\"")
2008 ipsec_approx_setup_helper.sys_cores = cpu.CpuSysCores(ssh_helper)
2009 ipsec_approx_setup_helper.sys_cores.cpuinfo = self.CPU_LAYOUT
2010 ipsec_approx_setup_helper._update_vnfd_helper(
2011 ipsec_approx_setup_helper.sys_cores.get_cpu_layout())
2012 ipsec_approx_setup_helper.update_vpp_interface_data()
2013 ipsec_approx_setup_helper.iface_update_numa()
2014 self.assertIsNone(ipsec_approx_setup_helper.add_dpdk_cryptodev(
2015 vpp_config_generator, 'aesni_gcm', 1))
2017 'dpdk\n{\n vdev cryptodev_aesni_gcm_pmd,socket_id=0 \n}\n',
2018 vpp_config_generator.dump_config())
2020 def test_add_dpdk_cryptodev_hw(self):
2021 vnfd_helper = VnfdHelper(
2022 TestVipsecApproxVnf.VNFD['vnfd:vnfd-catalog']['vnfd'][0])
2023 ssh_helper = mock.Mock()
2024 ssh_helper.execute.return_value = 0, '0', ''
2025 scenario_helper = mock.Mock()
2026 scenario_helper.options = self.OPTIONS_HW
2027 scenario_helper.all_options = self.ALL_OPTIONS
2028 vpp_config_generator = vpp_helpers.VppConfigGenerator()
2030 ipsec_approx_setup_helper = VipsecApproxSetupEnvHelper(vnfd_helper,
2034 with mock.patch.object(cpu.CpuSysCores, 'get_cpu_layout') as \
2035 mock_get_cpu_layout, \
2036 mock.patch.object(ipsec_approx_setup_helper,
2037 'execute_script_json_out') as \
2038 mock_execute_script_json_out:
2039 mock_get_cpu_layout.return_value = self.CPU_LAYOUT
2040 mock_execute_script_json_out.return_value = str(
2041 self.VPP_INTERFACES_DUMP).replace("\'", "\"")
2042 ipsec_approx_setup_helper.sys_cores = cpu.CpuSysCores(ssh_helper)
2043 ipsec_approx_setup_helper.sys_cores.cpuinfo = self.CPU_LAYOUT
2044 ipsec_approx_setup_helper._update_vnfd_helper(
2045 ipsec_approx_setup_helper.sys_cores.get_cpu_layout())
2046 ipsec_approx_setup_helper.update_vpp_interface_data()
2047 ipsec_approx_setup_helper.iface_update_numa()
2048 self.assertIsNone(ipsec_approx_setup_helper.add_dpdk_cryptodev(
2049 vpp_config_generator, 'aesni_gcm', 1))
2051 'dpdk\n{\n dev 0000:ff:01.0 \n uio-driver igb_uio\n}\n',
2052 vpp_config_generator.dump_config())
2054 def test_add_dpdk_cryptodev_smt_used(self):
2055 vnfd_helper = VnfdHelper(
2056 TestVipsecApproxVnf.VNFD['vnfd:vnfd-catalog']['vnfd'][0])
2057 ssh_helper = mock.Mock()
2058 ssh_helper.execute.return_value = 0, '0', ''
2059 scenario_helper = mock.Mock()
2060 scenario_helper.options = self.OPTIONS
2061 scenario_helper.all_options = self.ALL_OPTIONS
2062 vpp_config_generator = vpp_helpers.VppConfigGenerator()
2064 ipsec_approx_setup_helper = VipsecApproxSetupEnvHelper(vnfd_helper,
2068 with mock.patch.object(cpu.CpuSysCores, 'get_cpu_layout') as \
2069 mock_get_cpu_layout, \
2070 mock.patch.object(ipsec_approx_setup_helper,
2071 'execute_script_json_out') as \
2072 mock_execute_script_json_out:
2073 mock_get_cpu_layout.return_value = self.CPU_SMT
2074 mock_execute_script_json_out.return_value = str(
2075 self.VPP_INTERFACES_DUMP).replace("\'", "\"")
2076 ipsec_approx_setup_helper.sys_cores = cpu.CpuSysCores(ssh_helper)
2077 ipsec_approx_setup_helper.sys_cores.cpuinfo = self.CPU_LAYOUT
2078 ipsec_approx_setup_helper._update_vnfd_helper(
2079 ipsec_approx_setup_helper.sys_cores.get_cpu_layout())
2080 ipsec_approx_setup_helper.update_vpp_interface_data()
2081 ipsec_approx_setup_helper.iface_update_numa()
2082 self.assertIsNone(ipsec_approx_setup_helper.add_dpdk_cryptodev(
2083 vpp_config_generator, 'aesni_gcm', 1))
2085 'dpdk\n{\n vdev cryptodev_aesni_gcm_pmd,socket_id=0 \n}\n',
2086 vpp_config_generator.dump_config())
2088 def test_add_dpdk_cryptodev_smt_used_hw(self):
2089 vnfd_helper = VnfdHelper(
2090 TestVipsecApproxVnf.VNFD['vnfd:vnfd-catalog']['vnfd'][0])
2091 ssh_helper = mock.Mock()
2092 ssh_helper.execute.return_value = 0, '0', ''
2093 scenario_helper = mock.Mock()
2094 scenario_helper.options = self.OPTIONS_HW
2095 scenario_helper.all_options = self.ALL_OPTIONS
2096 vpp_config_generator = vpp_helpers.VppConfigGenerator()
2098 ipsec_approx_setup_helper = VipsecApproxSetupEnvHelper(vnfd_helper,
2102 with mock.patch.object(cpu.CpuSysCores, 'get_cpu_layout') as \
2103 mock_get_cpu_layout:
2104 mock_get_cpu_layout.return_value = self.CPU_SMT
2105 ipsec_approx_setup_helper.sys_cores = cpu.CpuSysCores(ssh_helper)
2106 ipsec_approx_setup_helper.sys_cores.cpuinfo = self.CPU_SMT
2107 ipsec_approx_setup_helper._update_vnfd_helper(
2108 ipsec_approx_setup_helper.sys_cores.get_cpu_layout())
2109 self.assertIsNone(ipsec_approx_setup_helper.add_dpdk_cryptodev(
2110 vpp_config_generator, 'aesni_gcm', 1))
2112 'dpdk\n{\n dev 0000:ff:01.0 \n dev 0000:ff:01.1 \n uio-driver igb_uio\n}\n',
2113 vpp_config_generator.dump_config())
2115 def test_initialize_ipsec(self):
2116 vnfd_helper = VnfdHelper(
2117 TestVipsecApproxVnf.VNFD['vnfd:vnfd-catalog']['vnfd'][0])
2118 ssh_helper = mock.Mock()
2119 ssh_helper.execute.return_value = 0, '0', ''
2120 scenario_helper = mock.Mock()
2121 scenario_helper.options = self.OPTIONS
2122 scenario_helper.all_options = self.ALL_OPTIONS
2124 ipsec_approx_setup_helper = VipsecApproxSetupEnvHelper(vnfd_helper,
2128 with mock.patch.object(cpu.CpuSysCores, 'get_cpu_layout') as \
2129 mock_get_cpu_layout, \
2130 mock.patch.object(ipsec_approx_setup_helper,
2131 'execute_script_json_out') as \
2132 mock_execute_script_json_out, \
2133 mock.patch.object(vpp_helpers.VatTerminal,
2134 'vat_terminal_exec_cmd_from_template') as \
2135 mock_vat_terminal_exec_cmd_from_template, \
2136 mock.patch.object(ipsec_approx_setup_helper,
2137 'vpp_get_interface_data') as \
2138 mock_ipsec_approx_setup_helper:
2139 mock_get_cpu_layout.return_value = self.CPU_LAYOUT
2140 mock_execute_script_json_out.return_value = str(
2141 self.VPP_INTERFACES_DUMP).replace("\'", "\"")
2142 mock_vat_terminal_exec_cmd_from_template.return_value = ''
2143 mock_ipsec_approx_setup_helper.return_value = self.VPP_INTERFACES_DUMP
2144 sys_cores = cpu.CpuSysCores(ssh_helper)
2145 ipsec_approx_setup_helper._update_vnfd_helper(
2146 sys_cores.get_cpu_layout())
2147 ipsec_approx_setup_helper.update_vpp_interface_data()
2148 ipsec_approx_setup_helper.iface_update_numa()
2149 self.assertIsNone(ipsec_approx_setup_helper.initialize_ipsec())
2150 self.assertGreaterEqual(
2151 mock_vat_terminal_exec_cmd_from_template.call_count, 9)