Skip to content

Commit

Permalink
Merge pull request #55 from guoqiao/migrate-gss
Browse files Browse the repository at this point in the history
migrate glance-simplestreams-sync from Amulet to Zaza
  • Loading branch information
thedac committed Sep 12, 2019
2 parents fd4e5b7 + 63e9b4c commit 60f9baf
Show file tree
Hide file tree
Showing 2 changed files with 118 additions and 0 deletions.
16 changes: 16 additions & 0 deletions zaza/openstack/charm_tests/glance_simplestreams_sync/__init__.py
@@ -0,0 +1,16 @@

# Copyright 2018 Canonical Ltd.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

"""Collection of code for setting up and testing glance-simplestreams-sync."""
102 changes: 102 additions & 0 deletions zaza/openstack/charm_tests/glance_simplestreams_sync/tests.py
@@ -0,0 +1,102 @@
# Copyright 2019 Canonical Ltd.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

"""Encapsulate glance-simplestreams-sync testing."""
import json
import logging
import requests
import tenacity

import zaza.model as zaza_model
import zaza.openstack.charm_tests.test_utils as test_utils
import zaza.openstack.utilities.openstack as openstack_utils


@tenacity.retry(
retry=tenacity.retry_if_result(lambda images: len(images) == 0),
wait=tenacity.wait_fixed(6), # interval between retries
stop=tenacity.stop_after_attempt(100)) # retry times
def retry_image_sync(glance_client):
"""Wait for image sync with retry."""
# convert generator to list
return list(glance_client.images.list())


class GlanceSimpleStreamsSyncTest(test_utils.OpenStackBaseTest):
"""Glance Simple Streams Sync Test."""

@classmethod
def setUpClass(cls):
"""Run class setup for running glance simple streams sync tests."""
super(GlanceSimpleStreamsSyncTest, cls).setUpClass()
# dict of OS_* env vars
overcloud_auth = openstack_utils.get_overcloud_auth()
cls.keystone_client = openstack_utils.get_keystone_client(
overcloud_auth)
cls.glance_client = openstack_utils.get_glance_session_client(
cls.keystone_session)

def test_010_wait_for_image_sync(self):
"""Wait for images to be synced. Expect at least one."""
self.assertTrue(retry_image_sync(self.glance_client))

def test_050_gss_permissions_regression_check_lp1611987(self):
"""Assert the intended file permissions on gss config files.
refer: https://bugs.launchpad.net/bugs/1611987
"""
file_paths = [
'/etc/glance-simplestreams-sync/identity.yaml',
'/etc/glance-simplestreams-sync/mirrors.yaml',
'/var/log/glance-simplestreams-sync.log',
]
expected_perms = '640'

application = 'glance-simplestreams-sync'
for unit in zaza_model.get_units(application):
for file_path in file_paths:
cmd = 'stat -c %a {}'.format(file_path)
result = zaza_model.run_on_unit(unit.name, cmd, timeout=30)
# {'Code': '', 'Stderr': '', 'Stdout': '644\n'}
perms = result.get('Stdout', '').strip()
self.assertEqual(perms, expected_perms)
logging.debug(
'Permissions on {}: {}'.format(file_path, perms))

def test_110_local_product_stream(self):
"""Verify that the local product stream is accessible and has data."""
logging.debug('Checking local product streams...')
expected_images = [
'com.ubuntu.cloud:server:14.04:amd64',
'com.ubuntu.cloud:server:16.04:amd64',
'com.ubuntu.cloud:server:18.04:amd64',
]
uri = "streams/v1/auto.sync.json"
key = "url"
xenial_pike = openstack_utils.get_os_release('xenial_pike')
if openstack_utils.get_os_release() <= xenial_pike:
key = "publicURL"

catalog = self.keystone_client.service_catalog.get_endpoints()
ps_interface = catalog["product-streams"][0][key]
url = "{}/{}".format(ps_interface, uri)
client = requests.session()
json_data = client.get(url).text
product_streams = json.loads(json_data)
images = product_streams["products"]

for image in expected_images:
self.assertIn(image, images)

logging.debug("Local product stream successful")

0 comments on commit 60f9baf

Please sign in to comment.