Implements base classes for functional tests

In the cross project workshop "Establishing key themes for the Mitaka
cycle" [1] during the Mitaka summit, one of the agreed point was to
implement functional tests for the client libraries. [2]

Later on, this will serve to improve our backward compatibility for
client libraries. See I72e4e9cfa0539f6b326a0296c065fa3cb754f8ae

In preparation to implement the functional tests for both v2 and v3
clients, this patch initializes the new directories and adds the base
test classes: V3ClientTestCase and V2ClientTestCase.

Each class instantiates its specific keystoneclient version via
os-client-config either based on a clouds.yaml config file or from the
environment variables.

[1] https://mitakadesignsummit.sched.org/event/edd78ade4c7c92581a7cabc26019a85a
[2] https://etherpad.openstack.org/p/mitaka-crossproject-themes

Change-Id: Ia73d72d5f87051fb46d733782275b548874a1def
This commit is contained in:
Samuel de Medeiros Queiroz
2015-12-06 21:30:18 -03:00
parent 9f9fd47919
commit f5bcd87e23
4 changed files with 87 additions and 0 deletions

View File

@@ -0,0 +1,59 @@
# 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 testtools
from keystoneclient import client
import os_client_config
class ClientTestCase(testtools.TestCase):
def setUp(self):
super(ClientTestCase, self).setUp()
self.client = self.get_client()
def get_client(self):
"""Creates a keystoneclient instance to run functional tests
The client is instantiated via os-client-config either based on a
clouds.yaml config file or from the environment variables.
First, look for a 'functional_admin' cloud, as this is a cloud that the
user may have defined for functional testing with admin credentials. If
that is not found, check for the 'devstack-admin' cloud. Finally, fall
back to looking for environment variables.
"""
IDENTITY_CLIENT = 'identity'
OPENSTACK_CLOUDS = ('functional_admin', 'devstack-admin', 'envvars')
for cloud in OPENSTACK_CLOUDS:
try:
return os_client_config.make_client(
IDENTITY_CLIENT, client.Client, cloud=cloud,
identity_api_version=self.version)
except os_client_config.exceptions.OpenStackConfigException:
pass
raise Exception("Could not find any cloud definition for clouds named"
" functional_admin or devstack-admin. Check your"
" clouds.yaml file or your envvars and try again.")
class V3ClientTestCase(ClientTestCase):
version = '3'
class V2ClientTestCase(ClientTestCase):
version = '2.0'

View File

@@ -0,0 +1,28 @@
# 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 keystoneclient
from keystoneclient.tests.functional import base
class V3ClientVersionTestCase(base.V3ClientTestCase):
def test_version(self):
self.assertIsInstance(self.client,
keystoneclient.v3.client.Client)
class V2ClientVersionTestCase(base.V2ClientTestCase):
def test_version(self):
self.assertIsInstance(self.client,
keystoneclient.v2_0.client.Client)