summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2015-04-08 00:04:39 +0000
committerGerrit Code Review <review@openstack.org>2015-04-08 00:04:39 +0000
commit6b591bf850278cf8dd706722fba573e3ae259152 (patch)
tree5f8f341ed969d21e659e8e43e999b87fde58f65a
parent0f70e1035ff2d5ca9ba4df88b8c14fb54e9db6a3 (diff)
parentd799264c3709acf0eb005bf55ff2be09a38d0c6b (diff)
downloadnova-6b591bf850278cf8dd706722fba573e3ae259152.tar.gz
Merge "tests: enhance functional tests primitives"
-rw-r--r--nova/tests/functional/api/client.py4
-rw-r--r--nova/tests/functional/integrated_helpers.py86
2 files changed, 85 insertions, 5 deletions
diff --git a/nova/tests/functional/api/client.py b/nova/tests/functional/api/client.py
index afc3c29d7a..d570db18bc 100644
--- a/nova/tests/functional/api/client.py
+++ b/nova/tests/functional/api/client.py
@@ -295,6 +295,10 @@ class TestOpenStackClient(object):
def delete_flavor(self, flavor_id):
return self.api_delete('/flavors/%s' % flavor_id)
+ def post_extra_spec(self, flavor_id, spec):
+ return self.api_post('/flavors/%s/os-extra_specs' %
+ flavor_id, spec)
+
def get_volume(self, volume_id):
return self.api_get('/volumes/%s' % volume_id).body['volume']
diff --git a/nova/tests/functional/integrated_helpers.py b/nova/tests/functional/integrated_helpers.py
index 5ae30d0927..fb2237216b 100644
--- a/nova/tests/functional/integrated_helpers.py
+++ b/nova/tests/functional/integrated_helpers.py
@@ -82,8 +82,6 @@ class _IntegratedTestBase(test.TestCase):
fake_crypto.fetch_ca)
self.stubs.Set(crypto, 'generate_x509_cert',
fake_crypto.generate_x509_cert)
- self.flags(scheduler_driver='nova.scheduler.'
- 'chance.ChanceScheduler')
self._setup_services()
self.api_fixture = self.useFixture(
@@ -100,15 +98,23 @@ class _IntegratedTestBase(test.TestCase):
self.addCleanup(nova.tests.unit.image.fake.FakeImageService_reset)
+ def _setup_compute_service(self):
+ return self.start_service('compute')
+
+ def _setup_scheduler_service(self):
+ self.flags(scheduler_driver='nova.scheduler.'
+ 'chance.ChanceScheduler')
+ return self.start_service('scheduler')
+
def _setup_services(self):
self.conductor = self.start_service('conductor',
manager=CONF.conductor.manager)
- self.compute = self.start_service('compute')
+ self.compute = self._setup_compute_service()
self.cert = self.start_service('cert')
self.consoleauth = self.start_service('consoleauth')
self.network = self.start_service('network')
- self.scheduler = self.start_service('scheduler')
+ self.scheduler = self._setup_scheduler_service()
self.cells = self.start_service('cells', manager=CONF.cells.manager)
def _get_test_client(self):
@@ -134,12 +140,82 @@ class _IntegratedTestBase(test.TestCase):
server_names = [server['name'] for server in servers]
return generate_new_element(server_names, 'server')
+ def get_unused_flavor_name_id(self):
+ flavors = self.api.get_flavors()
+ flavor_names = list()
+ flavor_ids = list()
+ [(flavor_names.append(flavor['name']),
+ flavor_ids.append(flavor['id']))
+ for flavor in flavors]
+ return (generate_new_element(flavor_names, 'flavor'),
+ int(generate_new_element(flavor_ids, '', True)))
+
def get_invalid_image(self):
return str(uuid.uuid4())
+ def _get_any_image_href(self):
+ image = self.api.get_images()[0]
+ LOG.debug("Image: %s" % image)
+
+ if self._image_ref_parameter in image:
+ image_href = image[self._image_ref_parameter]
+ else:
+ image_href = image['id']
+ image_href = 'http://fake.server/%s' % image_href
+ return image_href
+
def _build_minimal_create_server_request(self):
server = {}
+ image_href = self._get_any_image_href()
+
+ # We now have a valid imageId
+ server[self._image_ref_parameter] = image_href
+
+ # Set a valid flavorId
+ flavor = self.api.get_flavors()[0]
+ LOG.debug("Using flavor: %s" % flavor)
+ server[self._flavor_ref_parameter] = ('http://fake.server/%s'
+ % flavor['id'])
+
+ # Set a valid server name
+ server_name = self.get_unused_server_name()
+ server['name'] = server_name
+ return server
+
+ def _create_flavor_body(self, name, ram, vcpus, disk, ephemeral, id, swap,
+ rxtx_factor, is_public):
+ return {
+ "flavor": {
+ "name": name,
+ "ram": ram,
+ "vcpus": vcpus,
+ "disk": disk,
+ "OS-FLV-EXT-DATA:ephemeral": ephemeral,
+ "id": id,
+ "swap": swap,
+ "rxtx_factor": rxtx_factor,
+ "os-flavor-access:is_public": is_public,
+ }
+ }
+
+ def _create_flavor(self, memory_mb=2048, vcpu=2, disk=10, ephemeral=10,
+ swap=0, rxtx_factor=1.0, is_public=True,
+ extra_spec=None):
+ flv_name, flv_id = self.get_unused_flavor_name_id()
+ body = self._create_flavor_body(flv_name, memory_mb, vcpu, disk,
+ ephemeral, flv_id, swap, rxtx_factor,
+ is_public)
+ self.api_fixture.admin_api.post_flavor(body)
+ if extra_spec is not None:
+ spec = {"extra_specs": extra_spec}
+ self.api_fixture.admin_api.post_extra_spec(flv_id, spec)
+ return flv_id
+
+ def _build_server(self, flavor_id):
+ server = {}
+
+ image_href = self._get_any_image_href()
image = self.api.get_images()[0]
LOG.debug("Image: %s" % image)
@@ -153,7 +229,7 @@ class _IntegratedTestBase(test.TestCase):
server[self._image_ref_parameter] = image_href
# Set a valid flavorId
- flavor = self.api.get_flavors()[0]
+ flavor = self.api.get_flavor(flavor_id)
LOG.debug("Using flavor: %s" % flavor)
server[self._flavor_ref_parameter] = ('http://fake.server/%s'
% flavor['id'])