switch from service_restarted to validate_service_config_changed re: race on vivid; update tests for consistency with swift-proxy tests.

This commit is contained in:
Ryan Beisner
2015-08-21 17:40:45 +00:00
parent 3468196e9b
commit 7ec6f6c7df
4 changed files with 31 additions and 22 deletions

View File

@@ -3,7 +3,7 @@ maintainer: Adam Gandelman <adamg@canonical.com>
summary: "Swift storage node" summary: "Swift storage node"
description: | description: |
Contains swift-object, swift-container and swift-account servers. Contains swift-object, swift-container and swift-account servers.
categories: tags:
- openstack - openstack
- file-servers - file-servers
provides: provides:

0
tests/017-basic-trusty-kilo Normal file → Executable file
View File

0
tests/019-basic-vivid-kilo Normal file → Executable file
View File

View File

@@ -1,5 +1,6 @@
import amulet import amulet
import swiftclient import swiftclient
import time
from charmhelpers.contrib.openstack.amulet.deployment import ( from charmhelpers.contrib.openstack.amulet.deployment import (
OpenStackAmuletDeployment OpenStackAmuletDeployment
@@ -78,6 +79,14 @@ class SwiftStorageBasicDeployment(OpenStackAmuletDeployment):
self.swift_proxy_sentry = self.d.sentry.unit['swift-proxy/0'] self.swift_proxy_sentry = self.d.sentry.unit['swift-proxy/0']
self.swift_storage_sentry = self.d.sentry.unit['swift-storage/0'] self.swift_storage_sentry = self.d.sentry.unit['swift-storage/0']
u.log.debug('openstack release val: {}'.format(
self._get_openstack_release()))
u.log.debug('openstack release str: {}'.format(
self._get_openstack_release_string()))
# Let things settle a bit before moving forward
time.sleep(30)
# Authenticate admin with keystone # Authenticate admin with keystone
self.keystone = u.authenticate_keystone_admin(self.keystone_sentry, self.keystone = u.authenticate_keystone_admin(self.keystone_sentry,
user='admin', user='admin',
@@ -140,8 +149,8 @@ class SwiftStorageBasicDeployment(OpenStackAmuletDeployment):
service_names = { service_names = {
self.mysql_sentry: ['mysql'], self.mysql_sentry: ['mysql'],
self.keystone_sentry: ['keystone'], self.keystone_sentry: ['keystone'],
self.glance_sentry: [ self.glance_sentry: ['glance-registry',
'glance-registry', 'glance-api'], 'glance-api'],
self.swift_proxy_sentry: ['swift-proxy'], self.swift_proxy_sentry: ['swift-proxy'],
self.swift_storage_sentry: swift_storage_services self.swift_storage_sentry: swift_storage_services
} }
@@ -150,7 +159,7 @@ class SwiftStorageBasicDeployment(OpenStackAmuletDeployment):
if ret: if ret:
amulet.raise_status(amulet.FAIL, msg=ret) amulet.raise_status(amulet.FAIL, msg=ret)
def test_104_users(self): def test_102_users(self):
"""Verify all existing roles.""" """Verify all existing roles."""
u.log.debug('Checking keystone users...') u.log.debug('Checking keystone users...')
user1 = {'name': 'demoUser', user1 = {'name': 'demoUser',
@@ -180,20 +189,15 @@ class SwiftStorageBasicDeployment(OpenStackAmuletDeployment):
if ret: if ret:
amulet.raise_status(amulet.FAIL, msg=ret) amulet.raise_status(amulet.FAIL, msg=ret)
def test_106_service_catalog(self): def test_104_keystone_service_catalog(self):
"""Verify that the service catalog endpoint data is valid.""" """Verify that the service catalog endpoint data is valid."""
u.log.debug('Checking keystone service catalog...') u.log.debug('Checking keystone service catalog...')
endpoint_vol = {'adminURL': u.valid_url,
'region': 'RegionOne',
'publicURL': u.valid_url,
'internalURL': u.valid_url}
endpoint_id = {'adminURL': u.valid_url, endpoint_id = {'adminURL': u.valid_url,
'region': 'RegionOne', 'region': 'RegionOne',
'publicURL': u.valid_url, 'publicURL': u.valid_url,
'internalURL': u.valid_url} 'internalURL': u.valid_url,
if self._get_openstack_release() >= self.precise_folsom: 'id': u.not_null}
endpoint_vol['id'] = u.not_null
endpoint_id['id'] = u.not_null
expected = {'image': [endpoint_id], 'object-store': [endpoint_id], expected = {'image': [endpoint_id], 'object-store': [endpoint_id],
'identity': [endpoint_id]} 'identity': [endpoint_id]}
actual = self.keystone_demo.service_catalog.get_endpoints() actual = self.keystone_demo.service_catalog.get_endpoints()
@@ -202,7 +206,7 @@ class SwiftStorageBasicDeployment(OpenStackAmuletDeployment):
if ret: if ret:
amulet.raise_status(amulet.FAIL, msg=ret) amulet.raise_status(amulet.FAIL, msg=ret)
def test_108_swift_object_store_endpoint(self): def test_106_swift_object_store_endpoint(self):
"""Verify the swift object-store endpoint data.""" """Verify the swift object-store endpoint data."""
u.log.debug('Checking keystone endpoint for swift object store...') u.log.debug('Checking keystone endpoint for swift object store...')
endpoints = self.keystone.endpoints.list() endpoints = self.keystone.endpoints.list()
@@ -367,9 +371,11 @@ class SwiftStorageBasicDeployment(OpenStackAmuletDeployment):
message = "object server config error: {}".format(ret) message = "object server config error: {}".format(ret)
amulet.raise_status(amulet.FAIL, msg=message) amulet.raise_status(amulet.FAIL, msg=message)
def test_400_image_create(self): def test_400_swift_backed_image_create(self):
"""Create an instance in glance, which is backed by swift, and validate """Create an instance in glance, which is backed by swift, and validate
that some of the metadata for the image match in glance and swift.""" that some of the metadata for the image match in glance and swift."""
u.log.debug('Checking swift objects and containers with a '
'swift-backed glance image...')
# Create swift-backed glance image # Create swift-backed glance image
img_new = u.create_cirros_image(self.glance, "cirros-image-1") img_new = u.create_cirros_image(self.glance, "cirros-image-1")
@@ -406,10 +412,13 @@ class SwiftStorageBasicDeployment(OpenStackAmuletDeployment):
# Cleanup # Cleanup
u.delete_resource(self.glance.images, img_id, msg="glance image") u.delete_resource(self.glance.images, img_id, msg="glance image")
u.log.info('OK')
def test_900_restart_on_config_change(self): def test_900_restart_on_config_change(self):
"""Verify that the specified services are restarted when the config """Verify that the specified services are restarted when the config
is changed.""" is changed."""
u.log.info('Checking that conf files and system services respond '
'to a charm config change...')
sentry = self.swift_storage_sentry sentry = self.swift_storage_sentry
juju_service = 'swift-storage' juju_service = 'swift-storage'
@@ -430,22 +439,22 @@ class SwiftStorageBasicDeployment(OpenStackAmuletDeployment):
'swift-object-server': 'object-server.conf', 'swift-object-server': 'object-server.conf',
'swift-object-auditor': 'object-server.conf', 'swift-object-auditor': 'object-server.conf',
'swift-object-replicator': 'object-server.conf', 'swift-object-replicator': 'object-server.conf',
'swift-object-updater': 'object-server.conf'} 'swift-object-updater': 'object-server.conf',
'swift-container-sync': 'container-server.conf'}
if self._get_openstack_release() >= self.precise_icehouse:
services['swift-container-sync'] = 'container-server.conf'
# Make config change, check for service restarts # Make config change, check for service restarts
u.log.debug('Making config change on {}...'.format(juju_service)) u.log.debug('Making config change on {}...'.format(juju_service))
mtime = u.get_sentry_time(sentry)
self.d.configure(juju_service, set_alternate) self.d.configure(juju_service, set_alternate)
sleep_time = 40 sleep_time = 40
for s, conf_file in services.iteritems(): for s, conf_file in services.iteritems():
u.log.debug("Checking that service restarted: {}".format(s)) u.log.debug("Checking that service restarted: {}".format(s))
conf_file_abs = '/etc/swift/{}'.format(conf_file) conf_file_abs = '/etc/swift/{}'.format(conf_file)
if not u.service_restarted(sentry, s, conf_file_abs, if not u.validate_service_config_changed(sentry, mtime, s,
pgrep_full=True, conf_file_abs,
sleep_time=sleep_time): sleep_time=sleep_time,
pgrep_full=True):
self.d.configure(juju_service, set_default) self.d.configure(juju_service, set_default)
msg = "service {} didn't restart after config change".format(s) msg = "service {} didn't restart after config change".format(s)
amulet.raise_status(amulet.FAIL, msg=msg) amulet.raise_status(amulet.FAIL, msg=msg)