add yardstick iruya 9.0.0 release notes
[yardstick.git] / yardstick / tests / unit / network_services / vnf_generic / vnf / test_ipsec_vnf.py
1 # Copyright (c) 2019 Viosoft Corporation
2 #
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
6 #
7 #      http://www.apache.org/licenses/LICENSE-2.0
8 #
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.
14
15 import unittest
16 from multiprocessing import Process
17
18 import mock
19
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 \
29     mock_ssh
30
31 SSH_HELPER = 'yardstick.network_services.vnf_generic.vnf.sample_vnf.VnfSshHelper'
32
33 NAME = 'vnf__1'
34
35
36 class TestCryptoAlg(unittest.TestCase):
37
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)
43
44
45 class TestIntegAlg(unittest.TestCase):
46
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)
52
53
54 @mock.patch("yardstick.network_services.vnf_generic.vnf.sample_vnf.Process")
55 class TestVipsecApproxVnf(unittest.TestCase):
56     VNFD = {'vnfd:vnfd-catalog':
57         {'vnfd':
58             [{
59                 "benchmark": {
60                     "kpi": [
61                         "packets_in",
62                         "packets_fwd",
63                         "packets_dropped"
64                     ]
65                 },
66                 "connection-point": [
67                     {
68                         "name": "xe0",
69                         "type": "VPORT"
70                     },
71                     {
72                         "name": "xe1",
73                         "type": "VPORT"
74                     }
75                 ],
76                 "description": "VPP IPsec",
77                 "id": "VipsecApproxVnf",
78                 "mgmt-interface": {
79                     "ip": "10.10.10.101",
80                     "password": "r00t",
81                     "user": "root",
82                     "vdu-id": "ipsecvnf-baremetal"
83                 },
84                 "name": "IpsecVnf",
85                 "short-name": "IpsecVnf",
86                 "vdu": [
87                     {
88                         "description": "VPP Ipsec",
89                         "external-interface": [
90                             {
91                                 "name": "xe0",
92                                 "virtual-interface": {
93                                     "dpdk_port_num": 0,
94                                     "driver": "igb_uio",
95                                     "dst_ip": "192.168.100.1",
96                                     "dst_mac": "90:e2:ba:7c:30:e8",
97                                     "ifname": "xe0",
98                                     "local_ip": "192.168.100.2",
99                                     "local_mac": "90:e2:ba:7c:41:a8",
100                                     "netmask": "255.255.255.0",
101                                     "network": {},
102                                     "node_name": "vnf__0",
103                                     "peer_ifname": "xe0",
104                                     "peer_intf": {
105                                         "dpdk_port_num": 0,
106                                         "driver": "igb_uio",
107                                         "dst_ip": "192.168.100.2",
108                                         "dst_mac": "90:e2:ba:7c:41:a8",
109                                         "ifname": "xe0",
110                                         "local_ip": "192.168.100.1",
111                                         "local_mac": "90:e2:ba:7c:30:e8",
112                                         "netmask": "255.255.255.0",
113                                         "network": {},
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"
119                                     },
120                                     "peer_name": "tg__0",
121                                     "vld_id": "uplink_0",
122                                     "vpci": "0000:ff:06.0"
123                                 },
124                                 "vnfd-connection-point-ref": "xe0"
125                             },
126                             {
127                                 "name": "xe1",
128                                 "virtual-interface": {
129                                     "dpdk_port_num": 1,
130                                     "driver": "igb_uio",
131                                     "dst_ip": "1.1.1.2",
132                                     "dst_mac": "0a:b1:ec:fd:a2:66",
133                                     "ifname": "xe1",
134                                     "local_ip": "1.1.1.1",
135                                     "local_mac": "4e:90:85:d3:c5:13",
136                                     "netmask": "255.255.255.0",
137                                     "network": {},
138                                     "node_name": "vnf__0",
139                                     "peer_ifname": "xe1",
140                                     "peer_intf": {
141                                         "driver": "igb_uio",
142                                         "dst_ip": "1.1.1.1",
143                                         "dst_mac": "4e:90:85:d3:c5:13",
144                                         "ifname": "xe1",
145                                         "local_ip": "1.1.1.2",
146                                         "local_mac": "0a:b1:ec:fd:a2:66",
147                                         "netmask": "255.255.255.0",
148                                         "network": {},
149                                         "node_name": "vnf__1",
150                                         "peer_ifname": "xe1",
151                                         "peer_name": "vnf__0",
152                                         "vld_id": "ciphertext",
153                                         "vpci": "0000:00:07.0"
154                                     },
155                                     "peer_name": "vnf__1",
156                                     "vld_id": "ciphertext",
157                                     "vpci": "0000:ff:07.0"
158                                 },
159                                 "vnfd-connection-point-ref": "xe1"
160                             }
161                         ],
162                         "id": "ipsecvnf-baremetal",
163                         "name": "ipsecvnf-baremetal",
164                         "routing_table": []
165                     }
166                 ]
167             }
168             ]}}
169
170     VNFD_ERROR = {'vnfd:vnfd-catalog':
171         {'vnfd':
172             [{
173                 "benchmark": {
174                     "kpi": [
175                         "packets_in",
176                         "packets_fwd",
177                         "packets_dropped"
178                     ]
179                 },
180                 "connection-point": [
181                     {
182                         "name": "xe0",
183                         "type": "VPORT"
184                     },
185                     {
186                         "name": "xe1",
187                         "type": "VPORT"
188                     }
189                 ],
190                 "description": "VPP IPsec",
191                 "id": "VipsecApproxVnf",
192                 "mgmt-interface": {
193                     "ip": "10.10.10.101",
194                     "password": "r00t",
195                     "user": "root",
196                     "vdu-id": "ipsecvnf-baremetal"
197                 },
198                 "name": "IpsecVnf",
199                 "short-name": "IpsecVnf",
200                 "vdu": [
201                     {
202                         "description": "VPP Ipsec",
203                         "external-interface": [
204                             {
205                                 "name": "xe0",
206                                 "virtual-interface": {
207                                     "dpdk_port_num": 0,
208                                     "driver": "igb_uio",
209                                     "dst_ip": "192.168.100.1",
210                                     "dst_mac": "90:e2:ba:7c:30:e8",
211                                     "ifname": "xe0",
212                                     "local_ip": "192.168.100.2",
213                                     "local_mac": "90:e2:ba:7c:41:a8",
214                                     "netmask": "255.255.255.0",
215                                     "network": {},
216                                     "node_name": "vnf__0",
217                                     "peer_ifname": "xe0",
218                                     "peer_intf": {
219                                         "dpdk_port_num": 0,
220                                         "driver": "igb_uio",
221                                         "dst_ip": "192.168.100.2",
222                                         "dst_mac": "90:e2:ba:7c:41:a8",
223                                         "ifname": "xe0",
224                                         "local_ip": "192.168.100.1",
225                                         "local_mac": "90:e2:ba:7c:30:e8",
226                                         "netmask": "255.255.255.0",
227                                         "network": {},
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"
233                                     },
234                                     "peer_name": "tg__0",
235                                     "vld_id": "uplink_1",
236                                     "vpci": "0000:ff:06.0"
237                                 },
238                                 "vnfd-connection-point-ref": "xe0"
239                             },
240                             {
241                                 "name": "xe1",
242                                 "virtual-interface": {
243                                     "dpdk_port_num": 1,
244                                     "driver": "igb_uio",
245                                     "dst_ip": "1.1.1.2",
246                                     "dst_mac": "0a:b1:ec:fd:a2:66",
247                                     "ifname": "xe1",
248                                     "local_ip": "1.1.1.1",
249                                     "local_mac": "4e:90:85:d3:c5:13",
250                                     "netmask": "255.255.255.0",
251                                     "network": {},
252                                     "node_name": "vnf__1",
253                                     "peer_ifname": "xe1",
254                                     "peer_intf": {
255                                         "driver": "igb_uio",
256                                         "dst_ip": "1.1.1.1",
257                                         "dst_mac": "4e:90:85:d3:c5:13",
258                                         "ifname": "xe1",
259                                         "local_ip": "1.1.1.2",
260                                         "local_mac": "0a:b1:ec:fd:a2:66",
261                                         "netmask": "255.255.255.0",
262                                         "network": {},
263                                         "node_name": "vnf__1",
264                                         "peer_ifname": "xe1",
265                                         "peer_name": "vnf__0",
266                                         "vld_id": "ciphertext",
267                                         "vpci": "0000:00:07.0"
268                                     },
269                                     "peer_name": "vnf__1",
270                                     "vld_id": "ciphertext",
271                                     "vpci": "0000:ff:07.0"
272                                 },
273                                 "vnfd-connection-point-ref": "xe1"
274                             }
275                         ],
276                         "id": "ipsecvnf-baremetal",
277                         "name": "ipsecvnf-baremetal",
278                         "routing_table": []
279                     }
280                 ]
281             }
282             ]}}
283
284     scenario_cfg = {
285         "nodes": {
286             "tg__0": "trafficgen.yardstick-5486cc2f",
287             "vnf__0": "vnf0.yardstick-5486cc2f",
288             "vnf__1": "vnf1.yardstick-5486cc2f"
289         },
290         "options": {
291             "flow": {
292                 "count": 1,
293                 "dst_ip": [
294                     "20.0.0.0-20.0.0.100"
295                 ],
296                 "src_ip": [
297                     "10.0.0.0-10.0.0.100"
298                 ]
299             },
300             "framesize": {
301                 "downlink": {
302                     "64B": 100
303                 },
304                 "uplink": {
305                     "64B": 100
306                 }
307             },
308             "rfc2544": {
309                 "allowed_drop_rate": "0.0 - 0.005"
310             },
311             "tg__0": {
312                 "collectd": {
313                     "interval": 1
314                 },
315                 "queues_per_port": 7
316             },
317             "traffic_type": 4,
318             "vnf__0": {
319                 "collectd": {
320                     "interval": 1
321                 },
322                 "vnf_config": {
323                     "crypto_type": "SW_cryptodev",
324                     "rxq": 1,
325                     "worker_config": "1C/1T",
326                     "worker_threads": 4
327                 }
328             },
329             "vnf__1": {
330                 "collectd": {
331                     "interval": 1
332                 },
333                 "vnf_config": {
334                     "crypto_type": "SW_cryptodev",
335                     "rxq": 1,
336                     "worker_config": "1C/1T",
337                     "worker_threads": 4
338                 }
339             },
340             "vpp_config": {
341                 "crypto_algorithms": "aes-gcm",
342                 "tunnel": 1
343             }
344         },
345         "runner": {
346             "duration": 500,
347             "interval": 10,
348             "object":
349                 "yardstick.benchmark.scenarios.networking.vnf_generic.NetworkServiceTestCase",
350             "output_config": {
351                 "DEFAULT": {
352                     "debug": "False",
353                     "dispatcher": [
354                         "influxdb"
355                     ]
356                 },
357                 "dispatcher_file": {
358                     "debug": "False",
359                     "dispatcher": "influxdb",
360                     "file_path": "/tmp/yardstick.out"
361                 },
362                 "dispatcher_http": {
363                     "debug": "False",
364                     "dispatcher": "influxdb",
365                     "target": "http://127.0.0.1:8000/results",
366                     "timeout": "20"
367                 },
368                 "dispatcher_influxdb": {
369                     "db_name": "yardstick",
370                     "debug": "False",
371                     "dispatcher": "influxdb",
372                     "password": "r00t",
373                     "target": "http://192.168.100.3:8086",
374                     "timeout": "20",
375                     "username": "root"
376                 },
377                 "nsb": {
378                     "bin_path": "/opt/nsb_bin",
379                     "debug": "False",
380                     "dispatcher": "influxdb",
381                     "trex_client_lib": "/opt/nsb_bin/trex_client/stl",
382                     "trex_path": "/opt/nsb_bin/trex/scripts"
383                 }
384             },
385             "runner_id": 1105,
386             "type": "Duration"
387         },
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",
393         "type": "NSPerf"
394     }
395
396     context_cfg = {
397         "networks": {},
398         "nodes": {
399             "tg__0": {
400                 "VNF model": "../../vnf_descriptors/tg_vpp_tpl.yaml",
401                 "ctx_type": "Node",
402                 "interfaces": {
403                     "xe0": {
404                         "dpdk_port_num": 0,
405                         "driver": "igb_uio",
406                         "dst_ip": "192.168.100.2",
407                         "dst_mac": "90:e2:ba:7c:41:a8",
408                         "ifname": "xe0",
409                         "local_ip": "192.168.100.1",
410                         "local_mac": "90:e2:ba:7c:30:e8",
411                         "netmask": "255.255.255.0",
412                         "network": {},
413                         "node_name": "tg__0",
414                         "peer_ifname": "xe0",
415                         "peer_intf": {
416                             "dpdk_port_num": 0,
417                             "driver": "igb_uio",
418                             "dst_ip": "192.168.100.1",
419                             "dst_mac": "90:e2:ba:7c:30:e8",
420                             "ifname": "xe0",
421                             "local_ip": "192.168.100.2",
422                             "local_mac": "90:e2:ba:7c:41:a8",
423                             "netmask": "255.255.255.0",
424                             "network": {},
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"
430                         },
431                         "peer_name": "vnf__0",
432                         "vld_id": "uplink_0",
433                         "vpci": "0000:81:00.0"
434                     },
435                     "xe1": {
436                         "dpdk_port_num": 1,
437                         "driver": "igb_uio",
438                         "dst_ip": "192.168.101.2",
439                         "dst_mac": "90:e2:ba:7c:41:a9",
440                         "ifname": "xe1",
441                         "local_ip": "192.168.101.1",
442                         "local_mac": "90:e2:ba:7c:30:e9",
443                         "netmask": "255.255.255.0",
444                         "network": {},
445                         "node_name": "tg__0",
446                         "peer_ifname": "xe0",
447                         "peer_intf": {
448                             "dpdk_port_num": 1,
449                             "driver": "igb_uio",
450                             "dst_ip": "192.168.101.1",
451                             "dst_mac": "90:e2:ba:7c:30:e9",
452                             "ifname": "xe0",
453                             "local_ip": "192.168.101.2",
454                             "local_mac": "90:e2:ba:7c:41:a9",
455                             "netmask": "255.255.255.0",
456                             "network": {},
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"
462                         },
463                         "peer_name": "vnf__1",
464                         "vld_id": "downlink_0",
465                         "vpci": "0000:81:00.1"
466                     }
467                 },
468                 "ip": "10.10.10.10",
469                 "member-vnf-index": "1",
470                 "name": "trafficgen.yardstick-5486cc2f",
471                 "password": "r00t",
472                 "port": 22,
473                 "role": "TrafficGen",
474                 "user": "root",
475                 "username": "root",
476                 "vnfd-id-ref": "tg__0"
477             },
478             "vnf__0": {
479                 "VNF model": "../../vnf_descriptors/vpp_vnfd.yaml",
480                 "ctx_type": "Node",
481                 "interfaces": {
482                     "xe0": {
483                         "dpdk_port_num": 0,
484                         "driver": "igb_uio",
485                         "dst_ip": "192.168.100.1",
486                         "dst_mac": "90:e2:ba:7c:30:e8",
487                         "ifname": "xe0",
488                         "local_ip": "192.168.100.2",
489                         "local_mac": "90:e2:ba:7c:41:a8",
490                         "netmask": "255.255.255.0",
491                         "network": {},
492                         "node_name": "vnf__0",
493                         "peer_ifname": "xe0",
494                         "peer_intf": {
495                             "dpdk_port_num": 0,
496                             "driver": "igb_uio",
497                             "dst_ip": "192.168.100.2",
498                             "dst_mac": "90:e2:ba:7c:41:a8",
499                             "ifname": "xe0",
500                             "local_ip": "192.168.100.1",
501                             "local_mac": "90:e2:ba:7c:30:e8",
502                             "netmask": "255.255.255.0",
503                             "network": {},
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"
509                         },
510                         "peer_name": "tg__0",
511                         "vld_id": "uplink_0",
512                         "vpci": "0000:00:06.0"
513                     },
514                     "xe1": {
515                         "dpdk_port_num": 1,
516                         "driver": "igb_uio",
517                         "dst_ip": "1.1.1.2",
518                         "dst_mac": "0a:b1:ec:fd:a2:66",
519                         "ifname": "xe1",
520                         "local_ip": "1.1.1.1",
521                         "local_mac": "4e:90:85:d3:c5:13",
522                         "netmask": "255.255.255.0",
523                         "network": {},
524                         "node_name": "vnf__0",
525                         "peer_ifname": "xe1",
526                         "peer_intf": {
527                             "dpdk_port_num": 1,
528                             "driver": "igb_uio",
529                             "dst_ip": "1.1.1.1",
530                             "dst_mac": "4e:90:85:d3:c5:13",
531                             "ifname": "xe1",
532                             "local_ip": "1.1.1.2",
533                             "local_mac": "0a:b1:ec:fd:a2:66",
534                             "netmask": "255.255.255.0",
535                             "network": {},
536                             "node_name": "vnf__1",
537                             "peer_ifname": "xe1",
538                             "peer_name": "vnf__0",
539                             "vld_id": "ciphertext",
540                             "vpci": "0000:00:07.0"
541                         },
542                         "peer_name": "vnf__1",
543                         "vld_id": "ciphertext",
544                         "vpci": "0000:00:07.0"
545                     }
546                 },
547                 "ip": "10.10.10.101",
548                 "member-vnf-index": "2",
549                 "name": "vnf0.yardstick-5486cc2f",
550                 "password": "r00t",
551                 "port": 22,
552                 "role": "VirtualNetworkFunction",
553                 "user": "root",
554                 "username": "root",
555                 "vnfd-id-ref": "vnf__0"
556             },
557             "vnf__1": {
558                 "VNF model": "../../vnf_descriptors/vpp_vnfd.yaml",
559                 "ctx_type": "Node",
560                 "interfaces": {
561                     "xe0": {
562                         "dpdk_port_num": 0,
563                         "driver": "igb_uio",
564                         "dst_ip": "192.168.101.1",
565                         "dst_mac": "90:e2:ba:7c:30:e9",
566                         "ifname": "xe0",
567                         "local_ip": "192.168.101.2",
568                         "local_mac": "90:e2:ba:7c:41:a9",
569                         "netmask": "255.255.255.0",
570                         "network": {},
571                         "node_name": "vnf__1",
572                         "peer_ifname": "xe1",
573                         "peer_intf": {
574                             "dpdk_port_num": 1,
575                             "driver": "igb_uio",
576                             "dst_ip": "192.168.101.2",
577                             "dst_mac": "90:e2:ba:7c:41:a9",
578                             "ifname": "xe1",
579                             "local_ip": "192.168.101.1",
580                             "local_mac": "90:e2:ba:7c:30:e9",
581                             "netmask": "255.255.255.0",
582                             "network": {},
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"
588                         },
589                         "peer_name": "tg__0",
590                         "vld_id": "downlink_0",
591                         "vpci": "0000:00:06.0"
592                     },
593                     "xe1": {
594                         "dpdk_port_num": 1,
595                         "driver": "igb_uio",
596                         "dst_ip": "1.1.1.1",
597                         "dst_mac": "4e:90:85:d3:c5:13",
598                         "ifname": "xe1",
599                         "local_ip": "1.1.1.2",
600                         "local_mac": "0a:b1:ec:fd:a2:66",
601                         "netmask": "255.255.255.0",
602                         "network": {},
603                         "node_name": "vnf__1",
604                         "peer_ifname": "xe1",
605                         "peer_intf": {
606                             "dpdk_port_num": 1,
607                             "driver": "igb_uio",
608                             "dst_ip": "1.1.1.2",
609                             "dst_mac": "0a:b1:ec:fd:a2:66",
610                             "ifname": "xe1",
611                             "local_ip": "1.1.1.1",
612                             "local_mac": "4e:90:85:d3:c5:13",
613                             "netmask": "255.255.255.0",
614                             "network": {},
615                             "node_name": "vnf__0",
616                             "peer_ifname": "xe1",
617                             "peer_name": "vnf__1",
618                             "vld_id": "ciphertext",
619                             "vpci": "0000:00:07.0"
620                         },
621                         "peer_name": "vnf__0",
622                         "vld_id": "ciphertext",
623                         "vpci": "0000:00:07.0"
624                     }
625                 },
626                 "ip": "10.10.10.102",
627                 "member-vnf-index": "3",
628                 "name": "vnf1.yardstick-5486cc2f",
629                 "password": "r00t",
630                 "port": 22,
631                 "role": "VirtualNetworkFunction",
632                 "user": "root",
633                 "username": "root",
634                 "vnfd-id-ref": "vnf__1"
635             }
636         }
637     }
638
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)
643
644     @mock.patch(SSH_HELPER)
645     def test__run(self, ssh, *args):
646         mock_ssh(ssh)
647
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',
656                               'lb_count': 1,
657                               'worker_config': '1C/1T',
658                               'worker_threads': 1}
659         vipsec_vnf.all_options = {'traffic_type': '4',
660                                   'topology': 'nsb_test_case.yaml'}
661         vipsec_vnf._run()
662         # vipsec_vnf.setup_helper.ssh_helper.execute.assert_called_once()
663
664     @mock.patch(SSH_HELPER)
665     def test_wait_for_instantiate(self, ssh, *args):
666         mock_ssh(ssh)
667
668         mock_process = mock.Mock(autospec=Process)
669         mock_process.is_alive.return_value = True
670         mock_process.exitcode = 432
671
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)
680
681     @mock.patch(SSH_HELPER)
682     def test_wait_for_instantiate_crash(self, ssh, *args):
683         mock_ssh(ssh)
684
685         mock_process = mock.Mock(autospec=Process)
686         mock_process.is_alive.return_value = False
687         mock_process.exitcode = 432
688
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
697
698         with self.assertRaises(RuntimeError) as raised:
699             vipsec_vnf.wait_for_instantiate()
700
701         self.assertIn('VNF process died', str(raised.exception))
702
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):
711         mock_ssh(ssh)
712
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"}
717         }
718         result = {
719             'collect_stats': {'packets_in': 0, 'packets_fwd': 0,
720                               'packets_dropped': 0},
721             'physical_node': 'mock_node'
722         }
723         self.assertEqual(result, vipsec_vnf.collect_kpi())
724
725     @mock.patch.object(utils, 'find_relative_file')
726     @mock.patch(
727         "yardstick.network_services.vnf_generic.vnf.sample_vnf.Context")
728     @mock.patch(SSH_HELPER)
729     def test_instantiate(self, ssh, *args):
730         mock_ssh(ssh)
731
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,
740                                                  self.context_cfg))
741
742     @mock.patch.object(ipsec_vnf.VipsecApproxSetupEnvHelper, 'kill_vnf',
743                        return_value='')
744     @mock.patch("yardstick.network_services.vnf_generic.vnf.sample_vnf.time")
745     @mock.patch(SSH_HELPER)
746     def test_terminate(self, ssh, *args):
747         mock_ssh(ssh)
748
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())
754
755
756 class TestVipsecApproxSetupEnvHelper(unittest.TestCase):
757     ALL_OPTIONS = {
758         "flow": {
759             "count": 1,
760             "dst_ip": [
761                 "20.0.0.0-20.0.0.100"
762             ],
763             "src_ip": [
764                 "10.0.0.0-10.0.0.100"
765             ]
766         },
767         "framesize": {
768             "downlink": {
769                 "64B": 100
770             },
771             "uplink": {
772                 "64B": 100
773             }
774         },
775         "rfc2544": {
776             "allowed_drop_rate": "0.0 - 0.005"
777         },
778         "tg__0": {
779             "collectd": {
780                 "interval": 1
781             },
782             "queues_per_port": 7
783         },
784         "traffic_type": 4,
785         "vnf__0": {
786             "collectd": {
787                 "interval": 1
788             },
789             "vnf_config": {
790                 "crypto_type": "SW_cryptodev",
791                 "rxq": 1,
792                 "worker_config": "1C/1T",
793                 "worker_threads": 4
794             }
795         },
796         "vnf__1": {
797             "collectd": {
798                 "interval": 1
799             },
800             "vnf_config": {
801                 "crypto_type": "SW_cryptodev",
802                 "rxq": 1,
803                 "worker_config": "1C/1T",
804                 "worker_threads": 4
805             }
806         },
807         "vpp_config": {
808             "crypto_algorithms": "aes-gcm",
809             "tunnel": 1
810         }
811     }
812
813     ALL_OPTIONS_CBC_ALGORITHMS = {
814         "flow": {
815             "count": 1,
816             "dst_ip": [
817                 "20.0.0.0-20.0.0.100"
818             ],
819             "src_ip": [
820                 "10.0.0.0-10.0.0.100"
821             ]
822         },
823         "framesize": {
824             "downlink": {
825                 "64B": 100
826             },
827             "uplink": {
828                 "64B": 100
829             }
830         },
831         "rfc2544": {
832             "allowed_drop_rate": "0.0 - 0.005"
833         },
834         "tg__0": {
835             "collectd": {
836                 "interval": 1
837             },
838             "queues_per_port": 7
839         },
840         "traffic_type": 4,
841         "vnf__0": {
842             "collectd": {
843                 "interval": 1
844             },
845             "vnf_config": {
846                 "crypto_type": "SW_cryptodev",
847                 "rxq": 1,
848                 "worker_config": "1C/1T",
849                 "worker_threads": 4
850             }
851         },
852         "vnf__1": {
853             "collectd": {
854                 "interval": 1
855             },
856             "vnf_config": {
857                 "crypto_type": "SW_cryptodev",
858                 "rxq": 1,
859                 "worker_config": "1C/1T",
860                 "worker_threads": 4
861             }
862         },
863         "vpp_config": {
864             "crypto_algorithms": "cbc-sha1",
865             "tunnel": 1
866         }
867     }
868
869     ALL_OPTIONS_ERROR = {
870         "flow_error": {
871             "count": 1,
872             "dst_ip": [
873                 "20.0.0.0-20.0.0.100"
874             ],
875             "src_ip": [
876                 "10.0.0.0-10.0.0.100"
877             ]
878         },
879         "framesize": {
880             "downlink": {
881                 "64B": 100
882             },
883             "uplink": {
884                 "64B": 100
885             }
886         },
887         "rfc2544": {
888             "allowed_drop_rate": "0.0 - 0.005"
889         },
890         "tg__0": {
891             "collectd": {
892                 "interval": 1
893             },
894             "queues_per_port": 7
895         },
896         "traffic_type": 4,
897         "vnf__0": {
898             "collectd": {
899                 "interval": 1
900             },
901             "vnf_config": {
902                 "crypto_type": "SW_cryptodev",
903                 "rxq": 1,
904                 "worker_config": "1C/1T",
905                 "worker_threads": 4
906             }
907         },
908         "vnf__1": {
909             "collectd": {
910                 "interval": 1
911             },
912             "vnf_config": {
913                 "crypto_type": "SW_cryptodev",
914                 "rxq": 1,
915                 "worker_config": "1C/1T",
916                 "worker_threads": 4
917             }
918         },
919         "vpp_config": {
920             "crypto_algorithms": "aes-gcm",
921             "tunnel": 1
922         }
923     }
924
925     OPTIONS = {
926         "collectd": {
927             "interval": 1
928         },
929         "vnf_config": {
930             "crypto_type": "SW_cryptodev",
931             "rxq": 1,
932             "worker_config": "1C/1T",
933             "worker_threads": 4
934         }
935     }
936
937     OPTIONS_HW = {
938         "collectd": {
939             "interval": 1
940         },
941         "vnf_config": {
942             "crypto_type": "HW_cryptodev",
943             "rxq": 1,
944             "worker_config": "1C/1T",
945             "worker_threads": 4
946         }
947     }
948
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]]}
985
986     VPP_INTERFACES_DUMP = [
987         {
988             "sw_if_index": 0,
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",
993             "admin_up_down": 0,
994             "link_up_down": 0,
995             "link_duplex": 0,
996             "link_speed": 0,
997             "mtu": 0,
998             "sub_id": 0,
999             "sub_dot1ad": 0,
1000             "sub_number_of_tags": 0,
1001             "sub_outer_vlan_id": 0,
1002             "sub_inner_vlan_id": 0,
1003             "sub_exact_match": 0,
1004             "sub_default": 0,
1005             "sub_outer_vlan_id_any": 0,
1006             "sub_inner_vlan_id_any": 0,
1007             "vtr_op": 0,
1008             "vtr_push_dot1q": 0,
1009             "vtr_tag1": 0,
1010             "vtr_tag2": 0
1011         },
1012         {
1013             "sw_if_index": 1,
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",
1018             "admin_up_down": 0,
1019             "link_up_down": 0,
1020             "link_duplex": 2,
1021             "link_speed": 32,
1022             "mtu": 9202,
1023             "sub_id": 0,
1024             "sub_dot1ad": 0,
1025             "sub_number_of_tags": 0,
1026             "sub_outer_vlan_id": 0,
1027             "sub_inner_vlan_id": 0,
1028             "sub_exact_match": 0,
1029             "sub_default": 0,
1030             "sub_outer_vlan_id_any": 0,
1031             "sub_inner_vlan_id_any": 0,
1032             "vtr_op": 0,
1033             "vtr_push_dot1q": 0,
1034             "vtr_tag1": 0,
1035             "vtr_tag2": 0
1036         },
1037         {
1038             "sw_if_index": 2,
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",
1043             "admin_up_down": 0,
1044             "link_up_down": 0,
1045             "link_duplex": 2,
1046             "link_speed": 32,
1047             "mtu": 9206,
1048             "sub_id": 0,
1049             "sub_dot1ad": 0,
1050             "sub_number_of_tags": 0,
1051             "sub_outer_vlan_id": 0,
1052             "sub_inner_vlan_id": 0,
1053             "sub_exact_match": 0,
1054             "sub_default": 0,
1055             "sub_outer_vlan_id_any": 0,
1056             "sub_inner_vlan_id_any": 0,
1057             "vtr_op": 0,
1058             "vtr_push_dot1q": 0,
1059             "vtr_tag1": 0,
1060             "vtr_tag2": 0
1061         }
1062     ]
1063
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      '
1071
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      '
1079
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
1086
1087         ipsec_approx_setup_helper = VipsecApproxSetupEnvHelper(vnfd_helper,
1088                                                                ssh_helper,
1089                                                                scenario_helper)
1090         self.assertEqual('SW_cryptodev',
1091                          ipsec_approx_setup_helper._get_crypto_type())
1092
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
1099
1100         ipsec_approx_setup_helper = VipsecApproxSetupEnvHelper(vnfd_helper,
1101                                                                ssh_helper,
1102                                                                scenario_helper)
1103         self.assertEqual('aes-gcm',
1104                          ipsec_approx_setup_helper._get_crypto_algorithms())
1105
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
1112
1113         ipsec_approx_setup_helper = VipsecApproxSetupEnvHelper(vnfd_helper,
1114                                                                ssh_helper,
1115                                                                scenario_helper)
1116         self.assertEqual(1, ipsec_approx_setup_helper._get_n_tunnels())
1117
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
1124
1125         ipsec_approx_setup_helper = VipsecApproxSetupEnvHelper(vnfd_helper,
1126                                                                ssh_helper,
1127                                                                scenario_helper)
1128         self.assertEqual(1, ipsec_approx_setup_helper._get_n_connections())
1129
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
1136
1137         ipsec_approx_setup_helper = VipsecApproxSetupEnvHelper(vnfd_helper,
1138                                                                ssh_helper,
1139                                                                scenario_helper)
1140         with self.assertRaises(KeyError) as raised:
1141             ipsec_approx_setup_helper._get_n_connections()
1142         self.assertIn(
1143             'Missing flow definition in scenario section of the task definition file',
1144             str(raised.exception))
1145
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
1152
1153         ipsec_approx_setup_helper = VipsecApproxSetupEnvHelper(vnfd_helper,
1154                                                                ssh_helper,
1155                                                                scenario_helper)
1156         self.assertEqual('10.0.0.0',
1157                          ipsec_approx_setup_helper._get_flow_src_start_ip())
1158
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
1165
1166         ipsec_approx_setup_helper = VipsecApproxSetupEnvHelper(vnfd_helper,
1167                                                                ssh_helper,
1168                                                                scenario_helper)
1169         self.assertEqual('20.0.0.0',
1170                          ipsec_approx_setup_helper._get_flow_src_start_ip())
1171
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
1178
1179         ipsec_approx_setup_helper = VipsecApproxSetupEnvHelper(vnfd_helper,
1180                                                                ssh_helper,
1181                                                                scenario_helper)
1182         with self.assertRaises(KeyError) as raised:
1183             ipsec_approx_setup_helper._get_flow_src_start_ip()
1184         self.assertIn(
1185             'Missing flow definition in scenario section of the task definition file',
1186             str(raised.exception))
1187
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
1194
1195         ipsec_approx_setup_helper = VipsecApproxSetupEnvHelper(vnfd_helper,
1196                                                                ssh_helper,
1197                                                                scenario_helper)
1198         self.assertEqual('20.0.0.0',
1199                          ipsec_approx_setup_helper._get_flow_dst_start_ip())
1200
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
1207
1208         ipsec_approx_setup_helper = VipsecApproxSetupEnvHelper(vnfd_helper,
1209                                                                ssh_helper,
1210                                                                scenario_helper)
1211         self.assertEqual('10.0.0.0',
1212                          ipsec_approx_setup_helper._get_flow_dst_start_ip())
1213
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
1220
1221         ipsec_approx_setup_helper = VipsecApproxSetupEnvHelper(vnfd_helper,
1222                                                                ssh_helper,
1223                                                                scenario_helper)
1224         with self.assertRaises(KeyError) as raised:
1225             ipsec_approx_setup_helper._get_flow_dst_start_ip()
1226         self.assertIn(
1227             'Missing flow definition in scenario section of the task definition file',
1228             str(raised.exception))
1229
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
1238
1239         ipsec_approx_setup_helper = VipsecApproxSetupEnvHelper(vnfd_helper,
1240                                                                ssh_helper,
1241                                                                scenario_helper)
1242
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())
1258         self.assertEqual(0,
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(
1263                              'xe0', 'vpp_name'))
1264         self.assertEqual(1,
1265                          ipsec_approx_setup_helper.get_value_by_interface_key(
1266                              'xe0', 'vpp_sw_index'))
1267         self.assertEqual(0,
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(
1272                              'xe1', 'vpp_name'))
1273         self.assertEqual(2,
1274                          ipsec_approx_setup_helper.get_value_by_interface_key(
1275                              'xe1', 'vpp_sw_index'))
1276         self.assertGreaterEqual(ssh_helper.execute.call_count, 4)
1277
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
1286
1287         ipsec_approx_setup_helper = VipsecApproxSetupEnvHelper(vnfd_helper,
1288                                                                ssh_helper,
1289                                                                scenario_helper)
1290
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())
1306         self.assertEqual(0,
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(
1311                              'xe0', 'vpp_name'))
1312         self.assertEqual(1,
1313                          ipsec_approx_setup_helper.get_value_by_interface_key(
1314                              'xe0', 'vpp_sw_index'))
1315         self.assertEqual(0,
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(
1320                              'xe1', 'vpp_name'))
1321         self.assertEqual(2,
1322                          ipsec_approx_setup_helper.get_value_by_interface_key(
1323                              'xe1', 'vpp_sw_index'))
1324         self.assertGreaterEqual(ssh_helper.execute.call_count, 4)
1325
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
1336
1337         ipsec_approx_setup_helper = VipsecApproxSetupEnvHelper(vnfd_helper,
1338                                                                ssh_helper,
1339                                                                scenario_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(),
1350                 ResourceProfile)
1351         self.assertEqual(0,
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(
1356                              'xe0', 'vpp_name'))
1357         self.assertEqual(1,
1358                          ipsec_approx_setup_helper.get_value_by_interface_key(
1359                              'xe0', 'vpp_sw_index'))
1360         self.assertEqual(0,
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(
1365                              'xe1', 'vpp_name'))
1366         self.assertEqual(2,
1367                          ipsec_approx_setup_helper.get_value_by_interface_key(
1368                              'xe1', 'vpp_sw_index'))
1369         self.assertGreaterEqual(ssh_helper.execute.call_count, 4)
1370
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
1381
1382         ipsec_approx_setup_helper = VipsecApproxSetupEnvHelper(vnfd_helper,
1383                                                                ssh_helper,
1384                                                                scenario_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(),
1395                 ResourceProfile)
1396         self.assertEqual(0,
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(
1401                              'xe0', 'vpp_name'))
1402         self.assertEqual(1,
1403                          ipsec_approx_setup_helper.get_value_by_interface_key(
1404                              'xe0', 'vpp_sw_index'))
1405         self.assertEqual(0,
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(
1410                              'xe1', 'vpp_name'))
1411         self.assertEqual(2,
1412                          ipsec_approx_setup_helper.get_value_by_interface_key(
1413                              'xe1', 'vpp_sw_index'))
1414         self.assertGreaterEqual(ssh_helper.execute.call_count, 4)
1415
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()
1421
1422         ipsec_approx_setup_helper = VipsecApproxSetupEnvHelper(vnfd_helper,
1423                                                                ssh_helper,
1424                                                                scenario_helper)
1425         self.assertEqual(16984 / 48,
1426                          ipsec_approx_setup_helper.calculate_frame_size(
1427                              {'64B': 28, '570B': 16, '1518B': 4}))
1428
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()
1434
1435         ipsec_approx_setup_helper = VipsecApproxSetupEnvHelper(vnfd_helper,
1436                                                                ssh_helper,
1437                                                                scenario_helper)
1438         self.assertEqual(64,
1439                          ipsec_approx_setup_helper.calculate_frame_size({}))
1440
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()
1446
1447         ipsec_approx_setup_helper = VipsecApproxSetupEnvHelper(vnfd_helper,
1448                                                                ssh_helper,
1449                                                                scenario_helper)
1450         self.assertEqual(64,
1451                          ipsec_approx_setup_helper.calculate_frame_size(
1452                              {'64B': -28, '570B': 16, '1518B': 4}))
1453
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()
1460
1461         ipsec_approx_setup_helper = VipsecApproxSetupEnvHelper(vnfd_helper,
1462                                                                ssh_helper,
1463                                                                scenario_helper)
1464         self.assertTrue(ipsec_approx_setup_helper.check_status())
1465
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()
1472
1473         ipsec_approx_setup_helper = VipsecApproxSetupEnvHelper(vnfd_helper,
1474                                                                ssh_helper,
1475                                                                scenario_helper)
1476         self.assertFalse(ipsec_approx_setup_helper.check_status())
1477
1478     def test_get_vpp_statistics(self):
1479         def execute(cmd):
1480             if 'TenGigabitEthernetff/6/0' in cmd:
1481                 return 0, output_xe0, ''
1482             elif 'VirtualFunctionEthernetff/7/0' in cmd:
1483                 return 0, output_xe1, ''
1484             return 0, '0', ''
1485
1486         output_xe0 = \
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' \
1491             '                                                                    ' \
1492             'rx bytes              1402414080\n' \
1493             '                                                                    ' \
1494             'tx packets              20476416\n' \
1495             '                                                                    ' \
1496             'tx bytes              1228584960\n' \
1497             '                                                                    ' \
1498             'ip4                     23373568\n' \
1499             '                                                                    ' \
1500             'rx-miss                 27789925'
1501         output_xe1 = \
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' \
1506             '                                                                    ' \
1507             'rx bytes              1402414080\n' \
1508             '                                                                    ' \
1509             'tx packets              20476416\n' \
1510             '                                                                    ' \
1511             'tx bytes              1228584960\n' \
1512             '                                                                    ' \
1513             'ip4                     23373568\n' \
1514             '                                                                    ' \
1515             'rx-miss                 27789925'
1516
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()
1522
1523         ipsec_approx_setup_helper = VipsecApproxSetupEnvHelper(vnfd_helper,
1524                                                                ssh_helper,
1525                                                                scenario_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())
1546
1547     def test_parser_vpp_stats(self):
1548         output = \
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' \
1553             '                                                               ' \
1554             'rx bytes              1402414080\n' \
1555             '                                                               ' \
1556             'tx packets              20476416\n' \
1557             '                                                               ' \
1558             'tx bytes              1228584960\n' \
1559             '                                                               ' \
1560             'ip4                     23373568\n' \
1561             '                                                               ' \
1562             'rx-miss                 27789925'
1563         vnfd_helper = VnfdHelper(
1564             TestVipsecApproxVnf.VNFD['vnfd:vnfd-catalog']['vnfd'][0])
1565         ssh_helper = mock.Mock()
1566         scenario_helper = mock.Mock()
1567
1568         ipsec_approx_setup_helper = VipsecApproxSetupEnvHelper(vnfd_helper,
1569                                                                ssh_helper,
1570                                                                scenario_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',
1576                                                                     output))
1577
1578     def test_parser_vpp_stats_no_miss(self):
1579         output = \
1580             '              Name               Idx    State              ' \
1581             'Counter          Count     \n' \
1582             'TenGigabitEthernetff/6/0          1      up                ' \
1583             'rx packets              23373568\n' \
1584             '                                                           ' \
1585             'rx bytes              1402414080\n' \
1586             '                                                           ' \
1587             'tx packets              20476416\n' \
1588             '                                                           ' \
1589             'tx bytes              1228584960\n' \
1590             '                                                           ' \
1591             'ip4                     23373568'
1592         vnfd_helper = VnfdHelper(
1593             TestVipsecApproxVnf.VNFD['vnfd:vnfd-catalog']['vnfd'][0])
1594         ssh_helper = mock.Mock()
1595         scenario_helper = mock.Mock()
1596
1597         ipsec_approx_setup_helper = VipsecApproxSetupEnvHelper(vnfd_helper,
1598                                                                ssh_helper,
1599                                                                scenario_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',
1605                                                                     output))
1606
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
1615
1616         ipsec_approx_setup_helper = VipsecApproxSetupEnvHelper(vnfd_helper,
1617                                                                ssh_helper,
1618                                                                scenario_helper)
1619
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)
1644
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
1653
1654         ipsec_approx_setup_helper = VipsecApproxSetupEnvHelper(vnfd_helper,
1655                                                                ssh_helper,
1656                                                                scenario_helper)
1657
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 = {
1676                 'dpdk_port_num': 0,
1677                 'driver': 'igb_uio',
1678                 'dst_ip': '192.168.100.1',
1679                 'dst_mac': '90:e2:ba:7c:30:e8',
1680                 'ifname': 'xe0',
1681                 'local_ip': '192.168.100.2',
1682                 'local_mac': '90:e2:ba:7c:41:a8',
1683                 'netmask': '255.255.255.0',
1684                 'network': {},
1685                 'node_name': 'vnf__1',
1686                 'numa_node': 0,
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',
1692                               'ifname': 'xe0',
1693                               'local_ip': '192.168.100.1',
1694                               'local_mac': '90:e2:ba:7c:30:e8',
1695                               'netmask': '255.255.255.0',
1696                               'network': {},
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',
1706                 'vpp_sw_index': 1}
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)
1717
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',
1723                     'ifname': 'xe0',
1724                     'local_ip': '192.168.100.2',
1725                     'local_mac': '90:e2:ba:7c:41:a8',
1726                     'netmask': '255.255.255.0',
1727                     'network': {},
1728                     'node_name': 'vnf__0',
1729                     'numa_node': 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',
1735                                   'ifname': 'xe0',
1736                                   'local_ip': '192.168.100.1',
1737                                   'local_mac': '90:e2:ba:7c:30:e8',
1738                                   'netmask': '255.255.255.0',
1739                                   'network': {},
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',
1749                     'vpp_sw_index': 1}
1750         vnfd_helper = VnfdHelper(
1751             TestVipsecApproxVnf.VNFD['vnfd:vnfd-catalog']['vnfd'][0])
1752         ssh_helper = mock.Mock()
1753         scenario_helper = mock.Mock()
1754
1755         ipsec_approx_setup_helper = VipsecApproxSetupEnvHelper(vnfd_helper,
1756                                                                ssh_helper,
1757                                                                scenario_helper)
1758         self.assertEqual(expected,
1759                          ipsec_approx_setup_helper.find_raw_data_interface())
1760
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()
1766
1767         ipsec_approx_setup_helper = VipsecApproxSetupEnvHelper(vnfd_helper,
1768                                                                ssh_helper,
1769                                                                scenario_helper)
1770         with self.assertRaises(KeyError):
1771             ipsec_approx_setup_helper.find_raw_data_interface()
1772
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',
1778                     'ifname': 'xe1',
1779                     'local_ip': '1.1.1.1',
1780                     'local_mac': '4e:90:85:d3:c5:13',
1781                     'netmask': '255.255.255.0',
1782                     'network': {},
1783                     'node_name': 'vnf__0',
1784                     'numa_node': 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',
1789                                   'ifname': 'xe1',
1790                                   'local_ip': '1.1.1.2',
1791                                   'local_mac': '0a:b1:ec:fd:a2:66',
1792                                   'netmask': '255.255.255.0',
1793                                   'network': {},
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',
1803                     'vpp_sw_index': 2}
1804         vnfd_helper = VnfdHelper(
1805             TestVipsecApproxVnf.VNFD['vnfd:vnfd-catalog']['vnfd'][0])
1806         ssh_helper = mock.Mock()
1807         scenario_helper = mock.Mock()
1808
1809         ipsec_approx_setup_helper = VipsecApproxSetupEnvHelper(vnfd_helper,
1810                                                                ssh_helper,
1811                                                                scenario_helper)
1812         self.assertEqual(expected,
1813                          ipsec_approx_setup_helper.find_encrypted_data_interface())
1814
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
1823
1824         ipsec_approx_setup_helper = VipsecApproxSetupEnvHelper(vnfd_helper,
1825                                                                ssh_helper,
1826                                                                scenario_helper)
1827
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)
1844
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()
1854
1855         ipsec_approx_setup_helper = VipsecApproxSetupEnvHelper(vnfd_helper,
1856                                                                ssh_helper,
1857                                                                scenario_helper)
1858
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()
1873         self.assertIsNone(
1874             ipsec_approx_setup_helper.add_worker_threads_and_rxqueues(
1875                 vpp_config_generator, 1, 1))
1876         self.assertEqual(
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())
1880
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()
1890
1891         ipsec_approx_setup_helper = VipsecApproxSetupEnvHelper(vnfd_helper,
1892                                                                ssh_helper,
1893                                                                scenario_helper)
1894
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()
1909         self.assertIsNone(
1910             ipsec_approx_setup_helper.add_worker_threads_and_rxqueues(
1911                 vpp_config_generator, 1))
1912         self.assertEqual(
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())
1916
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()
1926
1927         ipsec_approx_setup_helper = VipsecApproxSetupEnvHelper(vnfd_helper,
1928                                                                ssh_helper,
1929                                                                scenario_helper)
1930
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()
1945         self.assertIsNone(
1946             ipsec_approx_setup_helper.add_worker_threads_and_rxqueues(
1947                 vpp_config_generator, 1, 1))
1948         self.assertEqual(
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())
1952
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()
1962
1963         ipsec_approx_setup_helper = VipsecApproxSetupEnvHelper(vnfd_helper,
1964                                                                ssh_helper,
1965                                                                scenario_helper)
1966
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))
1982         self.assertEqual(
1983             'dpdk\n{\n  dev 0000:ff:06.0 \n  dev 0000:ff:07.0 \n}\n',
1984             vpp_config_generator.dump_config())
1985
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()
1995
1996         ipsec_approx_setup_helper = VipsecApproxSetupEnvHelper(vnfd_helper,
1997                                                                ssh_helper,
1998                                                                scenario_helper)
1999
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))
2016         self.assertEqual(
2017             'dpdk\n{\n  vdev cryptodev_aesni_gcm_pmd,socket_id=0 \n}\n',
2018             vpp_config_generator.dump_config())
2019
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()
2029
2030         ipsec_approx_setup_helper = VipsecApproxSetupEnvHelper(vnfd_helper,
2031                                                                ssh_helper,
2032                                                                scenario_helper)
2033
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))
2050         self.assertEqual(
2051             'dpdk\n{\n  dev 0000:ff:01.0 \n  uio-driver igb_uio\n}\n',
2052             vpp_config_generator.dump_config())
2053
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()
2063
2064         ipsec_approx_setup_helper = VipsecApproxSetupEnvHelper(vnfd_helper,
2065                                                                ssh_helper,
2066                                                                scenario_helper)
2067
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))
2084         self.assertEqual(
2085             'dpdk\n{\n  vdev cryptodev_aesni_gcm_pmd,socket_id=0 \n}\n',
2086             vpp_config_generator.dump_config())
2087
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()
2097
2098         ipsec_approx_setup_helper = VipsecApproxSetupEnvHelper(vnfd_helper,
2099                                                                ssh_helper,
2100                                                                scenario_helper)
2101
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))
2111         self.assertEqual(
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())
2114
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
2123
2124         ipsec_approx_setup_helper = VipsecApproxSetupEnvHelper(vnfd_helper,
2125                                                                ssh_helper,
2126                                                                scenario_helper)
2127
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)