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.nfvi.resource import ResourceProfile
23 from yardstick.network_services.vnf_generic.vnf import ipsec_vnf
24 from yardstick.network_services.vnf_generic.vnf.base import VnfdHelper
25 from yardstick.network_services.vnf_generic.vnf.ipsec_vnf import \
26 VipsecApproxSetupEnvHelper
27 from yardstick.tests.unit.network_services.vnf_generic.vnf.test_base import \
30 SSH_HELPER = 'yardstick.network_services.vnf_generic.vnf.sample_vnf.VnfSshHelper'
35 @mock.patch("yardstick.network_services.vnf_generic.vnf.sample_vnf.Process")
36 class TestVipsecApproxVnf(unittest.TestCase):
37 VNFD = {'vnfd:vnfd-catalog':
57 "description": "VPP IPsec",
58 "id": "VipsecApproxVnf",
63 "vdu-id": "ipsecvnf-baremetal"
66 "short-name": "IpsecVnf",
69 "description": "VPP Ipsec",
70 "external-interface": [
73 "virtual-interface": {
76 "dst_ip": "192.168.100.1",
77 "dst_mac": "90:e2:ba:7c:30:e8",
79 "local_ip": "192.168.100.2",
80 "local_mac": "90:e2:ba:7c:41:a8",
81 "netmask": "255.255.255.0",
83 "node_name": "vnf__0",
88 "dst_ip": "192.168.100.2",
89 "dst_mac": "90:e2:ba:7c:41:a8",
91 "local_ip": "192.168.100.1",
92 "local_mac": "90:e2:ba:7c:30:e8",
93 "netmask": "255.255.255.0",
97 "peer_name": "vnf__0",
99 "vpci": "0000:81:00.0"
101 "peer_name": "tg__0",
102 "vld_id": "uplink_0",
103 "vpci": "0000:ff:06.0"
105 "vnfd-connection-point-ref": "xe0"
109 "virtual-interface": {
113 "dst_mac": "0a:b1:ec:fd:a2:66",
115 "local_ip": "1.1.1.1",
116 "local_mac": "4e:90:85:d3:c5:13",
117 "netmask": "255.255.255.0",
119 "node_name": "vnf__0",
120 "peer_ifname": "xe1",
124 "dst_mac": "4e:90:85:d3:c5:13",
126 "local_ip": "1.1.1.2",
127 "local_mac": "0a:b1:ec:fd:a2:66",
128 "netmask": "255.255.255.0",
130 "node_name": "vnf__1",
131 "peer_ifname": "xe1",
132 "peer_name": "vnf__0",
133 "vld_id": "ciphertext",
134 "vpci": "0000:00:07.0"
136 "peer_name": "vnf__1",
137 "vld_id": "ciphertext",
138 "vpci": "0000:ff:07.0"
140 "vnfd-connection-point-ref": "xe1"
143 "id": "ipsecvnf-baremetal",
144 "name": "ipsecvnf-baremetal",
151 VNFD_ERROR = {'vnfd:vnfd-catalog':
161 "connection-point": [
171 "description": "VPP IPsec",
172 "id": "VipsecApproxVnf",
174 "ip": "10.10.10.101",
177 "vdu-id": "ipsecvnf-baremetal"
180 "short-name": "IpsecVnf",
183 "description": "VPP Ipsec",
184 "external-interface": [
187 "virtual-interface": {
190 "dst_ip": "192.168.100.1",
191 "dst_mac": "90:e2:ba:7c:30:e8",
193 "local_ip": "192.168.100.2",
194 "local_mac": "90:e2:ba:7c:41:a8",
195 "netmask": "255.255.255.0",
197 "node_name": "vnf__0",
198 "peer_ifname": "xe0",
202 "dst_ip": "192.168.100.2",
203 "dst_mac": "90:e2:ba:7c:41:a8",
205 "local_ip": "192.168.100.1",
206 "local_mac": "90:e2:ba:7c:30:e8",
207 "netmask": "255.255.255.0",
209 "node_name": "tg__0",
210 "peer_ifname": "xe0",
211 "peer_name": "vnf__0",
212 "vld_id": "uplink_0",
213 "vpci": "0000:81:00.0"
215 "peer_name": "tg__0",
216 "vld_id": "uplink_1",
217 "vpci": "0000:ff:06.0"
219 "vnfd-connection-point-ref": "xe0"
223 "virtual-interface": {
227 "dst_mac": "0a:b1:ec:fd:a2:66",
229 "local_ip": "1.1.1.1",
230 "local_mac": "4e:90:85:d3:c5:13",
231 "netmask": "255.255.255.0",
233 "node_name": "vnf__1",
234 "peer_ifname": "xe1",
238 "dst_mac": "4e:90:85:d3:c5:13",
240 "local_ip": "1.1.1.2",
241 "local_mac": "0a:b1:ec:fd:a2:66",
242 "netmask": "255.255.255.0",
244 "node_name": "vnf__1",
245 "peer_ifname": "xe1",
246 "peer_name": "vnf__0",
247 "vld_id": "ciphertext",
248 "vpci": "0000:00:07.0"
250 "peer_name": "vnf__1",
251 "vld_id": "ciphertext",
252 "vpci": "0000:ff:07.0"
254 "vnfd-connection-point-ref": "xe1"
257 "id": "ipsecvnf-baremetal",
258 "name": "ipsecvnf-baremetal",
267 "tg__0": "trafficgen.yardstick-5486cc2f",
268 "vnf__0": "vnf0.yardstick-5486cc2f",
269 "vnf__1": "vnf1.yardstick-5486cc2f"
275 "20.0.0.0-20.0.0.100"
278 "10.0.0.0-10.0.0.100"
290 "allowed_drop_rate": "0.0 - 0.005"
304 "crypto_type": "SW_cryptodev",
306 "worker_config": "1C/1T",
315 "crypto_type": "SW_cryptodev",
317 "worker_config": "1C/1T",
322 "crypto_algorithms": "aes-gcm",
330 "yardstick.benchmark.scenarios.networking.vnf_generic.NetworkServiceTestCase",
340 "dispatcher": "influxdb",
341 "file_path": "/tmp/yardstick.out"
345 "dispatcher": "influxdb",
346 "target": "http://127.0.0.1:8000/results",
349 "dispatcher_influxdb": {
350 "db_name": "yardstick",
352 "dispatcher": "influxdb",
354 "target": "http://192.168.100.3:8086",
359 "bin_path": "/opt/nsb_bin",
361 "dispatcher": "influxdb",
362 "trex_client_lib": "/opt/nsb_bin/trex_client/stl",
363 "trex_path": "/opt/nsb_bin/trex/scripts"
369 "task_id": "5486cc2f-d4d3-4feb-b0df-5e0bcd584c9e",
370 "task_path": "samples/vnf_samples/nsut/ipsec",
371 "tc": "tc_baremetal_rfc2544_ipv4_1flow_sw_aesgcm_4cores_64B_trex",
372 "topology": "vpp-tg-topology-2.yaml",
373 "traffic_profile": "../../traffic_profiles/ipv4_throughput_latency_vpp.yaml",
381 "VNF model": "../../vnf_descriptors/tg_vpp_tpl.yaml",
387 "dst_ip": "192.168.100.2",
388 "dst_mac": "90:e2:ba:7c:41:a8",
390 "local_ip": "192.168.100.1",
391 "local_mac": "90:e2:ba:7c:30:e8",
392 "netmask": "255.255.255.0",
394 "node_name": "tg__0",
395 "peer_ifname": "xe0",
399 "dst_ip": "192.168.100.1",
400 "dst_mac": "90:e2:ba:7c:30:e8",
402 "local_ip": "192.168.100.2",
403 "local_mac": "90:e2:ba:7c:41:a8",
404 "netmask": "255.255.255.0",
406 "node_name": "vnf__0",
407 "peer_ifname": "xe0",
408 "peer_name": "tg__0",
409 "vld_id": "uplink_0",
410 "vpci": "0000:00:06.0"
412 "peer_name": "vnf__0",
413 "vld_id": "uplink_0",
414 "vpci": "0000:81:00.0"
419 "dst_ip": "192.168.101.2",
420 "dst_mac": "90:e2:ba:7c:41:a9",
422 "local_ip": "192.168.101.1",
423 "local_mac": "90:e2:ba:7c:30:e9",
424 "netmask": "255.255.255.0",
426 "node_name": "tg__0",
427 "peer_ifname": "xe0",
431 "dst_ip": "192.168.101.1",
432 "dst_mac": "90:e2:ba:7c:30:e9",
434 "local_ip": "192.168.101.2",
435 "local_mac": "90:e2:ba:7c:41:a9",
436 "netmask": "255.255.255.0",
438 "node_name": "vnf__1",
439 "peer_ifname": "xe1",
440 "peer_name": "tg__0",
441 "vld_id": "downlink_0",
442 "vpci": "0000:00:06.0"
444 "peer_name": "vnf__1",
445 "vld_id": "downlink_0",
446 "vpci": "0000:81:00.1"
450 "member-vnf-index": "1",
451 "name": "trafficgen.yardstick-5486cc2f",
454 "role": "TrafficGen",
457 "vnfd-id-ref": "tg__0"
460 "VNF model": "../../vnf_descriptors/vpp_vnfd.yaml",
466 "dst_ip": "192.168.100.1",
467 "dst_mac": "90:e2:ba:7c:30:e8",
469 "local_ip": "192.168.100.2",
470 "local_mac": "90:e2:ba:7c:41:a8",
471 "netmask": "255.255.255.0",
473 "node_name": "vnf__0",
474 "peer_ifname": "xe0",
478 "dst_ip": "192.168.100.2",
479 "dst_mac": "90:e2:ba:7c:41:a8",
481 "local_ip": "192.168.100.1",
482 "local_mac": "90:e2:ba:7c:30:e8",
483 "netmask": "255.255.255.0",
485 "node_name": "tg__0",
486 "peer_ifname": "xe0",
487 "peer_name": "vnf__0",
488 "vld_id": "uplink_0",
489 "vpci": "0000:81:00.0"
491 "peer_name": "tg__0",
492 "vld_id": "uplink_0",
493 "vpci": "0000:00:06.0"
499 "dst_mac": "0a:b1:ec:fd:a2:66",
501 "local_ip": "1.1.1.1",
502 "local_mac": "4e:90:85:d3:c5:13",
503 "netmask": "255.255.255.0",
505 "node_name": "vnf__0",
506 "peer_ifname": "xe1",
511 "dst_mac": "4e:90:85:d3:c5:13",
513 "local_ip": "1.1.1.2",
514 "local_mac": "0a:b1:ec:fd:a2:66",
515 "netmask": "255.255.255.0",
517 "node_name": "vnf__1",
518 "peer_ifname": "xe1",
519 "peer_name": "vnf__0",
520 "vld_id": "ciphertext",
521 "vpci": "0000:00:07.0"
523 "peer_name": "vnf__1",
524 "vld_id": "ciphertext",
525 "vpci": "0000:00:07.0"
528 "ip": "10.10.10.101",
529 "member-vnf-index": "2",
530 "name": "vnf0.yardstick-5486cc2f",
533 "role": "VirtualNetworkFunction",
536 "vnfd-id-ref": "vnf__0"
539 "VNF model": "../../vnf_descriptors/vpp_vnfd.yaml",
545 "dst_ip": "192.168.101.1",
546 "dst_mac": "90:e2:ba:7c:30:e9",
548 "local_ip": "192.168.101.2",
549 "local_mac": "90:e2:ba:7c:41:a9",
550 "netmask": "255.255.255.0",
552 "node_name": "vnf__1",
553 "peer_ifname": "xe1",
557 "dst_ip": "192.168.101.2",
558 "dst_mac": "90:e2:ba:7c:41:a9",
560 "local_ip": "192.168.101.1",
561 "local_mac": "90:e2:ba:7c:30:e9",
562 "netmask": "255.255.255.0",
564 "node_name": "tg__0",
565 "peer_ifname": "xe0",
566 "peer_name": "vnf__1",
567 "vld_id": "downlink_0",
568 "vpci": "0000:81:00.1"
570 "peer_name": "tg__0",
571 "vld_id": "downlink_0",
572 "vpci": "0000:00:06.0"
578 "dst_mac": "4e:90:85:d3:c5:13",
580 "local_ip": "1.1.1.2",
581 "local_mac": "0a:b1:ec:fd:a2:66",
582 "netmask": "255.255.255.0",
584 "node_name": "vnf__1",
585 "peer_ifname": "xe1",
590 "dst_mac": "0a:b1:ec:fd:a2:66",
592 "local_ip": "1.1.1.1",
593 "local_mac": "4e:90:85:d3:c5:13",
594 "netmask": "255.255.255.0",
596 "node_name": "vnf__0",
597 "peer_ifname": "xe1",
598 "peer_name": "vnf__1",
599 "vld_id": "ciphertext",
600 "vpci": "0000:00:07.0"
602 "peer_name": "vnf__0",
603 "vld_id": "ciphertext",
604 "vpci": "0000:00:07.0"
607 "ip": "10.10.10.102",
608 "member-vnf-index": "3",
609 "name": "vnf1.yardstick-5486cc2f",
612 "role": "VirtualNetworkFunction",
615 "vnfd-id-ref": "vnf__1"
620 def test___init__(self, *args):
621 vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
622 vipsec_vnf = ipsec_vnf.VipsecApproxVnf(NAME, vnfd)
623 self.assertIsNone(vipsec_vnf._vnf_process)
625 @mock.patch(SSH_HELPER)
626 def test__run(self, ssh, *args):
629 vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
630 vipsec_vnf = ipsec_vnf.VipsecApproxVnf(NAME, vnfd)
631 vipsec_vnf._build_config = mock.MagicMock()
632 vipsec_vnf.setup_helper.kill_vnf = mock.MagicMock()
633 vipsec_vnf.setup_helper.create_ipsec_tunnels = mock.MagicMock()
634 vipsec_vnf.queue_wrapper = mock.MagicMock()
635 vipsec_vnf.scenario_helper.scenario_cfg = self.scenario_cfg
636 vipsec_vnf.vnf_cfg = {'lb_config': 'SW',
638 'worker_config': '1C/1T',
640 vipsec_vnf.all_options = {'traffic_type': '4',
641 'topology': 'nsb_test_case.yaml'}
643 # vipsec_vnf.setup_helper.ssh_helper.execute.assert_called_once()
645 @mock.patch(SSH_HELPER)
646 def test_wait_for_instantiate(self, ssh, *args):
649 mock_process = mock.Mock(autospec=Process)
650 mock_process.is_alive.return_value = True
651 mock_process.exitcode = 432
653 vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
654 vipsec_vnf = ipsec_vnf.VipsecApproxVnf(NAME, vnfd)
655 vipsec_vnf.resource_helper.resource = mock.MagicMock()
656 vipsec_vnf.setup_helper = mock.MagicMock()
657 vipsec_vnf.setup_helper.check_status.return_value = True
658 vipsec_vnf._vnf_process = mock_process
659 vipsec_vnf.WAIT_TIME = 0
660 self.assertEqual(vipsec_vnf.wait_for_instantiate(), 432)
662 @mock.patch(SSH_HELPER)
663 def test_wait_for_instantiate_crash(self, ssh, *args):
666 mock_process = mock.Mock(autospec=Process)
667 mock_process.is_alive.return_value = False
668 mock_process.exitcode = 432
670 vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
671 vipsec_vnf = ipsec_vnf.VipsecApproxVnf(NAME, vnfd)
672 vipsec_vnf.resource_helper.resource = mock.MagicMock()
673 vipsec_vnf.setup_helper = mock.MagicMock()
674 vipsec_vnf.setup_helper.check_status.return_value = False
675 vipsec_vnf._vnf_process = mock_process
676 vipsec_vnf.WAIT_TIME = 0
677 vipsec_vnf.WAIT_TIME_FOR_SCRIPT = 0
679 with self.assertRaises(RuntimeError) as raised:
680 vipsec_vnf.wait_for_instantiate()
682 self.assertIn('VNF process died', str(raised.exception))
684 @mock.patch.object(ctx_base.Context, 'get_physical_node_from_server',
685 return_value='mock_node')
686 @mock.patch.object(ipsec_vnf.VipsecApproxSetupEnvHelper,
687 'get_vpp_statistics',
688 return_value={'packets_in': 0, 'packets_fwd': 0,
689 'packets_dropped': 0})
690 @mock.patch(SSH_HELPER)
691 def test_collect_kpi(self, ssh, *args):
694 vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
695 vipsec_vnf = ipsec_vnf.VipsecApproxVnf(NAME, vnfd)
696 vipsec_vnf.scenario_helper.scenario_cfg = {
697 'nodes': {vipsec_vnf.name: "mock"}
700 'collect_stats': {'packets_in': 0, 'packets_fwd': 0,
701 'packets_dropped': 0},
702 'physical_node': 'mock_node'
704 self.assertEqual(result, vipsec_vnf.collect_kpi())
706 @mock.patch.object(utils, 'find_relative_file')
708 "yardstick.network_services.vnf_generic.vnf.sample_vnf.Context")
709 @mock.patch(SSH_HELPER)
710 def test_instantiate(self, ssh, *args):
713 vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
714 vipsec_vnf = ipsec_vnf.VipsecApproxVnf(NAME, vnfd)
715 vipsec_vnf.deploy_helper = mock.MagicMock()
716 vipsec_vnf.resource_helper = mock.MagicMock()
717 vipsec_vnf._build_config = mock.MagicMock()
718 vipsec_vnf.WAIT_TIME = 0
719 self.scenario_cfg.update({"nodes": {"vnf__1": ""}})
720 self.assertIsNone(vipsec_vnf.instantiate(self.scenario_cfg,
723 @mock.patch.object(ipsec_vnf.VipsecApproxSetupEnvHelper, 'kill_vnf',
725 @mock.patch("yardstick.network_services.vnf_generic.vnf.sample_vnf.time")
726 @mock.patch(SSH_HELPER)
727 def test_terminate(self, ssh, *args):
730 vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
731 vipsec_vnf = ipsec_vnf.VipsecApproxVnf(NAME, vnfd)
732 vipsec_vnf._vnf_process = mock.MagicMock()
733 vipsec_vnf._vnf_process.terminate = mock.Mock()
734 self.assertIsNone(vipsec_vnf.terminate())
737 class TestVipsecApproxSetupEnvHelper(unittest.TestCase):
742 "20.0.0.0-20.0.0.100"
745 "10.0.0.0-10.0.0.100"
757 "allowed_drop_rate": "0.0 - 0.005"
771 "crypto_type": "SW_cryptodev",
773 "worker_config": "1C/1T",
782 "crypto_type": "SW_cryptodev",
784 "worker_config": "1C/1T",
789 "crypto_algorithms": "aes-gcm",
794 ALL_OPTIONS_ERROR = {
798 "20.0.0.0-20.0.0.100"
801 "10.0.0.0-10.0.0.100"
813 "allowed_drop_rate": "0.0 - 0.005"
827 "crypto_type": "SW_cryptodev",
829 "worker_config": "1C/1T",
838 "crypto_type": "SW_cryptodev",
840 "worker_config": "1C/1T",
845 "crypto_algorithms": "aes-gcm",
855 "crypto_type": "SW_cryptodev",
857 "worker_config": "1C/1T",
862 CPU_LAYOUT = {'cpuinfo': [[0, 0, 0, 0, 0, 0, 0, 0],
863 [1, 0, 0, 0, 0, 1, 1, 0],
864 [2, 1, 0, 0, 0, 2, 2, 1],
865 [3, 1, 0, 0, 0, 3, 3, 1],
866 [4, 2, 0, 0, 0, 4, 4, 2],
867 [5, 2, 0, 0, 0, 5, 5, 2],
868 [6, 3, 0, 0, 0, 6, 6, 3],
869 [7, 3, 0, 0, 0, 7, 7, 3],
870 [8, 4, 0, 0, 0, 8, 8, 4],
871 [9, 5, 0, 1, 0, 9, 9, 4],
872 [10, 6, 0, 1, 0, 10, 10, 5],
873 [11, 6, 0, 1, 0, 11, 11, 5],
874 [12, 7, 0, 1, 0, 12, 12, 6],
875 [13, 7, 0, 1, 0, 13, 13, 6],
876 [14, 8, 0, 1, 0, 14, 14, 7],
877 [15, 8, 0, 1, 0, 15, 15, 7],
878 [16, 9, 0, 1, 0, 16, 16, 8],
879 [17, 9, 0, 1, 0, 17, 17, 8]]}
881 VPP_INTERFACES_DUMP = [
884 "sup_sw_if_index": 0,
885 "l2_address_length": 0,
886 "l2_address": [0, 0, 0, 0, 0, 0, 0, 0],
887 "interface_name": "local0",
895 "sub_number_of_tags": 0,
896 "sub_outer_vlan_id": 0,
897 "sub_inner_vlan_id": 0,
898 "sub_exact_match": 0,
900 "sub_outer_vlan_id_any": 0,
901 "sub_inner_vlan_id_any": 0,
909 "sup_sw_if_index": 1,
910 "l2_address_length": 6,
911 "l2_address": [144, 226, 186, 124, 65, 168, 0, 0],
912 "interface_name": "TenGigabitEthernetff/6/0",
920 "sub_number_of_tags": 0,
921 "sub_outer_vlan_id": 0,
922 "sub_inner_vlan_id": 0,
923 "sub_exact_match": 0,
925 "sub_outer_vlan_id_any": 0,
926 "sub_inner_vlan_id_any": 0,
934 "sup_sw_if_index": 2,
935 "l2_address_length": 6,
936 "l2_address": [78, 144, 133, 211, 197, 19, 0, 0],
937 "interface_name": "VirtualFunctionEthernetff/7/0",
945 "sub_number_of_tags": 0,
946 "sub_outer_vlan_id": 0,
947 "sub_inner_vlan_id": 0,
948 "sub_exact_match": 0,
950 "sub_outer_vlan_id_any": 0,
951 "sub_inner_vlan_id_any": 0,
959 VPP_INTERFACES_STATUS = \
960 ' Name Idx State MTU (L3/IP4/IP6/MPLS)' \
962 'TenGigabitEthernetff/6/0 1 up 9000/0/0/0 \n' \
963 'VirtualFunctionEthernetff/7/0 2 up 9000/0/0/0 \n' \
964 'ipsec0 2 up 9000/0/0/0 \n' \
965 'local0 0 down 0/0/0/0 '
967 VPP_INTERFACES_STATUS_FALSE = \
968 ' Name Idx State MTU (L3/IP4/IP6/MPLS)' \
970 'TenGigabitEthernetff/6/0 1 down 9000/0/0/0 \n' \
971 'VirtualFunctionEthernetff/7/0 2 down 9000/0/0/0 \n' \
972 'ipsec0 2 down 9000/0/0/0 \n' \
973 'local0 0 down 0/0/0/0 '
975 def test__get_crypto_type(self):
976 vnfd_helper = VnfdHelper(
977 TestVipsecApproxVnf.VNFD['vnfd:vnfd-catalog']['vnfd'][0])
978 ssh_helper = mock.Mock()
979 scenario_helper = mock.Mock()
980 scenario_helper.options = self.OPTIONS
982 ipsec_approx_setup_helper = VipsecApproxSetupEnvHelper(vnfd_helper,
985 self.assertEqual('SW_cryptodev',
986 ipsec_approx_setup_helper._get_crypto_type())
988 def test__get_crypto_algorithms(self):
989 vnfd_helper = VnfdHelper(
990 TestVipsecApproxVnf.VNFD['vnfd:vnfd-catalog']['vnfd'][0])
991 ssh_helper = mock.Mock()
992 scenario_helper = mock.Mock()
993 scenario_helper.all_options = self.ALL_OPTIONS
995 ipsec_approx_setup_helper = VipsecApproxSetupEnvHelper(vnfd_helper,
998 self.assertEqual('aes-gcm',
999 ipsec_approx_setup_helper._get_crypto_algorithms())
1001 def test__get_n_tunnels(self):
1002 vnfd_helper = VnfdHelper(
1003 TestVipsecApproxVnf.VNFD['vnfd:vnfd-catalog']['vnfd'][0])
1004 ssh_helper = mock.Mock()
1005 scenario_helper = mock.Mock()
1006 scenario_helper.all_options = self.ALL_OPTIONS
1008 ipsec_approx_setup_helper = VipsecApproxSetupEnvHelper(vnfd_helper,
1011 self.assertEqual(1, ipsec_approx_setup_helper._get_n_tunnels())
1013 def test__get_n_connections(self):
1014 vnfd_helper = VnfdHelper(
1015 TestVipsecApproxVnf.VNFD['vnfd:vnfd-catalog']['vnfd'][0])
1016 ssh_helper = mock.Mock()
1017 scenario_helper = mock.Mock()
1018 scenario_helper.all_options = self.ALL_OPTIONS
1020 ipsec_approx_setup_helper = VipsecApproxSetupEnvHelper(vnfd_helper,
1023 self.assertEqual(1, ipsec_approx_setup_helper._get_n_connections())
1025 def test__get_n_connections_error(self):
1026 vnfd_helper = VnfdHelper(
1027 TestVipsecApproxVnf.VNFD['vnfd:vnfd-catalog']['vnfd'][0])
1028 ssh_helper = mock.Mock()
1029 scenario_helper = mock.Mock()
1030 scenario_helper.all_options = self.ALL_OPTIONS_ERROR
1032 ipsec_approx_setup_helper = VipsecApproxSetupEnvHelper(vnfd_helper,
1035 with self.assertRaises(KeyError) as raised:
1036 ipsec_approx_setup_helper._get_n_connections()
1038 'Missing flow definition in scenario section of the task definition file',
1039 str(raised.exception))
1041 def test__get_flow_src_start_ip(self):
1042 vnfd_helper = VnfdHelper(
1043 TestVipsecApproxVnf.VNFD['vnfd:vnfd-catalog']['vnfd'][0])
1044 ssh_helper = mock.Mock()
1045 scenario_helper = mock.Mock()
1046 scenario_helper.all_options = self.ALL_OPTIONS
1048 ipsec_approx_setup_helper = VipsecApproxSetupEnvHelper(vnfd_helper,
1051 self.assertEqual('10.0.0.0',
1052 ipsec_approx_setup_helper._get_flow_src_start_ip())
1054 def test__get_flow_src_start_ip_vnf1(self):
1055 vnfd_helper = VnfdHelper(
1056 TestVipsecApproxVnf.VNFD_ERROR['vnfd:vnfd-catalog']['vnfd'][0])
1057 ssh_helper = mock.Mock()
1058 scenario_helper = mock.Mock()
1059 scenario_helper.all_options = self.ALL_OPTIONS
1061 ipsec_approx_setup_helper = VipsecApproxSetupEnvHelper(vnfd_helper,
1064 self.assertEqual('20.0.0.0',
1065 ipsec_approx_setup_helper._get_flow_src_start_ip())
1067 def test__get_flow_src_start_ip_error(self):
1068 vnfd_helper = VnfdHelper(
1069 TestVipsecApproxVnf.VNFD['vnfd:vnfd-catalog']['vnfd'][0])
1070 ssh_helper = mock.Mock()
1071 scenario_helper = mock.Mock()
1072 scenario_helper.all_options = self.ALL_OPTIONS_ERROR
1074 ipsec_approx_setup_helper = VipsecApproxSetupEnvHelper(vnfd_helper,
1077 with self.assertRaises(KeyError) as raised:
1078 ipsec_approx_setup_helper._get_flow_src_start_ip()
1080 'Missing flow definition in scenario section of the task definition file',
1081 str(raised.exception))
1083 def test__get_flow_dst_start_ip(self):
1084 vnfd_helper = VnfdHelper(
1085 TestVipsecApproxVnf.VNFD['vnfd:vnfd-catalog']['vnfd'][0])
1086 ssh_helper = mock.Mock()
1087 scenario_helper = mock.Mock()
1088 scenario_helper.all_options = self.ALL_OPTIONS
1090 ipsec_approx_setup_helper = VipsecApproxSetupEnvHelper(vnfd_helper,
1093 self.assertEqual('20.0.0.0',
1094 ipsec_approx_setup_helper._get_flow_dst_start_ip())
1096 def test__get_flow_dst_start_ip_vnf1(self):
1097 vnfd_helper = VnfdHelper(
1098 TestVipsecApproxVnf.VNFD_ERROR['vnfd:vnfd-catalog']['vnfd'][0])
1099 ssh_helper = mock.Mock()
1100 scenario_helper = mock.Mock()
1101 scenario_helper.all_options = self.ALL_OPTIONS
1103 ipsec_approx_setup_helper = VipsecApproxSetupEnvHelper(vnfd_helper,
1106 self.assertEqual('10.0.0.0',
1107 ipsec_approx_setup_helper._get_flow_dst_start_ip())
1109 def test__get_flow_dst_start_ip_error(self):
1110 vnfd_helper = VnfdHelper(
1111 TestVipsecApproxVnf.VNFD['vnfd:vnfd-catalog']['vnfd'][0])
1112 ssh_helper = mock.Mock()
1113 scenario_helper = mock.Mock()
1114 scenario_helper.all_options = self.ALL_OPTIONS_ERROR
1116 ipsec_approx_setup_helper = VipsecApproxSetupEnvHelper(vnfd_helper,
1119 with self.assertRaises(KeyError) as raised:
1120 ipsec_approx_setup_helper._get_flow_dst_start_ip()
1122 'Missing flow definition in scenario section of the task definition file',
1123 str(raised.exception))
1125 def test_build_config(self):
1126 vnfd_helper = VnfdHelper(
1127 TestVipsecApproxVnf.VNFD['vnfd:vnfd-catalog']['vnfd'][0])
1128 ssh_helper = mock.Mock()
1129 scenario_helper = mock.Mock()
1131 ipsec_approx_setup_helper = VipsecApproxSetupEnvHelper(vnfd_helper,
1134 ipsec_approx_setup_helper.build_config()
1136 @mock.patch.object(utils, 'setup_hugepages')
1137 def test_setup_vnf_environment(self, *args):
1138 vnfd_helper = VnfdHelper(
1139 TestVipsecApproxVnf.VNFD['vnfd:vnfd-catalog']['vnfd'][0])
1140 ssh_helper = mock.Mock()
1141 ssh_helper.execute.return_value = 0, '0', ''
1142 scenario_helper = mock.Mock()
1143 scenario_helper.nodes = [None, None]
1144 scenario_helper.options = self.OPTIONS
1145 scenario_helper.all_options = self.ALL_OPTIONS
1147 ipsec_approx_setup_helper = VipsecApproxSetupEnvHelper(vnfd_helper,
1150 self.assertIsInstance(
1151 ipsec_approx_setup_helper.setup_vnf_environment(),
1154 def test_calculate_frame_size(self):
1155 vnfd_helper = VnfdHelper(
1156 TestVipsecApproxVnf.VNFD['vnfd:vnfd-catalog']['vnfd'][0])
1157 ssh_helper = mock.Mock()
1158 scenario_helper = mock.Mock()
1160 ipsec_approx_setup_helper = VipsecApproxSetupEnvHelper(vnfd_helper,
1163 self.assertEqual(16984 / 48,
1164 ipsec_approx_setup_helper.calculate_frame_size(
1165 {'64B': 28, '570B': 16, '1518B': 4}))
1167 def test_calculate_frame_size_64(self):
1168 vnfd_helper = VnfdHelper(
1169 TestVipsecApproxVnf.VNFD['vnfd:vnfd-catalog']['vnfd'][0])
1170 ssh_helper = mock.Mock()
1171 scenario_helper = mock.Mock()
1173 ipsec_approx_setup_helper = VipsecApproxSetupEnvHelper(vnfd_helper,
1176 self.assertEqual(64,
1177 ipsec_approx_setup_helper.calculate_frame_size({}))
1179 def test_calculate_frame_size_64_error(self):
1180 vnfd_helper = VnfdHelper(
1181 TestVipsecApproxVnf.VNFD['vnfd:vnfd-catalog']['vnfd'][0])
1182 ssh_helper = mock.Mock()
1183 scenario_helper = mock.Mock()
1185 ipsec_approx_setup_helper = VipsecApproxSetupEnvHelper(vnfd_helper,
1188 self.assertEqual(64,
1189 ipsec_approx_setup_helper.calculate_frame_size(
1190 {'64B': -28, '570B': 16, '1518B': 4}))
1192 def test_check_status(self):
1193 vnfd_helper = VnfdHelper(
1194 TestVipsecApproxVnf.VNFD['vnfd:vnfd-catalog']['vnfd'][0])
1195 ssh_helper = mock.Mock()
1196 ssh_helper.execute.return_value = 0, self.VPP_INTERFACES_STATUS, ''
1197 scenario_helper = mock.Mock()
1199 ipsec_approx_setup_helper = VipsecApproxSetupEnvHelper(vnfd_helper,
1202 self.assertTrue(ipsec_approx_setup_helper.check_status())
1204 def test_check_status_false(self):
1205 vnfd_helper = VnfdHelper(
1206 TestVipsecApproxVnf.VNFD['vnfd:vnfd-catalog']['vnfd'][0])
1207 ssh_helper = mock.Mock()
1208 ssh_helper.execute.return_value = 0, self.VPP_INTERFACES_STATUS_FALSE, ''
1209 scenario_helper = mock.Mock()
1211 ipsec_approx_setup_helper = VipsecApproxSetupEnvHelper(vnfd_helper,
1214 self.assertFalse(ipsec_approx_setup_helper.check_status())
1216 def test_get_vpp_statistics(self):
1217 vnfd_helper = VnfdHelper(
1218 TestVipsecApproxVnf.VNFD['vnfd:vnfd-catalog']['vnfd'][0])
1219 ssh_helper = mock.Mock()
1220 scenario_helper = mock.Mock()
1222 ipsec_approx_setup_helper = VipsecApproxSetupEnvHelper(vnfd_helper,
1225 ipsec_approx_setup_helper.get_vpp_statistics()
1227 def test_create_ipsec_tunnels(self):
1228 vnfd_helper = VnfdHelper(
1229 TestVipsecApproxVnf.VNFD['vnfd:vnfd-catalog']['vnfd'][0])
1230 ssh_helper = mock.Mock()
1231 scenario_helper = mock.Mock()
1233 ipsec_approx_setup_helper = VipsecApproxSetupEnvHelper(vnfd_helper,
1236 ipsec_approx_setup_helper.create_ipsec_tunnels()
1238 def test_find_raw_data_interface(self):
1239 expected = {'dpdk_port_num': 0,
1240 'driver': 'igb_uio',
1241 'dst_ip': '192.168.100.1',
1242 'dst_mac': '90:e2:ba:7c:30:e8',
1244 'local_ip': '192.168.100.2',
1245 'local_mac': '90:e2:ba:7c:41:a8',
1246 'netmask': '255.255.255.0',
1248 'node_name': 'vnf__0',
1249 'peer_ifname': 'xe0',
1250 'peer_intf': {'dpdk_port_num': 0,
1251 'driver': 'igb_uio',
1252 'dst_ip': '192.168.100.2',
1253 'dst_mac': '90:e2:ba:7c:41:a8',
1255 'local_ip': '192.168.100.1',
1256 'local_mac': '90:e2:ba:7c:30:e8',
1257 'netmask': '255.255.255.0',
1259 'node_name': 'tg__0',
1260 'peer_ifname': 'xe0',
1261 'peer_name': 'vnf__0',
1262 'vld_id': 'uplink_0',
1263 'vpci': '0000:81:00.0'},
1264 'peer_name': 'tg__0',
1265 'vld_id': 'uplink_0',
1266 'vpci': '0000:ff:06.0'}
1267 vnfd_helper = VnfdHelper(
1268 TestVipsecApproxVnf.VNFD['vnfd:vnfd-catalog']['vnfd'][0])
1269 ssh_helper = mock.Mock()
1270 scenario_helper = mock.Mock()
1272 ipsec_approx_setup_helper = VipsecApproxSetupEnvHelper(vnfd_helper,
1275 self.assertEqual(expected,
1276 ipsec_approx_setup_helper.find_raw_data_interface())
1278 def test_find_raw_data_interface_error(self):
1279 vnfd_helper = VnfdHelper(
1280 TestVipsecApproxVnf.VNFD_ERROR['vnfd:vnfd-catalog']['vnfd'][0])
1281 ssh_helper = mock.Mock()
1282 scenario_helper = mock.Mock()
1284 ipsec_approx_setup_helper = VipsecApproxSetupEnvHelper(vnfd_helper,
1287 with self.assertRaises(KeyError):
1288 ipsec_approx_setup_helper.find_raw_data_interface()
1290 def test_find_encrypted_data_interface(self):
1291 expected = {'dpdk_port_num': 1,
1292 'driver': 'igb_uio',
1293 'dst_ip': '1.1.1.2',
1294 'dst_mac': '0a:b1:ec:fd:a2:66',
1296 'local_ip': '1.1.1.1',
1297 'local_mac': '4e:90:85:d3:c5:13',
1298 'netmask': '255.255.255.0',
1300 'node_name': 'vnf__0',
1301 'peer_ifname': 'xe1',
1302 'peer_intf': {'driver': 'igb_uio',
1303 'dst_ip': '1.1.1.1',
1304 'dst_mac': '4e:90:85:d3:c5:13',
1306 'local_ip': '1.1.1.2',
1307 'local_mac': '0a:b1:ec:fd:a2:66',
1308 'netmask': '255.255.255.0',
1310 'node_name': 'vnf__1',
1311 'peer_ifname': 'xe1',
1312 'peer_name': 'vnf__0',
1313 'vld_id': 'ciphertext',
1314 'vpci': '0000:00:07.0'},
1315 'peer_name': 'vnf__1',
1316 'vld_id': 'ciphertext',
1317 'vpci': '0000:ff:07.0'}
1318 vnfd_helper = VnfdHelper(
1319 TestVipsecApproxVnf.VNFD['vnfd:vnfd-catalog']['vnfd'][0])
1320 ssh_helper = mock.Mock()
1321 scenario_helper = mock.Mock()
1323 ipsec_approx_setup_helper = VipsecApproxSetupEnvHelper(vnfd_helper,
1326 self.assertEqual(expected,
1327 ipsec_approx_setup_helper.find_encrypted_data_interface())