blob: a777f693c12388e4da179c838395aab73e1e6b92 [file] [log] [blame]
Pablo Montes Morenoeebea062017-02-27 12:33:10 +01001#!/usr/bin/env python2
2# -*- coding: utf-8 -*-
3
4##
tiernoec66e9a2017-05-17 15:28:10 +02005# Copyright 2017
Pablo Montes Morenoeebea062017-02-27 12:33:10 +01006# This file is part of openmano
7# All Rights Reserved.
8#
9# Licensed under the Apache License, Version 2.0 (the "License"); you may
10# not use this file except in compliance with the License. You may obtain
11# a copy of the License at
12#
13# http://www.apache.org/licenses/LICENSE-2.0
14#
15# Unless required by applicable law or agreed to in writing, software
16# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
17# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
18# License for the specific language governing permissions and limitations
19# under the License.
20#
Pablo Montes Morenoeebea062017-02-27 12:33:10 +010021##
22
jamartinezv14a823d2019-08-01 11:45:15 +020023# DEBUG WITH PDB
tierno1fa49b12019-10-07 16:38:23 +000024from os import getenv
25if getenv('OSMRO_PDB_DEBUG'):
jamartinezv14a823d2019-08-01 11:45:15 +020026 import sys
27 print(sys.path)
28 import pdb
29 pdb.set_trace()
30
31
tiernoed854572017-10-03 16:18:09 +020032"""
Pablo Montes Morenoeebea062017-02-27 12:33:10 +010033Module for testing openmano functionality. It uses openmanoclient.py for invoking openmano
tiernoed854572017-10-03 16:18:09 +020034"""
Pablo Montes Morenoeebea062017-02-27 12:33:10 +010035
36import logging
Pablo Montes Morenoeebea062017-02-27 12:33:10 +010037import os
tiernoec66e9a2017-05-17 15:28:10 +020038import argcomplete
Pablo Montes Morenoeebea062017-02-27 12:33:10 +010039import unittest
40import string
41import inspect
42import random
tiernoed854572017-10-03 16:18:09 +020043# import traceback
Pablo Montes Morenoeebea062017-02-27 12:33:10 +010044import glob
45import yaml
46import sys
47import time
kasarbd11fd82017-06-01 23:44:03 -070048import uuid
tiernoed854572017-10-03 16:18:09 +020049from argparse import ArgumentParser
Pablo Montes Morenoeebea062017-02-27 12:33:10 +010050
tiernoed854572017-10-03 16:18:09 +020051__author__ = "Pablo Montes, Alfonso Tierno"
52__date__ = "$16-Feb-2017 17:08:16$"
53__version__ = "0.1.0"
54version_date = "Oct 2017"
55
56test_config = {} # used for global variables with the test configuration
57
tiernoec66e9a2017-05-17 15:28:10 +020058
tiernof0508352017-06-19 13:37:44 +020059class test_base(unittest.TestCase):
60 test_index = 1
61 test_text = None
62
63 @classmethod
64 def setUpClass(cls):
65 logger.info("{}. {}".format(test_config["test_number"], cls.__name__))
66
67 @classmethod
68 def tearDownClass(cls):
69 test_config["test_number"] += 1
70
71 def tearDown(self):
72 exec_info = sys.exc_info()
73 if exec_info == (None, None, None):
74 logger.info(self.__class__.test_text+" -> TEST OK")
75 else:
76 logger.warning(self.__class__.test_text+" -> TEST NOK")
77 logger.critical("Traceback error",exc_info=True)
78
Pablo Montes Morenoeebea062017-02-27 12:33:10 +010079
Pablo Montes Moreno2fe24fa2017-03-27 12:56:13 +020080def check_instance_scenario_active(uuid):
tiernoec66e9a2017-05-17 15:28:10 +020081 instance = test_config["client"].get_instance(uuid=uuid)
Pablo Montes Moreno2fe24fa2017-03-27 12:56:13 +020082
83 for net in instance['nets']:
84 status = net['status']
Pablo Montes Morenob12711f2017-04-06 11:54:34 +020085 if status != 'ACTIVE':
Pablo Montes Moreno2fe24fa2017-03-27 12:56:13 +020086 return (False, status)
87
88 for vnf in instance['vnfs']:
89 for vm in vnf['vms']:
90 status = vm['status']
91 if status != 'ACTIVE':
92 return (False, status)
93
94 return (True, None)
95
tiernoec66e9a2017-05-17 15:28:10 +020096
Pablo Montes Morenoeebea062017-02-27 12:33:10 +010097'''
98IMPORTANT NOTE
99All unittest classes for code based tests must have prefix 'test_' in order to be taken into account for tests
100'''
tiernof0508352017-06-19 13:37:44 +0200101class test_VIM_datacenter_tenant_operations(test_base):
Pablo Montes Morenoeebea062017-02-27 12:33:10 +0100102 tenant_name = None
Pablo Montes Morenoeebea062017-02-27 12:33:10 +0100103
104 def test_000_create_RO_tenant(self):
105 self.__class__.tenant_name = _get_random_string(20)
tiernoec66e9a2017-05-17 15:28:10 +0200106 self.__class__.test_text = "{}.{}. TEST {}".format(test_config["test_number"], self.__class__.test_index,
Pablo Montes Morenoeebea062017-02-27 12:33:10 +0100107 inspect.currentframe().f_code.co_name)
108 self.__class__.test_index += 1
lloretgalleg45220152019-10-29 11:53:49 +0100109 logger.debug("Test create tenant")
tiernoec66e9a2017-05-17 15:28:10 +0200110 tenant = test_config["client"].create_tenant(name=self.__class__.tenant_name,
111 description=self.__class__.tenant_name)
Pablo Montes Morenoeebea062017-02-27 12:33:10 +0100112 logger.debug("{}".format(tenant))
113 self.assertEqual(tenant.get('tenant', {}).get('name', ''), self.__class__.tenant_name)
114
115 def test_010_list_RO_tenant(self):
tiernoec66e9a2017-05-17 15:28:10 +0200116 self.__class__.test_text = "{}.{}. TEST {}".format(test_config["test_number"], self.__class__.test_index,
Pablo Montes Morenoeebea062017-02-27 12:33:10 +0100117 inspect.currentframe().f_code.co_name)
118 self.__class__.test_index += 1
tiernoec66e9a2017-05-17 15:28:10 +0200119 tenant = test_config["client"].get_tenant(name=self.__class__.tenant_name)
Pablo Montes Morenoeebea062017-02-27 12:33:10 +0100120 logger.debug("{}".format(tenant))
121 self.assertEqual(tenant.get('tenant', {}).get('name', ''), self.__class__.tenant_name)
122
123 def test_020_delete_RO_tenant(self):
tiernoec66e9a2017-05-17 15:28:10 +0200124 self.__class__.test_text = "{}.{}. TEST {}".format(test_config["test_number"], self.__class__.test_index,
Pablo Montes Morenoeebea062017-02-27 12:33:10 +0100125 inspect.currentframe().f_code.co_name)
126 self.__class__.test_index += 1
tiernoec66e9a2017-05-17 15:28:10 +0200127 tenant = test_config["client"].delete_tenant(name=self.__class__.tenant_name)
Pablo Montes Morenoeebea062017-02-27 12:33:10 +0100128 logger.debug("{}".format(tenant))
129 assert('deleted' in tenant.get('result',""))
130
tiernoec66e9a2017-05-17 15:28:10 +0200131
tiernof0508352017-06-19 13:37:44 +0200132class test_VIM_datacenter_operations(test_base):
Pablo Montes Morenoeebea062017-02-27 12:33:10 +0100133 datacenter_name = None
Pablo Montes Morenoeebea062017-02-27 12:33:10 +0100134
135 def test_000_create_datacenter(self):
tiernoec66e9a2017-05-17 15:28:10 +0200136 self.__class__.test_text = "{}.{}. TEST {}".format(test_config["test_number"], self.__class__.test_index,
Pablo Montes Morenoeebea062017-02-27 12:33:10 +0100137 inspect.currentframe().f_code.co_name)
138 self.__class__.datacenter_name = _get_random_string(20)
139 self.__class__.test_index += 1
tiernoec66e9a2017-05-17 15:28:10 +0200140 self.datacenter = test_config["client"].create_datacenter(name=self.__class__.datacenter_name,
141 vim_url="http://fakeurl/fake")
Pablo Montes Morenoeebea062017-02-27 12:33:10 +0100142 logger.debug("{}".format(self.datacenter))
143 self.assertEqual (self.datacenter.get('datacenter', {}).get('name',''), self.__class__.datacenter_name)
144
145 def test_010_list_datacenter(self):
tiernoec66e9a2017-05-17 15:28:10 +0200146 self.__class__.test_text = "{}.{}. TEST {}".format(test_config["test_number"], self.__class__.test_index,
Pablo Montes Morenoeebea062017-02-27 12:33:10 +0100147 inspect.currentframe().f_code.co_name)
148
149 self.__class__.test_index += 1
tiernoec66e9a2017-05-17 15:28:10 +0200150 self.datacenter = test_config["client"].get_datacenter(all_tenants=True, name=self.__class__.datacenter_name)
Pablo Montes Morenoeebea062017-02-27 12:33:10 +0100151 logger.debug("{}".format(self.datacenter))
152 self.assertEqual (self.datacenter.get('datacenter', {}).get('name', ''), self.__class__.datacenter_name)
153
154 def test_020_attach_datacenter(self):
tiernoec66e9a2017-05-17 15:28:10 +0200155 self.__class__.test_text = "{}.{}. TEST {}".format(test_config["test_number"], self.__class__.test_index,
Pablo Montes Morenoeebea062017-02-27 12:33:10 +0100156 inspect.currentframe().f_code.co_name)
157
158 self.__class__.test_index += 1
tiernoec66e9a2017-05-17 15:28:10 +0200159 self.datacenter = test_config["client"].attach_datacenter(name=self.__class__.datacenter_name,
160 vim_tenant_name='fake')
Pablo Montes Morenoeebea062017-02-27 12:33:10 +0100161 logger.debug("{}".format(self.datacenter))
tiernod3750b32018-07-20 15:33:08 +0200162 assert ('uuid' in self.datacenter.get('datacenter', {}))
Pablo Montes Morenoeebea062017-02-27 12:33:10 +0100163
164 def test_030_list_attached_datacenter(self):
tiernoec66e9a2017-05-17 15:28:10 +0200165 self.__class__.test_text = "{}.{}. TEST {}".format(test_config["test_number"], self.__class__.test_index,
Pablo Montes Morenoeebea062017-02-27 12:33:10 +0100166 inspect.currentframe().f_code.co_name)
167
168 self.__class__.test_index += 1
tiernoec66e9a2017-05-17 15:28:10 +0200169 self.datacenter = test_config["client"].get_datacenter(all_tenants=False, name=self.__class__.datacenter_name)
Pablo Montes Morenoeebea062017-02-27 12:33:10 +0100170 logger.debug("{}".format(self.datacenter))
171 self.assertEqual (self.datacenter.get('datacenter', {}).get('name', ''), self.__class__.datacenter_name)
172
173 def test_040_detach_datacenter(self):
tiernoec66e9a2017-05-17 15:28:10 +0200174 self.__class__.test_text = "{}.{}. TEST {}".format(test_config["test_number"], self.__class__.test_index,
Pablo Montes Morenoeebea062017-02-27 12:33:10 +0100175 inspect.currentframe().f_code.co_name)
176
177 self.__class__.test_index += 1
tiernoec66e9a2017-05-17 15:28:10 +0200178 self.datacenter = test_config["client"].detach_datacenter(name=self.__class__.datacenter_name)
Pablo Montes Morenoeebea062017-02-27 12:33:10 +0100179 logger.debug("{}".format(self.datacenter))
180 assert ('detached' in self.datacenter.get('result', ""))
181
182 def test_050_delete_datacenter(self):
tiernoec66e9a2017-05-17 15:28:10 +0200183 self.__class__.test_text = "{}.{}. TEST {}".format(test_config["test_number"], self.__class__.test_index,
Pablo Montes Morenoeebea062017-02-27 12:33:10 +0100184 inspect.currentframe().f_code.co_name)
185
186 self.__class__.test_index += 1
tiernoec66e9a2017-05-17 15:28:10 +0200187 self.datacenter = test_config["client"].delete_datacenter(name=self.__class__.datacenter_name)
Pablo Montes Morenoeebea062017-02-27 12:33:10 +0100188 logger.debug("{}".format(self.datacenter))
189 assert('deleted' in self.datacenter.get('result',""))
190
tiernoec66e9a2017-05-17 15:28:10 +0200191
tiernof0508352017-06-19 13:37:44 +0200192class test_VIM_network_operations(test_base):
Pablo Montes Morenoeebea062017-02-27 12:33:10 +0100193 vim_network_name = None
Pablo Montes Morenoeebea062017-02-27 12:33:10 +0100194 vim_network_uuid = None
195
Pablo Montes Morenoeebea062017-02-27 12:33:10 +0100196 def test_000_create_VIM_network(self):
tiernoec66e9a2017-05-17 15:28:10 +0200197 self.__class__.test_text = "{}.{}. TEST {}".format(test_config["test_number"], self.__class__.test_index,
Pablo Montes Morenoeebea062017-02-27 12:33:10 +0100198 inspect.currentframe().f_code.co_name)
199 self.__class__.vim_network_name = _get_random_string(20)
200 self.__class__.test_index += 1
tiernoec66e9a2017-05-17 15:28:10 +0200201 network = test_config["client"].vim_action("create", "networks", name=self.__class__.vim_network_name)
Pablo Montes Morenoeebea062017-02-27 12:33:10 +0100202 logger.debug("{}".format(network))
203 self.__class__.vim_network_uuid = network["network"]["id"]
204 self.assertEqual(network.get('network', {}).get('name', ''), self.__class__.vim_network_name)
205
206 def test_010_list_VIM_networks(self):
tiernoec66e9a2017-05-17 15:28:10 +0200207 self.__class__.test_text = "{}.{}. TEST {}".format(test_config["test_number"], self.__class__.test_index,
Pablo Montes Morenoeebea062017-02-27 12:33:10 +0100208 inspect.currentframe().f_code.co_name)
209 self.__class__.test_index += 1
tiernoec66e9a2017-05-17 15:28:10 +0200210 networks = test_config["client"].vim_action("list", "networks")
Pablo Montes Morenoeebea062017-02-27 12:33:10 +0100211 logger.debug("{}".format(networks))
212
213 def test_020_get_VIM_network_by_uuid(self):
tiernoec66e9a2017-05-17 15:28:10 +0200214 self.__class__.test_text = "{}.{}. TEST {}".format(test_config["test_number"], self.__class__.test_index,
Pablo Montes Morenoeebea062017-02-27 12:33:10 +0100215 inspect.currentframe().f_code.co_name)
216
217 self.__class__.test_index += 1
tiernoec66e9a2017-05-17 15:28:10 +0200218 network = test_config["client"].vim_action("show", "networks", uuid=self.__class__.vim_network_uuid)
Pablo Montes Morenoeebea062017-02-27 12:33:10 +0100219 logger.debug("{}".format(network))
220 self.assertEqual(network.get('network', {}).get('name', ''), self.__class__.vim_network_name)
221
222 def test_030_delete_VIM_network_by_uuid(self):
tiernoec66e9a2017-05-17 15:28:10 +0200223 self.__class__.test_text = "{}.{}. TEST {}".format(test_config["test_number"], self.__class__.test_index,
Pablo Montes Morenoeebea062017-02-27 12:33:10 +0100224 inspect.currentframe().f_code.co_name)
225
226 self.__class__.test_index += 1
tiernoec66e9a2017-05-17 15:28:10 +0200227 network = test_config["client"].vim_action("delete", "networks", uuid=self.__class__.vim_network_uuid)
Pablo Montes Morenoeebea062017-02-27 12:33:10 +0100228 logger.debug("{}".format(network))
229 assert ('deleted' in network.get('result', ""))
230
tiernoec66e9a2017-05-17 15:28:10 +0200231
tiernof0508352017-06-19 13:37:44 +0200232class test_VIM_image_operations(test_base):
Pablo Montes Morenoeebea062017-02-27 12:33:10 +0100233
234 def test_000_list_VIM_images(self):
tiernoec66e9a2017-05-17 15:28:10 +0200235 self.__class__.test_text = "{}.{}. TEST {}".format(test_config["test_number"], self.__class__.test_index,
Pablo Montes Morenoeebea062017-02-27 12:33:10 +0100236 inspect.currentframe().f_code.co_name)
237 self.__class__.test_index += 1
tiernoec66e9a2017-05-17 15:28:10 +0200238 images = test_config["client"].vim_action("list", "images")
Pablo Montes Morenoeebea062017-02-27 12:33:10 +0100239 logger.debug("{}".format(images))
240
241'''
242The following is a non critical test that will fail most of the times.
243In case of OpenStack datacenter these tests will only success if RO has access to the admin endpoint
244This test will only be executed in case it is specifically requested by the user
245'''
tiernof0508352017-06-19 13:37:44 +0200246class test_VIM_tenant_operations(test_base):
Pablo Montes Morenoeebea062017-02-27 12:33:10 +0100247 vim_tenant_name = None
Pablo Montes Morenoeebea062017-02-27 12:33:10 +0100248 vim_tenant_uuid = None
249
250 @classmethod
251 def setUpClass(cls):
tiernof0508352017-06-19 13:37:44 +0200252 test_base.setUpClass(cls)
Pablo Montes Morenoeebea062017-02-27 12:33:10 +0100253 logger.warning("In case of OpenStack datacenter these tests will only success "
254 "if RO has access to the admin endpoint")
255
Pablo Montes Morenoeebea062017-02-27 12:33:10 +0100256 def test_000_create_VIM_tenant(self):
tiernoec66e9a2017-05-17 15:28:10 +0200257 self.__class__.test_text = "{}.{}. TEST {}".format(test_config["test_number"], self.__class__.test_index,
Pablo Montes Morenoeebea062017-02-27 12:33:10 +0100258 inspect.currentframe().f_code.co_name)
259 self.__class__.vim_tenant_name = _get_random_string(20)
260 self.__class__.test_index += 1
tiernoec66e9a2017-05-17 15:28:10 +0200261 tenant = test_config["client"].vim_action("create", "tenants", name=self.__class__.vim_tenant_name)
Pablo Montes Morenoeebea062017-02-27 12:33:10 +0100262 logger.debug("{}".format(tenant))
263 self.__class__.vim_tenant_uuid = tenant["tenant"]["id"]
264 self.assertEqual(tenant.get('tenant', {}).get('name', ''), self.__class__.vim_tenant_name)
265
266 def test_010_list_VIM_tenants(self):
tiernoec66e9a2017-05-17 15:28:10 +0200267 self.__class__.test_text = "{}.{}. TEST {}".format(test_config["test_number"], self.__class__.test_index,
Pablo Montes Morenoeebea062017-02-27 12:33:10 +0100268 inspect.currentframe().f_code.co_name)
269 self.__class__.test_index += 1
tiernoec66e9a2017-05-17 15:28:10 +0200270 tenants = test_config["client"].vim_action("list", "tenants")
Pablo Montes Morenoeebea062017-02-27 12:33:10 +0100271 logger.debug("{}".format(tenants))
272
273 def test_020_get_VIM_tenant_by_uuid(self):
tiernoec66e9a2017-05-17 15:28:10 +0200274 self.__class__.test_text = "{}.{}. TEST {}".format(test_config["test_number"], self.__class__.test_index,
Pablo Montes Morenoeebea062017-02-27 12:33:10 +0100275 inspect.currentframe().f_code.co_name)
276
277 self.__class__.test_index += 1
tiernoec66e9a2017-05-17 15:28:10 +0200278 tenant = test_config["client"].vim_action("show", "tenants", uuid=self.__class__.vim_tenant_uuid)
Pablo Montes Morenoeebea062017-02-27 12:33:10 +0100279 logger.debug("{}".format(tenant))
280 self.assertEqual(tenant.get('tenant', {}).get('name', ''), self.__class__.vim_tenant_name)
281
282 def test_030_delete_VIM_tenant_by_uuid(self):
tiernoec66e9a2017-05-17 15:28:10 +0200283 self.__class__.test_text = "{}.{}. TEST {}".format(test_config["test_number"], self.__class__.test_index,
Pablo Montes Morenoeebea062017-02-27 12:33:10 +0100284 inspect.currentframe().f_code.co_name)
285
286 self.__class__.test_index += 1
tiernoec66e9a2017-05-17 15:28:10 +0200287 tenant = test_config["client"].vim_action("delete", "tenants", uuid=self.__class__.vim_tenant_uuid)
Pablo Montes Morenoeebea062017-02-27 12:33:10 +0100288 logger.debug("{}".format(tenant))
289 assert ('deleted' in tenant.get('result', ""))
290
tiernoed854572017-10-03 16:18:09 +0200291
tiernof0508352017-06-19 13:37:44 +0200292class test_vimconn_connect(test_base):
kasar70532ae2017-05-26 03:53:52 -0700293
294 def test_000_connect(self):
295 self.__class__.test_text = "{}.{}. TEST {}".format(test_config["test_number"],
296 self.__class__.test_index,
297 inspect.currentframe().f_code.co_name)
298
299 self.__class__.test_index += 1
300 if test_config['vimtype'] == 'vmware':
301 vca_object = test_config["vim_conn"].connect()
302 logger.debug("{}".format(vca_object))
kasarc5bf2932018-03-09 04:15:22 -0800303 self.assertIsNotNone(vca_object)
jamartinezv14a823d2019-08-01 11:45:15 +0200304 elif test_config['vimtype'] in ('openstack', 'azure'):
anwarsc76a3ee2018-10-04 14:05:32 +0530305 test_config["vim_conn"]._reload_connection()
306 network_list = test_config["vim_conn"].get_network_list()
307 logger.debug("{}".format(network_list))
308 self.assertIsNotNone(network_list)
kasar70532ae2017-05-26 03:53:52 -0700309
lloretgalleg45220152019-10-29 11:53:49 +0100310
tiernof0508352017-06-19 13:37:44 +0200311class test_vimconn_new_network(test_base):
kasar70532ae2017-05-26 03:53:52 -0700312 network_name = None
kasar70532ae2017-05-26 03:53:52 -0700313
314 def test_000_new_network(self):
315 self.__class__.network_name = _get_random_string(20)
316 network_type = 'bridge'
317
318 self.__class__.test_text = "{}.{}. TEST {}".format(test_config["test_number"],
319 self.__class__.test_index, inspect.currentframe().f_code.co_name)
320 self.__class__.test_index += 1
321
jamartinezv14a823d2019-08-01 11:45:15 +0200322 network, _ = test_config["vim_conn"].new_network(net_name=self.__class__.network_name,
kasar70532ae2017-05-26 03:53:52 -0700323 net_type=network_type)
324 self.__class__.network_id = network
lloretgalleg45220152019-10-29 11:53:49 +0100325 logger.debug("Created network {}".format(network))
kasar70532ae2017-05-26 03:53:52 -0700326
kasarf358ad52017-07-24 01:28:44 -0700327 network_list = test_config["vim_conn"].get_network_list()
lloretgalleg45220152019-10-29 11:53:49 +0100328 logger.debug("Network list {}".format(network_list))
kasar70532ae2017-05-26 03:53:52 -0700329 for net in network_list:
330 if self.__class__.network_name in net.get('name'):
331 self.assertIn(self.__class__.network_name, net.get('name'))
332 self.assertEqual(net.get('type'), network_type)
333
334 # Deleting created network
335 result = test_config["vim_conn"].delete_network(self.__class__.network_id)
336 if result:
337 logger.info("Network id {} sucessfully deleted".format(self.__class__.network_id))
338 else:
339 logger.info("Failed to delete network id {}".format(self.__class__.network_id))
340
lloretgalleg45220152019-10-29 11:53:49 +0100341 network_list = test_config["vim_conn"].get_network_list()
342 logger.debug("Network list after deletion {}".format(network_list))
343
kasar70532ae2017-05-26 03:53:52 -0700344 def test_010_new_network_by_types(self):
345 delete_net_ids = []
346 network_types = ['data','bridge','mgmt']
347 self.__class__.test_text = "{}.{}. TEST {}".format(test_config["test_number"],
348 self.__class__.test_index,
349 inspect.currentframe().f_code.co_name)
lloretgalleg45220152019-10-29 11:53:49 +0100350 network_list = test_config["vim_conn"].get_network_list()
351 logger.debug("Network list at start {}".format(network_list))
kasar70532ae2017-05-26 03:53:52 -0700352 self.__class__.test_index += 1
353 for net_type in network_types:
354 self.__class__.network_name = _get_random_string(20)
jamartinezv14a823d2019-08-01 11:45:15 +0200355 network_id, _ = test_config["vim_conn"].new_network(net_name=self.__class__.network_name,
kasar70532ae2017-05-26 03:53:52 -0700356 net_type=net_type)
357
358 delete_net_ids.append(network_id)
359 logger.debug("{}".format(network_id))
360
kasarf358ad52017-07-24 01:28:44 -0700361 network_list = test_config["vim_conn"].get_network_list()
kasar70532ae2017-05-26 03:53:52 -0700362 for net in network_list:
363 if self.__class__.network_name in net.get('name'):
364 self.assertIn(self.__class__.network_name, net.get('name'))
365 if net_type in net.get('type'):
366 self.assertEqual(net.get('type'), net_type)
367 else:
368 self.assertNotEqual(net.get('type'), net_type)
369
370 # Deleting created network
371 for net_id in delete_net_ids:
372 result = test_config["vim_conn"].delete_network(net_id)
373 if result:
374 logger.info("Network id {} sucessfully deleted".format(net_id))
375 else:
376 logger.info("Failed to delete network id {}".format(net_id))
lloretgalleg45220152019-10-29 11:53:49 +0100377 network_list = test_config["vim_conn"].get_network_list()
378 logger.debug("Network list after test {}".format(network_list))
kasar70532ae2017-05-26 03:53:52 -0700379
380 def test_020_new_network_by_ipprofile(self):
381 test_directory_content = os.listdir(test_config["test_directory"])
382
383 for dir_name in test_directory_content:
384 if dir_name == 'simple_multi_vnfc':
385 self.__class__.scenario_test_path = test_config["test_directory"] + '/'+ dir_name
386 vnfd_files = glob.glob(self.__class__.scenario_test_path+'/vnfd_*.yaml')
387 break
388
389 for vnfd in vnfd_files:
390 with open(vnfd, 'r') as stream:
391 vnf_descriptor = yaml.load(stream)
392
lloretgalleg45220152019-10-29 11:53:49 +0100393 #internal_connections_list = vnf_descriptor['vnf']['internal-connections']
394 internal_connections_list = vnf_descriptor['vnfd-catalog']['vnfd'][0]['ip-profiles']
kasar70532ae2017-05-26 03:53:52 -0700395 for item in internal_connections_list:
lloretgalleg45220152019-10-29 11:53:49 +0100396 version = item['ip-version']
397 dhcp_count = item['dhcp-params']['count']
398 dhcp_enabled = item['dhcp-params']['enabled']
399 dhcp_start_address = item['dhcp-params']['start-address']
400 subnet_address = item['subnet-address']
kasar70532ae2017-05-26 03:53:52 -0700401
402 self.__class__.network_name = _get_random_string(20)
403 ip_profile = {'dhcp_count': dhcp_count,
404 'dhcp_enabled': dhcp_enabled,
anwarsc76a3ee2018-10-04 14:05:32 +0530405 'dhcp_start_address': dhcp_start_address,
406 'ip_version': version,
407 'subnet_address': subnet_address
kasar70532ae2017-05-26 03:53:52 -0700408 }
409 self.__class__.test_text = "{}.{}. TEST {}".format(test_config["test_number"],
410 self.__class__.test_index,
411 inspect.currentframe().f_code.co_name)
412 self.__class__.test_index += 1
jamartinezv14a823d2019-08-01 11:45:15 +0200413 network, _ = test_config["vim_conn"].new_network(net_name=self.__class__.network_name,
kasar70532ae2017-05-26 03:53:52 -0700414 net_type='mgmt',
415 ip_profile=ip_profile)
416 self.__class__.network_id = network
417 logger.debug("{}".format(network))
418
kasarf358ad52017-07-24 01:28:44 -0700419 network_list = test_config["vim_conn"].get_network_list()
lloretgalleg45220152019-10-29 11:53:49 +0100420 logger.debug("Created network by ip_profile {}".format(network_list))
kasar70532ae2017-05-26 03:53:52 -0700421 for net in network_list:
422 if self.__class__.network_name in net.get('name'):
423 self.assertIn(self.__class__.network_name, net.get('name'))
424
425 # Deleting created network
426 result = test_config["vim_conn"].delete_network(self.__class__.network_id)
427 if result:
428 logger.info("Network id {} sucessfully deleted".format(self.__class__.network_id))
429 else:
430 logger.info("Failed to delete network id {}".format(self.__class__.network_id))
431
432 def test_030_new_network_by_isshared(self):
433 self.__class__.network_name = _get_random_string(20)
434 shared = True
435 self.__class__.test_text = "{}.{}. TEST {}".format(test_config["test_number"],
436 self.__class__.test_index,
437 inspect.currentframe().f_code.co_name)
438 self.__class__.test_index += 1
jamartinezv14a823d2019-08-01 11:45:15 +0200439 network, _ = test_config["vim_conn"].new_network(net_name=self.__class__.network_name,
kasar70532ae2017-05-26 03:53:52 -0700440 net_type='bridge',
441 shared=shared)
442 self.__class__.network_id = network
443 logger.debug("{}".format(network))
444
kasarf358ad52017-07-24 01:28:44 -0700445 network_list = test_config["vim_conn"].get_network_list()
kasar70532ae2017-05-26 03:53:52 -0700446 for net in network_list:
447 if self.__class__.network_name in net.get('name'):
448 self.assertIn(self.__class__.network_name, net.get('name'))
449 self.assertEqual(net.get('shared'), shared)
450
451 # Deleting created network
452 result = test_config["vim_conn"].delete_network(self.__class__.network_id)
453 if result:
454 logger.info("Network id {} sucessfully deleted".format(self.__class__.network_id))
455 else:
456 logger.info("Failed to delete network id {}".format(self.__class__.network_id))
457
458 def test_040_new_network_by_negative(self):
459 self.__class__.network_name = _get_random_string(20)
460 self.__class__.test_text = "{}.{}. TEST {}".format(test_config["test_number"],
461 self.__class__.test_index,
462 inspect.currentframe().f_code.co_name)
463 self.__class__.test_index += 1
jamartinezv14a823d2019-08-01 11:45:15 +0200464 network, _ = test_config["vim_conn"].new_network(net_name=self.__class__.network_name,
kasar70532ae2017-05-26 03:53:52 -0700465 net_type='unknowntype')
466 self.__class__.network_id = network
467 logger.debug("{}".format(network))
kasarf358ad52017-07-24 01:28:44 -0700468 network_list = test_config["vim_conn"].get_network_list()
kasar70532ae2017-05-26 03:53:52 -0700469 for net in network_list:
470 if self.__class__.network_name in net.get('name'):
471 self.assertIn(self.__class__.network_name, net.get('name'))
472
473 # Deleting created network
474 result = test_config["vim_conn"].delete_network(self.__class__.network_id)
475 if result:
476 logger.info("Network id {} sucessfully deleted".format(self.__class__.network_id))
477 else:
478 logger.info("Failed to delete network id {}".format(self.__class__.network_id))
479
kasar114050e2017-07-06 02:04:59 -0700480 def test_050_refresh_nets_status(self):
481 self.__class__.test_text = "{}.{}. TEST {}".format(test_config["test_number"],
482 self.__class__.test_index,
483 inspect.currentframe().f_code.co_name)
484 self.__class__.test_index += 1
485 # creating new network
486 network_name = _get_random_string(20)
487 net_type = 'bridge'
jamartinezv14a823d2019-08-01 11:45:15 +0200488 network_id, _ = test_config["vim_conn"].new_network(net_name=network_name,
kasar114050e2017-07-06 02:04:59 -0700489 net_type=net_type)
490 # refresh net status
491 net_dict = test_config["vim_conn"].refresh_nets_status([network_id])
492 for attr in net_dict[network_id]:
493 if attr == 'status':
494 self.assertEqual(net_dict[network_id][attr], 'ACTIVE')
495
496 # Deleting created network
497 result = test_config["vim_conn"].delete_network(network_id)
498 if result:
499 logger.info("Network id {} sucessfully deleted".format(network_id))
500 else:
501 logger.info("Failed to delete network id {}".format(network_id))
502
503 def test_060_refresh_nets_status_negative(self):
504 unknown_net_id = str(uuid.uuid4())
505 self.__class__.test_text = "{}.{}. TEST {}".format(test_config["test_number"],
506 self.__class__.test_index,
507 inspect.currentframe().f_code.co_name)
508 self.__class__.test_index += 1
509
510 # refresh net status
lloretgalleg45220152019-10-29 11:53:49 +0100511 # if azure network name must have the following format
512 if test_config['vimtype'] == 'azure':
513 unknown_net_id = "/" + "/".join(["subscriptions", test_config["vim_conn"].subscription_id,
514 "resourceGroups", test_config["vim_conn"].resource_group,
515 "providers", "Microsoft.Network",
516 "virtualNetworks", test_config["vim_conn"].vnet_name,
517 "subnets", unknown_net_id])
518 #unknown_net_id = "/subscriptions/ca3d18ab-d373-4afb-a5d6-7c44f098d16a/resourceGroups/osmRG/providers/Microsoft.Network/virtualNetworks/osm_vnet/subnets/unnkown_net"
519
kasar114050e2017-07-06 02:04:59 -0700520 net_dict = test_config["vim_conn"].refresh_nets_status([unknown_net_id])
jamartinezv14a823d2019-08-01 11:45:15 +0200521 if test_config['vimtype'] in ('openstack', 'azure'):
anwarsc76a3ee2018-10-04 14:05:32 +0530522 self.assertEqual(net_dict[unknown_net_id]['status'], 'DELETED')
523 else:
524 # TODO : Fix vmware connector to return status DELETED as per vimconn.py
525 self.assertEqual(net_dict, {})
kasar114050e2017-07-06 02:04:59 -0700526
tiernof0508352017-06-19 13:37:44 +0200527class test_vimconn_get_network_list(test_base):
kasar70532ae2017-05-26 03:53:52 -0700528 network_name = None
kasar70532ae2017-05-26 03:53:52 -0700529
kasar70532ae2017-05-26 03:53:52 -0700530 def setUp(self):
531 # creating new network
532 self.__class__.network_name = _get_random_string(20)
533 self.__class__.net_type = 'bridge'
jamartinezv14a823d2019-08-01 11:45:15 +0200534 network, _ = test_config["vim_conn"].new_network(net_name=self.__class__.network_name,
kasar70532ae2017-05-26 03:53:52 -0700535 net_type=self.__class__.net_type)
536 self.__class__.network_id = network
537 logger.debug("{}".format(network))
538
539 def tearDown(self):
tiernof0508352017-06-19 13:37:44 +0200540 test_base.tearDown(self)
kasar70532ae2017-05-26 03:53:52 -0700541
542 # Deleting created network
543 result = test_config["vim_conn"].delete_network(self.__class__.network_id)
544 if result:
545 logger.info("Network id {} sucessfully deleted".format(self.__class__.network_id))
546 else:
547 logger.info("Failed to delete network id {}".format(self.__class__.network_id))
548
549 def test_000_get_network_list(self):
550 self.__class__.test_text = "{}.{}. TEST {}".format(test_config["test_number"],
551 self.__class__.test_index,
552 inspect.currentframe().f_code.co_name)
553 self.__class__.test_index += 1
554
555 network_list = test_config["vim_conn"].get_network_list()
556 for net in network_list:
557 if self.__class__.network_name in net.get('name'):
558 self.assertIn(self.__class__.network_name, net.get('name'))
559 self.assertEqual(net.get('type'), self.__class__.net_type)
560 self.assertEqual(net.get('status'), 'ACTIVE')
jamartinezv14a823d2019-08-01 11:45:15 +0200561 if test_config['vimtype'] != 'azure':
562 self.assertEqual(net.get('shared'), False)
kasar70532ae2017-05-26 03:53:52 -0700563
564 def test_010_get_network_list_by_name(self):
565 self.__class__.test_text = "{}.{}. TEST {}".format(test_config["test_number"],
566 self.__class__.test_index,
567 inspect.currentframe().f_code.co_name)
568 self.__class__.test_index += 1
569
jamartinezv14a823d2019-08-01 11:45:15 +0200570 if test_config['vimtype'] in ('openstack', 'azure'):
anwarsc76a3ee2018-10-04 14:05:32 +0530571 network_name = test_config['vim_conn'].get_network(self.__class__.network_id)['name']
572 else:
573 network_name = test_config['vim_conn'].get_network_name_by_id(self.__class__.network_id)
kasar70532ae2017-05-26 03:53:52 -0700574
575 # find network from list by it's name
576 new_network_list = test_config["vim_conn"].get_network_list({'name': network_name})
577 for list_item in new_network_list:
578 if self.__class__.network_name in list_item.get('name'):
579 self.assertEqual(network_name, list_item.get('name'))
580 self.assertEqual(list_item.get('type'), self.__class__.net_type)
581 self.assertEqual(list_item.get('status'), 'ACTIVE')
582
583 def test_020_get_network_list_by_id(self):
584 self.__class__.test_text = "{}.{}. TEST {}".format(test_config["test_number"],
585 self.__class__.test_index,
586 inspect.currentframe().f_code.co_name)
587 self.__class__.test_index += 1
588
589 # find network from list by it's id
590 new_network_list = test_config["vim_conn"].get_network_list({'id':self.__class__.network_id})
591 for list_item in new_network_list:
592 if self.__class__.network_id in list_item.get('id'):
593 self.assertEqual(self.__class__.network_id, list_item.get('id'))
594 self.assertEqual(list_item.get('type'), self.__class__.net_type)
595 self.assertEqual(list_item.get('status'), 'ACTIVE')
596
597 def test_030_get_network_list_by_shared(self):
598 Shared = False
599 self.__class__.test_text = "{}.{}. TEST {}".format(test_config["test_number"],
600 self.__class__.test_index,
601 inspect.currentframe().f_code.co_name)
602 self.__class__.test_index += 1
603
jamartinezv14a823d2019-08-01 11:45:15 +0200604 if test_config['vimtype'] in ('openstack', 'azure'):
anwarsc76a3ee2018-10-04 14:05:32 +0530605 network_name = test_config['vim_conn'].get_network(self.__class__.network_id)['name']
606 else:
607 network_name = test_config['vim_conn'].get_network_name_by_id(self.__class__.network_id)
kasar70532ae2017-05-26 03:53:52 -0700608 # find network from list by it's shared value
609 new_network_list = test_config["vim_conn"].get_network_list({'shared':Shared,
610 'name':network_name})
611 for list_item in new_network_list:
612 if list_item.get('shared') == Shared:
613 self.assertEqual(list_item.get('shared'), Shared)
614 self.assertEqual(list_item.get('type'), self.__class__.net_type)
615 self.assertEqual(network_name, list_item.get('name'))
616
617 def test_040_get_network_list_by_tenant_id(self):
618 self.__class__.test_text = "{}.{}. TEST {}".format(test_config["test_number"],
619 self.__class__.test_index,
620 inspect.currentframe().f_code.co_name)
621 self.__class__.test_index += 1
622
623 tenant_list = test_config["vim_conn"].get_tenant_list()
jamartinezv14a823d2019-08-01 11:45:15 +0200624 if test_config['vimtype'] in ('openstack', 'azure'):
anwarsc76a3ee2018-10-04 14:05:32 +0530625 network_name = test_config['vim_conn'].get_network(self.__class__.network_id)['name']
626 else:
627 network_name = test_config['vim_conn'].get_network_name_by_id(self.__class__.network_id)
kasar70532ae2017-05-26 03:53:52 -0700628
629 for tenant_item in tenant_list:
630 if test_config['tenant'] == tenant_item.get('name'):
631 # find network from list by it's tenant id
632 tenant_id = tenant_item.get('id')
633 new_network_list = test_config["vim_conn"].get_network_list({'tenant_id':tenant_id,
634 'name':network_name})
635 for list_item in new_network_list:
636 self.assertEqual(tenant_id, list_item.get('tenant_id'))
637 self.assertEqual(network_name, list_item.get('name'))
638 self.assertEqual(list_item.get('type'), self.__class__.net_type)
639 self.assertEqual(list_item.get('status'), 'ACTIVE')
640
641 def test_050_get_network_list_by_status(self):
642 self.__class__.test_text = "{}.{}. TEST {}".format(test_config["test_number"],
643 self.__class__.test_index,
644 inspect.currentframe().f_code.co_name)
645 self.__class__.test_index += 1
646 status = 'ACTIVE'
647
jamartinezv14a823d2019-08-01 11:45:15 +0200648 if test_config['vimtype'] in ('openstack', 'azure'):
anwarsc76a3ee2018-10-04 14:05:32 +0530649 network_name = test_config['vim_conn'].get_network(self.__class__.network_id)['name']
650 else:
651 network_name = test_config['vim_conn'].get_network_name_by_id(self.__class__.network_id)
kasar70532ae2017-05-26 03:53:52 -0700652
653 # find network from list by it's status
654 new_network_list = test_config["vim_conn"].get_network_list({'status':status,
655 'name': network_name})
656 for list_item in new_network_list:
657 self.assertIn(self.__class__.network_name, list_item.get('name'))
658 self.assertEqual(list_item.get('type'), self.__class__.net_type)
659 self.assertEqual(list_item.get('status'), status)
660
661 def test_060_get_network_list_by_negative(self):
662 self.__class__.test_text = "{}.{}. TEST {}".format(test_config["test_number"],
663 self.__class__.test_index,
664 inspect.currentframe().f_code.co_name)
665 self.__class__.test_index += 1
666
667 network_list = test_config["vim_conn"].get_network_list({'name': 'unknown_name'})
668 self.assertEqual(network_list, [])
669
tiernof0508352017-06-19 13:37:44 +0200670class test_vimconn_get_network(test_base):
kasarbd11fd82017-06-01 23:44:03 -0700671 network_name = None
kasarbd11fd82017-06-01 23:44:03 -0700672
673 def setUp(self):
674 # creating new network
675 self.__class__.network_name = _get_random_string(20)
676 self.__class__.net_type = 'bridge'
jamartinezv14a823d2019-08-01 11:45:15 +0200677 network, _ = test_config["vim_conn"].new_network(net_name=self.__class__.network_name,
kasarbd11fd82017-06-01 23:44:03 -0700678 net_type=self.__class__.net_type)
679 self.__class__.network_id = network
680 logger.debug("{}".format(network))
681
682 def tearDown(self):
tiernof0508352017-06-19 13:37:44 +0200683 test_base.tearDown(self)
kasarbd11fd82017-06-01 23:44:03 -0700684
685 # Deleting created network
686 result = test_config["vim_conn"].delete_network(self.__class__.network_id)
687 if result:
688 logger.info("Network id {} sucessfully deleted".format(self.__class__.network_id))
689 else:
690 logger.info("Failed to delete network id {}".format(self.__class__.network_id))
691
692 def test_000_get_network(self):
693 self.__class__.test_text = "{}.{}. TEST {}".format(test_config["test_number"],
694 self.__class__.test_index,
695 inspect.currentframe().f_code.co_name)
696 self.__class__.test_index += 1
697
698 network_info = test_config["vim_conn"].get_network(self.__class__.network_id)
699 self.assertEqual(network_info.get('status'), 'ACTIVE')
700 self.assertIn(self.__class__.network_name, network_info.get('name'))
701 self.assertEqual(network_info.get('type'), self.__class__.net_type)
702 self.assertEqual(network_info.get('id'), self.__class__.network_id)
703
704 def test_010_get_network_negative(self):
705 Non_exist_id = str(uuid.uuid4())
706 self.__class__.test_text = "{}.{}. TEST {}".format(test_config["test_number"],
707 self.__class__.test_index,
708 inspect.currentframe().f_code.co_name)
709 self.__class__.test_index += 1
kasarc5bf2932018-03-09 04:15:22 -0800710 with self.assertRaises(Exception) as context:
711 test_config["vim_conn"].get_network(Non_exist_id)
kasarbd11fd82017-06-01 23:44:03 -0700712
kasarc5bf2932018-03-09 04:15:22 -0800713 self.assertEqual((context.exception).http_code, 404)
kasarbd11fd82017-06-01 23:44:03 -0700714
tiernof0508352017-06-19 13:37:44 +0200715class test_vimconn_delete_network(test_base):
kasarbd11fd82017-06-01 23:44:03 -0700716 network_name = None
kasarbd11fd82017-06-01 23:44:03 -0700717
718 def test_000_delete_network(self):
719 # Creating network
720 self.__class__.network_name = _get_random_string(20)
721 self.__class__.net_type = 'bridge'
jamartinezv14a823d2019-08-01 11:45:15 +0200722 network, _ = test_config["vim_conn"].new_network(net_name=self.__class__.network_name,
kasarbd11fd82017-06-01 23:44:03 -0700723 net_type=self.__class__.net_type)
724 self.__class__.network_id = network
725 logger.debug("{}".format(network))
726
727 self.__class__.test_text = "{}.{}. TEST {}".format(test_config["test_number"],
728 self.__class__.test_index,
729 inspect.currentframe().f_code.co_name)
730 self.__class__.test_index += 1
731
732 result = test_config["vim_conn"].delete_network(self.__class__.network_id)
733 if result:
734 logger.info("Network id {} sucessfully deleted".format(self.__class__.network_id))
735 else:
736 logger.info("Failed to delete network id {}".format(self.__class__.network_id))
737 time.sleep(5)
738 # after deleting network we check in network list
739 network_list = test_config["vim_conn"].get_network_list({ 'id':self.__class__.network_id })
740 self.assertEqual(network_list, [])
741
742 def test_010_delete_network_negative(self):
743 Non_exist_id = str(uuid.uuid4())
744
745 self.__class__.test_text = "{}.{}. TEST {}".format(test_config["test_number"],
746 self.__class__.test_index,
747 inspect.currentframe().f_code.co_name)
748 self.__class__.test_index += 1
749
750 with self.assertRaises(Exception) as context:
751 test_config["vim_conn"].delete_network(Non_exist_id)
752
tierno12a0c3b2018-10-15 15:10:36 +0200753 self.assertEqual((context.exception).http_code, 404)
kasarbd11fd82017-06-01 23:44:03 -0700754
tiernof0508352017-06-19 13:37:44 +0200755class test_vimconn_get_flavor(test_base):
kasarbd11fd82017-06-01 23:44:03 -0700756
757 def test_000_get_flavor(self):
758 test_directory_content = os.listdir(test_config["test_directory"])
759
760 for dir_name in test_directory_content:
761 if dir_name == 'simple_linux':
762 self.__class__.scenario_test_path = test_config["test_directory"] + '/'+ dir_name
763 vnfd_files = glob.glob(self.__class__.scenario_test_path+'/vnfd_*.yaml')
764 break
765
766 for vnfd in vnfd_files:
767 with open(vnfd, 'r') as stream:
768 vnf_descriptor = yaml.load(stream)
769
770 vnfc_list = vnf_descriptor['vnf']['VNFC']
771 for item in vnfc_list:
772 if 'ram' in item and 'vcpus' in item and 'disk' in item:
773 ram = item['ram']
774 vcpus = item['vcpus']
775 disk = item['disk']
776
anwarsc76a3ee2018-10-04 14:05:32 +0530777 flavor_data = {
778 'name' : _get_random_string(20),
779 'ram': ram,
kasarbd11fd82017-06-01 23:44:03 -0700780 'vcpus': vcpus,
781 'disk': disk
anwarsc76a3ee2018-10-04 14:05:32 +0530782 }
kasarbd11fd82017-06-01 23:44:03 -0700783
784 self.__class__.test_text = "{}.{}. TEST {}".format(test_config["test_number"],
785 self.__class__.test_index,
786 inspect.currentframe().f_code.co_name)
787 self.__class__.test_index += 1
788 # create new flavor
789 flavor_id = test_config["vim_conn"].new_flavor(flavor_data)
790 # get flavor by id
791 result = test_config["vim_conn"].get_flavor(flavor_id)
792 self.assertEqual(ram, result['ram'])
793 self.assertEqual(vcpus, result['vcpus'])
794 self.assertEqual(disk, result['disk'])
795
796 # delete flavor
797 result = test_config["vim_conn"].delete_flavor(flavor_id)
798 if result:
799 logger.info("Flavor id {} sucessfully deleted".format(result))
800 else:
801 logger.info("Failed to delete flavor id {}".format(result))
802
803 def test_010_get_flavor_negative(self):
804 Non_exist_flavor_id = str(uuid.uuid4())
805
806 self.__class__.test_text = "{}.{}. TEST {}".format(test_config["test_number"],
807 self.__class__.test_index,
808 inspect.currentframe().f_code.co_name)
809 self.__class__.test_index += 1
810
811 with self.assertRaises(Exception) as context:
812 test_config["vim_conn"].get_flavor(Non_exist_flavor_id)
813
814 self.assertEqual((context.exception).http_code, 404)
815
kasarfeaaa052017-06-08 03:46:18 -0700816class test_vimconn_new_flavor(test_base):
817 flavor_id = None
818
819 def test_000_new_flavor(self):
jamartinezv14a823d2019-08-01 11:45:15 +0200820 flavor_data = {'name': _get_random_string(20), 'ram': 1024, 'vcpus': 1, 'disk': 10}
kasarfeaaa052017-06-08 03:46:18 -0700821
822 self.__class__.test_text = "{}.{}. TEST {}".format(test_config["test_number"],
823 self.__class__.test_index,
824 inspect.currentframe().f_code.co_name)
825 self.__class__.test_index += 1
826
lloretgalleg45220152019-10-29 11:53:49 +0100827 if test_config['vimtype'] == 'azure':
828 with self.assertRaises(Exception) as context:
829 test_config["vim_conn"].new_flavor(flavor_data)
830
831 self.assertEqual((context.exception).http_code, 401)
832 else:
833 # create new flavor
834 self.__class__.flavor_id = test_config["vim_conn"].new_flavor(flavor_data)
835 self.assertIsInstance(self.__class__.flavor_id, (str, unicode))
836 self.assertIsInstance(uuid.UUID(self.__class__.flavor_id), uuid.UUID)
kasarfeaaa052017-06-08 03:46:18 -0700837
838 def test_010_delete_flavor(self):
839 self.__class__.test_text = "{}.{}. TEST {}".format(test_config["test_number"],
840 self.__class__.test_index,
841 inspect.currentframe().f_code.co_name)
842 self.__class__.test_index += 1
843
844 # delete flavor
jamartinezv14a823d2019-08-01 11:45:15 +0200845 if test_config['vimtype'] == 'azure':
846 with self.assertRaises(Exception) as context:
847 test_config["vim_conn"].delete_flavor(self.__class__.flavor_id)
848
849 self.assertEqual((context.exception).http_code, 401)
kasarfeaaa052017-06-08 03:46:18 -0700850 else:
jamartinezv14a823d2019-08-01 11:45:15 +0200851 result = test_config["vim_conn"].delete_flavor(self.__class__.flavor_id)
852 if result:
853 logger.info("Flavor id {} sucessfully deleted".format(result))
854 else:
855 logger.error("Failed to delete flavor id {}".format(result))
856 raise Exception ("Failed to delete created flavor")
kasarfeaaa052017-06-08 03:46:18 -0700857
858 def test_020_new_flavor_negative(self):
859 Invalid_flavor_data = {'ram': '1024', 'vcpus': 2.0, 'disk': 2.0}
860
861 self.__class__.test_text = "{}.{}. TEST {}".format(test_config["test_number"],
862 self.__class__.test_index,
863 inspect.currentframe().f_code.co_name)
864 self.__class__.test_index += 1
865
866 with self.assertRaises(Exception) as context:
867 test_config["vim_conn"].new_flavor(Invalid_flavor_data)
lloretgalleg45220152019-10-29 11:53:49 +0100868 if test_config['vimtype'] != 'azure':
869 self.assertEqual((context.exception).http_code, 400)
870 else:
871 self.assertEqual((context.exception).http_code, 401)
kasarfeaaa052017-06-08 03:46:18 -0700872
873 def test_030_delete_flavor_negative(self):
874 Non_exist_flavor_id = str(uuid.uuid4())
875
876 self.__class__.test_text = "{}.{}. TEST {}".format(test_config["test_number"],
877 self.__class__.test_index,
878 inspect.currentframe().f_code.co_name)
879 self.__class__.test_index += 1
880
881 with self.assertRaises(Exception) as context:
882 test_config["vim_conn"].delete_flavor(Non_exist_flavor_id)
883
lloretgalleg45220152019-10-29 11:53:49 +0100884 if test_config['vimtype'] != 'azure':
885 self.assertEqual((context.exception).http_code, 404)
886 else:
887 self.assertEqual((context.exception).http_code, 401)
kasarc7053032017-08-03 03:29:23 -0700888
calvinosanch88b676c2019-08-16 10:59:12 +0000889# class test_vimconn_new_image(test_base):
890#
891# def test_000_new_image(self):
892# self.__class__.test_text = "{}.{}. TEST {}".format(test_config["test_number"],
893# self.__class__.test_index,
894# inspect.currentframe().f_code.co_name)
895# self.__class__.test_index += 1
896#
897# image_path = test_config['image_path']
898# if image_path:
899# self.__class__.image_id = test_config["vim_conn"].new_image({ 'name': 'TestImage', 'location' : image_path, 'metadata': {'upload_location':None} })
900# time.sleep(20)
901#
902# self.assertIsInstance(self.__class__.image_id, (str, unicode))
903# self.assertIsInstance(uuid.UUID(self.__class__.image_id), uuid.UUID)
904# else:
905# self.skipTest("Skipping test as image file not present at RO container")
906#
907# def test_010_new_image_negative(self):
908# Non_exist_image_path = '/temp1/cirros.ovf'
909#
910# self.__class__.test_text = "{}.{}. TEST {}".format(test_config["test_number"],
911# self.__class__.test_index,
912# inspect.currentframe().f_code.co_name)
913# self.__class__.test_index += 1
914#
915# with self.assertRaises(Exception) as context:
916# test_config["vim_conn"].new_image({ 'name': 'TestImage', 'location' : Non_exist_image_path})
917#
918# self.assertEqual((context.exception).http_code, 400)
919#
920# def test_020_delete_image(self):
921# self.__class__.test_text = "{}.{}. TEST {}".format(test_config["test_number"],
922# self.__class__.test_index,
923# inspect.currentframe().f_code.co_name)
924# self.__class__.test_index += 1
925#
926# image_id = test_config["vim_conn"].delete_image(self.__class__.image_id)
927#
928# self.assertIsInstance(image_id, (str, unicode))
929#
930# def test_030_delete_image_negative(self):
931# Non_exist_image_id = str(uuid.uuid4())
932#
933# self.__class__.test_text = "{}.{}. TEST {}".format(test_config["test_number"],
934# self.__class__.test_index,
935# inspect.currentframe().f_code.co_name)
936# self.__class__.test_index += 1
937#
938# with self.assertRaises(Exception) as context:
939# test_config["vim_conn"].delete_image(Non_exist_image_id)
940#
941# self.assertEqual((context.exception).http_code, 404)
kasarffdaf292017-06-23 04:06:52 -0700942
calvinosanch88b676c2019-08-16 10:59:12 +0000943# class test_vimconn_get_image_id_from_path(test_base):
944#
945# def test_000_get_image_id_from_path(self):
946# self.__class__.test_text = "{}.{}. TEST {}".format(test_config["test_number"],
947# self.__class__.test_index,
948# inspect.currentframe().f_code.co_name)
949# self.__class__.test_index += 1
950#
951# image_path = test_config['image_path']
952# if image_path:
953# image_id = test_config["vim_conn"].get_image_id_from_path( image_path )
954# self.assertEqual(type(image_id),str)
955# else:
956# self.skipTest("Skipping test as image file not present at RO container")
957#
958# def test_010_get_image_id_from_path_negative(self):
959# Non_exist_image_path = '/temp1/cirros.ovf'
960#
961# self.__class__.test_text = "{}.{}. TEST {}".format(test_config["test_number"],
962# self.__class__.test_index,
963# inspect.currentframe().f_code.co_name)
964# self.__class__.test_index += 1
965#
966# with self.assertRaises(Exception) as context:
967# test_config["vim_conn"].new_image({ 'name': 'TestImage', 'location' : Non_exist_image_path })
968#
969# self.assertEqual((context.exception).http_code, 400)
kasarffdaf292017-06-23 04:06:52 -0700970
971class test_vimconn_get_image_list(test_base):
972 image_name = None
973 image_id = None
974
975 def test_000_get_image_list(self):
976 self.__class__.test_text = "{}.{}. TEST {}".format(test_config["test_number"],
977 self.__class__.test_index,
978 inspect.currentframe().f_code.co_name)
979 self.__class__.test_index += 1
jamartinezv14a823d2019-08-01 11:45:15 +0200980
lloretgalleg45220152019-10-29 11:53:49 +0100981 if test_config['vimtype'] != 'azure':
982 image_list = test_config["vim_conn"].get_image_list()
983 logger.debug("{}: Result image list: {}".format(self.__class__.test_text, image_list))
kasarffdaf292017-06-23 04:06:52 -0700984
lloretgalleg45220152019-10-29 11:53:49 +0100985 for item in image_list:
986 if 'name' in item:
987 self.__class__.image_name = item['name']
988 self.__class__.image_id = item['id']
989 self.assertIsInstance(self.__class__.image_name, (str, unicode))
990 self.assertIsInstance(self.__class__.image_id, (str, unicode))
991 else:
992 with self.assertRaises(Exception) as context:
993 image_list = test_config["vim_conn"].get_image_list()
994 self.assertEqual((context.exception).http_code, 401)
995 logger.debug(self.__class__.test_text + "Exception unauthorized: " + str(context.exception))
kasarffdaf292017-06-23 04:06:52 -0700996
997 def test_010_get_image_list_by_name(self):
998 self.__class__.test_text = "{}.{}. TEST {}".format(test_config["test_number"],
999 self.__class__.test_index,
1000 inspect.currentframe().f_code.co_name)
1001 self.__class__.test_index += 1
lloretgalleg45220152019-10-29 11:53:49 +01001002 self.__class__.image_name = test_config['image_name']
1003 logger.debug("{}: Image name: {}".format(self.__class__.test_text, self.__class__.image_name))
kasarffdaf292017-06-23 04:06:52 -07001004
1005 image_list = test_config["vim_conn"].get_image_list({'name': self.__class__.image_name})
lloretgalleg45220152019-10-29 11:53:49 +01001006 logger.debug("{}: Result image list: {}".format(self.__class__.test_text, image_list))
kasarffdaf292017-06-23 04:06:52 -07001007
1008 for item in image_list:
shashankjain3c83a212018-10-04 13:05:46 +05301009 self.assertIsInstance(item['id'], (str, unicode))
1010 self.assertIsInstance(item['name'], (str, unicode))
lloretgalleg45220152019-10-29 11:53:49 +01001011 #self.assertEqual(item['id'], self.__class__.image_id)
kasarffdaf292017-06-23 04:06:52 -07001012 self.assertEqual(item['name'], self.__class__.image_name)
1013
1014 def test_020_get_image_list_by_id(self):
1015 self.__class__.test_text = "{}.{}. TEST {}".format(test_config["test_number"],
1016 self.__class__.test_index,
1017 inspect.currentframe().f_code.co_name)
1018 self.__class__.test_index += 1
1019
1020 filter_image_list = test_config["vim_conn"].get_image_list({'id': self.__class__.image_id})
1021
1022 for item1 in filter_image_list:
shashankjain3c83a212018-10-04 13:05:46 +05301023 self.assertIsInstance(item1['id'], (str, unicode))
1024 self.assertIsInstance(item1['name'], (str, unicode))
1025 self.assertEqual(item1['id'], self.__class__.image_id)
1026 self.assertEqual(item1['name'], self.__class__.image_name)
kasarffdaf292017-06-23 04:06:52 -07001027
1028 def test_030_get_image_list_negative(self):
1029 Non_exist_image_id = uuid.uuid4()
1030 self.__class__.test_text = "{}.{}. TEST {}".format(test_config["test_number"],
1031 self.__class__.test_index,
1032 inspect.currentframe().f_code.co_name)
1033 self.__class__.test_index += 1
1034 image_list = test_config["vim_conn"].get_image_list({'name': 'Unknown_name', 'id': Non_exist_image_id})
1035
1036 self.assertIsNotNone(image_list, None)
1037 self.assertEqual(image_list, [])
1038
1039class test_vimconn_new_vminstance(test_base):
1040 network_name = None
1041 net_type = None
1042 network_id = None
1043 image_id = None
kasar114050e2017-07-06 02:04:59 -07001044 instance_id = None
kasarffdaf292017-06-23 04:06:52 -07001045
1046 def setUp(self):
1047 # create network
1048 self.__class__.network_name = _get_random_string(20)
1049 self.__class__.net_type = 'bridge'
1050
jamartinezv14a823d2019-08-01 11:45:15 +02001051 self.__class__.network_id, _ = test_config["vim_conn"].new_network(net_name=self.__class__.network_name,
kasarffdaf292017-06-23 04:06:52 -07001052 net_type=self.__class__.net_type)
kasarffdaf292017-06-23 04:06:52 -07001053 # find image name and image id
1054 if test_config['image_name']:
1055 image_list = test_config['vim_conn'].get_image_list({'name': test_config['image_name']})
1056 if len(image_list) == 0:
1057 raise Exception("Image {} is not found at VIM".format(test_config['image_name']))
1058 else:
1059 self.__class__.image_id = image_list[0]['id']
1060 else:
1061 image_list = test_config['vim_conn'].get_image_list()
1062 if len(image_list) == 0:
1063 raise Exception("Not found any image at VIM")
1064 else:
1065 self.__class__.image_id = image_list[0]['id']
1066
kasarffdaf292017-06-23 04:06:52 -07001067 def tearDown(self):
1068 test_base.tearDown(self)
1069 # Deleting created network
1070 result = test_config["vim_conn"].delete_network(self.__class__.network_id)
1071 if result:
1072 logger.info("Network id {} sucessfully deleted".format(self.__class__.network_id))
1073 else:
1074 logger.info("Failed to delete network id {}".format(self.__class__.network_id))
1075
1076 def test_000_new_vminstance(self):
1077 vpci = "0000:00:11.0"
1078 name = "eth0"
1079
kokardekar430e62f2018-10-04 14:27:09 +05301080 flavor_data = {'name': _get_random_string(20), 'ram': 1024, 'vcpus': 1, 'disk': 10}
kasarffdaf292017-06-23 04:06:52 -07001081
1082 # create new flavor
1083 flavor_id = test_config["vim_conn"].new_flavor(flavor_data)
1084
kasarffdaf292017-06-23 04:06:52 -07001085
1086 self.__class__.test_text = "{}.{}. TEST {}".format(test_config["test_number"],
1087 self.__class__.test_index,
1088 inspect.currentframe().f_code.co_name)
1089 self.__class__.test_index += 1
1090
jamartinezv14a823d2019-08-01 11:45:15 +02001091 net_list = [{'use': self.__class__.net_type, 'name': name, 'floating_ip': False, 'vpci': vpci,
1092 'port_security': True, 'type': 'virtual', 'net_id': self.__class__.network_id}]
kasarffdaf292017-06-23 04:06:52 -07001093
jamartinezv14a823d2019-08-01 11:45:15 +02001094 self.__class__.instance_id, _ = test_config["vim_conn"].new_vminstance(name='Test1_vm', description='',
1095 start=False,
1096 image_id=self.__class__.image_id,
1097 flavor_id=flavor_id, net_list=net_list)
kasarffdaf292017-06-23 04:06:52 -07001098
kokardekar430e62f2018-10-04 14:27:09 +05301099 self.assertIsInstance(self.__class__.instance_id, (str, unicode))
kasarffdaf292017-06-23 04:06:52 -07001100
1101 def test_010_new_vminstance_by_model(self):
kokardekar430e62f2018-10-04 14:27:09 +05301102 flavor_data = {'name': _get_random_string(20),'ram': 1024, 'vcpus': 2, 'disk': 10}
kasarffdaf292017-06-23 04:06:52 -07001103 model_name = 'e1000'
1104 name = 'eth0'
1105
1106 # create new flavor
1107 flavor_id = test_config["vim_conn"].new_flavor(flavor_data)
1108
1109 self.__class__.test_text = "{}.{}. TEST {}".format(test_config["test_number"],
1110 self.__class__.test_index,
1111 inspect.currentframe().f_code.co_name)
1112 self.__class__.test_index += 1
1113
jamartinezv14a823d2019-08-01 11:45:15 +02001114 net_list = [{'use': self.__class__.net_type, 'name': name, 'floating_ip': False, 'port_security': True,
1115 'model': model_name, 'type': 'virtual', 'net_id': self.__class__.network_id}]
kasarffdaf292017-06-23 04:06:52 -07001116
jamartinezv14a823d2019-08-01 11:45:15 +02001117 instance_id, _ = test_config["vim_conn"].new_vminstance(name='Test1_vm', description='', start=False,
1118 image_id=self.__class__.image_id,
1119 flavor_id=flavor_id,net_list=net_list)
kokardekar430e62f2018-10-04 14:27:09 +05301120
1121 self.assertIsInstance(instance_id, (str, unicode))
1122
kasarffdaf292017-06-23 04:06:52 -07001123 # Deleting created vm instance
1124 logger.info("Deleting created vm intance")
1125 test_config["vim_conn"].delete_vminstance(instance_id)
1126 time.sleep(10)
1127
1128 def test_020_new_vminstance_by_net_use(self):
kokardekar430e62f2018-10-04 14:27:09 +05301129 flavor_data = {'name': _get_random_string(20),'ram': 1024, 'vcpus': 2, 'disk': 10}
kasarffdaf292017-06-23 04:06:52 -07001130 net_use = 'data'
1131 name = 'eth0'
1132
1133 # create new flavor
1134 flavor_id = test_config["vim_conn"].new_flavor(flavor_data)
1135
1136 self.__class__.test_text = "{}.{}. TEST {}".format(test_config["test_number"],
1137 self.__class__.test_index,
1138 inspect.currentframe().f_code.co_name)
1139 self.__class__.test_index += 1
1140
jamartinezv14a823d2019-08-01 11:45:15 +02001141 net_list = [{'use': net_use, 'name': name, 'floating_ip': False, 'port_security': True, 'type': 'virtual',
1142 'net_id': self.__class__.network_id}]
kasarffdaf292017-06-23 04:06:52 -07001143
jamartinezv14a823d2019-08-01 11:45:15 +02001144 instance_id, _ = test_config["vim_conn"].new_vminstance(name='Test1_vm', description='', start=False,
1145 image_id=self.__class__.image_id,disk_list=None,
1146 flavor_id=flavor_id, net_list=net_list)
kokardekar430e62f2018-10-04 14:27:09 +05301147 self.assertIsInstance(instance_id, (str, unicode))
1148
kasarffdaf292017-06-23 04:06:52 -07001149 # Deleting created vm instance
1150 logger.info("Deleting created vm intance")
1151 test_config["vim_conn"].delete_vminstance(instance_id)
1152 time.sleep(10)
1153
1154 def test_030_new_vminstance_by_net_type(self):
kokardekar430e62f2018-10-04 14:27:09 +05301155 flavor_data = {'name':_get_random_string(20),'ram': 1024, 'vcpus': 2, 'disk': 10}
kasarffdaf292017-06-23 04:06:52 -07001156 _type = 'VF'
1157 name = 'eth0'
1158
1159 # create new flavor
1160 flavor_id = test_config["vim_conn"].new_flavor(flavor_data)
1161
1162 self.__class__.test_text = "{}.{}. TEST {}".format(test_config["test_number"],
1163 self.__class__.test_index,
1164 inspect.currentframe().f_code.co_name)
1165 self.__class__.test_index += 1
1166
kokardekar430e62f2018-10-04 14:27:09 +05301167 if test_config['vimtype'] == 'vmware':
1168 net_list = [{'use': self.__class__.net_type, 'name': name, 'floating_ip': False, 'port_security': True,
1169 'type': _type, 'net_id': self.__class__.network_id}]
kasarffdaf292017-06-23 04:06:52 -07001170
kokardekar430e62f2018-10-04 14:27:09 +05301171 instance_id, _ = test_config["vim_conn"].new_vminstance(name='Test1_vm', image_id=self.__class__.image_id,
1172 flavor_id=flavor_id,
1173 net_list=net_list)
1174 self.assertEqual(type(instance_id),str)
1175
jamartinezv14a823d2019-08-01 11:45:15 +02001176 if test_config['vimtype'] in ('openstack', 'azure'):
kokardekar430e62f2018-10-04 14:27:09 +05301177 # create network of type data
1178 network_name = _get_random_string(20)
1179 net_type = 'data'
1180
jamartinezv14a823d2019-08-01 11:45:15 +02001181 network_id, _ = test_config["vim_conn"].new_network(net_name=network_name,
kokardekar430e62f2018-10-04 14:27:09 +05301182 net_type=net_type)
1183 net_list = [{'use': net_type, 'name': name, 'floating_ip': False, 'port_security': True,
1184 'type': _type, 'net_id': network_id}]
1185
1186 instance_id, _ = test_config["vim_conn"].new_vminstance(name='Test1_vm', description='', start=False,
jamartinezv14a823d2019-08-01 11:45:15 +02001187 image_id=self.__class__.image_id, disk_list=None,
1188 flavor_id=flavor_id,
1189 net_list=net_list)
kokardekar430e62f2018-10-04 14:27:09 +05301190
1191 self.assertEqual(type(instance_id), unicode)
1192
1193 # delete created network
1194 result = test_config["vim_conn"].delete_network(network_id)
1195 if result:
1196 logger.info("Network id {} sucessfully deleted".format(network_id))
1197 else:
1198 logger.info("Failed to delete network id {}".format(network_id))
1199
kasarffdaf292017-06-23 04:06:52 -07001200 # Deleting created vm instance
1201 logger.info("Deleting created vm intance")
1202 test_config["vim_conn"].delete_vminstance(instance_id)
1203 time.sleep(10)
1204
1205 def test_040_new_vminstance_by_cloud_config(self):
kokardekar430e62f2018-10-04 14:27:09 +05301206 flavor_data = {'name': _get_random_string(20),'ram': 1024, 'vcpus': 2, 'disk': 10}
kasarffdaf292017-06-23 04:06:52 -07001207 name = 'eth0'
1208 user_name = 'test_user'
1209
jamartinezv14a823d2019-08-01 11:45:15 +02001210 key_pairs = ['ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDtAjl5R+GSKP3gFrdFxgizKEUzhXKQbyjaxJH9thsK 0/fDiYlaNEjvijgPgiVZkfwvqgWeLprPcpzL2j4jvmmSJ3+7C8ihCwObWP0VUiuewmbIINBPAR0RqusjMRyPsa+q0asFBPOoZLx3Cv3vzmC1AA3mKuCNeT EuA0rlWhDIOVwMcU5sP1grnmuexQB8HcR7BdKcA9y08pTwnCQR8vmtW77SRkaxEGXm4Gnw5qw8Z27mHdk2wWS2SnbVH7aFwWvDXc6jjf5TpEWypdr/EAPC +eJipeS2Oa4FsntEqAu3Fz6gp/9ub8uNqgCgHfMzs6FhYpZpipwS0hXYyF6eVsSx osm@osm']
kasarffdaf292017-06-23 04:06:52 -07001211
jamartinezv14a823d2019-08-01 11:45:15 +02001212 users_data = [{'key-pairs': ['ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDtAjl5R+GSKP3gFrdFxgizKEUzhXKQbyjaxJH9thsK0/fDiYlaNEjvijgPgiVZkfwvqgWeLprPcpzL2j4jvmmSJ3+7C8ihCwObWP0VUiuewmbIINBPAR0RqusjMRyPsa+q0asFBPOoZLx3Cv3vzmC1AA3mKuCNeTEuA0rlWhDIOVwMcU5sP1grnmuexQB8HcR7BdKcA9y08pTwnCQR8vmtW77SRkaxEGXm4Gnw5qw8Z27mHdk2wWS2SnbVH7aFwWvDXc6jjf5TpEWypdr/EAPC+eJipeS2Oa4FsntEqAu3Fz6gp/9ub8uNqgCgHfMzs6FhYpZpipwS0hXYyF6eVsSx osm@osm'], 'name': 'cloudinit'}]
kasarffdaf292017-06-23 04:06:52 -07001213
1214 cloud_data = {'config-files': [{'content': 'auto enp0s3\niface enp0s3 inet dhcp\n', 'dest': '/etc/network/interfaces.d/enp0s3.cfg', 'owner': 'root:root', 'permissions': '0644'}, {'content': '#! /bin/bash\nls -al >> /var/log/osm.log\n', 'dest': '/etc/rc.local', 'permissions': '0755'}, {'content': 'file content', 'dest': '/etc/test_delete'}], 'boot-data-drive': True, 'key-pairs': key_pairs, 'users': users_data }
jamartinezv14a823d2019-08-01 11:45:15 +02001215 #cloud_data = {'users': users_data }
kasarffdaf292017-06-23 04:06:52 -07001216
1217 # create new flavor
1218 flavor_id = test_config["vim_conn"].new_flavor(flavor_data)
1219
1220 self.__class__.test_text = "{}.{}. TEST {}".format(test_config["test_number"],
1221 self.__class__.test_index,
1222 inspect.currentframe().f_code.co_name)
1223 self.__class__.test_index += 1
1224
jamartinezv14a823d2019-08-01 11:45:15 +02001225 net_list = [{'use': self.__class__.net_type, 'name': name, 'floating_ip': False, 'port_security': True,
1226 'type': 'virtual', 'net_id': self.__class__.network_id}]
kasarffdaf292017-06-23 04:06:52 -07001227
kokardekar430e62f2018-10-04 14:27:09 +05301228 instance_id, _ = test_config["vim_conn"].new_vminstance(name='Cloud_vm', description='', start=False,
jamartinezv14a823d2019-08-01 11:45:15 +02001229 image_id=self.__class__.image_id,
1230 flavor_id=flavor_id,net_list=net_list,
1231 cloud_config=cloud_data)
kokardekar430e62f2018-10-04 14:27:09 +05301232
1233 self.assertIsInstance(instance_id, (str, unicode))
1234
kasarffdaf292017-06-23 04:06:52 -07001235 # Deleting created vm instance
1236 logger.info("Deleting created vm intance")
1237 test_config["vim_conn"].delete_vminstance(instance_id)
1238 time.sleep(10)
1239
1240 def test_050_new_vminstance_by_disk_list(self):
kokardekar430e62f2018-10-04 14:27:09 +05301241 flavor_data = {'name':_get_random_string(20),'ram': 1024, 'vcpus': 2, 'disk': 10}
kasarffdaf292017-06-23 04:06:52 -07001242 name = 'eth0'
1243
kokardekar430e62f2018-10-04 14:27:09 +05301244 device_data = [{'image_id': self.__class__.image_id, 'size': '10'}]
kasarffdaf292017-06-23 04:06:52 -07001245
1246 # create new flavor
1247 flavor_id = test_config["vim_conn"].new_flavor(flavor_data)
1248
1249 self.__class__.test_text = "{}.{}. TEST {}".format(test_config["test_number"],
1250 self.__class__.test_index,
1251 inspect.currentframe().f_code.co_name)
1252 self.__class__.test_index += 1
1253
jamartinezv14a823d2019-08-01 11:45:15 +02001254 net_list = [{'use': self.__class__.net_type, 'name': name, 'floating_ip': False, 'port_security': True,
1255 'type': 'virtual', 'net_id': self.__class__.network_id}]
kasarffdaf292017-06-23 04:06:52 -07001256
jamartinezv14a823d2019-08-01 11:45:15 +02001257 instance_id, _ = test_config["vim_conn"].new_vminstance(name='VM_test1', description='', start=False,
1258 image_id=self.__class__.image_id,
1259 flavor_id=flavor_id, net_list=net_list,
1260 disk_list=device_data)
kokardekar430e62f2018-10-04 14:27:09 +05301261
1262 self.assertIsInstance(instance_id, (str, unicode))
kasarffdaf292017-06-23 04:06:52 -07001263 # Deleting created vm instance
1264 logger.info("Deleting created vm intance")
1265 test_config["vim_conn"].delete_vminstance(instance_id)
1266 time.sleep(10)
1267
1268 def test_060_new_vminstance_negative(self):
1269 unknown_flavor_id = str(uuid.uuid4())
1270 unknown_image_id = str(uuid.uuid4())
1271 name = 'eth2'
1272
1273 self.__class__.test_text = "{}.{}. TEST {}".format(test_config["test_number"],
1274 self.__class__.test_index,
1275 inspect.currentframe().f_code.co_name)
1276 self.__class__.test_index += 1
1277
jamartinezv14a823d2019-08-01 11:45:15 +02001278 net_list = [{'use': self.__class__.net_type, 'name': name, 'floating_ip': False, 'port_security': True,
1279 'type': 'virtual', 'net_id': self.__class__.network_id}]
kasarffdaf292017-06-23 04:06:52 -07001280
1281 with self.assertRaises(Exception) as context:
jamartinezv14a823d2019-08-01 11:45:15 +02001282 test_config["vim_conn"].new_vminstance(name='Test1_vm', description='', start=False,
1283 image_id=unknown_image_id,
1284 flavor_id=unknown_flavor_id,
1285 net_list=net_list)
kokardekar430e62f2018-10-04 14:27:09 +05301286
1287 self.assertIn((context.exception).http_code, (400, 404))
1288
kasarffdaf292017-06-23 04:06:52 -07001289
kasar114050e2017-07-06 02:04:59 -07001290 def test_070_get_vminstance(self):
1291 self.__class__.test_text = "{}.{}. TEST {}".format(test_config["test_number"],
1292 self.__class__.test_index,
1293 inspect.currentframe().f_code.co_name)
1294 self.__class__.test_index += 1
1295
1296 # Get instance by its id
1297 vm_info = test_config["vim_conn"].get_vminstance(self.__class__.instance_id)
1298
1299 if test_config['vimtype'] == 'vmware':
1300 for attr in vm_info:
1301 if attr == 'status':
1302 self.assertEqual(vm_info[attr], 'ACTIVE')
1303 if attr == 'hostId':
1304 self.assertEqual(type(vm_info[attr]), str)
1305 if attr == 'interfaces':
1306 self.assertEqual(type(vm_info[attr]), list)
1307 self.assertEqual(vm_info[attr][0]['IsConnected'], 'true')
1308 if attr == 'IsEnabled':
1309 self.assertEqual(vm_info[attr], 'true')
1310
1311 def test_080_get_vminstance_negative(self):
1312 unknown_instance_id = str(uuid.uuid4())
1313
1314 self.__class__.test_text = "{}.{}. TEST {}".format(test_config["test_number"],
1315 self.__class__.test_index,
1316 inspect.currentframe().f_code.co_name)
1317 self.__class__.test_index += 1
1318
1319 with self.assertRaises(Exception) as context:
1320 test_config["vim_conn"].get_vminstance(unknown_instance_id)
1321
1322 self.assertEqual((context.exception).http_code, 404)
1323
1324 def test_090_refresh_vms_status(self):
1325 self.__class__.test_text = "{}.{}. TEST {}".format(test_config["test_number"],
1326 self.__class__.test_index,
1327 inspect.currentframe().f_code.co_name)
1328 self.__class__.test_index += 1
kasar114050e2017-07-06 02:04:59 -07001329
kokardekar430e62f2018-10-04 14:27:09 +05301330 if test_config['vimtype'] == 'vmware':
1331 vm_list = []
1332 vm_list.append(self.__class__.instance_id)
1333
1334 # refresh vm status
1335 vm_info = test_config["vim_conn"].refresh_vms_status(vm_list)
1336 for attr in vm_info[self.__class__.instance_id]:
1337 if attr == 'status':
1338 self.assertEqual(vm_info[self.__class__.instance_id][attr], 'ACTIVE')
1339 if attr == 'interfaces':
1340 self.assertEqual(type(vm_info[self.__class__.instance_id][attr]), list)
1341
jamartinezv14a823d2019-08-01 11:45:15 +02001342 if test_config['vimtype'] in ('openstack', 'azure'):
kokardekar430e62f2018-10-04 14:27:09 +05301343 vpci = "0000:00:11.0"
1344 name = "eth0"
1345
1346 flavor_data = {'name': _get_random_string(20), 'ram': 1024, 'vcpus': 1, 'disk': 10}
1347
1348 # create new flavor
1349 flavor_id = test_config["vim_conn"].new_flavor(flavor_data)
1350 # create new vm instance
jamartinezv14a823d2019-08-01 11:45:15 +02001351 net_list = [{'use': self.__class__.net_type, 'name': name, 'floating_ip': False, 'vpci': vpci,
1352 'port_security': True, 'type': 'virtual', 'net_id': self.__class__.network_id}]
kokardekar430e62f2018-10-04 14:27:09 +05301353
jamartinezv14a823d2019-08-01 11:45:15 +02001354 instance_id, _ = test_config["vim_conn"].new_vminstance(name='Test1_vm', description='', start=False,
1355 image_id=self.__class__.image_id,
1356 flavor_id=flavor_id, net_list=net_list)
kokardekar430e62f2018-10-04 14:27:09 +05301357
1358 time.sleep(30)
1359 vm_list = []
1360 vm_list.append(instance_id)
1361
1362 # refresh vm status
1363 vm_info = test_config["vim_conn"].refresh_vms_status(vm_list)
1364 for attr in vm_info[instance_id]:
1365 if attr == 'status':
1366 self.assertEqual(vm_info[instance_id][attr], 'ACTIVE')
1367 if attr == 'interfaces':
1368 self.assertEqual(type(vm_info[instance_id][attr]), list)
1369
1370 #Deleting created vm instance
1371 logger.info("Deleting created vm intance")
1372 test_config["vim_conn"].delete_vminstance(instance_id)
1373 time.sleep(10)
1374
kasar114050e2017-07-06 02:04:59 -07001375
1376 def test_100_refresh_vms_status_negative(self):
1377 unknown_id = str(uuid.uuid4())
1378
1379 self.__class__.test_text = "{}.{}. TEST {}".format(test_config["test_number"],
1380 self.__class__.test_index,
1381 inspect.currentframe().f_code.co_name)
1382 self.__class__.test_index += 1
1383
1384 vm_dict = test_config["vim_conn"].refresh_vms_status([unknown_id])
kokardekar430e62f2018-10-04 14:27:09 +05301385
1386 if test_config['vimtype'] == 'vmware':
1387 self.assertEqual(vm_dict,{})
1388
jamartinezv14a823d2019-08-01 11:45:15 +02001389 if test_config['vimtype'] in ('openstack', 'azure'):
kokardekar430e62f2018-10-04 14:27:09 +05301390 self.assertEqual(vm_dict[unknown_id]['status'], 'DELETED')
kasar114050e2017-07-06 02:04:59 -07001391
1392 def test_110_action_vminstance(self):
1393 self.__class__.test_text = "{}.{}. TEST {}".format(test_config["test_number"],
1394 self.__class__.test_index,
1395 inspect.currentframe().f_code.co_name)
1396 self.__class__.test_index += 1
1397
kokardekar430e62f2018-10-04 14:27:09 +05301398 if test_config['vimtype'] == 'vmware':
1399 action_list = ['shutdown', 'start', 'shutoff', 'rebuild', 'pause', 'resume']
1400 # various action on vminstace
1401 for action in action_list:
1402 instance_id = test_config["vim_conn"].action_vminstance(self.__class__.instance_id,
1403 {action: None})
1404 self.assertEqual(instance_id, self.__class__.instance_id)
1405
jamartinezv14a823d2019-08-01 11:45:15 +02001406 if test_config['vimtype'] in ('openstack', 'azure'):
kokardekar430e62f2018-10-04 14:27:09 +05301407 # create new vm instance
1408 vpci = "0000:00:11.0"
1409 name = "eth0"
1410
1411 flavor_data = {'name': _get_random_string(20), 'ram': 1024, 'vcpus': 1, 'disk': 10}
1412
1413 # create new flavor
1414 flavor_id = test_config["vim_conn"].new_flavor(flavor_data)
1415
jamartinezv14a823d2019-08-01 11:45:15 +02001416 net_list = [{'use': self.__class__.net_type, 'name': name, 'floating_ip': False, 'vpci': vpci,
1417 'port_security': True, 'type': 'virtual', 'net_id': self.__class__.network_id}]
kokardekar430e62f2018-10-04 14:27:09 +05301418
jamartinezv14a823d2019-08-01 11:45:15 +02001419 new_instance_id, _ = test_config["vim_conn"].new_vminstance(name='Test1_vm', description='',
1420 start=False, image_id=self.__class__.image_id,
1421 flavor_id=flavor_id, net_list=net_list)
kokardekar430e62f2018-10-04 14:27:09 +05301422
jamartinezv14a823d2019-08-01 11:45:15 +02001423 if test_config['vimtype'] == 'openstack':
1424 action_list = ['shutdown','start','shutoff','rebuild','start','pause','start']
1425 else:
1426 action_list = ['shutdown','start','stop','start','shutoff','start','reboot']
kokardekar430e62f2018-10-04 14:27:09 +05301427
1428 # various action on vminstace
1429 for action in action_list:
1430 # sleep for sometime till status is changed
1431 time.sleep(25)
1432 instance_id = test_config["vim_conn"].action_vminstance(new_instance_id,
1433 { action: None})
1434
1435 self.assertTrue(instance_id is None)
1436
1437 # Deleting created vm instance
1438 logger.info("Deleting created vm intance")
1439 test_config["vim_conn"].delete_vminstance(new_instance_id)
1440 time.sleep(10)
kasar114050e2017-07-06 02:04:59 -07001441
1442 def test_120_action_vminstance_negative(self):
1443 non_exist_id = str(uuid.uuid4())
1444 self.__class__.test_text = "{}.{}. TEST {}".format(test_config["test_number"],
1445 self.__class__.test_index,
1446 inspect.currentframe().f_code.co_name)
1447 self.__class__.test_index += 1
1448
1449 action = 'start'
1450 with self.assertRaises(Exception) as context:
1451 test_config["vim_conn"].action_vminstance(non_exist_id, { action: None})
1452
kokardekar430e62f2018-10-04 14:27:09 +05301453 self.assertEqual((context.exception).http_code, 404)
1454
kasar114050e2017-07-06 02:04:59 -07001455
1456 def test_130_delete_vminstance(self):
1457 self.__class__.test_text = "{}.{}. TEST {}".format(test_config["test_number"],
1458 self.__class__.test_index,
1459 inspect.currentframe().f_code.co_name)
1460 self.__class__.test_index += 1
1461
1462 # Deleting created vm instance
1463 logger.info("Deleting created vm instance")
1464 test_config["vim_conn"].delete_vminstance(self.__class__.instance_id)
1465 time.sleep(10)
1466
Ravi Chamarty59d24362018-11-22 01:22:16 +00001467 def test_140_new_vminstance_sriov(self):
1468 logger.info("Testing creation of sriov vm instance using {}".format(test_config['sriov_net_name']))
1469 flavor_data = {'name': _get_random_string(20),'ram': 1024, 'vcpus': 2, 'disk': 10}
1470 name = 'eth0'
1471
1472 # create new flavor
1473 flavor_id = test_config["vim_conn"].new_flavor(flavor_data)
1474
1475 self.__class__.test_text = "{}.{}. TEST {}".format(test_config["test_number"],
1476 self.__class__.test_index,
1477 inspect.currentframe().f_code.co_name)
1478 self.__class__.test_index += 1
1479
1480 sriov_net_name = test_config['sriov_net_name']
1481 new_network_list = test_config["vim_conn"].get_network_list({'name': sriov_net_name})
1482 for list_item in new_network_list:
1483 self.assertEqual(sriov_net_name, list_item.get('name'))
1484 self.__class__.sriov_network_id = list_item.get('id')
1485
jamartinezv14a823d2019-08-01 11:45:15 +02001486 net_list = [{'use': 'data', 'name': name, 'floating_ip': False, 'port_security': True, 'type': 'VF',
1487 'net_id': self.__class__.sriov_network_id}]
Ravi Chamarty59d24362018-11-22 01:22:16 +00001488
jamartinezv14a823d2019-08-01 11:45:15 +02001489 instance_id, _ = test_config["vim_conn"].new_vminstance(name='Test1_sriov_vm', description='', start=False,
1490 image_id=self.__class__.image_id, flavor_id=flavor_id,
1491 net_list=net_list)
Ravi Chamarty59d24362018-11-22 01:22:16 +00001492
1493 self.assertIsInstance(instance_id, (str, unicode))
1494
1495 logger.info("Waiting for created sriov-vm intance")
1496 time.sleep(10)
1497 # Deleting created vm instance
1498 logger.info("Deleting created sriov-vm intance")
1499 test_config["vim_conn"].delete_vminstance(instance_id)
1500 time.sleep(10)
1501
kasarf358ad52017-07-24 01:28:44 -07001502class test_vimconn_get_tenant_list(test_base):
1503 tenant_id = None
1504
1505 def test_000_get_tenant_list(self):
1506 self.__class__.test_text = "{}.{}. TEST {}".format(test_config["test_number"],
1507 self.__class__.test_index,
1508 inspect.currentframe().f_code.co_name)
1509 self.__class__.test_index += 1
1510
1511 # Getting tenant list
1512 tenant_list = test_config["vim_conn"].get_tenant_list()
lloretgalleg45220152019-10-29 11:53:49 +01001513 logger.debug(self.__class__.test_text + "Tenant list: " + str(tenant_list))
kasarf358ad52017-07-24 01:28:44 -07001514
1515 for item in tenant_list:
1516 if test_config['tenant'] == item['name']:
1517 self.__class__.tenant_id = item['id']
shashankjain3c83a212018-10-04 13:05:46 +05301518 self.assertIsInstance(item['name'], (str, unicode))
1519 self.assertIsInstance(item['id'], (str, unicode))
kasarf358ad52017-07-24 01:28:44 -07001520
1521 def test_010_get_tenant_list_by_id(self):
1522 self.__class__.test_text = "{}.{}. TEST {}".format(test_config["test_number"],
1523 self.__class__.test_index,
1524 inspect.currentframe().f_code.co_name)
1525 self.__class__.test_index += 1
1526
1527 # Getting filter tenant list by its id
1528 filter_tenant_list = test_config["vim_conn"].get_tenant_list({'id': self.__class__.tenant_id})
lloretgalleg45220152019-10-29 11:53:49 +01001529 logger.debug(self.__class__.test_text + "Tenant list: " + str(filter_tenant_list))
kasarf358ad52017-07-24 01:28:44 -07001530
1531 for item in filter_tenant_list:
shashankjain3c83a212018-10-04 13:05:46 +05301532 self.assertIsInstance(item['id'], (str, unicode))
kasarf358ad52017-07-24 01:28:44 -07001533 self.assertEqual(item['id'], self.__class__.tenant_id)
1534
1535 def test_020_get_tenant_list_by_name(self):
1536 self.__class__.test_text = "{}.{}. TEST {}".format(test_config["test_number"],
1537 self.__class__.test_index,
1538 inspect.currentframe().f_code.co_name)
1539 self.__class__.test_index += 1
1540
1541 # Getting filter tenant list by its name
1542 filter_tenant_list = test_config["vim_conn"].get_tenant_list({'name': test_config['tenant']})
lloretgalleg45220152019-10-29 11:53:49 +01001543 logger.debug(self.__class__.test_text + "Tenant list: " + str(filter_tenant_list))
kasarf358ad52017-07-24 01:28:44 -07001544
1545 for item in filter_tenant_list:
shashankjain3c83a212018-10-04 13:05:46 +05301546 self.assertIsInstance(item['name'], (str, unicode))
kasarf358ad52017-07-24 01:28:44 -07001547 self.assertEqual(item['name'], test_config['tenant'])
1548
1549 def test_030_get_tenant_list_by_name_and_id(self):
1550 self.__class__.test_text = "{}.{}. TEST {}".format(test_config["test_number"],
1551 self.__class__.test_index,
1552 inspect.currentframe().f_code.co_name)
1553 self.__class__.test_index += 1
1554
1555 # Getting filter tenant list by its name and id
1556 filter_tenant_list = test_config["vim_conn"].get_tenant_list({'name': test_config['tenant'],
1557 'id': self.__class__.tenant_id})
lloretgalleg45220152019-10-29 11:53:49 +01001558 logger.debug(self.__class__.test_text + "Tenant list: " + str(filter_tenant_list))
kasarf358ad52017-07-24 01:28:44 -07001559
1560 for item in filter_tenant_list:
shashankjain3c83a212018-10-04 13:05:46 +05301561 self.assertIsInstance(item['name'], (str, unicode))
1562 self.assertIsInstance(item['id'], (str, unicode))
kasarf358ad52017-07-24 01:28:44 -07001563 self.assertEqual(item['name'], test_config['tenant'])
1564 self.assertEqual(item['id'], self.__class__.tenant_id)
1565
1566 def test_040_get_tenant_list_negative(self):
1567 non_exist_tenant_name = "Tenant_123"
1568 non_exist_tenant_id = "kjhgrt456-45345kjhdfgnbdk-34dsfjdfg"
1569 self.__class__.test_text = "{}.{}. TEST {}".format(test_config["test_number"],
1570 self.__class__.test_index,
1571 inspect.currentframe().f_code.co_name)
1572 self.__class__.test_index += 1
1573
1574 filter_tenant_list = test_config["vim_conn"].get_tenant_list({'name': non_exist_tenant_name,
1575 'id': non_exist_tenant_id})
lloretgalleg45220152019-10-29 11:53:49 +01001576 logger.debug(self.__class__.test_text + "Tenant list: " + str(filter_tenant_list))
kasarf358ad52017-07-24 01:28:44 -07001577
1578 self.assertEqual(filter_tenant_list, [])
1579
shashankjain3c83a212018-10-04 13:05:46 +05301580
kasar55f70852017-07-31 01:25:55 -07001581class test_vimconn_new_tenant(test_base):
1582 tenant_id = None
1583
1584 def test_000_new_tenant(self):
1585 tenant_name = _get_random_string(20)
1586 self.__class__.test_text = "{}.{}. TEST {}".format(test_config["test_number"],
1587 self.__class__.test_index,
1588 inspect.currentframe().f_code.co_name)
1589 self.__class__.test_index += 1
1590
jamartinezv14a823d2019-08-01 11:45:15 +02001591 if test_config['vimtype'] != 'azure':
1592 self.__class__.tenant_id = test_config["vim_conn"].new_tenant(tenant_name, "")
1593 time.sleep(15)
kasar55f70852017-07-31 01:25:55 -07001594
jamartinezv14a823d2019-08-01 11:45:15 +02001595 self.assertIsInstance(self.__class__.tenant_id, (str, unicode))
1596 else:
1597 with self.assertRaises(Exception) as context:
lloretgalleg45220152019-10-29 11:53:49 +01001598 test_config["vim_conn"].new_tenant(self.__class__.tenant_id, "")
jamartinezv14a823d2019-08-01 11:45:15 +02001599 self.assertEqual((context.exception).http_code, 401)
lloretgalleg45220152019-10-29 11:53:49 +01001600 logger.debug(self.__class__.test_text + "Exception unauthorized: " + str(context.exception))
shashankjain3c83a212018-10-04 13:05:46 +05301601
kasar55f70852017-07-31 01:25:55 -07001602
1603 def test_010_new_tenant_negative(self):
1604 Invalid_tenant_name = 10121
1605 self.__class__.test_text = "{}.{}. TEST {}".format(test_config["test_number"],
1606 self.__class__.test_index,
1607 inspect.currentframe().f_code.co_name)
1608 self.__class__.test_index += 1
1609
1610 with self.assertRaises(Exception) as context:
shashankjain3c83a212018-10-04 13:05:46 +05301611 test_config["vim_conn"].new_tenant(Invalid_tenant_name, "")
kasar55f70852017-07-31 01:25:55 -07001612
jamartinezv14a823d2019-08-01 11:45:15 +02001613 if test_config['vimtype'] != 'azure':
1614 self.assertEqual((context.exception).http_code, 400)
1615 else:
1616 self.assertEqual((context.exception).http_code, 401)
lloretgalleg45220152019-10-29 11:53:49 +01001617 logger.debug(self.__class__.test_text + "Exception unauthorized: " + str(context.exception))
kasar55f70852017-07-31 01:25:55 -07001618
shashankjain3c83a212018-10-04 13:05:46 +05301619
kasar55f70852017-07-31 01:25:55 -07001620 def test_020_delete_tenant(self):
1621 self.__class__.test_text = "{}.{}. TEST {}".format(test_config["test_number"],
1622 self.__class__.test_index,
1623 inspect.currentframe().f_code.co_name)
1624 self.__class__.test_index += 1
1625
jamartinezv14a823d2019-08-01 11:45:15 +02001626 if test_config['vimtype'] != 'azure':
1627 tenant_id = test_config["vim_conn"].delete_tenant(self.__class__.tenant_id)
1628 self.assertIsInstance(tenant_id, (str, unicode))
1629 else:
1630 with self.assertRaises(Exception) as context:
1631 test_config["vim_conn"].delete_tenant(self.__class__.tenant_id)
1632 self.assertEqual((context.exception).http_code, 401)
lloretgalleg45220152019-10-29 11:53:49 +01001633 logger.debug(self.__class__.test_text + "Exception unauthorized: " + str(context.exception))
kasar55f70852017-07-31 01:25:55 -07001634
1635 def test_030_delete_tenant_negative(self):
lloretgalleg45220152019-10-29 11:53:49 +01001636 non_exist_tenant_name = 'Test_30_tenant'
kasar55f70852017-07-31 01:25:55 -07001637 self.__class__.test_text = "{}.{}. TEST {}".format(test_config["test_number"],
1638 self.__class__.test_index,
1639 inspect.currentframe().f_code.co_name)
1640 self.__class__.test_index += 1
1641
1642 with self.assertRaises(Exception) as context:
lloretgalleg45220152019-10-29 11:53:49 +01001643 test_config["vim_conn"].delete_tenant(non_exist_tenant_name)
kasar55f70852017-07-31 01:25:55 -07001644
lloretgalleg45220152019-10-29 11:53:49 +01001645 if test_config['vimtype'] != 'azure':
1646 self.assertEqual((context.exception).http_code, 404)
1647 else:
1648 self.assertEqual((context.exception).http_code, 401)
1649 logger.debug(self.__class__.test_text + "Exception unauthorized: " + str(context.exception))
kasarf358ad52017-07-24 01:28:44 -07001650
tiernoed854572017-10-03 16:18:09 +02001651
kasar532f8c22018-10-12 02:25:31 -07001652def get_image_id():
1653 if test_config['image_name']:
1654 image_list = test_config['vim_conn'].get_image_list({'name': test_config['image_name']})
1655 if len(image_list) == 0:
1656 raise Exception("Image {} is not found at VIM".format(test_config['image_name']))
1657 else:
1658 image_id = image_list[0]['id']
1659 else:
1660 image_list = test_config['vim_conn'].get_image_list()
1661 if len(image_list) == 0:
1662 raise Exception("Not found any image at VIM")
1663 else:
1664 image_id = image_list[0]['id']
1665 return image_id
1666
1667
1668class test_vimconn_vminstance_by_ip_address(test_base):
1669 network_name = None
1670 network_id = None
1671
1672 def setUp(self):
1673 # create network
1674 self.network_name = _get_random_string(20)
1675
jamartinezv14a823d2019-08-01 11:45:15 +02001676 self.network_id, _ = test_config["vim_conn"].new_network(net_name=self.network_name,
kasar532f8c22018-10-12 02:25:31 -07001677 net_type='bridge')
1678
1679 def tearDown(self):
1680 test_base.tearDown(self)
1681 # Deleting created network
1682 result = test_config["vim_conn"].delete_network(self.network_id)
1683 if result:
1684 logger.info("Network id {} sucessfully deleted".format(self.network_id))
1685 else:
1686 logger.info("Failed to delete network id {}".format(self.network_id))
1687
1688
1689 def test_000_vminstance_by_ip_address(self):
1690 """
1691 This test case will deploy VM with provided IP address
1692 Pre-requesite: provided IP address should be from IP pool range which has used for network creation
1693 """
1694 name = "eth0"
1695 # provide ip address
1696 ip_address = ''
1697
1698 flavor_data = {'ram': 1024, 'vcpus': 1, 'disk': 10}
1699
1700 # create new flavor
1701 flavor_id = test_config["vim_conn"].new_flavor(flavor_data)
1702
1703 # find image id
1704 image_id = get_image_id()
1705
1706 self.__class__.test_text = "{}.{}. TEST {}".format(test_config["test_number"],
1707 self.__class__.test_index,
1708 inspect.currentframe().f_code.co_name)
1709 self.__class__.test_index += 1
1710
1711 net_list = [{'use': 'bridge', 'name': name, 'floating_ip': False, 'port_security': True, 'type': 'virtual',
1712 'net_id': self.network_id, 'ip_address': ip_address}]
1713
1714 instance_id, _ = test_config["vim_conn"].new_vminstance(name='Test1_vm', image_id=image_id,
1715 flavor_id=flavor_id, net_list=net_list)
1716
1717 self.assertEqual(type(instance_id),str)
1718 logger.info("Deleting created vm instance")
1719 test_config["vim_conn"].delete_vminstance(instance_id)
1720 time.sleep(10)
1721
1722 def test_010_vminstance_by_ip_address_negative(self):
1723 name = "eth1"
1724 # IP address not from subnet range
1725 invalid_ip_address = '10.10.12.1'
1726
1727 flavor_data = {'ram': 1024, 'vcpus': 1, 'disk': 10}
1728
1729 # create new flavor
1730 flavor_id = test_config["vim_conn"].new_flavor(flavor_data)
1731
1732 # find image name and image id
1733 image_id = get_image_id()
1734
1735 self.__class__.test_text = "{}.{}. TEST {}".format(test_config["test_number"],
1736 self.__class__.test_index,
1737 inspect.currentframe().f_code.co_name)
1738 self.__class__.test_index += 1
1739
1740 net_list = [{'use': 'bridge', 'name': name, 'floating_ip': False, 'port_security': True, 'type': 'virtual',
1741 'net_id': self.network_id, 'ip_address': invalid_ip_address}]
1742
1743 with self.assertRaises(Exception) as context:
1744 test_config["vim_conn"].new_vminstance(name='Test1_vm', image_id=image_id,
1745 flavor_id=flavor_id,
1746 net_list=net_list)
1747 self.assertEqual((context.exception).http_code, 400)
1748
1749 def test_020_vminstance_by_floating_ip(self):
1750 name = "eth1"
1751 flavor_data = {'ram': 1024, 'vcpus': 1, 'disk': 10}
1752
1753 # create new flavor
1754 flavor_id = test_config["vim_conn"].new_flavor(flavor_data)
1755
1756 # find image name and image id
1757 image_id = get_image_id()
1758
1759 self.__class__.test_text = "{}.{}. TEST {}".format(test_config["test_number"],
1760 self.__class__.test_index,
1761 inspect.currentframe().f_code.co_name)
1762 self.__class__.test_index += 1
1763
1764 net_list = [{'use': 'bridge', 'name': name, 'floating_ip': True, 'port_security': True, 'type': 'virtual',
1765 'net_id': self.network_id}]
1766
1767 instance_id, _ = test_config["vim_conn"].new_vminstance(name='Test1_vm', image_id=image_id,
1768 flavor_id=flavor_id, net_list=net_list)
1769
1770 self.assertEqual(type(instance_id),str)
1771 logger.info("Deleting created vm instance")
1772 test_config["vim_conn"].delete_vminstance(instance_id)
1773 time.sleep(10)
1774
1775 def test_030_vminstance_by_mac_address(self):
1776 name = "eth1"
1777 mac_address = "74:54:2f:21:da:8c"
1778 flavor_data = {'ram': 1024, 'vcpus': 1, 'disk': 10}
1779
1780 # create new flavor
1781 flavor_id = test_config["vim_conn"].new_flavor(flavor_data)
1782
1783 # find image name and image id
1784 image_id = get_image_id()
1785
1786 self.__class__.test_text = "{}.{}. TEST {}".format(test_config["test_number"],
1787 self.__class__.test_index,
1788 inspect.currentframe().f_code.co_name)
1789 self.__class__.test_index += 1
1790
1791 net_list = [{'use': 'bridge', 'name': name, 'floating_ip': False, 'port_security': True, 'type': 'virtual',
1792 'net_id': self.network_id,'mac_address': mac_address}]
1793
1794 instance_id, _ = test_config["vim_conn"].new_vminstance(name='Test1_vm', image_id=image_id,
1795 flavor_id=flavor_id, net_list=net_list)
1796
1797 self.assertEqual(type(instance_id),str)
1798 logger.info("Deleting created vm instance")
1799 test_config["vim_conn"].delete_vminstance(instance_id)
1800 time.sleep(10)
1801
1802class test_vimconn_vminstance_by_adding_10_nics(test_base):
1803 network_name = None
1804 net_ids = []
1805
1806 def setUp(self):
1807 # create network
1808 i = 0
1809 for i in range(10):
1810 self.network_name = _get_random_string(20)
jamartinezv14a823d2019-08-01 11:45:15 +02001811 network_id, _ = test_config["vim_conn"].new_network(net_name=self.network_name,
kasar532f8c22018-10-12 02:25:31 -07001812 net_type='bridge')
1813 self.net_ids.append(network_id)
1814
1815 def tearDown(self):
1816 test_base.tearDown(self)
1817 # Deleting created network
1818 for net_id in self.net_ids:
1819 result = test_config["vim_conn"].delete_network(net_id)
1820 if result:
1821 logger.info("Network id {} sucessfully deleted".format(net_id))
1822 else:
1823 logger.info("Failed to delete network id {}".format(net_id))
1824
1825 def test_000_vminstance_by_adding_10_nics(self):
1826 flavor_data = {'ram': 1024, 'vcpus': 1, 'disk': 10}
1827
1828 # create new flavor
1829 flavor_id = test_config["vim_conn"].new_flavor(flavor_data)
1830
1831 # find image name and image id
1832 image_id = get_image_id()
1833
1834 self.__class__.test_text = "{}.{}. TEST {}".format(test_config["test_number"],
1835 self.__class__.test_index,
1836 inspect.currentframe().f_code.co_name)
1837 self.__class__.test_index += 1
1838
1839 net_list = []
1840 c = 1
1841 for net_id in self.net_ids:
1842 name = "eth{}".format(c)
1843 net_list.append({'use': 'bridge', 'name': name, 'floating_ip': False,
1844 'port_security': True, 'type': 'virtual', 'net_id': net_id})
1845 c = c+1
1846
1847 instance_id, _ = test_config["vim_conn"].new_vminstance(name='Test1_vm', image_id=image_id,
1848 flavor_id=flavor_id, net_list=net_list)
1849
1850 self.assertEqual(type(instance_id),str)
1851 logger.info("Deleting created vm instance")
1852 test_config["vim_conn"].delete_vminstance(instance_id)
1853 time.sleep(10)
1854
1855
1856class test_vimconn_vminstance_by_existing_disk(test_base):
1857 network_name = None
1858 network_id = None
1859
1860 def setUp(self):
1861 # create network
1862 self.network_name = _get_random_string(20)
jamartinezv14a823d2019-08-01 11:45:15 +02001863 self.network_id, _ = test_config["vim_conn"].new_network(net_name=self.network_name,
kasar532f8c22018-10-12 02:25:31 -07001864 net_type='bridge')
1865
1866 def tearDown(self):
1867 test_base.tearDown(self)
1868 # Deleting created network
1869 result = test_config["vim_conn"].delete_network(self.network_id)
1870 if result:
1871 logger.info("Network id {} sucessfully deleted".format(self.network_id))
1872 else:
1873 logger.info("Failed to delete network id {}".format(self.network_id))
1874
1875
1876 def test_000_vminstance_by_existing_disk(self):
1877 """ This testcase will add existing disk only if given catalog/image is free
1878 means not used by any other VM
1879 """
1880
1881 flavor_data = {'ram': 1024, 'vcpus': 1, 'disk': 10}
1882 name = "eth10"
1883
1884 # create new flavor
1885 flavor_id = test_config["vim_conn"].new_flavor(flavor_data)
1886
1887 # find image name and image id
1888 image_id = get_image_id()
1889 cirros_image = test_config["vim_conn"].get_image_list({'name': 'cirros'})
1890 disk_list = [{'image_id': cirros_image[0]['id'],'size': 5}]
1891
1892 self.__class__.test_text = "{}.{}. TEST {}".format(test_config["test_number"],
1893 self.__class__.test_index,
1894 inspect.currentframe().f_code.co_name)
1895 self.__class__.test_index += 1
1896
1897 net_list = [{'use': 'bridge', 'name': name, 'floating_ip': False, 'port_security': True,
1898 'type': 'virtual', 'net_id': self.network_id}]
1899
jamartinezv14a823d2019-08-01 11:45:15 +02001900 instance_id, _ = test_config["vim_conn"].new_vminstance(name='Test1_vm', description='', start=False,
1901 image_id=image_id,
kasar532f8c22018-10-12 02:25:31 -07001902 flavor_id=flavor_id, net_list=net_list,disk_list=disk_list)
1903
1904 self.assertEqual(type(instance_id),str)
1905 logger.info("Deleting created vm instance")
1906 test_config["vim_conn"].delete_vminstance(instance_id)
1907 time.sleep(10)
1908
1909 def test_010_vminstance_by_new_disk(self):
1910 flavor_data = {'ram': 1024, 'vcpus': 1, 'disk': 10}
1911 name = "eth10"
1912
1913 # create new flavor
1914 flavor_id = test_config["vim_conn"].new_flavor(flavor_data)
1915
1916 # find image name and image id
1917 image_id = get_image_id()
1918 disk_list = [{'size': '5'}]
1919
1920 self.__class__.test_text = "{}.{}. TEST {}".format(test_config["test_number"],
1921 self.__class__.test_index,
1922 inspect.currentframe().f_code.co_name)
1923 self.__class__.test_index += 1
1924
1925 net_list = [{'use': 'bridge', 'name': name, 'floating_ip': False, 'port_security': True,
1926 'type': 'virtual', 'net_id': self.network_id}]
1927
jamartinezv14a823d2019-08-01 11:45:15 +02001928 instance_id, _ = test_config["vim_conn"].new_vminstance(name='Test1_vm', description='', start=False,
1929 image_id=image_id,
kasar532f8c22018-10-12 02:25:31 -07001930 flavor_id=flavor_id, net_list=net_list,disk_list=disk_list)
1931
1932 self.assertEqual(type(instance_id),str)
1933 logger.info("Deleting created vm instance")
1934 test_config["vim_conn"].delete_vminstance(instance_id)
1935 time.sleep(10)
1936
1937 def test_020_vminstance_by_CDROM(self):
1938 """ This testcase will insert media file only if provided catalog
1939 has pre-created ISO media file into vCD
1940 """
1941 flavor_data ={'ram': 1024, 'vcpus': 1, 'disk': 10}
1942 name = "eth10"
1943 image_list = test_config["vim_conn"].get_image_list({'name':'Ubuntu'})
1944 disk_list = [{'image_id':image_list[0]['id'],'device_type':'cdrom'}]
1945
1946 # create new flavor
1947 flavor_id = test_config["vim_conn"].new_flavor(flavor_data)
1948
1949 # find image name and image id
1950 image_id = get_image_id()
1951
1952 self.__class__.test_text = "{}.{}. TEST {}".format(test_config["test_number"],
1953 self.__class__.test_index,
1954 inspect.currentframe().f_code.co_name)
1955 self.__class__.test_index += 1
1956
1957 net_list = [{'use': 'bridge', 'name': name, 'floating_ip': False, 'port_security': True,
1958 'type': 'virtual', 'net_id': self.network_id}]
1959
jamartinezv14a823d2019-08-01 11:45:15 +02001960 instance_id, _ = test_config["vim_conn"].new_vminstance(name='Test1_vm', description='', start=False,
1961 image_id=image_id,
kasar532f8c22018-10-12 02:25:31 -07001962 flavor_id=flavor_id, net_list=net_list,disk_list=disk_list )
1963
1964 self.assertEqual(type(instance_id),str)
1965 logger.info("Deleting created vm instance")
1966 test_config["vim_conn"].delete_vminstance(instance_id)
1967 time.sleep(10)
1968
1969
1970class test_vimconn_vminstance_by_affinity_anti_affinity(test_base):
1971 network_name = None
1972 network_id = None
1973
1974 def setUp(self):
1975 # create network
1976 self.network_name = _get_random_string(20)
jamartinezv14a823d2019-08-01 11:45:15 +02001977 self.network_id, _ = test_config["vim_conn"].new_network(net_name=self.network_name,
kasar532f8c22018-10-12 02:25:31 -07001978 net_type='bridge')
1979
1980 def tearDown(self):
1981 test_base.tearDown(self)
1982 # Deleting created network
1983 result = test_config["vim_conn"].delete_network(self.network_id)
1984 if result:
1985 logger.info("Network id {} sucessfully deleted".format(self.network_id))
1986 else:
1987 logger.info("Failed to delete network id {}".format(self.network_id))
1988
1989 def test_000_vminstance_by_affinity_anti_affinity(self):
1990 """ This testcase will deploy VM into provided HOSTGROUP in VIM config
1991 Pre-requisites: User has created Hosh Groups in vCenter with respective Hosts to be used
1992 While creating VIM account user has to pass the Host Group names in availability_zone list
1993 """
1994 flavor_data = {'ram': 1024, 'vcpus': 1, 'disk': 10}
1995 name = "eth10"
1996
1997 # create new flavor
1998 flavor_id = test_config["vim_conn"].new_flavor(flavor_data)
1999
2000 # find image name and image id
2001 image_id = get_image_id()
2002
2003 self.__class__.test_text = "{}.{}. TEST {}".format(test_config["test_number"],
2004 self.__class__.test_index,
2005 inspect.currentframe().f_code.co_name)
2006 self.__class__.test_index += 1
2007
2008 net_list = [{'use': 'bridge', 'name': name, 'floating_ip': False, 'port_security': True,
2009 'type': 'virtual', 'net_id': self.network_id}]
2010
jamartinezv14a823d2019-08-01 11:45:15 +02002011 instance_id, _ = test_config["vim_conn"].new_vminstance(name='Test1_vm', description='', start=False,
2012 image_id=image_id,
kasar532f8c22018-10-12 02:25:31 -07002013 flavor_id=flavor_id, net_list=net_list,availability_zone_index=1,
2014 availability_zone_list=['HG_174','HG_175'])
2015
2016 self.assertEqual(type(instance_id),str)
2017 time.sleep(10)
2018 logger.info("Deleting created vm instance")
2019 test_config["vim_conn"].delete_vminstance(instance_id)
2020
2021class test_vimconn_vminstance_by_numa_affinity(test_base):
2022 network_name = None
2023 network_id = None
2024
2025 def setUp(self):
2026 # create network
2027 self.network_name = _get_random_string(20)
jamartinezv14a823d2019-08-01 11:45:15 +02002028 self.network_id, _ = test_config["vim_conn"].new_network(net_name=self.network_name,
kasar532f8c22018-10-12 02:25:31 -07002029 net_type='bridge')
2030
2031 def tearDown(self):
2032 test_base.tearDown(self)
2033 # Deleting created network
2034 result = test_config["vim_conn"].delete_network(self.network_id)
2035 if result:
2036 logger.info("Network id {} sucessfully deleted".format(self.network_id))
2037 else:
2038 logger.info("Failed to delete network id {}".format(self.network_id))
2039
2040 def test_000_vminstance_by_numa_affinity(self):
2041 flavor_data = {'extended': {'numas': [{'paired-threads-id': [['1', '3'], ['2', '4']],
jamartinezv14a823d2019-08-01 11:45:15 +02002042 ' paired-threads': 2, 'memory': 1}]},
2043 'ram': 1024, 'vcpus': 1, 'disk': 10}
kasar532f8c22018-10-12 02:25:31 -07002044 name = "eth10"
2045
2046 # create new flavor
2047 flavor_id = test_config["vim_conn"].new_flavor(flavor_data)
2048
2049 # find image name and image id
2050 image_id = get_image_id()
2051
2052 self.__class__.test_text = "{}.{}. TEST {}".format(test_config["test_number"],
2053 self.__class__.test_index,
2054 inspect.currentframe().f_code.co_name)
2055 self.__class__.test_index += 1
2056
2057 net_list = [{'use': 'bridge', 'name': name, 'floating_ip': False, 'port_security': True,
2058 'type': 'virtual', 'net_id': self.network_id}]
2059
jamartinezv14a823d2019-08-01 11:45:15 +02002060 instance_id, _ = test_config["vim_conn"].new_vminstance(name='Test1_vm', description='', start=False,
2061 image_id=image_id,
kasar532f8c22018-10-12 02:25:31 -07002062 flavor_id=flavor_id, net_list=net_list)
2063
2064 self.assertEqual(type(instance_id),str)
2065 logger.info("Deleting created vm instance")
2066 test_config["vim_conn"].delete_vminstance(instance_id)
2067 time.sleep(10)
2068
2069
Pablo Montes Morenoeebea062017-02-27 12:33:10 +01002070'''
2071IMPORTANT NOTE
2072The following unittest class does not have the 'test_' on purpose. This test is the one used for the
2073scenario based tests.
2074'''
tiernof0508352017-06-19 13:37:44 +02002075class descriptor_based_scenario_test(test_base):
Pablo Montes Morenoeebea062017-02-27 12:33:10 +01002076 test_index = 0
Pablo Montes Morenoeebea062017-02-27 12:33:10 +01002077 scenario_test_path = None
Pablo Montes Morenoeebea062017-02-27 12:33:10 +01002078
2079 @classmethod
2080 def setUpClass(cls):
2081 cls.test_index = 1
2082 cls.to_delete_list = []
tiernoed854572017-10-03 16:18:09 +02002083 cls.scenario_uuids = []
2084 cls.instance_scenario_uuids = []
tiernoec66e9a2017-05-17 15:28:10 +02002085 cls.scenario_test_path = test_config["test_directory"] + '/' + test_config["test_folder"]
2086 logger.info("{}. {} {}".format(test_config["test_number"], cls.__name__, test_config["test_folder"]))
Pablo Montes Morenoeebea062017-02-27 12:33:10 +01002087
2088 @classmethod
2089 def tearDownClass(cls):
tiernoec66e9a2017-05-17 15:28:10 +02002090 test_config["test_number"] += 1
Pablo Montes Morenoeebea062017-02-27 12:33:10 +01002091
Pablo Montes Morenoeebea062017-02-27 12:33:10 +01002092 def test_000_load_scenario(self):
tiernoec66e9a2017-05-17 15:28:10 +02002093 self.__class__.test_text = "{}.{}. TEST {} {}".format(test_config["test_number"], self.__class__.test_index,
Pablo Montes Morenoeebea062017-02-27 12:33:10 +01002094 inspect.currentframe().f_code.co_name,
tiernoec66e9a2017-05-17 15:28:10 +02002095 test_config["test_folder"])
Pablo Montes Morenoeebea062017-02-27 12:33:10 +01002096 self.__class__.test_index += 1
tiernoed854572017-10-03 16:18:09 +02002097 # load VNFD and NSD
2098 descriptor_files = glob.glob(self.__class__.scenario_test_path+'/*.yaml')
2099 vnf_descriptors = []
2100 scenario_descriptors = []
2101 for descriptor_file in descriptor_files:
2102 with open(descriptor_file, 'r') as stream:
2103 descriptor = yaml.load(stream)
2104 if "vnf" in descriptor or "vnfd:vnfd-catalog" in descriptor or "vnfd-catalog" in descriptor:
2105 vnf_descriptors.append(descriptor)
2106 else:
2107 scenario_descriptors.append(descriptor)
2108
Pablo Montes Morenoeebea062017-02-27 12:33:10 +01002109 scenario_file = glob.glob(self.__class__.scenario_test_path + '/scenario_*.yaml')
tiernoed854572017-10-03 16:18:09 +02002110 if not vnf_descriptors or not scenario_descriptors or len(scenario_descriptors) > 1:
tiernoec66e9a2017-05-17 15:28:10 +02002111 raise Exception("Test '{}' not valid. It must contain an scenario file and at least one vnfd file'".format(
2112 test_config["test_folder"]))
Pablo Montes Morenoeebea062017-02-27 12:33:10 +01002113
tiernoed854572017-10-03 16:18:09 +02002114 # load all vnfd
2115 for vnf_descriptor in vnf_descriptors:
Pablo Montes Morenoeebea062017-02-27 12:33:10 +01002116 logger.debug("VNF descriptor: {}".format(vnf_descriptor))
tiernoed854572017-10-03 16:18:09 +02002117 vnf = test_config["client"].create_vnf(descriptor=vnf_descriptor, image_name=test_config["image_name"])
Pablo Montes Morenoeebea062017-02-27 12:33:10 +01002118 logger.debug(vnf)
tiernoed854572017-10-03 16:18:09 +02002119 if 'vnf' in vnf:
2120 vnf_uuid = vnf['vnf']['uuid']
2121 else:
2122 vnf_uuid = vnf['vnfd'][0]['uuid']
tiernoec66e9a2017-05-17 15:28:10 +02002123 self.__class__.to_delete_list.insert(0, {"item": "vnf", "function": test_config["client"].delete_vnf,
tiernoed854572017-10-03 16:18:09 +02002124 "params": {"uuid": vnf_uuid}})
Pablo Montes Morenoeebea062017-02-27 12:33:10 +01002125
tiernoed854572017-10-03 16:18:09 +02002126 # load the scenario definition
2127 for scenario_descriptor in scenario_descriptors:
2128 # networks = scenario_descriptor['scenario']['networks']
2129 # networks[test_config["mgmt_net"]] = networks.pop('mgmt')
2130 logger.debug("Scenario descriptor: {}".format(scenario_descriptor))
2131 scenario = test_config["client"].create_scenario(descriptor=scenario_descriptor)
2132 logger.debug(scenario)
2133 if 'scenario' in scenario:
2134 scenario_uuid = scenario['scenario']['uuid']
2135 else:
2136 scenario_uuid = scenario['nsd'][0]['uuid']
2137 self.__class__.to_delete_list.insert(0, {"item": "scenario",
2138 "function": test_config["client"].delete_scenario,
2139 "params": {"uuid": scenario_uuid}})
2140 self.__class__.scenario_uuids.append(scenario_uuid)
Pablo Montes Morenoeebea062017-02-27 12:33:10 +01002141
2142 def test_010_instantiate_scenario(self):
tiernoec66e9a2017-05-17 15:28:10 +02002143 self.__class__.test_text = "{}.{}. TEST {} {}".format(test_config["test_number"], self.__class__.test_index,
Pablo Montes Morenoeebea062017-02-27 12:33:10 +01002144 inspect.currentframe().f_code.co_name,
tiernoec66e9a2017-05-17 15:28:10 +02002145 test_config["test_folder"])
Pablo Montes Morenoeebea062017-02-27 12:33:10 +01002146 self.__class__.test_index += 1
tiernoed854572017-10-03 16:18:09 +02002147 for scenario_uuid in self.__class__.scenario_uuids:
2148 instance_descriptor = {
2149 "instance":{
2150 "name": self.__class__.test_text,
2151 "scenario": scenario_uuid,
2152 "networks":{
2153 "mgmt": {"sites": [ { "netmap-use": test_config["mgmt_net"]} ]}
2154 }
2155 }
2156 }
2157 instance = test_config["client"].create_instance(instance_descriptor)
2158 self.__class__.instance_scenario_uuids.append(instance['uuid'])
2159 logger.debug(instance)
2160 self.__class__.to_delete_list.insert(0, {"item": "instance",
2161 "function": test_config["client"].delete_instance,
2162 "params": {"uuid": instance['uuid']}})
Pablo Montes Morenoeebea062017-02-27 12:33:10 +01002163
Pablo Montes Moreno2fe24fa2017-03-27 12:56:13 +02002164 def test_020_check_deployent(self):
tiernoec66e9a2017-05-17 15:28:10 +02002165 self.__class__.test_text = "{}.{}. TEST {} {}".format(test_config["test_number"], self.__class__.test_index,
Pablo Montes Moreno2fe24fa2017-03-27 12:56:13 +02002166 inspect.currentframe().f_code.co_name,
tiernoec66e9a2017-05-17 15:28:10 +02002167 test_config["test_folder"])
Pablo Montes Moreno2fe24fa2017-03-27 12:56:13 +02002168 self.__class__.test_index += 1
2169
tiernoec66e9a2017-05-17 15:28:10 +02002170 if test_config["manual"]:
Pablo Montes Moreno3be0b2a2017-03-30 13:22:15 +02002171 raw_input('Scenario has been deployed. Perform manual check and press any key to resume')
2172 return
2173
tiernoec66e9a2017-05-17 15:28:10 +02002174 keep_waiting = test_config["timeout"]
tiernoed854572017-10-03 16:18:09 +02002175 pending_instance_scenario_uuids = list(self.__class__.instance_scenario_uuids) # make a copy
2176 while pending_instance_scenario_uuids:
2177 index = 0
2178 while index < len(pending_instance_scenario_uuids):
2179 result = check_instance_scenario_active(pending_instance_scenario_uuids[index])
2180 if result[0]:
2181 del pending_instance_scenario_uuids[index]
2182 break
2183 elif 'ERROR' in result[1]:
2184 msg = 'Got error while waiting for the instance to get active: '+result[1]
2185 logging.error(msg)
2186 raise Exception(msg)
2187 index += 1
Pablo Montes Moreno2fe24fa2017-03-27 12:56:13 +02002188
tierno0e6fcaa2017-05-05 15:54:07 +02002189 if keep_waiting >= 5:
2190 time.sleep(5)
2191 keep_waiting -= 5
2192 elif keep_waiting > 0:
2193 time.sleep(keep_waiting)
2194 keep_waiting = 0
2195 else:
2196 msg = 'Timeout reached while waiting instance scenario to get active'
2197 logging.error(msg)
2198 raise Exception(msg)
Pablo Montes Moreno2fe24fa2017-03-27 12:56:13 +02002199
2200 def test_030_clean_deployment(self):
tiernoec66e9a2017-05-17 15:28:10 +02002201 self.__class__.test_text = "{}.{}. TEST {} {}".format(test_config["test_number"], self.__class__.test_index,
Pablo Montes Morenoeebea062017-02-27 12:33:10 +01002202 inspect.currentframe().f_code.co_name,
tiernoec66e9a2017-05-17 15:28:10 +02002203 test_config["test_folder"])
Pablo Montes Morenoeebea062017-02-27 12:33:10 +01002204 self.__class__.test_index += 1
2205 #At the moment if you delete an scenario right after creating it, in openstack datacenters
2206 #sometimes scenario ports get orphaned. This sleep is just a dirty workaround
2207 time.sleep(5)
2208 for item in self.__class__.to_delete_list:
2209 response = item["function"](**item["params"])
2210 logger.debug(response)
2211
tiernoec66e9a2017-05-17 15:28:10 +02002212
Pablo Montes Morenoeebea062017-02-27 12:33:10 +01002213def _get_random_string(maxLength):
2214 '''generates a string with random characters string.letters and string.digits
2215 with a random length up to maxLength characters. If maxLength is <15 it will be changed automatically to 15
2216 '''
2217 prefix = 'testing_'
2218 min_string = 15
2219 minLength = min_string - len(prefix)
2220 if maxLength < min_string: maxLength = min_string
2221 maxLength -= len(prefix)
2222 length = random.randint(minLength,maxLength)
2223 return 'testing_'+"".join([random.choice(string.letters+string.digits) for i in xrange(length)])
2224
tiernoec66e9a2017-05-17 15:28:10 +02002225
2226def test_vimconnector(args):
2227 global test_config
tierno0e6fcaa2017-05-05 15:54:07 +02002228 sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + "/osm_ro")
kasar70532ae2017-05-26 03:53:52 -07002229 test_config['vimtype'] = args.vimtype
tiernoec66e9a2017-05-17 15:28:10 +02002230 if args.vimtype == "vmware":
2231 import vimconn_vmware as vim
kasar70532ae2017-05-26 03:53:52 -07002232
2233 test_config["test_directory"] = os.path.dirname(__file__) + "/RO_tests"
2234
2235 tenant_name = args.tenant_name
2236 test_config['tenant'] = tenant_name
tierno12a0c3b2018-10-15 15:10:36 +02002237 config_params = yaml.load(args.config_param)
kasar70532ae2017-05-26 03:53:52 -07002238 org_name = config_params.get('orgname')
2239 org_user = config_params.get('user')
2240 org_passwd = config_params.get('passwd')
2241 vim_url = args.endpoint_url
kasarfeaaa052017-06-08 03:46:18 -07002242 test_config['image_path'] = args.image_path
kasarffdaf292017-06-23 04:06:52 -07002243 test_config['image_name'] = args.image_name
Ravi Chamarty59d24362018-11-22 01:22:16 +00002244 test_config['sriov_net_name'] = args.sriov_net_name
kasar70532ae2017-05-26 03:53:52 -07002245
2246 # vmware connector obj
jamartinezv14a823d2019-08-01 11:45:15 +02002247 test_config['vim_conn'] = vim.vimconnector(name=org_name, tenant_name=tenant_name, user=org_user,
2248 passwd=org_passwd, url=vim_url, config=config_params)
kasar70532ae2017-05-26 03:53:52 -07002249
tiernoec66e9a2017-05-17 15:28:10 +02002250 elif args.vimtype == "aws":
2251 import vimconn_aws as vim
2252 elif args.vimtype == "openstack":
2253 import vimconn_openstack as vim
shashankjain3cd49712018-09-28 11:59:03 +05302254
2255 test_config["test_directory"] = os.path.dirname(__file__) + "/RO_tests"
2256
2257 tenant_name = args.tenant_name
2258 test_config['tenant'] = tenant_name
tierno12a0c3b2018-10-15 15:10:36 +02002259 config_params = yaml.load(args.config_param)
shashankjain3cd49712018-09-28 11:59:03 +05302260 os_user = config_params.get('user')
2261 os_passwd = config_params.get('passwd')
2262 vim_url = args.endpoint_url
2263 test_config['image_path'] = args.image_path
2264 test_config['image_name'] = args.image_name
Ravi Chamarty59d24362018-11-22 01:22:16 +00002265 test_config['sriov_net_name'] = args.sriov_net_name
shashankjain3cd49712018-09-28 11:59:03 +05302266
2267 # openstack connector obj
2268 vim_persistent_info = {}
2269 test_config['vim_conn'] = vim.vimconnector(
2270 uuid="test-uuid-1", name="VIO-openstack",
2271 tenant_id=None, tenant_name=tenant_name,
2272 url=vim_url, url_admin=None,
2273 user=os_user, passwd=os_passwd,
2274 config=config_params, persistent_info=vim_persistent_info
2275 )
2276 test_config['vim_conn'].debug = "true"
2277
tiernoec66e9a2017-05-17 15:28:10 +02002278 elif args.vimtype == "openvim":
2279 import vimconn_openvim as vim
jamartinezv14a823d2019-08-01 11:45:15 +02002280 elif args.vimtype == "azure":
2281 import vimconn_azure as vim
2282
2283 test_config["test_directory"] = os.path.dirname(__file__) + "/RO_tests"
2284
2285 tenant_name = args.tenant_name
2286 test_config['tenant'] = tenant_name
2287 config_params = yaml.load(args.config_param)
2288 os_user = config_params.get('user')
2289 os_passwd = config_params.get('passwd')
2290 vim_url = args.endpoint_url
2291 test_config['image_path'] = args.image_path
2292 test_config['image_name'] = args.image_name
2293 #test_config['sriov_net_name'] = args.sriov_net_name
lloretgalleg45220152019-10-29 11:53:49 +01002294 args_log_level = "DEBUG" if args.debug else "INFO"
jamartinezv14a823d2019-08-01 11:45:15 +02002295
2296 # azure connector obj
2297 vim_persistent_info = {}
2298 test_config['vim_conn'] = vim.vimconnector(
2299 uuid="test-uuid-1", name="VIO-azure",
2300 tenant_id=None, tenant_name=tenant_name,
2301 url=vim_url, url_admin=None,
lloretgalleg45220152019-10-29 11:53:49 +01002302 user=os_user, passwd=os_passwd, log_level= args_log_level,
jamartinezv14a823d2019-08-01 11:45:15 +02002303 config=config_params, persistent_info=vim_persistent_info
2304 )
2305 test_config['vim_conn'].debug = "true"
2306
tiernoec66e9a2017-05-17 15:28:10 +02002307 else:
2308 logger.critical("vimtype '{}' not supported".format(args.vimtype))
2309 sys.exit(1)
2310 executed = 0
2311 failed = 0
Pablo Montes Morenoeebea062017-02-27 12:33:10 +01002312 clsmembers = inspect.getmembers(sys.modules[__name__], inspect.isclass)
Pablo Montes Morenoeebea062017-02-27 12:33:10 +01002313 # If only want to obtain a tests list print it and exit
tiernoec66e9a2017-05-17 15:28:10 +02002314 if args.list_tests:
Pablo Montes Morenoeebea062017-02-27 12:33:10 +01002315 tests_names = []
2316 for cls in clsmembers:
shashankjain3cd49712018-09-28 11:59:03 +05302317 if cls[0].startswith('test_vimconn'):
Pablo Montes Morenoeebea062017-02-27 12:33:10 +01002318 tests_names.append(cls[0])
2319
tiernoec66e9a2017-05-17 15:28:10 +02002320 msg = "The 'vim' set tests are:\n\t" + ', '.join(sorted(tests_names))
2321 print(msg)
Pablo Montes Morenoeebea062017-02-27 12:33:10 +01002322 logger.info(msg)
2323 sys.exit(0)
2324
tierno0e6fcaa2017-05-05 15:54:07 +02002325 # Create the list of tests to be run
Pablo Montes Morenoeebea062017-02-27 12:33:10 +01002326 code_based_tests = []
tiernoec66e9a2017-05-17 15:28:10 +02002327 if args.tests:
2328 for test in args.tests:
2329 for t in test.split(','):
2330 matches_code_based_tests = [item for item in clsmembers if item[0] == t]
2331 if len(matches_code_based_tests) > 0:
2332 code_based_tests.append(matches_code_based_tests[0][1])
2333 else:
2334 logger.critical("Test '{}' is not among the possible ones".format(t))
2335 sys.exit(1)
2336 if not code_based_tests:
tierno0e6fcaa2017-05-05 15:54:07 +02002337 # include all tests
Pablo Montes Morenoeebea062017-02-27 12:33:10 +01002338 for cls in clsmembers:
tierno0e6fcaa2017-05-05 15:54:07 +02002339 # We exclude 'test_VIM_tenant_operations' unless it is specifically requested by the user
tierno12a0c3b2018-10-15 15:10:36 +02002340 if cls[0].startswith('test_vimconn'):
Pablo Montes Morenoeebea062017-02-27 12:33:10 +01002341 code_based_tests.append(cls[1])
2342
tiernoec66e9a2017-05-17 15:28:10 +02002343 logger.debug("tests to be executed: {}".format(code_based_tests))
Pablo Montes Morenoeebea062017-02-27 12:33:10 +01002344
2345 # TextTestRunner stream is set to /dev/null in order to avoid the method to directly print the result of tests.
2346 # This is handled in the tests using logging.
2347 stream = open('/dev/null', 'w')
Pablo Montes Morenoeebea062017-02-27 12:33:10 +01002348
tierno0e6fcaa2017-05-05 15:54:07 +02002349 # Run code based tests
Pablo Montes Morenoeebea062017-02-27 12:33:10 +01002350 basic_tests_suite = unittest.TestSuite()
2351 for test in code_based_tests:
2352 basic_tests_suite.addTest(unittest.makeSuite(test))
tierno0e6fcaa2017-05-05 15:54:07 +02002353 result = unittest.TextTestRunner(stream=stream, failfast=failfast).run(basic_tests_suite)
Pablo Montes Morenoeebea062017-02-27 12:33:10 +01002354 executed += result.testsRun
2355 failed += len(result.failures) + len(result.errors)
tierno0e6fcaa2017-05-05 15:54:07 +02002356 if failfast and failed:
2357 sys.exit(1)
Pablo Montes Morenoeebea062017-02-27 12:33:10 +01002358 if len(result.failures) > 0:
2359 logger.debug("failures : {}".format(result.failures))
2360 if len(result.errors) > 0:
2361 logger.debug("errors : {}".format(result.errors))
tiernoec66e9a2017-05-17 15:28:10 +02002362 return executed, failed
Pablo Montes Morenoeebea062017-02-27 12:33:10 +01002363
tiernoec66e9a2017-05-17 15:28:10 +02002364
2365def test_vim(args):
2366 global test_config
2367 sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + "/osm_ro")
2368 import openmanoclient
2369 executed = 0
2370 failed = 0
2371 test_config["client"] = openmanoclient.openmanoclient(
2372 endpoint_url=args.endpoint_url,
2373 tenant_name=args.tenant_name,
2374 datacenter_name=args.datacenter,
2375 debug=args.debug, logger=test_config["logger_name"])
2376 clsmembers = inspect.getmembers(sys.modules[__name__], inspect.isclass)
2377 # If only want to obtain a tests list print it and exit
2378 if args.list_tests:
2379 tests_names = []
2380 for cls in clsmembers:
2381 if cls[0].startswith('test_VIM'):
2382 tests_names.append(cls[0])
2383
2384 msg = "The 'vim' set tests are:\n\t" + ', '.join(sorted(tests_names)) +\
2385 "\nNOTE: The test test_VIM_tenant_operations will fail in case the used datacenter is type OpenStack " \
2386 "unless RO has access to the admin endpoint. Therefore this test is excluded by default"
2387 print(msg)
2388 logger.info(msg)
2389 sys.exit(0)
2390
2391 # Create the list of tests to be run
2392 code_based_tests = []
2393 if args.tests:
2394 for test in args.tests:
2395 for t in test.split(','):
2396 matches_code_based_tests = [item for item in clsmembers if item[0] == t]
2397 if len(matches_code_based_tests) > 0:
2398 code_based_tests.append(matches_code_based_tests[0][1])
2399 else:
2400 logger.critical("Test '{}' is not among the possible ones".format(t))
2401 sys.exit(1)
2402 if not code_based_tests:
2403 # include all tests
2404 for cls in clsmembers:
2405 # We exclude 'test_VIM_tenant_operations' unless it is specifically requested by the user
2406 if cls[0].startswith('test_VIM') and cls[0] != 'test_VIM_tenant_operations':
2407 code_based_tests.append(cls[1])
2408
2409 logger.debug("tests to be executed: {}".format(code_based_tests))
2410
2411 # TextTestRunner stream is set to /dev/null in order to avoid the method to directly print the result of tests.
2412 # This is handled in the tests using logging.
2413 stream = open('/dev/null', 'w')
2414
2415 # Run code based tests
2416 basic_tests_suite = unittest.TestSuite()
2417 for test in code_based_tests:
2418 basic_tests_suite.addTest(unittest.makeSuite(test))
2419 result = unittest.TextTestRunner(stream=stream, failfast=failfast).run(basic_tests_suite)
2420 executed += result.testsRun
2421 failed += len(result.failures) + len(result.errors)
2422 if failfast and failed:
2423 sys.exit(1)
2424 if len(result.failures) > 0:
2425 logger.debug("failures : {}".format(result.failures))
2426 if len(result.errors) > 0:
2427 logger.debug("errors : {}".format(result.errors))
2428 return executed, failed
2429
2430
Anderson Bravalheri0446cd52018-08-17 15:26:19 +01002431def test_wim(args):
2432 global test_config
2433 sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + "/osm_ro")
2434 import openmanoclient
2435 executed = 0
2436 failed = 0
2437 test_config["client"] = openmanoclient.openmanoclient(
2438 endpoint_url=args.endpoint_url,
2439 tenant_name=args.tenant_name,
2440 datacenter_name=args.datacenter,
2441 debug=args.debug, logger=test_config["logger_name"])
2442 clsmembers = inspect.getmembers(sys.modules[__name__], inspect.isclass)
2443 # If only want to obtain a tests list print it and exit
2444 if args.list_tests:
2445 tests_names = []
2446 for cls in clsmembers:
2447 if cls[0].startswith('test_WIM'):
2448 tests_names.append(cls[0])
2449
2450 msg = "The 'wim' set tests are:\n\t" + ', '.join(sorted(tests_names)) +\
2451 "\nNOTE: The test test_VIM_tenant_operations will fail in case the used datacenter is type OpenStack " \
2452 "unless RO has access to the admin endpoint. Therefore this test is excluded by default"
2453 print(msg)
2454 logger.info(msg)
2455 sys.exit(0)
2456
2457 # Create the list of tests to be run
2458 code_based_tests = []
2459 if args.tests:
2460 for test in args.tests:
2461 for t in test.split(','):
2462 matches_code_based_tests = [item for item in clsmembers if item[0] == t]
2463 if len(matches_code_based_tests) > 0:
2464 code_based_tests.append(matches_code_based_tests[0][1])
2465 else:
2466 logger.critical("Test '{}' is not among the possible ones".format(t))
2467 sys.exit(1)
2468 if not code_based_tests:
2469 # include all tests
2470 for cls in clsmembers:
2471 # We exclude 'test_VIM_tenant_operations' unless it is specifically requested by the user
2472 if cls[0].startswith('test_VIM') and cls[0] != 'test_VIM_tenant_operations':
2473 code_based_tests.append(cls[1])
2474
2475 logger.debug("tests to be executed: {}".format(code_based_tests))
2476
2477 # TextTestRunner stream is set to /dev/null in order to avoid the method to directly print the result of tests.
2478 # This is handled in the tests using logging.
2479 stream = open('/dev/null', 'w')
2480
2481 # Run code based tests
2482 basic_tests_suite = unittest.TestSuite()
2483 for test in code_based_tests:
2484 basic_tests_suite.addTest(unittest.makeSuite(test))
2485 result = unittest.TextTestRunner(stream=stream, failfast=failfast).run(basic_tests_suite)
2486 executed += result.testsRun
2487 failed += len(result.failures) + len(result.errors)
2488 if failfast and failed:
2489 sys.exit(1)
2490 if len(result.failures) > 0:
2491 logger.debug("failures : {}".format(result.failures))
2492 if len(result.errors) > 0:
2493 logger.debug("errors : {}".format(result.errors))
2494 return executed, failed
2495
2496
tiernoec66e9a2017-05-17 15:28:10 +02002497def test_deploy(args):
2498 global test_config
2499 sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + "/osm_ro")
2500 import openmanoclient
2501 executed = 0
2502 failed = 0
2503 test_config["test_directory"] = os.path.dirname(__file__) + "/RO_tests"
2504 test_config["image_name"] = args.image_name
2505 test_config["mgmt_net"] = args.mgmt_net
2506 test_config["manual"] = args.manual
2507 test_directory_content = os.listdir(test_config["test_directory"])
2508 # If only want to obtain a tests list print it and exit
2509 if args.list_tests:
tiernof0508352017-06-19 13:37:44 +02002510 msg = "the 'deploy' set tests are:\n\t" + ', '.join(sorted(test_directory_content))
tiernoec66e9a2017-05-17 15:28:10 +02002511 print(msg)
tiernof0508352017-06-19 13:37:44 +02002512 # logger.info(msg)
tiernoec66e9a2017-05-17 15:28:10 +02002513 sys.exit(0)
2514
2515 descriptor_based_tests = []
2516 # Create the list of tests to be run
2517 code_based_tests = []
2518 if args.tests:
2519 for test in args.tests:
2520 for t in test.split(','):
2521 if t in test_directory_content:
2522 descriptor_based_tests.append(t)
2523 else:
2524 logger.critical("Test '{}' is not among the possible ones".format(t))
2525 sys.exit(1)
2526 if not descriptor_based_tests:
2527 # include all tests
2528 descriptor_based_tests = test_directory_content
2529
2530 logger.debug("tests to be executed: {}".format(code_based_tests))
2531
2532 # import openmanoclient from relative path
2533 test_config["client"] = openmanoclient.openmanoclient(
2534 endpoint_url=args.endpoint_url,
2535 tenant_name=args.tenant_name,
2536 datacenter_name=args.datacenter,
2537 debug=args.debug, logger=test_config["logger_name"])
2538
2539 # TextTestRunner stream is set to /dev/null in order to avoid the method to directly print the result of tests.
2540 # This is handled in the tests using logging.
2541 stream = open('/dev/null', 'w')
Pablo Montes Morenoeebea062017-02-27 12:33:10 +01002542 # This scenario based tests are defined as directories inside the directory defined in 'test_directory'
2543 for test in descriptor_based_tests:
tiernoec66e9a2017-05-17 15:28:10 +02002544 test_config["test_folder"] = test
Pablo Montes Morenoeebea062017-02-27 12:33:10 +01002545 test_suite = unittest.TestSuite()
2546 test_suite.addTest(unittest.makeSuite(descriptor_based_scenario_test))
tierno0e6fcaa2017-05-05 15:54:07 +02002547 result = unittest.TextTestRunner(stream=stream, failfast=False).run(test_suite)
Pablo Montes Morenoeebea062017-02-27 12:33:10 +01002548 executed += result.testsRun
2549 failed += len(result.failures) + len(result.errors)
tierno0e6fcaa2017-05-05 15:54:07 +02002550 if failfast and failed:
2551 sys.exit(1)
Pablo Montes Morenoeebea062017-02-27 12:33:10 +01002552 if len(result.failures) > 0:
2553 logger.debug("failures : {}".format(result.failures))
2554 if len(result.errors) > 0:
2555 logger.debug("errors : {}".format(result.errors))
2556
tiernoec66e9a2017-05-17 15:28:10 +02002557 return executed, failed
2558
2559if __name__=="__main__":
2560
2561 parser = ArgumentParser(description='Test RO module')
2562 parser.add_argument('-v','--version', action='version', help="Show current version",
2563 version='%(prog)s version ' + __version__ + ' ' + version_date)
2564
2565 # Common parameters
2566 parent_parser = ArgumentParser(add_help=False)
2567 parent_parser.add_argument('--failfast', help='Stop when a test fails rather than execute all tests',
2568 dest='failfast', action="store_true", default=False)
2569 parent_parser.add_argument('--failed', help='Set logs to show only failed tests. --debug disables this option',
2570 dest='failed', action="store_true", default=False)
2571 default_logger_file = os.path.dirname(__file__)+'/'+os.path.splitext(os.path.basename(__file__))[0]+'.log'
2572 parent_parser.add_argument('--list-tests', help='List all available tests', dest='list_tests', action="store_true",
2573 default=False)
2574 parent_parser.add_argument('--logger_file', dest='logger_file', default=default_logger_file,
2575 help='Set the logger file. By default '+default_logger_file)
2576 parent_parser.add_argument("-t", '--tenant', dest='tenant_name', default="osm",
2577 help="Set the openmano tenant to use for the test. By default 'osm'")
2578 parent_parser.add_argument('--debug', help='Set logs to debug level', dest='debug', action="store_true")
2579 parent_parser.add_argument('--timeout', help='Specify the instantiation timeout in seconds. By default 300',
2580 dest='timeout', type=int, default=300)
2581 parent_parser.add_argument('--test', '--tests', help='Specify the tests to run', dest='tests', action="append")
2582
2583 subparsers = parser.add_subparsers(help='test sets')
2584
2585 # Deployment test set
2586 # -------------------
2587 deploy_parser = subparsers.add_parser('deploy', parents=[parent_parser],
2588 help="test deployment using descriptors at RO_test folder ")
2589 deploy_parser.set_defaults(func=test_deploy)
2590
2591 # Mandatory arguments
2592 mandatory_arguments = deploy_parser.add_argument_group('mandatory arguments')
2593 mandatory_arguments.add_argument('-d', '--datacenter', required=True, help='Set the datacenter to test')
2594 mandatory_arguments.add_argument("-i", '--image-name', required=True, dest="image_name",
2595 help='Image name available at datacenter used for the tests')
2596 mandatory_arguments.add_argument("-n", '--mgmt-net-name', required=True, dest='mgmt_net',
2597 help='Set the vim management network to use for tests')
2598
2599 # Optional arguments
2600 deploy_parser.add_argument('-m', '--manual-check', dest='manual', action="store_true", default=False,
2601 help='Pause execution once deployed to allow manual checking of the '
2602 'deployed instance scenario')
2603 deploy_parser.add_argument('-u', '--url', dest='endpoint_url', default='http://localhost:9090/openmano',
2604 help="Set the openmano server url. By default 'http://localhost:9090/openmano'")
2605
2606 # Vimconn test set
2607 # -------------------
2608 vimconn_parser = subparsers.add_parser('vimconn', parents=[parent_parser], help="test vimconnector plugin")
2609 vimconn_parser.set_defaults(func=test_vimconnector)
2610 # Mandatory arguments
2611 mandatory_arguments = vimconn_parser.add_argument_group('mandatory arguments')
jamartinezv14a823d2019-08-01 11:45:15 +02002612 mandatory_arguments.add_argument('--vimtype', choices=['vmware', 'aws', 'openstack', 'openvim','azure'], required=True,
tiernoec66e9a2017-05-17 15:28:10 +02002613 help='Set the vimconnector type to test')
kasar70532ae2017-05-26 03:53:52 -07002614 mandatory_arguments.add_argument('-c', '--config', dest='config_param', required=True,
2615 help='Set the vimconnector specific config parameters in dictionary format')
2616 mandatory_arguments.add_argument('-u', '--url', dest='endpoint_url',required=True, help="Set the vim connector url or Host IP")
tiernoec66e9a2017-05-17 15:28:10 +02002617 # Optional arguments
kasarfeaaa052017-06-08 03:46:18 -07002618 vimconn_parser.add_argument('-i', '--image-path', dest='image_path', help="Provide image path present at RO container")
kasarffdaf292017-06-23 04:06:52 -07002619 vimconn_parser.add_argument('-n', '--image-name', dest='image_name', help="Provide image name for test")
tiernoec66e9a2017-05-17 15:28:10 +02002620 # TODO add optional arguments for vimconn tests
2621 # vimconn_parser.add_argument("-i", '--image-name', dest='image_name', help='<HELP>'))
Ravi Chamarty59d24362018-11-22 01:22:16 +00002622 vimconn_parser.add_argument('-s', '--sriov-net-name', dest='sriov_net_name', help="Provide SRIOV network name for test")
tiernoec66e9a2017-05-17 15:28:10 +02002623
2624 # Datacenter test set
2625 # -------------------
2626 vimconn_parser = subparsers.add_parser('vim', parents=[parent_parser], help="test vim")
2627 vimconn_parser.set_defaults(func=test_vim)
2628
2629 # Mandatory arguments
2630 mandatory_arguments = vimconn_parser.add_argument_group('mandatory arguments')
2631 mandatory_arguments.add_argument('-d', '--datacenter', required=True, help='Set the datacenter to test')
2632
2633 # Optional arguments
2634 vimconn_parser.add_argument('-u', '--url', dest='endpoint_url', default='http://localhost:9090/openmano',
2635 help="Set the openmano server url. By default 'http://localhost:9090/openmano'")
2636
Anderson Bravalheri0446cd52018-08-17 15:26:19 +01002637 # WIM test set
2638 # -------------------
2639 vimconn_parser = subparsers.add_parser('wim', parents=[parent_parser], help="test wim")
2640 vimconn_parser.set_defaults(func=test_wim)
2641
2642 # Mandatory arguments
2643 mandatory_arguments = vimconn_parser.add_argument_group('mandatory arguments')
2644 mandatory_arguments.add_argument('-d', '--datacenter', required=True, help='Set the datacenter to test')
2645
2646 # Optional arguments
2647 vimconn_parser.add_argument('-u', '--url', dest='endpoint_url', default='http://localhost:9090/openmano',
2648 help="Set the openmano server url. By default 'http://localhost:9090/openmano'")
2649
tiernoec66e9a2017-05-17 15:28:10 +02002650 argcomplete.autocomplete(parser)
2651 args = parser.parse_args()
2652 # print str(args)
2653 test_config = {}
2654
2655 # default logger level is INFO. Options --debug and --failed override this, being --debug prioritary
2656 logger_level = 'INFO'
2657 if args.debug:
2658 logger_level = 'DEBUG'
2659 elif args.failed:
2660 logger_level = 'WARNING'
2661 logger_name = os.path.basename(__file__)
2662 test_config["logger_name"] = logger_name
2663 logger = logging.getLogger(logger_name)
2664 logger.setLevel(logger_level)
2665 failfast = args.failfast
2666
2667 # Configure a logging handler to store in a logging file
2668 if args.logger_file:
2669 fileHandler = logging.FileHandler(args.logger_file)
2670 formatter_fileHandler = logging.Formatter('%(asctime)s %(name)s %(levelname)s: %(message)s')
2671 fileHandler.setFormatter(formatter_fileHandler)
2672 logger.addHandler(fileHandler)
2673
2674 # Configure a handler to print to stdout
2675 consoleHandler = logging.StreamHandler(sys.stdout)
2676 formatter_consoleHandler = logging.Formatter('%(asctime)s %(name)s %(levelname)s: %(message)s')
2677 consoleHandler.setFormatter(formatter_consoleHandler)
2678 logger.addHandler(consoleHandler)
2679
2680 logger.debug('Program started with the following arguments: ' + str(args))
2681
2682 # set test config parameters
2683 test_config["timeout"] = args.timeout
2684 test_config["test_number"] = 1
2685
2686 executed, failed = args.func(args)
2687
tierno0e6fcaa2017-05-05 15:54:07 +02002688 # Log summary
Pablo Montes Morenoeebea062017-02-27 12:33:10 +01002689 logger.warning("Total number of tests: {}; Total number of failures/errors: {}".format(executed, failed))
tierno0e6fcaa2017-05-05 15:54:07 +02002690 sys.exit(1 if failed else 0)