summaryrefslogtreecommitdiffstats
path: root/snaps/openstack/tests/os_source_file_test.py
diff options
context:
space:
mode:
Diffstat (limited to 'snaps/openstack/tests/os_source_file_test.py')
-rw-r--r--snaps/openstack/tests/os_source_file_test.py109
1 files changed, 75 insertions, 34 deletions
diff --git a/snaps/openstack/tests/os_source_file_test.py b/snaps/openstack/tests/os_source_file_test.py
index 1617f91..8b0a7b4 100644
--- a/snaps/openstack/tests/os_source_file_test.py
+++ b/snaps/openstack/tests/os_source_file_test.py
@@ -14,14 +14,12 @@
# limitations under the License.
import logging
import pkg_resources
-import requests
-from requests.packages.urllib3.exceptions import InsecureRequestWarning
import uuid
import unittest
from snaps import file_utils
-from snaps.openstack.create_project import ProjectSettings
-from snaps.openstack.create_user import UserSettings
+from snaps.config.project import ProjectConfig
+from snaps.config.user import UserConfig
from snaps.openstack.tests import openstack_tests
from snaps.openstack.utils import deploy_utils, keystone_utils
@@ -29,13 +27,12 @@ from snaps.openstack.utils import deploy_utils, keystone_utils
dev_os_env_file = pkg_resources.resource_filename(
'snaps.openstack.tests.conf', 'os_env.yaml')
-requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
-
class OSComponentTestCase(unittest.TestCase):
def __init__(self, method_name='runTest', os_creds=None, ext_net_name=None,
- image_metadata=None, log_level=logging.DEBUG):
+ flavor_metadata=None, image_metadata=None,
+ log_level=logging.DEBUG):
"""
Super for test classes requiring a connection to OpenStack
:param method_name: default 'runTest'
@@ -43,6 +40,8 @@ class OSComponentTestCase(unittest.TestCase):
in the package snaps.openstack.tests.conf.os_env.yaml
:param ext_net_name: the name of the external network that is used for
creating routers for floating IPs
+ :param flavor_metadata: dict() to be sent directly into the Nova client
+ generally used for page sizes
:param image_metadata: ability to override images being used in the
tests (see examples/image-metadata)
:param log_level: the logging level of your test run (default DEBUG)
@@ -51,23 +50,36 @@ class OSComponentTestCase(unittest.TestCase):
logging.basicConfig(level=log_level)
+ self.ext_net_name = None
+ self.flavor_metadata = None
+
if os_creds:
self.os_creds = os_creds
else:
- self.os_creds = openstack_tests.get_credentials(
- dev_os_env_file=dev_os_env_file)
-
- self.ext_net_name = ext_net_name
-
- if not self.ext_net_name and file_utils.file_exists(dev_os_env_file):
- test_conf = file_utils.read_yaml(dev_os_env_file)
- self.ext_net_name = test_conf.get('ext_net')
+ if file_utils.file_exists(dev_os_env_file):
+ self.os_creds = openstack_tests.get_credentials(
+ dev_os_env_file=dev_os_env_file)
+ test_conf = file_utils.read_yaml(dev_os_env_file)
+ self.ext_net_name = test_conf.get('ext_net')
+ os_env_dict = file_utils.read_yaml(dev_os_env_file)
+ flavor_metadata = os_env_dict.get('flavor_metadata')
+ if flavor_metadata:
+ self.flavor_metadata = {'metadata': flavor_metadata}
+ else:
+ raise Exception('Unable to obtain OSCreds')
+
+ self.os_session = keystone_utils.keystone_session(self.os_creds)
self.image_metadata = image_metadata
+ if not self.ext_net_name:
+ self.ext_net_name = ext_net_name
+ if not self.flavor_metadata:
+ self.flavor_metadata = flavor_metadata
@staticmethod
def parameterize(testcase_klass, os_creds, ext_net_name,
- image_metadata=None, log_level=logging.DEBUG):
+ flavor_metadata=None, image_metadata=None,
+ log_level=logging.DEBUG):
""" Create a suite containing all tests taken from the given
subclass, passing them the parameter 'param'.
"""
@@ -75,16 +87,24 @@ class OSComponentTestCase(unittest.TestCase):
test_names = test_loader.getTestCaseNames(testcase_klass)
suite = unittest.TestSuite()
for name in test_names:
- suite.addTest(testcase_klass(name, os_creds, ext_net_name,
- image_metadata, log_level))
+ suite.addTest(testcase_klass(
+ name, os_creds, ext_net_name, flavor_metadata, image_metadata,
+ log_level))
return suite
+ def __clean__(self):
+ """
+ Cleans up keystone session.
+ """
+ if self.os_session:
+ keystone_utils.close_session(self.os_session)
+
class OSIntegrationTestCase(OSComponentTestCase):
def __init__(self, method_name='runTest', os_creds=None, ext_net_name=None,
use_keystone=True, flavor_metadata=None, image_metadata=None,
- log_level=logging.DEBUG):
+ netconf_override=None, log_level=logging.DEBUG):
"""
Super for integration tests requiring a connection to OpenStack
:param method_name: default 'runTest'
@@ -102,20 +122,25 @@ class OSIntegrationTestCase(OSComponentTestCase):
'ramdisk_url': '{URI}/cirros-0.3.4-x86_64-initramfs'})
:param flavor_metadata: dict() to be sent directly into the Nova client
generally used for page sizes
+ :param netconf_override: dict() containing the configured network_type,
+ physical_network and segmentation_id
:param log_level: the logging level of your test run (default DEBUG)
"""
super(OSIntegrationTestCase, self).__init__(
method_name=method_name, os_creds=os_creds,
- ext_net_name=ext_net_name, image_metadata=image_metadata,
- log_level=log_level)
+ ext_net_name=ext_net_name, flavor_metadata=flavor_metadata,
+ image_metadata=image_metadata, log_level=log_level)
+ self.netconf_override = netconf_override
self.use_keystone = use_keystone
self.keystone = None
- self.flavor_metadata = flavor_metadata
+ self.user_roles = None
+ self.proj_users = None
@staticmethod
def parameterize(testcase_klass, os_creds, ext_net_name,
- use_keystone=False, flavor_metadata=None,
- image_metadata=None, log_level=logging.DEBUG):
+ use_keystone=True, flavor_metadata=None,
+ image_metadata=None, netconf_override=None,
+ log_level=logging.DEBUG):
"""
Create a suite containing all tests taken from the given
subclass, passing them the parameter 'param'.
@@ -126,7 +151,8 @@ class OSIntegrationTestCase(OSComponentTestCase):
for name in test_names:
suite.addTest(testcase_klass(name, os_creds, ext_net_name,
use_keystone, flavor_metadata,
- image_metadata, log_level))
+ image_metadata, netconf_override,
+ log_level))
return suite
"""
@@ -142,30 +168,43 @@ class OSIntegrationTestCase(OSComponentTestCase):
self.project_creator = None
self.user_creator = None
self.admin_os_creds = self.os_creds
- self.role = None
+ self.admin_os_session = self.os_session
+ self.keystone = keystone_utils.keystone_client(
+ self.admin_os_creds, self.admin_os_session)
if self.use_keystone:
- self.keystone = keystone_utils.keystone_client(self.admin_os_creds)
guid = self.__class__.__name__ + '-' + str(uuid.uuid4())[:-19]
project_name = guid + '-proj'
self.project_creator = deploy_utils.create_project(
- self.admin_os_creds, ProjectSettings(
+ self.admin_os_creds, ProjectConfig(
name=project_name,
domain=self.admin_os_creds.project_domain_name))
+ # Set by implementing class for setting the user's roles
+ roles = dict()
+ if self.user_roles and isinstance(self.user_roles, list):
+ for user_role in self.user_roles:
+ roles[user_role] = project_name
+
self.user_creator = deploy_utils.create_user(
- self.admin_os_creds, UserSettings(
+ self.admin_os_creds, UserConfig(
name=guid + '-user', password=guid,
- project_name=project_name, roles={
- 'admin': self.project_creator.project_settings.name},
+ project_name=project_name, roles=roles,
domain_name=self.admin_os_creds.user_domain_name))
self.os_creds = self.user_creator.get_os_creds(
self.project_creator.project_settings.name)
+ self.os_session = keystone_utils.keystone_session(self.os_creds)
# add user to project
self.project_creator.assoc_user(self.user_creator.get_user())
+ if self.proj_users and isinstance(self.proj_users, list):
+ for user_name in self.proj_users:
+ user = keystone_utils.get_user(self.keystone, user_name)
+ if user:
+ self.project_creator.assoc_user(user)
+
def __clean__(self):
"""
Cleans up test user and project.
@@ -173,11 +212,13 @@ class OSIntegrationTestCase(OSComponentTestCase):
called during setUp() else these objects will persist after the test is
run
"""
- if self.role:
- keystone_utils.delete_role(self.keystone, self.role)
-
if self.project_creator:
self.project_creator.clean()
if self.user_creator:
self.user_creator.clean()
+
+ if self.admin_os_session:
+ keystone_utils.close_session(self.admin_os_session)
+
+ super(OSIntegrationTestCase, self).__clean__()