From f325458d639869a5478325d5abd5064335d383c3 Mon Sep 17 00:00:00 2001 From: Corey Bryant Date: Tue, 30 Sep 2014 20:31:36 +0000 Subject: [PATCH] Amulet test fixes: * Makefile: Only run precise-icehouse and trusty-icehouse tests by default and increase test timeout * t/00-setup: Simplify dependencies install * t/README: Mention charm-tools dependency * t/basic_deployment.py: - Specify unstable charm deployment - Let things settle with short sleep after deployment - Use dicts in add_services - Rename restart test - Cleanup on test failure --- Makefile | 3 ++- tests/00-setup | 8 ++++---- tests/README | 6 ++++++ tests/basic_deployment.py | 35 ++++++++++++++++++++++++----------- 4 files changed, 36 insertions(+), 16 deletions(-) diff --git a/Makefile b/Makefile index 9834c9e3..94cca8a0 100644 --- a/Makefile +++ b/Makefile @@ -23,7 +23,8 @@ test: # coreycb note: The -v should only be temporary until Amulet sends # raise_status() messages to stderr: # https://bugs.launchpad.net/amulet/+bug/1320357 - @juju test -v -p AMULET_HTTP_PROXY + @juju test -v -p AMULET_HTTP_PROXY --timeout 900 \ + 00-setup 14-basic-precise-icehouse 15-basic-trusty-icehouse publish: lint unit_test bzr push lp:charms/nova-compute diff --git a/tests/00-setup b/tests/00-setup index a877fa00..09d08706 100755 --- a/tests/00-setup +++ b/tests/00-setup @@ -4,7 +4,7 @@ set -ex sudo add-apt-repository --yes ppa:juju/stable sudo apt-get update --yes -sudo apt-get install --yes python-amulet -sudo apt-get install --yes python-glanceclient -sudo apt-get install --yes python-keystoneclient -sudo apt-get install --yes python-novaclient +sudo apt-get install --yes python-amulet \ + python-glanceclient \ + python-keystoneclient \ + python-novaclient diff --git a/tests/README b/tests/README index f252947a..592b538f 100644 --- a/tests/README +++ b/tests/README @@ -1,6 +1,12 @@ This directory provides Amulet tests that focus on verification of nova-compute deployments. +In order to run tests, you'll need charm-tools installed (in addition to +juju, of course): + sudo add-apt-repository ppa:juju/stable + sudo apt-get update + sudo apt-get install charm-tools + If you use a web proxy server to access the web, you'll need to set the AMULET_HTTP_PROXY environment variable to the http URL of the proxy server. diff --git a/tests/basic_deployment.py b/tests/basic_deployment.py index d92869fc..8faf064e 100644 --- a/tests/basic_deployment.py +++ b/tests/basic_deployment.py @@ -1,6 +1,7 @@ #!/usr/bin/python import amulet +import time from charmhelpers.contrib.openstack.amulet.deployment import ( OpenStackAmuletDeployment @@ -19,9 +20,9 @@ u = OpenStackAmuletUtils(ERROR) class NovaBasicDeployment(OpenStackAmuletDeployment): """Amulet tests on a basic nova compute deployment.""" - def __init__(self, series=None, openstack=None, source=None): + def __init__(self, series=None, openstack=None, source=None, stable=False): """Deploy the entire test environment.""" - super(NovaBasicDeployment, self).__init__(series, openstack, source) + super(NovaBasicDeployment, self).__init__(series, openstack, source, stable) self._add_services() self._add_relations() self._configure_services() @@ -29,13 +30,16 @@ class NovaBasicDeployment(OpenStackAmuletDeployment): self._initialize_tests() def _add_services(self): - """Add the service that we're testing, including the number of units, - where nova-compute is local, and the other charms are from - the charm store.""" - this_service = ('nova-compute', 1) - other_services = [('mysql', 1), ('rabbitmq-server', 1), - ('nova-cloud-controller', 1), ('keystone', 1), - ('glance', 1)] + """Add services + + Add the services that we're testing, where nova-compute is local, + and the rest of the service are from lp branches that are + compatible with the local charm (e.g. stable or next). + """ + this_service = {'name': 'nova-compute'} + other_services = [{'name': 'mysql'}, {'name': 'rabbitmq-server'}, + {'name': 'nova-cloud-controller'}, {'name': 'keystone'}, + {'name': 'glance'}] super(NovaBasicDeployment, self)._add_services(this_service, other_services) @@ -76,6 +80,9 @@ class NovaBasicDeployment(OpenStackAmuletDeployment): self.nova_cc_sentry = self.d.sentry.unit['nova-cloud-controller/0'] self.glance_sentry = self.d.sentry.unit['glance/0'] + # Let things settle a bit before moving forward + time.sleep(30) + # Authenticate admin with keystone self.keystone = u.authenticate_keystone_admin(self.keystone_sentry, user='admin', @@ -300,9 +307,14 @@ class NovaBasicDeployment(OpenStackAmuletDeployment): message = u.relation_error('nova-cc cloud-compute', ret) amulet.raise_status(amulet.FAIL, msg=message) - def test_restart_on_config_change(self): + def test_z_restart_on_config_change(self): """Verify that the specified services are restarted when the config - is changed.""" + is changed. + + Note(coreycb): The method name with the _z_ is a little odd + but it forces the test to run last. It just makes things + easier because restarting services requires re-authorization. + """ # NOTE(coreycb): Skipping failing test on essex until resolved. # config-flags don't take effect on essex. if self._get_openstack_release() == self.precise_essex: @@ -316,6 +328,7 @@ class NovaBasicDeployment(OpenStackAmuletDeployment): for s in services: if not u.service_restarted(self.nova_compute_sentry, s, '/etc/nova/nova.conf', sleep_time=time): + self.d.configure('nova-compute', {'config-flags': 'verbose=True'}) msg = "service {} didn't restart after config change".format(s) amulet.raise_status(amulet.FAIL, msg=msg) time = 0