6096a544c82ddd9b50e584328b18914391bf9f78
[osm/devops.git] / systest / testcases / vnfs / test_vnfs.py
1 # Copyright 2017 Sandvine
2 #
3 # All Rights Reserved.
4 #
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
8 #
9 # http://www.apache.org/licenses/LICENSE-2.0
10 #
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
15 # under the License.
16
17 import pytest
18 import pprint
19 import time
20 from osmclient.common import utils
21 import pprint
22
23 class TestClass(object):
24
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
29
30 # cleanup all ns/packages that might have been left around
31 def teardown():
32
33 # first delete all nsd's
34 for file in nsd_file_list:
35 try:
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)
39 except:
40 pass
41
42 # delete all nsd packages
43 for file in nsd_file_list:
44 try:
45 desc = osm.get_api().package.get_key_val_from_pkg(file)
46 osm.get_api().nsd.delete(desc['name'])
47 except:
48 pass
49
50 # delete all vnfd packages
51 for file in vnfd_file_list:
52 try:
53 desc = osm.get_api().package.get_key_val_from_pkg(file)
54 osm.get_api().vnfd.delete(desc['name'])
55 except:
56 pass
57
58 request.addfinalizer(teardown)
59
60 def vnf_upload_packages(self, osm, vnfd_file_list, nsd_file_list ):
61 vnfd_descriptors=[]
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)
66 assert desc
67 vnfd_descriptors.append(desc)
68
69 nsd_descriptors=[]
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)
74 assert desc
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?
79 time.sleep(5)
80
81 def vnf_test(self,osm, openstack, vim, vmware, vnfd_file_list, nsd_file_list, ns_scale=False):
82
83 # FIXME: need sleep after vim creation. Need a way to validate vim is ready to handle requests
84 time.sleep(20)
85
86 for file in nsd_file_list:
87 nsd_desc = osm.get_api().package.get_key_val_from_pkg(file)
88
89 ns_name=osm.ns_name_prefix+nsd_desc['name']
90
91 assert osm.get_api().ns.create(nsd_desc['name'],ns_name,vim.vim_name)
92
93 if not utils.wait_for_value(lambda: osm.get_api().ns.get_field(ns_name,'operational-status'),result='init', wait_time=30):
94 nsr=osm.get_api().ns.get(ns_name)
95 pprint.pprint(nsr)
96 assert Fail, "operational-status != init"
97
98 # make sure ns is running
99 if not utils.wait_for_value(lambda: osm.get_api().ns.get_field(ns_name,'operational-status'),result='running',wait_time=240):
100 nsr=osm.get_api().ns.get(ns_name)
101 pprint.pprint(nsr)
102 assert Fail, "operational-status != running"
103
104 if ns_scale:
105 # for each descriptor, scale it
106 for scale in nsd_desc['scaling-group-descriptor']:
107 # scale it.
108 assert not osm.get_api().ns.scale(ns_name, scale['name'], 1)
109
110 # ensure ns is scaling-out
111 assert utils.wait_for_value(lambda: osm.get_api().ns.get_field(ns_name,'operational-status'),result='scaling-out',wait_time=120)
112
113 # wait for ns to be in running-state
114 assert utils.wait_for_value(lambda: osm.get_api().ns.get_field(ns_name,'operational-status'),result='running',wait_time=300)
115
116 time.sleep(10)
117
118 assert not osm.get_api().ns.delete(ns_name)
119
120 #wait for the ns to delete
121 try:
122 utils.wait_for_value( lambda: osm.get_api().ns.get(ns_name), result=False, wait_time=180)
123 except:
124 pass
125
126 assert not osm.get_api().nsd.delete(nsd_desc['name'])
127
128 for file in vnfd_file_list:
129 vnfd_desc = osm.get_api().package.get_key_val_from_pkg(file)
130 assert not osm.get_api().vnfd.delete(vnfd_desc['name'])
131
132 @pytest.mark.openstack
133 @pytest.mark.vnf
134 @pytest.mark.vmware
135 def test_vnf(self,osm, vim, openstack, vmware, cleanup_test_vnf):
136 vnfd_file_list = osm.vnfd_descriptors_list
137 nsd_file_list = osm.nsd_descriptors_list
138
139 self.vnf_upload_packages(osm, vnfd_file_list, nsd_file_list )
140 self.vnf_test(osm,openstack, vim, vmware, vnfd_file_list, nsd_file_list)
141
142 @pytest.mark.openstack
143 @pytest.mark.ns_scale
144 @pytest.mark.vmware
145 def test_scale_vnf(self,osm, vim, openstack, vmware, cleanup_test_vnf):
146 vnfd_file_list = osm.vnfd_descriptors_list
147 nsd_file_list = osm.nsd_descriptors_list
148
149 self.vnf_upload_packages(osm, vnfd_file_list, nsd_file_list )
150 self.vnf_test(osm,openstack, vim, vmware, vnfd_file_list, nsd_file_list, ns_scale=True)