"""Module containing action to create a nova server.""" from roletester.log import logging logger = logging.getLogger('roletester.actions.neutron.network') def create(clients, context, name='test network', project_id=None): """Create a network Sets context['network_id'] :param clients: Client Manager :type clients: roletester.clients.ClientManager :param context: Pass by reference object :type context: Dict :param name: Name of the new network :type name: String :param project_id: Optional id of another tenant/project :type project_id: String """ logger.info("Taking action network.create {}.".format(name)) neutron = clients.get_neutron() body = {"network": {"name": name}} if project_id is not None: body['network']['tenant_id'] = project_id resp = neutron.create_network(body=body) network = resp['network'] context['network_id'] = network['id'] context.setdefault('stack', []).append({'network_id': network['id']})
"""Module containing actions to manage keystone projects.""" from roletester.log import logging logger = logging.getLogger('roletester.actions.keystone.project') def create(clients, context, name="test_project", domain='Default'): """Create a new keystone project Sets context['project'] :param clients: Client Manager :type clients: roletester.clients.ClientManager :param context: Pass by reference object :type context: Dict :param name: Name for the new project :type name: String :param domain: The domain in which to create the project :type domain: String """ logger.info("Taking action project.create {}.".format(name)) keystone = clients.get_keystone() project = keystone.projects.create(name, domain) context.update({'project': project}) def delete(clients, context): """Delete an existing keystone project Uses context['project']
from roletester.actions.nova import server_create from roletester.actions.nova import server_wait_for_status # from roletester.exc import CinderUnauthorized from roletester.exc import KeystoneUnauthorized from roletester.exc import CinderForbidden from roletester.exc import GlanceForbidden from roletester.scenario import ScenarioFactory as Factory from roletester.utils import randomname from roletester.actions.neutron import network_create from roletester.actions.neutron import port_create from roletester.actions.neutron import subnet_create from roletester.log import logging logger = logging.getLogger("roletester.cinder") class SampleFactory(Factory): _ACTIONS = [ network_create, subnet_create, volume_create, volume_wait_for_status, volume_show, volume_update, volume_create_image, image_wait_for_status, image_create, image_wait_for_status,
"""Module containing action to create a nova server.""" from roletester.log import logging logger = logging.getLogger('roletester.actions.neutron.subnet') def create(clients, context, name="test_subnet", ip_version=4, cidr="11.10.10.0/24"): """Create a subnet Uses context['network_id'] Sets context['subnet_id'] :param clients: Client Manager :type clients: roletester.clients.ClientManager :param context: Pass by reference object :type context: Dict :param name: Name of the new subnet :type name: String :param ipversion: IPVersion of the subnet :type iperverion: String|Integer :param cidr: Cidr of the subnet :type cidr: String """ network_id = context['network_id'] logger.info("Taking action subnet.create {}.".format(name)) neutron = clients.get_neutron() body = { "subnet": {
import unittest from roletester.garbage import Collector as GC from roletester.keystone_manager import KeystoneManager as KM from roletester.log import logging logger = logging.getLogger('roletester.base') class Base(unittest.TestCase): """Base test class. Actual role test classes should subclass this this test class. """ def setUp(self): """Called before each test method.""" # Pass this context to scenraio.run() self.context = {} # Keystone manage - use this for test credentials self.km = KM() # Set up the garbage collector # admin = self.km.find_user_credentials('Default', 'admin', 'admin') print "Garbage user:"******"""Called after each test method."""
from base import Base as BaseTestCase from roletester.actions.glance import image_create from roletester.actions.glance import image_show from roletester.actions.glance import image_update from roletester.actions.glance import image_delete from roletester.actions.glance import image_wait_for_status from roletester.exc import KeystoneUnauthorized from roletester.scenario import ScenarioFactory as Factory from roletester.utils import randomname from roletester.log import logging logger = logging.getLogger("roletester.glance") class SampleFactory(Factory): _ACTIONS = [ image_create, image_wait_for_status, image_show, image_update, image_delete ] IMAGE_CREATE = 0 IMAGE_WAIT = 1 IMAGE_SHOW = 2 IMAGE_UPDATE = 3 IMAGE_DELETE = 4
"""Module containing actions to manage swift objects.""" from roletester.log import logging import copy logger = logging.getLogger('roletester.actions.swift.swift_object') def put(clients, context, obj_name="test_object", obj_contents=""): """Create an object in a container Uses context['container_name'] Sets context['object_name'] :param clients: Client Manager :type clients: roletester.clients.ClientManager :param context: Pass by reference object :type context: Dict :param obj_name: Name of the object to create. :type obj_name: String :param obj_contents: Contents of the object to create. :type obj_contents: String """ container = context['container_name'] logger.info("Taking action object.create {}.".format(obj_name)) swift = clients.get_swift() swift.put_object(container, obj_name, obj_contents) context.update({"object_name": obj_name}) context.setdefault('stack', []).append({
"""Module containing actions to manage swift containers.""" from roletester.log import logging import copy logger = logging.getLogger('roletester.actions.swift.swift_container') def create(clients, context, name="test_container"): """Create a container Sets context['container_name'] :param clients: Client Manager :type clients: roletester.clients.ClientManager :param context: Pass by reference object :type context: Dict :param name: Name of the new container :type name: String """ logger.info("Taking action container.create {}.".format(name)) swift = clients.get_swift() swift.put_container(name) context.update({'container_name': name}) context.setdefault('stack', []).append({'container_name': name}) def delete(clients, context): """Deletes a container. Uses context['container_name']
from roletester.log import logging logger = logging.getLogger('roletester.actions.nova.volume') def attach(clients, context): """Creates an interface for a server and port. Uses context['server_id'] Uses context['port_id'] :param clients: Client manager :type clients: roletester.clients.ClientManager :param context: Pass by reference object :type context: Dict """ port_id = context['port_id'] server_id = context['server_id'] logger.info("Taking action interface.attach") nova = clients.get_nova() nova.servers.interface_attach(server_id, port_id, None, None) def detach(clients, context): """Detaches a an interface for server and port. Uses context['server_id'] Uses context['port_id'] :param clients: Client manager
"""Module containing actions to manage swift containers.""" from roletester.log import logging from roletester.swift_error_decorator import swift_error import copy logger = logging.getLogger('roletester.actions.swift.swift_container') @swift_error def create(clients, context, name="test_container"): """Create a container Sets context['container_name'] :param clients: Client Manager :type clients: roletester.clients.ClientManager :param context: Pass by reference object :type context: Dict :param name: Name of the new container :type name: String """ logger.info("Taking action container.create {}.".format(name)) swift = clients.get_swift() swift.put_container(name) context.update({'container_name': name}) context.setdefault('stack', []).append({'container_name': name}) @swift_error def delete(clients, context): """Deletes a container.
from roletester.actions.cinder import volume_wait_for_status from roletester.actions.nova import server_create from roletester.actions.nova import server_wait_for_status # from roletester.exc import CinderUnauthorized from roletester.exc import KeystoneUnauthorized from roletester.exc import CinderForbidden from roletester.exc import GlanceForbidden from roletester.scenario import ScenarioFactory as Factory from roletester.utils import randomname from roletester.actions.neutron import network_create from roletester.actions.neutron import port_create from roletester.actions.neutron import subnet_create from roletester.log import logging logger = logging.getLogger("roletester.cinder") class SampleFactory(Factory): _ACTIONS = [ network_create, subnet_create, volume_create, volume_wait_for_status, volume_show, volume_update, volume_create_image, image_wait_for_status, image_create, image_wait_for_status, server_create, server_wait_for_status, volume_attach, volume_detach, volume_delete, image_delete ] NETWORK_CREATE = 0 SUBNET_CREATE = 1 VOLUME_CREATE = 2
from base import Base as BaseTestCase from roletester.actions.nova import server_create from roletester.actions.nova import server_delete from roletester.actions.nova import server_show from roletester.actions.nova import server_wait_for_status from roletester.exc import NovaNotFound from roletester.scenario import ScenarioFactory as Factory from roletester.log import logging logger = logging.getLogger("roletester.test_sample") class SampleFactory(Factory): _ACTIONS = [ server_create, server_wait_for_status, server_show, server_delete ] CREATE = 0 WAIT = 1 SHOW = 2 DELETE = 3 class TestSample(BaseTestCase):
"""Module containing actions to manage keystone roles.""" from roletester.log import logging logger = logging.getLogger('roletester.actions.keystone.role') def _get_role_uuid_by_name(keystone, name): """Gets a role UUID when provided a role name. :param keystone: keystone client :type clients: roletester.clients.ClientManager :param name: The name of the role whos UUID should be returned :type name: String :returns: role UUID :rtype: String """ role_UUID = None roles_list = keystone.roles.list() for role in roles_list: if role.name == name: role_UUID = role.id break if role_UUID is None: raise NameError('Specified role name not found') else: return role_UUID
"""Module containing action to create a nova server.""" from roletester.log import logging logger = logging.getLogger('roletester.actions.neutron.router') def add_interface(clients, context): """Adds a router interface to a subnet Uses context['subnet_id'] Uses context['router_id'] Sets context['router_subnet_mdx'] :param clients: Client Manager :type clients: roletester.clients.ClientManager :param context: Pass by reference object :type context: Dict """ router_id = context['router_id'] subnet_id = context['subnet_id'] logger.info("Taking action router.add_interface {}".format(router_id)) neutron = clients.get_neutron() body = { "subnet_id": subnet_id } neutron.add_interface_router(router_id, body=body) context['router_subnet_mdx'] = '|'.join([router_id, subnet_id]) context_stack_entry = {'router_subnet_mdx': context['router_subnet_mdx']} context.setdefault('stack', []).append(context_stack_entry)
"""Module containing actions to manage swift objects.""" from roletester.log import logging import copy logger = logging.getLogger('roletester.actions.swift.swift_object') def put(clients, context, obj_name="test_object", obj_contents=""): """Create an object in a container Uses context['container_name'] Sets context['object_name'] :param clients: Client Manager :type clients: roletester.clients.ClientManager :param context: Pass by reference object :type context: Dict :param obj_name: Name of the object to create. :type obj_name: String :param obj_contents: Contents of the object to create. :type obj_contents: String """ container = context['container_name'] logger.info("Taking action object.create {}.".format(obj_name)) swift = clients.get_swift() swift.put_object(container, obj_name, obj_contents) context.update({"object_name": obj_name}) context.setdefault('stack', []).append({
import time from roletester.exc import GlanceNotFound from roletester.log import logging logger = logging.getLogger('roletester.actions.glance.image') def create(clients, context, image_file, visibility='private', name="glance test image", disk_format='qcow2', container_format='bare'): """Creates a glance image. Uses context['image_id'] :param clients: Client manager :type clients: roletester.clients.ClientManager :param context: Pass by reference context object. :type context: Dict :param image_file: File path to image file you are uploading :type image_file: String :param visibility: Sets image availability. public | private :type visibility: Boolean :param name: Image name :type name: String :param disk_format: Glance disk file format :type disk_format: String :param container_format: Image container format
from base import Base as BaseTestCase from roletester.actions.swift import swift_container_create from roletester.actions.swift import swift_container_delete from roletester.actions.swift import swift_container_add_metadata from roletester.actions.swift import swift_object_put from roletester.actions.swift import swift_object_delete from roletester.actions.swift import swift_object_get from roletester.exc import SwiftClientException from roletester.scenario import ScenarioFactory as Factory from roletester.utils import randomname from roletester.exc import SwiftForbidden from roletester.log import logging logger = logging.getLogger("roletester.glance") class SampleFactory(Factory): _ACTIONS = [ swift_container_create, swift_container_add_metadata, swift_object_put, swift_object_get, swift_object_delete, swift_container_delete ] SWIFT_CONTAINER_CREATE = 0 SWIFT_CONTAINER_ADD_METADATA = 1
import unittest from roletester.garbage import Collector as GC from roletester.keystone_manager import KeystoneManager as KM from roletester.log import logging logger = logging.getLogger('roletester.base') class Base(unittest.TestCase): """Base test class. Actual role test classes should subclass this this test class. """ def setUp(self): """Called before each test method.""" # Pass this context to scenraio.run() self.context = {} # Keystone manage - use this for test credentials self.km = KM() # Set up the garbage collector # admin = self.km.find_user_credentials('Default', 'admin', 'admin') print "Garbage user:"******"""Called after each test method."""
from roletester.actions.neutron import security_group_delete from roletester.actions.neutron import security_group_rule_delete from roletester.actions.neutron import floatingip_associate from roletester.actions.neutron import floatingip_create from roletester.actions.neutron import floatingip_delete from roletester.actions.neutron import floatingip_disassociate from roletester.actions.neutron import floatingip_show from roletester.actions.neutron import port_create from roletester.exc import KeystoneUnauthorized from neutronclient.common.exceptions import NetworkNotFoundClient from roletester.scenario import ScenarioFactory as Factory from roletester.utils import randomname from roletester.log import logging logger = logging.getLogger("roletester.neutron") class SampleFactory(Factory): _ACTIONS = [ image_create, image_wait_for_status, network_create, network_show, subnet_create, subnet_show, server_create, server_wait_for_status, security_group_create, security_group_show,
from roletester.actions.nova import server_show from roletester.actions.nova import server_create_image from roletester.actions.nova import server_wait_for_status from roletester.actions.neutron import network_create from roletester.actions.neutron import port_create from roletester.actions.neutron import subnet_create from roletester.exc import KeystoneUnauthorized from roletester.exc import NeutronNotFound from roletester.exc import NovaForbidden from roletester.exc import GlanceForbidden from roletester.scenario import ScenarioFactory as Factory from roletester.utils import randomname from roletester.log import logging logger = logging.getLogger("roletester.nova") class SampleFactory(Factory): _ACTIONS = [ network_create, subnet_create, server_create, port_create, server_wait_for_status, server_show, interface_attach, interface_detach, server_update, server_create_image,
import pprint from roletester.log import logging logger = logging.getLogger('roletester.scenario') class ExpectedException(Exception): def __init__(self, expected_exceptions): msg = 'Was expecting one of {} to be raised and none were raised.' \ .format(', '.join([str(e) for e in expected_exceptions])) super(ExpectedException, self).__init__(msg) class Scenario(list): def chain(self, action, clients, *args, **kwargs): """Add an action to the list of actions in a scenario. :param action: Action to take :type action: Function :param clients: Client manager :type clients: roletester.clients.ClientManager :param context: Context of the scenario. An object that is passed by reference and altered throughout the scenario. :type context: Dict | None :param expected_exceptions: List of expected exceptions :type expected_exceptions: List """ expected_exceptions = None if 'expected_exceptions' in kwargs: expected_exceptions = kwargs.pop('expected_exceptions')
"""Module containing action to create a nova server.""" from roletester.log import logging logger = logging.getLogger('roletester.actions.neutron.security_group_rule') def create(clients, context, direction='ingress', ethertype='IPv4', protocol='tcp', port_range_min=80, port_range_max=80): """Create a security group. Uses context['security_group_id'] Sets context['security_group_rule_id'] :param clients: Client manager :type clients: roletester.clients.ClientManager :param context: Pass by reference object :type context: Dict :param direction: Security group rule direction :type direction: String :param ethertype: Ethertype :type ethertype: String :param protocol: Protocol :type protocol: String :param port_range_min: Beginning of port range :type port_range_min: Integer :param port_range_max: End of port range
import time from roletester.exc import NovaNotFound from roletester.log import logging logger = logging.getLogger('roletester.actions.nova.server') def create(clients, context, name, flavor, image): """Creates server with random image and flavor. Sets context['server_id'] :param clients: Client manager :type clients: roletester.clients.ClientManager :param context: Pass by reference object :type context: Dict :param name: Server name :type name : String :param flavor: Flavor id :type flavor: Integer :param image: Image id :type image: String """ logger.info("Taking action create") nova = clients.get_nova() flavor = nova.flavors.get(flavor) server = nova.servers.create(name, image, flavor) context.update({'server_id': server.id}) context.setdefault('stack', []).append({'server_id': server.id}) logger.info("Created server {}".format(name))
"""Module containing action to create a nova server.""" from roletester.log import logging logger = logging.getLogger('roletester.actions.neutron.port') def create(clients, context, name='test port'): """Create a port Uses context['network_id'] Sets context['port_id'] :param clients: Client Manager :type clients: roletester.clients.ClientManager :param context: Pass by reference object :type context: Dict :param name: Name of the new port :type name: String """ network_id = context['network_id'] logger.info("Taking action port.create_for_server{}.".format(name)) neutron = clients.get_neutron() body = {"port": {"network_id": network_id, "name": name}} resp = neutron.create_port(body=body) port = resp['port'] context['port_id'] = port['id'] context.setdefault('stack', []).append({'port_id': port['id']}) def delete(clients, context): """Deletes a port.
"""Module containing action to create a nova server.""" from roletester.log import logging logger = logging.getLogger('roletester.actions.neutron.port') def create(clients, context, name='test port'): """Create a port Uses context['network_id'] Sets context['port_id'] :param clients: Client Manager :type clients: roletester.clients.ClientManager :param context: Pass by reference object :type context: Dict :param name: Name of the new port :type name: String """ network_id = context['network_id'] logger.info("Taking action port.create_for_server{}.".format(name)) neutron = clients.get_neutron() body = { "port": { "network_id": network_id, "name": name } } resp = neutron.create_port(body=body) port = resp['port'] context['port_id'] = port['id']
from roletester.actions.nova import server_create from roletester.actions.nova import server_update from roletester.actions.nova import server_delete from roletester.actions.nova import server_show from roletester.actions.nova import server_create_image from roletester.actions.nova import server_wait_for_status from roletester.actions.neutron import network_create from roletester.actions.neutron import port_create from roletester.actions.neutron import subnet_create from roletester.exc import KeystoneUnauthorized from roletester.scenario import ScenarioFactory as Factory from roletester.utils import randomname from roletester.log import logging logger = logging.getLogger("roletester.nova") class SampleFactory(Factory): _ACTIONS = [ image_create, image_wait_for_status, server_create, server_wait_for_status, server_show, server_update, server_create_image, image_wait_for_status, image_delete, network_create,
"""Module containing actions to manage keystone roles.""" from roletester.log import logging logger = logging.getLogger('roletester.actions.keystone.role') def _get_role_uuid_by_name(keystone, name): """Gets a role UUID when provided a role name. :param keystone: keystone client :type clients: roletester.clients.ClientManager :param name: The name of the role whos UUID should be returned :type name: String :returns: role UUID :rtype: String """ role_UUID = None roles_list = keystone.roles.list() for role in roles_list: if role.name == name: role_UUID = role.id break if role_UUID is None: raise NameError('Specified role name not found') else: return role_UUID
import time import os from roletester.exc import GlanceNotFound from roletester.log import logging logger = logging.getLogger('roletester.actions.glance.image') def create(clients, context, image_file, visibility='public', name="glance test image", disk_format='qcow2', container_format='bare'): """Creates a glance image. Uses context['image_id'] :param clients: Client manager :type clients: roletester.clients.ClientManager :param context: Pass by reference context object. :type context: Dict :param image_file: File path to image file you are uploading :type image_file: String :param visibility: Sets image availability. public | private :type visibility: Boolean :param name: Image name :type name: String :param disk_format: Glance disk file format :type disk_format: String
"""Module containing action to create a nova server.""" from roletester.log import logging logger = logging.getLogger('roletester.actions.neutron.floatingip') def associate(clients, context): """Assocuate a floating ip with a port. Uses context['floatingip_id'] Uses context['port_id'] :param clients: Client Manager :type clients: roletester.clients.ClientManager :param context: Pass by reference object :type context: Dict """ floatingip_id = context['floatingip_id'] port_id = context['port_id'] logger.info('Taking action floatingip.associate') neutron = clients.get_neutron() body = { 'floatingip': { 'port_id': port_id } } neutron.update_floatingip(floatingip_id, body=body) def create(clients, context): """Create a floatingip
import pprint from roletester.log import logging logger = logging.getLogger('roletester.scenario') class ExpectedException(Exception): def __init__(self, expected_exceptions): msg = 'Was expecting one of {} to be raised and none were raised.' \ .format(', '.join([str(e) for e in expected_exceptions])) super(ExpectedException, self).__init__(msg) class Scenario(list): def chain(self, action, clients, *args, **kwargs): """Add an action to the list of actions in a scenario. :param action: Action to take :type action: Function :param clients: Client manager :type clients: roletester.clients.ClientManager :param context: Context of the scenario. An object that is passed by reference and altered throughout the scenario. :type context: Dict | None :param expected_exceptions: List of expected exceptions :type expected_exceptions: List """ expected_exceptions = None if 'expected_exceptions' in kwargs: expected_exceptions = kwargs.pop('expected_exceptions')
"""Module containing action to create a nova server.""" from roletester.log import logging logger = logging.getLogger('roletester.actions.neutron.network') def create(clients, context, name, project_id=None): """Create a network Sets context['network_id'] :param clients: Client Manager :type clients: roletester.clients.ClientManager :param context: Pass by reference object :type context: Dict :param name: Name of the new network :type name: String :param project_id: Optional id of another tenant/project :type project_id: String """ logger.info("Taking action network.create {}.".format(name)) neutron = clients.get_neutron() body = { "network": { "name": name } } if project_id is not None: body['network']['tenant_id'] = project_id resp = neutron.create_network(body=body)
import time from roletester.exc import NovaNotFound from roletester.log import logging logger = logging.getLogger('roletester.actions.nova.server') def create(clients, context, name='nova test instance', flavor=None, image=None): """Creates server with random image and flavor. Sets context['server_id'] :param clients: Client manager :type clients: roletester.clients.ClientManager :param context: Pass by reference object :type context: Dict :param name: Server name :type name : String :param flavor: Flavor id :type flavor: Integer :param image: Image id :type image: String """ nova = clients.get_nova() if flavor is None: flavor = nova.flavors.list()[0].id else:
"""Module containing action to create a nova server.""" from roletester.log import logging logger = logging.getLogger('roletester.actions.neutron.security_group_rule') def create(clients, context, direction='ingress', ethertype='IPv4', protocol='tcp', port_range_min=80, port_range_max=80): """Create a security group. Uses context['security_group_id'] Sets context['security_group_rule_id'] :param clients: Client manager :type clients: roletester.clients.ClientManager :param context: Pass by reference object :type context: Dict :param direction: Security group rule direction :type direction: String :param ethertype: Ethertype :type ethertype: String :param protocol: Protocol :type protocol: String :param port_range_min: Beginning of port range :type port_range_min: Integer :param port_range_max: End of port range :type port_range_max: Integer
import time import utils from roletester.exc import CinderNotFound from roletester.log import logging logger = logging.getLogger('roletester.actions.cinder.volume') def create(clients, context, size=1): """Creates cinder volume. :param clients: Client manager :type clients: roletester.clients.ClientManager :param context: Pass by reference object :type context: Dict :param size: Volume size in GB :type size: int """ logger.info("Taking action create") cinder = clients.get_cinder() name = utils.randomname(prefix='random-volume') meta = {'app': 'roletester'} volume = cinder.volumes.create(name=name, size=size, metadata=meta) context.update({'volume_id': volume.id}) context.setdefault('stack', []).append({'volume_id': volume.id}) logger.info("Created volume {0} with metadata {1}" .format(volume.name, volume.metadata)) def delete(clients, context): """Deletes volume.
from base import Base as BaseTestCase from roletester.actions.nova import server_create from roletester.actions.nova import server_delete from roletester.actions.nova import server_show from roletester.actions.nova import server_wait_for_status from roletester.exc import NovaNotFound from roletester.scenario import ScenarioFactory as Factory from roletester.log import logging logger = logging.getLogger("roletester.test_sample") class SampleFactory(Factory): _ACTIONS = [ server_create, server_wait_for_status, server_show, server_delete ] CREATE = 0 WAIT = 1 SHOW = 2 DELETE = 3 class TestSample(BaseTestCase): name = 'scratch' flavor = '1' image = '94f3805c-f59c-4dca-9cfe-40edf001c256'