update from RIFT as of 696b75d2fe9fb046261b08c616f1bcf6c0b54a9b second try
[osm/SO.git] / rwlaunchpad / ra / pytest / ns / pingpong / test_input_params.py
1 #!/usr/bin/env python3
2 """
3 #
4 # Copyright 2017 RIFT.IO Inc
5 #
6 # Licensed under the Apache License, Version 2.0 (the "License");
7 # you may not use this file except in compliance with the License.
8 # You may obtain a copy of the License at
9 #
10 # http://www.apache.org/licenses/LICENSE-2.0
11 #
12 # Unless required by applicable law or agreed to in writing, software
13 # distributed under the License is distributed on an "AS IS" BASIS,
14 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 # See the License for the specific language governing permissions and
16 # limitations under the License.
17 #
18
19 @file test_input_params.py
20 @author Paul Laidler (Paul.Laidler@riftio.com)
21 @date 06/21/2017
22 @brief Test of VNF Input parameters using ping pong
23 """
24
25 import gi
26 import logging
27 import os
28 import pytest
29 import random
30 import re
31 import subprocess
32 import sys
33 import time
34 import uuid
35
36 from contextlib import contextmanager
37
38 import rift.auto.mano
39 import rift.auto.session
40 import rift.auto.descriptor
41
42 gi.require_version('RwVnfrYang', '1.0')
43 from gi.repository import (
44 NsrYang,
45 RwProjectNsdYang,
46 VnfrYang,
47 RwNsrYang,
48 RwVnfrYang,
49 RwBaseYang,
50 )
51
52 logging.basicConfig(level=logging.DEBUG)
53 logger = logging.getLogger(__name__)
54
55 @pytest.fixture(scope='session')
56 def global_vendor_name():
57 return 'global_vendor'
58
59 @pytest.fixture(scope='session')
60 def ping_custom_vendor_name():
61 return 'ping_vendor'
62
63 @pytest.fixture(scope='session')
64 def pong_custom_vendor_name():
65 return 'pong_vendor'
66
67 @pytest.fixture(scope='session')
68 def ping_custom_init_data():
69 return 'ping_custom_init_data'
70
71 @pytest.fixture(scope='session')
72 def pong_custom_init_data():
73 return 'pong_custom_init_data'
74
75 @pytest.fixture(scope='session')
76 def ping_custom_meta_data():
77 return 'ping_custom_meta_data'
78
79 @pytest.fixture(scope='session')
80 def pong_custom_meta_data():
81 return 'pong_custom_meta_data'
82
83 @pytest.fixture(scope='session')
84 def ping_custom_script_init_data():
85 return 'ping'
86
87 @pytest.fixture(scope='session')
88 def pong_custom_script_init_data():
89 return 'pong'
90
91 @pytest.fixture(scope='session')
92 def ping_descriptor(descriptors_pingpong_vnf_input_params):
93 return descriptors_pingpong_vnf_input_params[0]
94
95 @pytest.fixture(scope='session')
96 def pong_descriptor(descriptors_pingpong_vnf_input_params):
97 return descriptors_pingpong_vnf_input_params[1]
98
99 @pytest.fixture(scope='session')
100 def ping_pong_descriptor(descriptors_pingpong_vnf_input_params):
101 return descriptors_pingpong_vnf_input_params[2]
102
103 @pytest.fixture(scope='session')
104 def ping_id(ping_descriptor):
105 return ping_descriptor.vnfd.id
106
107 @pytest.fixture(scope='session')
108 def pong_id(pong_descriptor):
109 return pong_descriptor.vnfd.id
110
111 @pytest.fixture(scope='session')
112 def ping_script_descriptor(descriptors_pingpong_script_input_params):
113 return descriptors_pingpong_script_input_params[0]
114
115 @pytest.fixture(scope='session')
116 def pong_script_descriptor(descriptors_pingpong_script_input_params):
117 return descriptors_pingpong_script_input_params[1]
118
119 @pytest.fixture(scope='session')
120 def ping_pong_script_descriptor(descriptors_pingpong_script_input_params):
121 return descriptors_pingpong_script_input_params[2]
122
123 @pytest.fixture(scope='session')
124 def ping_script_id(ping_script_descriptor):
125 return ping_script_descriptor.vnfd.id
126
127 @pytest.fixture(scope='session')
128 def pong_script_id(pong_script_descriptor):
129 return pong_script_descriptor.vnfd.id
130
131
132 def VerifyAllInstancesRunning(mgmt_session):
133 ''' Verifies all network service instances reach running operational status '''
134 nsr_opdata = mgmt_session.proxy(RwNsrYang).get("/rw-project:project[rw-project:name='default']/ns-instance-opdata")
135 nsrs = nsr_opdata.nsr
136 for nsr in nsrs:
137 xpath = (
138 "/rw-project:project[rw-project:name='default']/ns-instance-opdata/nsr[ns-instance-config-ref='{ns_instance_config_ref}']/operational-status"
139 ).format(
140 ns_instance_config_ref=nsr.ns_instance_config_ref
141 )
142 mgmt_session.proxy(RwNsrYang).wait_for(xpath, "running", fail_on=['failed'], timeout=300)
143
144 def VerifyAllInstancesConfigured(mgmt_session):
145 ''' Verifies all network service instances reach configured config status '''
146 nsr_opdata = mgmt_session.proxy(RwNsrYang).get("/rw-project:project[rw-project:name='default']/ns-instance-opdata")
147 nsrs = nsr_opdata.nsr
148 for nsr in nsrs:
149 xpath = (
150 "/rw-project:project[rw-project:name='default']/ns-instance-opdata/nsr[ns-instance-config-ref='{}']/config-status"
151 ).format(
152 nsr.ns_instance_config_ref
153 )
154 mgmt_session.proxy(RwNsrYang).wait_for(xpath, "configured", fail_on=['failed'], timeout=300)
155
156 @pytest.mark.depends('launchpad')
157 @pytest.mark.setup('descriptors')
158 @pytest.mark.incremental
159 class TestSetupPingpong(object):
160 def test_onboard_custom_descriptors(self, mgmt_session, packages_pingpong_vnf_input_params, packages_pingpong_script_input_params):
161 for descriptor_package in packages_pingpong_vnf_input_params:
162 rift.auto.descriptor.onboard(mgmt_session, descriptor_package)
163 for descriptor_package in packages_pingpong_script_input_params:
164 rift.auto.descriptor.onboard(mgmt_session, descriptor_package)
165
166 @pytest.mark.depends('descriptors')
167 @pytest.mark.incremental
168 class TestGlobalVnfInputParams:
169 def test_instantiate(self, mgmt_session, cloud_account_name, global_vendor_name):
170 ''' Testing vnf input parameters with broadest xpath expression allowed
171
172 /vnfd:vnfd-catalog/vnfd:vnfd/<leaf>
173
174 Expected to replace the leaf in all member VNFs
175 '''
176
177 xpath = "/vnfd:vnfd-catalog/vnfd:vnfd/vnfd:vendor"
178 value = global_vendor_name
179 vnf_input_parameter = rift.auto.descriptor.create_vnf_input_parameter(xpath, value)
180
181 nsd_catalog = mgmt_session.proxy(RwProjectNsdYang).get_config("/rw-project:project[rw-project:name='default']/nsd-catalog")
182 nsd = [nsd for nsd in nsd_catalog.nsd if nsd.name == 'pp_input_nsd'][0]
183
184 nsr = rift.auto.descriptor.create_nsr(
185 cloud_account_name,
186 "pp_input_params_1",
187 nsd,
188 vnf_input_param_list=[vnf_input_parameter]
189 )
190 mgmt_session.proxy(RwNsrYang).create_config("/rw-project:project[rw-project:name='default']/ns-instance-config/nsr", nsr)
191
192
193 def test_verify_running(self, mgmt_session):
194 VerifyAllInstancesRunning(mgmt_session)
195
196 def test_verify_configured(self, mgmt_session):
197 VerifyAllInstancesConfigured(mgmt_session)
198
199 def test_verify_vnf_input_parameters(self, mgmt_session, ping_id, pong_id, global_vendor_name):
200 vnfr_catalog = mgmt_session.proxy(RwVnfrYang).get("/project[name='default']/vnfr-catalog")
201 ping_vnfr = [vnfr for vnfr in vnfr_catalog.vnfr if vnfr.vnfd.id == ping_id][0]
202 pong_vnfr = [vnfr for vnfr in vnfr_catalog.vnfr if vnfr.vnfd.id == pong_id][0]
203 ping_vendor_name = mgmt_session.proxy(RwVnfrYang).get("/project[name='default']/vnfr-catalog/vnfr[id='%s']/vendor" % ping_vnfr.id)
204 assert ping_vendor_name == global_vendor_name
205 pong_vendor_name = mgmt_session.proxy(RwVnfrYang).get("/project[name='default']/vnfr-catalog/vnfr[id='%s']/vendor" % pong_vnfr.id)
206 assert pong_vendor_name == global_vendor_name
207
208 def test_teardown(self, mgmt_session):
209 ns_instance_config = mgmt_session.proxy(RwNsrYang).get_config("/rw-project:project[rw-project:name='default']/ns-instance-config")
210 for nsr in ns_instance_config.nsr:
211 mgmt_session.proxy(RwNsrYang).delete_config("/rw-project:project[rw-project:name='default']/ns-instance-config/nsr[id='{}']".format(nsr.id))
212 time.sleep(60)
213 vnfr_catalog = mgmt_session.proxy(RwVnfrYang).get("/rw-project:project[rw-project:name='default']/vnfr-catalog")
214 assert vnfr_catalog is None or len(vnfr_catalog.vnfr) == 0
215
216 @pytest.mark.depends('descriptors')
217 @pytest.mark.incremental
218 class TestMemberVnfInputParams:
219 def test_instantiate(self, mgmt_session, cloud_account_name, ping_id, pong_id, ping_custom_vendor_name, pong_custom_vendor_name):
220 ''' Testing vnf input parameters with member specific xpath expression
221
222 /vnfd:vnfd-catalog/vnfd:vnfd[vnfd:id='<member-id>'/<leaf>
223
224 Expected to replace the leaf in a specific member VNF
225 '''
226
227 xpath = "/vnfd:vnfd-catalog/vnfd:vnfd[vnfd:id='%s']/vnfd:vendor" % (ping_id)
228 value = ping_custom_vendor_name
229 vnf_input_parameter_ping = rift.auto.descriptor.create_vnf_input_parameter(xpath, value, vnfd_id_ref=ping_id)
230
231 xpath = "/vnfd:vnfd-catalog/vnfd:vnfd[vnfd:id='%s']/vnfd:vendor" % (pong_id)
232 value = pong_custom_vendor_name
233 vnf_input_parameter_pong = rift.auto.descriptor.create_vnf_input_parameter(xpath, value, vnfd_id_ref=pong_id)
234
235 nsd_catalog = mgmt_session.proxy(RwProjectNsdYang).get_config("/rw-project:project[rw-project:name='default']/nsd-catalog")
236 nsd = [nsd for nsd in nsd_catalog.nsd if nsd.name == 'pp_input_nsd'][0]
237
238 nsr = rift.auto.descriptor.create_nsr(
239 cloud_account_name,
240 "pp_input_params_2",
241 nsd,
242 vnf_input_param_list=[vnf_input_parameter_ping, vnf_input_parameter_pong]
243 )
244 mgmt_session.proxy(RwNsrYang).create_config("/rw-project:project[rw-project:name='default']/ns-instance-config/nsr", nsr)
245
246 def test_verify_running(self, mgmt_session):
247 VerifyAllInstancesRunning(mgmt_session)
248
249 def test_verify_configured(self, mgmt_session):
250 VerifyAllInstancesConfigured(mgmt_session)
251
252 def test_verify_vnf_input_parameters(self, mgmt_session, ping_id, pong_id, ping_custom_vendor_name, pong_custom_vendor_name):
253 vnfr_catalog = mgmt_session.proxy(RwVnfrYang).get("/project[name='default']/vnfr-catalog")
254 ping_vnfr = [vnfr for vnfr in vnfr_catalog.vnfr if vnfr.vnfd.id == ping_id][0]
255 pong_vnfr = [vnfr for vnfr in vnfr_catalog.vnfr if vnfr.vnfd.id == pong_id][0]
256 ping_vendor_name = mgmt_session.proxy(RwVnfrYang).get("/project[name='default']/vnfr-catalog/vnfr[id='%s']/vendor" % ping_vnfr.id)
257 assert ping_vendor_name == ping_custom_vendor_name
258 pong_vendor_name = mgmt_session.proxy(RwVnfrYang).get("/project[name='default']/vnfr-catalog/vnfr[id='%s']/vendor" % pong_vnfr.id)
259 assert pong_vendor_name == pong_custom_vendor_name
260
261 def test_teardown(self, mgmt_session):
262 ns_instance_config = mgmt_session.proxy(RwNsrYang).get_config("/rw-project:project[rw-project:name='default']/ns-instance-config")
263 for nsr in ns_instance_config.nsr:
264 mgmt_session.proxy(RwNsrYang).delete_config("/rw-project:project[rw-project:name='default']/ns-instance-config/nsr[id='{}']".format(nsr.id))
265 time.sleep(60)
266 vnfr_catalog = mgmt_session.proxy(RwVnfrYang).get("/rw-project:project[rw-project:name='default']/vnfr-catalog")
267 assert vnfr_catalog is None or len(vnfr_catalog.vnfr) == 0
268
269 @pytest.mark.depends('descriptors')
270 @pytest.mark.incremental
271 class TestMemberVnfInputParamsCloudInit:
272 def test_instantiate(self, mgmt_session, cloud_account_name, ping_id, pong_id, ping_custom_init_data, pong_custom_init_data):
273 ''' Testing vnf input parameters with node specific xpath expression
274
275 /vnfd:vnfd-catalog/vnfd:vnfd[vnfd:id='<member-id>']/vnfd:vdu[vnfd:id="<vdu-id>"]/vnfd:supplemental-boot-data/vnfd:custom-meta-data[vnfd:name=<leaf-name>]/vnfd:value
276 /vnfd:vnfd-catalog/vnfd:vnfd[vnfd:id='<member-id>'/<leaf>
277
278 Expected to replace the leaf in a specific member VNF
279 '''
280
281 xpath = "/vnfd:vnfd-catalog/vnfd:vnfd[vnfd:id='%s']/vnfd:vdu[vnfd:id='iovdu_0']/vnfd:supplemental-boot-data/vnfd:custom-meta-data[vnfd:name='custom_cloud_init_data']/vnfd:value" % (ping_id)
282 value = ping_custom_init_data
283 vnf_input_parameter_ping = rift.auto.descriptor.create_vnf_input_parameter(xpath, value, vnfd_id_ref=ping_id)
284
285 xpath = "/vnfd:vnfd-catalog/vnfd:vnfd[vnfd:id='%s']/vnfd:vdu[vnfd:id='iovdu_0']/vnfd:supplemental-boot-data/vnfd:custom-meta-data[vnfd:name='custom_cloud_init_data']/vnfd:value" % (pong_id)
286 value = pong_custom_init_data
287 vnf_input_parameter_pong = rift.auto.descriptor.create_vnf_input_parameter(xpath, value, vnfd_id_ref=pong_id)
288
289
290 nsd_catalog = mgmt_session.proxy(RwProjectNsdYang).get_config("/rw-project:project[rw-project:name='default']/nsd-catalog")
291 nsd = [nsd for nsd in nsd_catalog.nsd if nsd.name == 'pp_input_nsd'][0]
292
293 nsr = rift.auto.descriptor.create_nsr(
294 cloud_account_name,
295 "pp_input_params_3",
296 nsd,
297 vnf_input_param_list=[vnf_input_parameter_ping, vnf_input_parameter_pong]
298 )
299 mgmt_session.proxy(RwNsrYang).create_config("/rw-project:project[rw-project:name='default']/ns-instance-config/nsr", nsr)
300
301 def test_verify_running(self, mgmt_session):
302 VerifyAllInstancesRunning(mgmt_session)
303
304 def test_verify_configured(self, mgmt_session):
305 VerifyAllInstancesConfigured(mgmt_session)
306
307 def test_verify_vnf_input_parameters(self, mgmt_session, ping_id, pong_id, ping_custom_init_data, pong_custom_init_data):
308 ''' Verify both ping and pong init data were replaced with their respective init data
309 '''
310 vnfr_catalog = mgmt_session.proxy(RwVnfrYang).get("/project[name='default']/vnfr-catalog")
311 ping_vnfr = [vnfr for vnfr in vnfr_catalog.vnfr if vnfr.vnfd.id == ping_id][0]
312 pong_vnfr = [vnfr for vnfr in vnfr_catalog.vnfr if vnfr.vnfd.id == pong_id][0]
313
314 # Verify the data was replaced in the vdu
315 ping_init_data = mgmt_session.proxy(RwVnfrYang).get("/project[name='default']/vnfr-catalog/vnfr[id='%s']/vnfd/vdu/supplemental-boot-data/custom-meta-data[name='custom_cloud_init_data']/value" % (ping_vnfr.id))
316 assert ping_init_data == ping_custom_init_data
317 pong_init_data = mgmt_session.proxy(RwVnfrYang).get("/project[name='default']/vnfr-catalog/vnfr[id='%s']/vnfd/vdu/supplemental-boot-data/custom-meta-data[name='custom_cloud_init_data']/value" % (pong_vnfr.id))
318 assert pong_init_data == pong_custom_init_data
319
320 def test_teardown(self, mgmt_session):
321 ns_instance_config = mgmt_session.proxy(RwNsrYang).get_config("/rw-project:project[rw-project:name='default']/ns-instance-config")
322 for nsr in ns_instance_config.nsr:
323 mgmt_session.proxy(RwNsrYang).delete_config("/rw-project:project[rw-project:name='default']/ns-instance-config/nsr[id='{}']".format(nsr.id))
324 time.sleep(60)
325 vnfr_catalog = mgmt_session.proxy(RwVnfrYang).get("/rw-project:project[rw-project:name='default']/vnfr-catalog")
326 assert vnfr_catalog is None or len(vnfr_catalog.vnfr) == 0
327
328 @pytest.mark.depends('descriptors')
329 @pytest.mark.incremental
330 class TestMemberVnfInputParamsCloudMeta:
331 def test_instantiate(self, mgmt_session, cloud_account_name, ping_id, pong_id, ping_custom_meta_data, pong_custom_meta_data):
332 ''' Testing vnf input parameters with node specific xpath expression
333
334 /vnfd:vnfd-catalog/vnfd:vnfd[vnfd:id='<member-id>']/vnfd:vdu[vnfd:id="<vdu-id>"]/vnfd:supplemental-boot-data/vnfd:custom-meta-data[vnfd:name=<leaf-name>]/vnfd:value
335 /vnfd:vnfd-catalog/vnfd:vnfd[vnfd:id='<member-id>'/<leaf>
336
337 Expected to replace the leaf in a specific member VNF
338 '''
339
340 xpath = "/vnfd:vnfd-catalog/vnfd:vnfd[vnfd:id='%s']/vnfd:vdu[vnfd:id='iovdu_0']/vnfd:supplemental-boot-data/vnfd:custom-meta-data[vnfd:name='custom_cloud_meta_data']/vnfd:value" % (ping_id)
341 value = ping_custom_meta_data
342 vnf_input_parameter_ping = rift.auto.descriptor.create_vnf_input_parameter(xpath, value, vnfd_id_ref=ping_id)
343
344 xpath = "/vnfd:vnfd-catalog/vnfd:vnfd[vnfd:id='%s']/vnfd:vdu[vnfd:id='iovdu_0']/vnfd:supplemental-boot-data/vnfd:custom-meta-data[vnfd:name='custom_cloud_meta_data']/vnfd:value" % (pong_id)
345 value = pong_custom_meta_data
346 vnf_input_parameter_pong = rift.auto.descriptor.create_vnf_input_parameter(xpath, value, vnfd_id_ref=pong_id)
347
348
349 nsd_catalog = mgmt_session.proxy(RwProjectNsdYang).get_config("/rw-project:project[rw-project:name='default']/nsd-catalog")
350 nsd = [nsd for nsd in nsd_catalog.nsd if nsd.name == 'pp_input_nsd'][0]
351
352 nsr = rift.auto.descriptor.create_nsr(
353 cloud_account_name,
354 "pp_input_params_4",
355 nsd,
356 vnf_input_param_list=[vnf_input_parameter_ping, vnf_input_parameter_pong]
357 )
358 mgmt_session.proxy(RwNsrYang).create_config("/rw-project:project[rw-project:name='default']/ns-instance-config/nsr", nsr)
359
360 def test_verify_running(self, mgmt_session):
361 VerifyAllInstancesRunning(mgmt_session)
362
363 def test_verify_configured(self, mgmt_session):
364 VerifyAllInstancesConfigured(mgmt_session)
365
366 def test_verify_vnf_input_parameters(self, mgmt_session, ping_id, pong_id, ping_custom_meta_data, pong_custom_meta_data):
367 ''' Verify both ping and pong meta data were replaced with their respective meta data
368 '''
369 vnfr_catalog = mgmt_session.proxy(RwVnfrYang).get("/project[name='default']/vnfr-catalog")
370 ping_vnfr = [vnfr for vnfr in vnfr_catalog.vnfr if vnfr.vnfd.id == ping_id][0]
371 pong_vnfr = [vnfr for vnfr in vnfr_catalog.vnfr if vnfr.vnfd.id == pong_id][0]
372
373 # Verify the data was replaced in the vdu
374 ping_meta_data = mgmt_session.proxy(RwVnfrYang).get("/project[name='default']/vnfr-catalog/vnfr[id='%s']/vnfd/vdu/supplemental-boot-data/custom-meta-data[name='custom_cloud_meta_data']/value" % (ping_vnfr.id))
375 assert ping_meta_data == ping_custom_meta_data
376 pong_meta_data = mgmt_session.proxy(RwVnfrYang).get("/project[name='default']/vnfr-catalog/vnfr[id='%s']/vnfd/vdu/supplemental-boot-data/custom-meta-data[name='custom_cloud_meta_data']/value" % (pong_vnfr.id))
377 assert pong_meta_data == pong_custom_meta_data
378
379 # Verify the data was also replaced in the vdur
380 ping_meta_data = mgmt_session.proxy(RwVnfrYang).get("/project[name='default']/vnfr-catalog/vnfr[id='%s']/vdur/supplemental-boot-data/custom-meta-data[name='custom_cloud_meta_data']/value" % (ping_vnfr.id))
381 assert ping_meta_data == ping_custom_meta_data
382 pong_meta_data = mgmt_session.proxy(RwVnfrYang).get("/project[name='default']/vnfr-catalog/vnfr[id='%s']/vdur/supplemental-boot-data/custom-meta-data[name='custom_cloud_meta_data']/value" % (pong_vnfr.id))
383 assert pong_meta_data == pong_custom_meta_data
384
385 def test_teardown(self, mgmt_session):
386 ns_instance_config = mgmt_session.proxy(RwNsrYang).get_config("/rw-project:project[rw-project:name='default']/ns-instance-config")
387 for nsr in ns_instance_config.nsr:
388 mgmt_session.proxy(RwNsrYang).delete_config("/rw-project:project[rw-project:name='default']/ns-instance-config/nsr[id='{}']".format(nsr.id))
389 time.sleep(60)
390 vnfr_catalog = mgmt_session.proxy(RwVnfrYang).get("/rw-project:project[rw-project:name='default']/vnfr-catalog")
391 assert vnfr_catalog is None or len(vnfr_catalog.vnfr) == 0
392
393
394 @pytest.mark.depends('descriptors')
395 @pytest.mark.incremental
396 @pytest.mark.skipif(True, reason='RIFT-18171 - Disabled due to cloud init failure on userdata supplied bash scripts')
397 class TestMemberVnfInputParamsInitScripts:
398 def test_instantiate(self, mgmt_session, cloud_account_name, ping_script_id, pong_script_id, ping_custom_script_init_data, pong_custom_script_init_data):
399 ''' Testing replacement of vnf input parameters with node specific xpath expression in init scripts
400
401 /vnfd:vnfd-catalog/vnfd:vnfd[vnfd:id='<member-id>']/vnfd:vdu[vnfd:id="<vdu-id>"]/vnfd:supplemental-boot-data/vnfd:custom-meta-data[vnfd:name=<leaf-name>]/vnfd:value
402 /vnfd:vnfd-catalog/vnfd:vnfd[vnfd:id='<member-id>'/<leaf>
403
404 Expected to replace the leaf in a specific member VNF
405 '''
406
407 xpath = "/vnfd:vnfd-catalog/vnfd:vnfd[vnfd:id='%s']/vnfd:vdu[vnfd:id='iovdu_0']/vnfd:supplemental-boot-data/vnfd:custom-meta-data[vnfd:name='CI-script-init-data']/vnfd:value" % (ping_script_id)
408 value = ping_custom_script_init_data
409 vnf_input_parameter_ping = rift.auto.descriptor.create_vnf_input_parameter(xpath, value, vnfd_id_ref=ping_script_id)
410
411 xpath = "/vnfd:vnfd-catalog/vnfd:vnfd[vnfd:id='%s']/vnfd:vdu[vnfd:id='iovdu_0']/vnfd:supplemental-boot-data/vnfd:custom-meta-data[vnfd:name='CI-script-init-data']/vnfd:value" % (pong_script_id)
412 value = pong_custom_script_init_data
413 vnf_input_parameter_pong = rift.auto.descriptor.create_vnf_input_parameter(xpath, value, vnfd_id_ref=pong_script_id)
414
415 nsd_catalog = mgmt_session.proxy(RwProjectNsdYang).get_config("/rw-project:project[rw-project:name='default']/nsd-catalog")
416 nsd = [nsd for nsd in nsd_catalog.nsd if nsd.name == 'pp_script_nsd'][0]
417
418 nsr = rift.auto.descriptor.create_nsr(
419 cloud_account_name,
420 "pp_input_params_5",
421 nsd,
422 vnf_input_param_list=[vnf_input_parameter_ping, vnf_input_parameter_pong]
423 )
424 mgmt_session.proxy(RwNsrYang).create_config("/rw-project:project[rw-project:name='default']/ns-instance-config/nsr", nsr)
425
426 def test_verify_running(self, mgmt_session):
427 VerifyAllInstancesRunning(mgmt_session)
428
429 def test_verify_configured(self, mgmt_session):
430 # Configuration will only succeed if the replacement was sucessful
431 VerifyAllInstancesConfigured(mgmt_session)