1 # Copyright 2017 Sandvine
5 # Licensed under the Apache License, Version 2.0 (the "License"); you may
6 # not use this file except in compliance with the License. You may obtain
7 # a copy of the License at
9 # http://www.apache.org/licenses/LICENSE-2.0
11 # Unless required by applicable law or agreed to in writing, software
12 # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
13 # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
14 # License for the specific language governing permissions and limitations
20 from osmclient
.common
import utils
23 class TestClass(object):
25 @pytest.fixture(scope
='function')
26 def cleanup_test_vnf(self
,osm
,request
):
27 vnfd_file_list
= osm
.vnfd_descriptors_list
28 nsd_file_list
= osm
.nsd_descriptors_list
30 # cleanup all ns/packages that might have been left around
33 # first delete all nsd's
34 for file in nsd_file_list
:
36 desc
= osm
.get_api().package
.get_key_val_from_pkg(file)
37 ns_name
=osm
.ns_name_prefix
+desc
['name']
38 osm
.get_api().ns
.delete(ns_name
)
42 # delete all nsd packages
43 for file in nsd_file_list
:
45 desc
= osm
.get_api().package
.get_key_val_from_pkg(file)
46 osm
.get_api().nsd
.delete(desc
['name'])
50 # delete all vnfd packages
51 for file in vnfd_file_list
:
53 desc
= osm
.get_api().package
.get_key_val_from_pkg(file)
54 osm
.get_api().vnfd
.delete(desc
['name'])
58 request
.addfinalizer(teardown
)
60 def vnf_upload_packages(self
, osm
, vnfd_file_list
, nsd_file_list
):
62 for file in vnfd_file_list
:
63 assert not osm
.get_api().package
.upload(file)
64 assert not osm
.get_api().package
.wait_for_upload(file)
65 desc
= osm
.get_api().package
.get_key_val_from_pkg(file)
67 vnfd_descriptors
.append(desc
)
70 for file in nsd_file_list
:
71 assert not osm
.get_api().package
.upload(file)
72 assert not osm
.get_api().package
.wait_for_upload(file)
73 desc
= osm
.get_api().package
.get_key_val_from_pkg(file)
75 nsd_descriptors
.append(desc
)
76 # TODO/HACK: need to figure out why this is necessary.
77 # vnfd/nsd is there (seen on ping_pong), but the ns fails that nsd is not there,
78 # another way to check if the nsd is really ready via API?
81 def vnf_test(self
,osm
, openstack
, vim
, vmware
, vnfd_file_list
, nsd_file_list
, ns_scale
=False):
83 # FIXME: need sleep after vim creation. Need a way to validate vim is ready to handle requests
86 for file in nsd_file_list
:
87 nsd_desc
= osm
.get_api().package
.get_key_val_from_pkg(file)
89 ns_name
=osm
.ns_name_prefix
+nsd_desc
['name']
91 assert osm
.get_api().ns
.create(nsd_desc
['name'],ns_name
,vim
.vim_name
)
92 # commenting the init check as sometime it is going to running state very fast
94 # if not utils.wait_for_value(lambda: osm.get_api().ns.get_field(ns_name,'operational-status'),result='init', wait_time=30):
95 # nsr=osm.get_api().ns.get(ns_name)
97 # assert True, "operational-status != init"
99 # make sure ns is running
100 if not utils
.wait_for_value(lambda: osm
.get_api().ns
.get_field(ns_name
,'operational-status'),result
='running',wait_time
=240):
101 nsr
=osm
.get_api().ns
.get(ns_name
)
103 assert True, "operational-status != running"
106 # for each descriptor, scale it
107 for scale
in nsd_desc
['scaling-group-descriptor']:
109 assert not osm
.get_api().ns
.scale(ns_name
, scale
['name'], 1)
111 # ensure ns is scaling-out
112 assert utils
.wait_for_value(lambda: osm
.get_api().ns
.get_field(ns_name
,'operational-status'),result
='scaling-out',wait_time
=120)
114 # wait for ns to be in running-state
115 assert utils
.wait_for_value(lambda: osm
.get_api().ns
.get_field(ns_name
,'operational-status'),result
='running',wait_time
=300)
119 assert not osm
.get_api().ns
.delete(ns_name
)
121 #wait for the ns to delete
123 utils
.wait_for_value( lambda: osm
.get_api().ns
.get(ns_name
), result
=False, wait_time
=180)
125 print("Exception: Failed to get NAME after NS DELETE ... ")
127 #TODO find the reason for 502 exception from osmclient/nbi
129 assert not osm
.get_api().nsd
.delete(nsd_desc
['name'])
131 print("Exception: NSD Delete exception ...due to 502 error")
134 for file in vnfd_file_list
:
135 vnfd_desc
= osm
.get_api().package
.get_key_val_from_pkg(file)
136 assert not osm
.get_api().vnfd
.delete(vnfd_desc
['name'])
138 @pytest.mark
.openstack
141 def test_vnf(self
,osm
, vim
, openstack
, vmware
, cleanup_test_vnf
):
142 vnfd_file_list
= osm
.vnfd_descriptors_list
143 nsd_file_list
= osm
.nsd_descriptors_list
145 self
.vnf_upload_packages(osm
, vnfd_file_list
, nsd_file_list
)
146 self
.vnf_test(osm
,openstack
, vim
, vmware
, vnfd_file_list
, nsd_file_list
)
148 @pytest.mark
.openstack
149 @pytest.mark
.ns_scale
151 def test_scale_vnf(self
,osm
, vim
, openstack
, vmware
, cleanup_test_vnf
):
152 vnfd_file_list
= osm
.vnfd_descriptors_list
153 nsd_file_list
= osm
.nsd_descriptors_list
155 self
.vnf_upload_packages(osm
, vnfd_file_list
, nsd_file_list
)
156 self
.vnf_test(osm
,openstack
, vim
, vmware
, vnfd_file_list
, nsd_file_list
, ns_scale
=True)