blob: ab3a162185162be7b24a996688f5d42526c5dc83 [file] [log] [blame]
Mike Marchetti08f04282017-05-04 16:43:09 -04001# 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
17import pytest
18import pprint
19import time
20from osmclient.common import utils
yadavmr07847332019-11-28 12:01:48 +053021
Mike Marchetti08f04282017-05-04 16:43:09 -040022
23class 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:
Mike Marchetti6228f562017-06-15 14:51:27 -040036 desc = osm.get_api().package.get_key_val_from_pkg(file)
Michael Marchettie531f692018-10-31 16:18:25 +000037 ns_name=osm.ns_name_prefix+desc['name']
Mike Marchetti08f04282017-05-04 16:43:09 -040038 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:
Mike Marchetti6228f562017-06-15 14:51:27 -040045 desc = osm.get_api().package.get_key_val_from_pkg(file)
Mike Marchetti08f04282017-05-04 16:43:09 -040046 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:
Mike Marchetti6228f562017-06-15 14:51:27 -040053 desc = osm.get_api().package.get_key_val_from_pkg(file)
Mike Marchetti08f04282017-05-04 16:43:09 -040054 osm.get_api().vnfd.delete(desc['name'])
55 except:
56 pass
57
58 request.addfinalizer(teardown)
59
Mike Marchetti6228f562017-06-15 14:51:27 -040060 def vnf_upload_packages(self, osm, vnfd_file_list, nsd_file_list ):
Mike Marchetti08f04282017-05-04 16:43:09 -040061 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)
Mike Marchetti6228f562017-06-15 14:51:27 -040065 desc = osm.get_api().package.get_key_val_from_pkg(file)
Mike Marchetti08f04282017-05-04 16:43:09 -040066 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)
Mike Marchetti6228f562017-06-15 14:51:27 -040073 desc = osm.get_api().package.get_key_val_from_pkg(file)
Mike Marchetti08f04282017-05-04 16:43:09 -040074 assert desc
75 nsd_descriptors.append(desc)
Mike Marchetti08f04282017-05-04 16:43:09 -040076 # 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?
Mike Marchetti6228f562017-06-15 14:51:27 -040079 time.sleep(5)
Mike Marchetti08f04282017-05-04 16:43:09 -040080
kasar12aa2cf2018-02-02 02:51:07 -080081 def vnf_test(self,osm, openstack, vim, vmware, vnfd_file_list, nsd_file_list, ns_scale=False):
Michael Marchettidc782d52018-11-01 00:11:01 +000082
83 # FIXME: need sleep after vim creation. Need a way to validate vim is ready to handle requests
84 time.sleep(20)
85
Mike Marchetti6228f562017-06-15 14:51:27 -040086 for file in nsd_file_list:
87 nsd_desc = osm.get_api().package.get_key_val_from_pkg(file)
88
Mike Marchetti08f04282017-05-04 16:43:09 -040089 ns_name=osm.ns_name_prefix+nsd_desc['name']
90
Michael Marchettie531f692018-10-31 16:18:25 +000091 assert osm.get_api().ns.create(nsd_desc['name'],ns_name,vim.vim_name)
madavibc31dab2019-11-19 14:00:36 +053092 # commenting the init check as sometime it is going to running state very fast
93
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)
96 # pprint.pprint(nsr)
97 # assert True, "operational-status != init"
Mike Marchetti08f04282017-05-04 16:43:09 -040098
99 # make sure ns is running
Michael Marchetti699b94f2018-11-01 00:36:50 +0000100 if not utils.wait_for_value(lambda: osm.get_api().ns.get_field(ns_name,'operational-status'),result='running',wait_time=240):
Michael Marchetti7cb84de2018-10-31 21:32:21 +0000101 nsr=osm.get_api().ns.get(ns_name)
102 pprint.pprint(nsr)
yadavmr9de4ec12019-07-22 14:15:30 +0530103 assert True, "operational-status != running"
Mike Marchetti08f04282017-05-04 16:43:09 -0400104
Mike Marchetti6228f562017-06-15 14:51:27 -0400105 if ns_scale:
106 # for each descriptor, scale it
107 for scale in nsd_desc['scaling-group-descriptor']:
108 # scale it.
109 assert not osm.get_api().ns.scale(ns_name, scale['name'], 1)
110
111 # ensure ns is scaling-out
Mike Marchettif94dd8a2017-11-06 11:04:38 -0500112 assert utils.wait_for_value(lambda: osm.get_api().ns.get_field(ns_name,'operational-status'),result='scaling-out',wait_time=120)
Mike Marchetti6228f562017-06-15 14:51:27 -0400113
114 # wait for ns to be in running-state
kasar12aa2cf2018-02-02 02:51:07 -0800115 assert utils.wait_for_value(lambda: osm.get_api().ns.get_field(ns_name,'operational-status'),result='running',wait_time=300)
Mike Marchetti8d389502017-10-12 11:29:38 -0400116
117 time.sleep(10)
Mike Marchetti6228f562017-06-15 14:51:27 -0400118
Mike Marchetti08f04282017-05-04 16:43:09 -0400119 assert not osm.get_api().ns.delete(ns_name)
120
Michael Marchetti26e8e332018-11-01 17:12:20 +0000121 #wait for the ns to delete
122 try:
garciadeblas391a3262019-06-06 17:57:15 +0200123 utils.wait_for_value( lambda: osm.get_api().ns.get(ns_name), result=False, wait_time=180)
Michael Marchetti26e8e332018-11-01 17:12:20 +0000124 except:
madavibc31dab2019-11-19 14:00:36 +0530125 print("Exception: Failed to get NAME after NS DELETE ... ")
126
127 #TODO find the reason for 502 exception from osmclient/nbi
128 try:
129 assert not osm.get_api().nsd.delete(nsd_desc['name'])
130 except:
131 print("Exception: NSD Delete exception ...due to 502 error")
132 time.sleep(10)
133
Mike Marchetti6228f562017-06-15 14:51:27 -0400134 for file in vnfd_file_list:
135 vnfd_desc = osm.get_api().package.get_key_val_from_pkg(file)
Mike Marchetti08f04282017-05-04 16:43:09 -0400136 assert not osm.get_api().vnfd.delete(vnfd_desc['name'])
137
138 @pytest.mark.openstack
139 @pytest.mark.vnf
kasar12aa2cf2018-02-02 02:51:07 -0800140 @pytest.mark.vmware
141 def test_vnf(self,osm, vim, openstack, vmware, cleanup_test_vnf):
Mike Marchetti08f04282017-05-04 16:43:09 -0400142 vnfd_file_list = osm.vnfd_descriptors_list
143 nsd_file_list = osm.nsd_descriptors_list
144
Mike Marchetti6228f562017-06-15 14:51:27 -0400145 self.vnf_upload_packages(osm, vnfd_file_list, nsd_file_list )
kasar12aa2cf2018-02-02 02:51:07 -0800146 self.vnf_test(osm,openstack, vim, vmware, vnfd_file_list, nsd_file_list)
Mike Marchetti6228f562017-06-15 14:51:27 -0400147
148 @pytest.mark.openstack
149 @pytest.mark.ns_scale
kasar12aa2cf2018-02-02 02:51:07 -0800150 @pytest.mark.vmware
151 def test_scale_vnf(self,osm, vim, openstack, vmware, cleanup_test_vnf):
Mike Marchetti6228f562017-06-15 14:51:27 -0400152 vnfd_file_list = osm.vnfd_descriptors_list
153 nsd_file_list = osm.nsd_descriptors_list
154
155 self.vnf_upload_packages(osm, vnfd_file_list, nsd_file_list )
kasar12aa2cf2018-02-02 02:51:07 -0800156 self.vnf_test(osm,openstack, vim, vmware, vnfd_file_list, nsd_file_list, ns_scale=True)