Merge "Split glanceclient functional tests"

This commit is contained in:
Zuul 2018-04-12 17:17:19 +00:00 committed by Gerrit Code Review
commit 94aa58e89e
9 changed files with 136 additions and 22 deletions

View File

@ -1,16 +1,54 @@
- job:
name: glanceclient-dsvm-functional-v1
parent: devstack-tox-functional
description: |
Devstack-based functional tests for glanceclient
against the Image API v1.
The Image API v1 is removed from glance in Rocky, but
is still supported by glanceclient until the S cycle,
so we test it against glance stable/queens.
THIS JOB SHOULD BE REMOVED AT THE BEGINNING OF THE S
CYCLE.
override-checkout: stable/queens
required-projects:
- name: openstack/python-glanceclient
override-checkout: master
timeout: 4200
vars:
tox_envlist: functional-v1
devstack_localrc:
GLANCE_V1_ENABLED: true
devstack_services:
# turn off ceilometer
ceilometer-acentral: false
ceilometer-acompute: false
ceilometer-alarm-evaluator: false
ceilometer-alarm-notifier: false
ceilometer-anotification: false
ceilometer-api: false
ceilometer-collector: false
# turn on swift
s-account: true
s-container: true
s-object: true
s-proxy: true
# Hardcode glanceclient path so the job can be run on glance patches
zuul_work_dir: src/git.openstack.org/openstack/python-glanceclient
- job:
name: glanceclient-dsvm-functional
parent: devstack-tox-functional
description: |
devstack-based functional tests for glanceclient
Devstack-based functional tests for glanceclient.
These test glanceclient against Image API v2 only.
required-projects:
- openstack/python-glanceclient
timeout: 4200
vars:
devstack_localrc:
# TODO(rosmaita): remove when glanceclient tests no longer
# use the Images v1 API
GLANCE_V1_ENABLED: true
LIBS_FROM_GIT: python-glanceclient
devstack_services:
# turn off ceilometer
@ -39,11 +77,13 @@
- project:
check:
jobs:
- glanceclient-dsvm-functional-v1
- glanceclient-dsvm-functional
- glanceclient-dsvm-functional-identity-v3-only:
voting: false
- openstack-tox-lower-constraints
gate:
jobs:
- glanceclient-dsvm-functional-v1
- glanceclient-dsvm-functional
- openstack-tox-lower-constraints

View File

@ -48,9 +48,10 @@ class ClientTestBase(base.ClientTestBase):
def _get_clients(self):
self.creds = credentials().get_auth_args()
venv_name = os.environ.get('OS_TESTENV_NAME', 'functional')
cli_dir = os.environ.get(
'OS_GLANCECLIENT_EXEC_DIR',
os.path.join(os.path.abspath('.'), '.tox/functional/bin'))
os.path.join(os.path.abspath('.'), '.tox/%s/bin' % venv_name))
return base.CLIClient(
username=self.creds['username'],

View File

@ -0,0 +1,73 @@
# 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.
import re
from tempest.lib import exceptions
from glanceclient.tests.functional import base
class SimpleReadOnlyGlanceClientTest(base.ClientTestBase):
"""Read only functional python-glanceclient tests.
This only exercises client commands that are read only.
"""
def test_list_v1(self):
out = self.glance('--os-image-api-version 1 image-list')
endpoints = self.parser.listing(out)
self.assertTableStruct(endpoints, [
'ID', 'Name', 'Disk Format', 'Container Format',
'Size', 'Status'])
def test_fake_action(self):
self.assertRaises(exceptions.CommandFailed,
self.glance,
'this-does-not-exist')
def test_member_list_v1(self):
tenant_name = '--tenant-id %s' % self.creds['project_name']
out = self.glance('--os-image-api-version 1 member-list',
params=tenant_name)
endpoints = self.parser.listing(out)
self.assertTableStruct(endpoints,
['Image ID', 'Member ID', 'Can Share'])
def test_help(self):
help_text = self.glance('--os-image-api-version 1 help')
lines = help_text.split('\n')
self.assertFirstLineStartsWith(lines, 'usage: glance')
commands = []
cmds_start = lines.index('Positional arguments:')
cmds_end = lines.index('Optional arguments:')
command_pattern = re.compile('^ {4}([a-z0-9\-\_]+)')
for line in lines[cmds_start:cmds_end]:
match = command_pattern.match(line)
if match:
commands.append(match.group(1))
commands = set(commands)
wanted_commands = {'bash-completion', 'help',
'image-create', 'image-delete',
'image-download', 'image-list',
'image-show', 'image-update',
'member-create', 'member-delete',
'member-list'}
self.assertEqual(commands, wanted_commands)
def test_version(self):
self.glance('', flags='--version')
def test_debug_list(self):
self.glance('--os-image-api-version 1 image-list', flags='--debug')

View File

@ -24,13 +24,6 @@ class SimpleReadOnlyGlanceClientTest(base.ClientTestBase):
This only exercises client commands that are read only.
"""
def test_list_v1(self):
out = self.glance('--os-image-api-version 1 image-list')
endpoints = self.parser.listing(out)
self.assertTableStruct(endpoints, [
'ID', 'Name', 'Disk Format', 'Container Format',
'Size', 'Status'])
def test_list_v2(self):
out = self.glance('--os-image-api-version 2 image-list')
endpoints = self.parser.listing(out)
@ -41,14 +34,6 @@ class SimpleReadOnlyGlanceClientTest(base.ClientTestBase):
self.glance,
'this-does-not-exist')
def test_member_list_v1(self):
tenant_name = '--tenant-id %s' % self.creds['project_name']
out = self.glance('--os-image-api-version 1 member-list',
params=tenant_name)
endpoints = self.parser.listing(out)
self.assertTableStruct(endpoints,
['Image ID', 'Member ID', 'Can Share'])
def test_member_list_v2(self):
try:
# NOTE(flwang): If set disk-format and container-format, Jenkins

View File

@ -6,10 +6,12 @@
# assumptions:
# - devstack is running
# - the devstack tls-proxy service is running
# - the environment var OS_TESTENV_NAME is set in tox.ini (defaults
# to 'functional'
#
# This code based on a function in devstack lib/tls
function set_ca_bundle {
local python_cmd='.tox/functional/bin/python'
local python_cmd=".tox/${OS_TESTENV_NAME:-functional}/bin/python"
local capath=$($python_cmd -c $'try:\n from requests import certs\n print (certs.where())\nexcept ImportError: pass')
# of course, each distro keeps the CA store in a different location
local fedora_CA='/etc/pki/tls/certs/ca-bundle.crt'

15
tox.ini
View File

@ -30,7 +30,20 @@ warnerror = True
# See glanceclient/tests/functional/README.rst
# for information on running the functional tests.
setenv =
OS_TEST_PATH = ./glanceclient/tests/functional
OS_TEST_PATH = ./glanceclient/tests/functional/v2
OS_TESTENV_NAME = {envname}
whitelist_externals =
bash
commands =
bash tools/fix_ca_bundle.sh
python setup.py testr --testr-args='{posargs}'
[testenv:functional-v1]
# TODO(rosmaita): remove this testenv at the beginning
# of the 'S' cycle
setenv =
OS_TEST_PATH = ./glanceclient/tests/functional/v1
OS_TESTENV_NAME = {envname}
whitelist_externals =
bash
commands =