3 # Copyright (c) 2017 Cable Television Laboratories, Inc. and others.
5 # This program and the accompanying materials
6 # are made available under the terms of the Apache License, Version 2.0
7 # which accompanies this distribution, and is available at
9 # http://www.apache.org/licenses/LICENSE-2.0
11 """configuration params to run snaps tests"""
16 import os_client_config
18 from xtesting.core import unit
20 from functest.core import tenantnetwork
21 from functest.opnfv_tests.openstack.snaps import snaps_utils
22 from functest.utils import config
23 from functest.utils import functest_utils
26 class SnapsTestRunner(unit.Suite):
27 # pylint: disable=too-many-instance-attributes
29 This test executes the SNAPS Python Tests
32 def __init__(self, **kwargs):
33 super(SnapsTestRunner, self).__init__(**kwargs)
34 self.logger = logging.getLogger(__name__)
37 cloud_config = os_client_config.get_config()
38 self.orig_cloud = shade.OpenStackCloud(cloud_config=cloud_config)
39 guid = str(uuid.uuid4())
40 self.project = tenantnetwork.NewProject(
41 self.orig_cloud, self.case_name, guid)
43 except Exception: # pylint: disable=broad-except
44 raise Exception("Cannot create user or project")
46 if self.orig_cloud.get_role("admin"):
48 elif self.orig_cloud.get_role("Admin"):
51 raise Exception("Cannot detect neither admin nor Admin")
52 self.orig_cloud.grant_role(
53 role_name, user=self.project.user.id,
54 project=self.project.project.id,
55 domain=self.project.domain.id)
57 if not self.orig_cloud.get_role("heat_stack_owner"):
58 self.role = self.orig_cloud.create_role("heat_stack_owner")
59 self.orig_cloud.grant_role(
60 "heat_stack_owner", user=self.project.user.id,
61 project=self.project.project.id,
62 domain=self.project.domain.id)
63 creds_overrides = dict(
64 username=self.project.user.name,
65 project_name=self.project.project.name,
66 project_id=self.project.project.id,
67 password=self.project.password)
68 self.os_creds = kwargs.get('os_creds') or snaps_utils.get_credentials(
69 overrides=creds_overrides)
70 if 'ext_net_name' in kwargs:
71 self.ext_net_name = kwargs['ext_net_name']
73 self.ext_net_name = snaps_utils.get_ext_net_name(self.os_creds)
75 self.netconf_override = None
76 if hasattr(config.CONF, 'snaps_network_config'):
77 self.netconf_override = getattr(
78 config.CONF, 'snaps_network_config')
81 getattr(config.CONF, 'snaps_use_floating_ips') == 'True')
83 getattr(config.CONF, 'snaps_use_keystone') == 'True')
85 self.flavor_metadata = getattr(config.CONF, 'snaps_flavor_extra_specs',
87 self.logger.info("Using flavor metadata '%s'", self.flavor_metadata)
89 self.image_metadata = None
90 if hasattr(config.CONF, 'snaps_images'):
91 self.image_metadata = getattr(config.CONF, 'snaps_images')
94 """Cleanup of OpenStack resources. Should be called on completion."""
96 super(SnapsTestRunner, self).clean()
97 assert self.orig_cloud
100 self.orig_cloud.delete_role(self.role.id)
102 except Exception: # pylint: disable=broad-except
103 self.__logger.exception("Cannot clean all resources")
105 def check_requirements(self):
106 """Skip if OpenStack Rocky or newer."""
108 cloud_config = os_client_config.get_config()
109 cloud = shade.OpenStackCloud(cloud_config=cloud_config)
110 if functest_utils.get_nova_version(cloud) > (2, 60):
111 self.is_skipped = True
112 except Exception: # pylint: disable=broad-except