| 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 |
| 21 | |
| 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) |
| Mike Marchetti | 08f0428 | 2017-05-04 16:43:09 -0400 | [diff] [blame] | 37 | ns_name=osm.ns_name_prefix+nsd_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: |
| 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): |
| Mike Marchetti | 6228f56 | 2017-06-15 14:51:27 -0400 | [diff] [blame] | 82 | for file in nsd_file_list: |
| 83 | nsd_desc = osm.get_api().package.get_key_val_from_pkg(file) |
| 84 | |
| Mike Marchetti | 08f0428 | 2017-05-04 16:43:09 -0400 | [diff] [blame] | 85 | ns_name=osm.ns_name_prefix+nsd_desc['name'] |
| 86 | |
| 87 | assert not osm.get_api().ns.create(nsd_desc['name'],ns_name,vim.vim_name) |
| 88 | |
| Mike Marchetti | b884a46 | 2017-10-05 13:28:33 -0400 | [diff] [blame] | 89 | assert utils.wait_for_value(lambda: osm.get_api().ns.get_field(ns_name,'operational-status'),result='vnf-init-phase') |
| Mike Marchetti | 08f0428 | 2017-05-04 16:43:09 -0400 | [diff] [blame] | 90 | |
| 91 | # make sure ns is running |
| kasar | 12aa2cf | 2018-02-02 02:51:07 -0800 | [diff] [blame] | 92 | assert utils.wait_for_value(lambda: osm.get_api().ns.get_field(ns_name,'operational-status'),result='running',wait_time=300) |
| Mike Marchetti | 08f0428 | 2017-05-04 16:43:09 -0400 | [diff] [blame] | 93 | |
| Mike Marchetti | 6228f56 | 2017-06-15 14:51:27 -0400 | [diff] [blame] | 94 | if ns_scale: |
| 95 | # for each descriptor, scale it |
| 96 | for scale in nsd_desc['scaling-group-descriptor']: |
| 97 | # scale it. |
| 98 | assert not osm.get_api().ns.scale(ns_name, scale['name'], 1) |
| 99 | |
| 100 | # ensure ns is scaling-out |
| Mike Marchetti | f94dd8a | 2017-11-06 11:04:38 -0500 | [diff] [blame] | 101 | 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] | 102 | |
| 103 | # wait for ns to be in running-state |
| kasar | 12aa2cf | 2018-02-02 02:51:07 -0800 | [diff] [blame] | 104 | 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] | 105 | |
| 106 | time.sleep(10) |
| Mike Marchetti | 6228f56 | 2017-06-15 14:51:27 -0400 | [diff] [blame] | 107 | |
| Mike Marchetti | 08f0428 | 2017-05-04 16:43:09 -0400 | [diff] [blame] | 108 | assert not osm.get_api().ns.delete(ns_name) |
| 109 | |
| 110 | assert not osm.get_api().nsd.delete(nsd_desc['name']) |
| 111 | |
| Mike Marchetti | 6228f56 | 2017-06-15 14:51:27 -0400 | [diff] [blame] | 112 | for file in vnfd_file_list: |
| 113 | vnfd_desc = osm.get_api().package.get_key_val_from_pkg(file) |
| Mike Marchetti | 08f0428 | 2017-05-04 16:43:09 -0400 | [diff] [blame] | 114 | assert not osm.get_api().vnfd.delete(vnfd_desc['name']) |
| 115 | |
| 116 | @pytest.mark.openstack |
| 117 | @pytest.mark.vnf |
| kasar | 12aa2cf | 2018-02-02 02:51:07 -0800 | [diff] [blame] | 118 | @pytest.mark.vmware |
| 119 | def test_vnf(self,osm, vim, openstack, vmware, cleanup_test_vnf): |
| Mike Marchetti | 08f0428 | 2017-05-04 16:43:09 -0400 | [diff] [blame] | 120 | vnfd_file_list = osm.vnfd_descriptors_list |
| 121 | nsd_file_list = osm.nsd_descriptors_list |
| 122 | |
| Mike Marchetti | 6228f56 | 2017-06-15 14:51:27 -0400 | [diff] [blame] | 123 | self.vnf_upload_packages(osm, vnfd_file_list, nsd_file_list ) |
| kasar | 12aa2cf | 2018-02-02 02:51:07 -0800 | [diff] [blame] | 124 | 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] | 125 | |
| 126 | @pytest.mark.openstack |
| 127 | @pytest.mark.ns_scale |
| kasar | 12aa2cf | 2018-02-02 02:51:07 -0800 | [diff] [blame] | 128 | @pytest.mark.vmware |
| 129 | def test_scale_vnf(self,osm, vim, openstack, vmware, cleanup_test_vnf): |
| Mike Marchetti | 6228f56 | 2017-06-15 14:51:27 -0400 | [diff] [blame] | 130 | vnfd_file_list = osm.vnfd_descriptors_list |
| 131 | nsd_file_list = osm.nsd_descriptors_list |
| 132 | |
| 133 | self.vnf_upload_packages(osm, vnfd_file_list, nsd_file_list ) |
| kasar | 12aa2cf | 2018-02-02 02:51:07 -0800 | [diff] [blame] | 134 | self.vnf_test(osm,openstack, vim, vmware, vnfd_file_list, nsd_file_list, ns_scale=True) |