| Mike Marchetti | 08f0428 | 2017-05-04 16:43:09 -0400 | [diff] [blame] | 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 |
| yadavmr | 0784733 | 2019-11-28 12:01:48 +0530 | [diff] [blame] | 21 | |
| Mike Marchetti | 08f0428 | 2017-05-04 16:43:09 -0400 | [diff] [blame] | 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: |
| Mike Marchetti | 6228f56 | 2017-06-15 14:51:27 -0400 | [diff] [blame] | 36 | desc = osm.get_api().package.get_key_val_from_pkg(file) |
| Michael Marchetti | e531f69 | 2018-10-31 16:18:25 +0000 | [diff] [blame] | 37 | ns_name=osm.ns_name_prefix+desc['name'] |
| Mike Marchetti | 08f0428 | 2017-05-04 16:43:09 -0400 | [diff] [blame] | 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: |
| Mike Marchetti | 6228f56 | 2017-06-15 14:51:27 -0400 | [diff] [blame] | 45 | desc = osm.get_api().package.get_key_val_from_pkg(file) |
| Mike Marchetti | 08f0428 | 2017-05-04 16:43:09 -0400 | [diff] [blame] | 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: |
| Mike Marchetti | 6228f56 | 2017-06-15 14:51:27 -0400 | [diff] [blame] | 53 | desc = osm.get_api().package.get_key_val_from_pkg(file) |
| Mike Marchetti | 08f0428 | 2017-05-04 16:43:09 -0400 | [diff] [blame] | 54 | osm.get_api().vnfd.delete(desc['name']) |
| 55 | except: |
| 56 | pass |
| 57 | |
| 58 | request.addfinalizer(teardown) |
| 59 | |
| Mike Marchetti | 6228f56 | 2017-06-15 14:51:27 -0400 | [diff] [blame] | 60 | def vnf_upload_packages(self, osm, vnfd_file_list, nsd_file_list ): |
| Mike Marchetti | 08f0428 | 2017-05-04 16:43:09 -0400 | [diff] [blame] | 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) |
| Mike Marchetti | 6228f56 | 2017-06-15 14:51:27 -0400 | [diff] [blame] | 65 | desc = osm.get_api().package.get_key_val_from_pkg(file) |
| Mike Marchetti | 08f0428 | 2017-05-04 16:43:09 -0400 | [diff] [blame] | 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) |
| Mike Marchetti | 6228f56 | 2017-06-15 14:51:27 -0400 | [diff] [blame] | 73 | desc = osm.get_api().package.get_key_val_from_pkg(file) |
| Mike Marchetti | 08f0428 | 2017-05-04 16:43:09 -0400 | [diff] [blame] | 74 | assert desc |
| 75 | nsd_descriptors.append(desc) |
| Mike Marchetti | 08f0428 | 2017-05-04 16:43:09 -0400 | [diff] [blame] | 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? |
| Mike Marchetti | 6228f56 | 2017-06-15 14:51:27 -0400 | [diff] [blame] | 79 | time.sleep(5) |
| Mike Marchetti | 08f0428 | 2017-05-04 16:43:09 -0400 | [diff] [blame] | 80 | |
| kasar | 12aa2cf | 2018-02-02 02:51:07 -0800 | [diff] [blame] | 81 | def vnf_test(self,osm, openstack, vim, vmware, vnfd_file_list, nsd_file_list, ns_scale=False): |
| Michael Marchetti | dc782d5 | 2018-11-01 00:11:01 +0000 | [diff] [blame] | 82 | |
| 83 | # FIXME: need sleep after vim creation. Need a way to validate vim is ready to handle requests |
| 84 | time.sleep(20) |
| 85 | |
| Mike Marchetti | 6228f56 | 2017-06-15 14:51:27 -0400 | [diff] [blame] | 86 | for file in nsd_file_list: |
| 87 | nsd_desc = osm.get_api().package.get_key_val_from_pkg(file) |
| 88 | |
| Mike Marchetti | 08f0428 | 2017-05-04 16:43:09 -0400 | [diff] [blame] | 89 | ns_name=osm.ns_name_prefix+nsd_desc['name'] |
| 90 | |
| Michael Marchetti | e531f69 | 2018-10-31 16:18:25 +0000 | [diff] [blame] | 91 | assert osm.get_api().ns.create(nsd_desc['name'],ns_name,vim.vim_name) |
| madavi | bc31dab | 2019-11-19 14:00:36 +0530 | [diff] [blame] | 92 | # 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 Marchetti | 08f0428 | 2017-05-04 16:43:09 -0400 | [diff] [blame] | 98 | |
| 99 | # make sure ns is running |
| Michael Marchetti | 699b94f | 2018-11-01 00:36:50 +0000 | [diff] [blame] | 100 | if not utils.wait_for_value(lambda: osm.get_api().ns.get_field(ns_name,'operational-status'),result='running',wait_time=240): |
| Michael Marchetti | 7cb84de | 2018-10-31 21:32:21 +0000 | [diff] [blame] | 101 | nsr=osm.get_api().ns.get(ns_name) |
| 102 | pprint.pprint(nsr) |
| yadavmr | 9de4ec1 | 2019-07-22 14:15:30 +0530 | [diff] [blame] | 103 | assert True, "operational-status != running" |
| Mike Marchetti | 08f0428 | 2017-05-04 16:43:09 -0400 | [diff] [blame] | 104 | |
| Mike Marchetti | 6228f56 | 2017-06-15 14:51:27 -0400 | [diff] [blame] | 105 | 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 Marchetti | f94dd8a | 2017-11-06 11:04:38 -0500 | [diff] [blame] | 112 | assert utils.wait_for_value(lambda: osm.get_api().ns.get_field(ns_name,'operational-status'),result='scaling-out',wait_time=120) |
| Mike Marchetti | 6228f56 | 2017-06-15 14:51:27 -0400 | [diff] [blame] | 113 | |
| 114 | # wait for ns to be in running-state |
| kasar | 12aa2cf | 2018-02-02 02:51:07 -0800 | [diff] [blame] | 115 | assert utils.wait_for_value(lambda: osm.get_api().ns.get_field(ns_name,'operational-status'),result='running',wait_time=300) |
| Mike Marchetti | 8d38950 | 2017-10-12 11:29:38 -0400 | [diff] [blame] | 116 | |
| 117 | time.sleep(10) |
| Mike Marchetti | 6228f56 | 2017-06-15 14:51:27 -0400 | [diff] [blame] | 118 | |
| Mike Marchetti | 08f0428 | 2017-05-04 16:43:09 -0400 | [diff] [blame] | 119 | assert not osm.get_api().ns.delete(ns_name) |
| 120 | |
| Michael Marchetti | 26e8e33 | 2018-11-01 17:12:20 +0000 | [diff] [blame] | 121 | #wait for the ns to delete |
| 122 | try: |
| garciadeblas | 391a326 | 2019-06-06 17:57:15 +0200 | [diff] [blame] | 123 | utils.wait_for_value( lambda: osm.get_api().ns.get(ns_name), result=False, wait_time=180) |
| Michael Marchetti | 26e8e33 | 2018-11-01 17:12:20 +0000 | [diff] [blame] | 124 | except: |
| madavi | bc31dab | 2019-11-19 14:00:36 +0530 | [diff] [blame] | 125 | 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 Marchetti | 6228f56 | 2017-06-15 14:51:27 -0400 | [diff] [blame] | 134 | for file in vnfd_file_list: |
| 135 | vnfd_desc = osm.get_api().package.get_key_val_from_pkg(file) |
| Mike Marchetti | 08f0428 | 2017-05-04 16:43:09 -0400 | [diff] [blame] | 136 | assert not osm.get_api().vnfd.delete(vnfd_desc['name']) |
| 137 | |
| 138 | @pytest.mark.openstack |
| 139 | @pytest.mark.vnf |
| kasar | 12aa2cf | 2018-02-02 02:51:07 -0800 | [diff] [blame] | 140 | @pytest.mark.vmware |
| 141 | def test_vnf(self,osm, vim, openstack, vmware, cleanup_test_vnf): |
| Mike Marchetti | 08f0428 | 2017-05-04 16:43:09 -0400 | [diff] [blame] | 142 | vnfd_file_list = osm.vnfd_descriptors_list |
| 143 | nsd_file_list = osm.nsd_descriptors_list |
| 144 | |
| Mike Marchetti | 6228f56 | 2017-06-15 14:51:27 -0400 | [diff] [blame] | 145 | self.vnf_upload_packages(osm, vnfd_file_list, nsd_file_list ) |
| kasar | 12aa2cf | 2018-02-02 02:51:07 -0800 | [diff] [blame] | 146 | self.vnf_test(osm,openstack, vim, vmware, vnfd_file_list, nsd_file_list) |
| Mike Marchetti | 6228f56 | 2017-06-15 14:51:27 -0400 | [diff] [blame] | 147 | |
| 148 | @pytest.mark.openstack |
| 149 | @pytest.mark.ns_scale |
| kasar | 12aa2cf | 2018-02-02 02:51:07 -0800 | [diff] [blame] | 150 | @pytest.mark.vmware |
| 151 | def test_scale_vnf(self,osm, vim, openstack, vmware, cleanup_test_vnf): |
| Mike Marchetti | 6228f56 | 2017-06-15 14:51:27 -0400 | [diff] [blame] | 152 | 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 ) |
| kasar | 12aa2cf | 2018-02-02 02:51:07 -0800 | [diff] [blame] | 156 | self.vnf_test(osm,openstack, vim, vmware, vnfd_file_list, nsd_file_list, ns_scale=True) |