Framework for Airship Tempest Plugin
This commit includes the following: - Base Classes for: * Shipyard tests * Shipyard RBAC tests - Unfinished Shipyard REST Clients for: * Document Staging API * Action API * Airflow Monitoring API * Log Retrieval API - RBAC Tests for Shipyard: * get workflows * get actions * get configdocs Future commits can follow this commit to further test Airship components.
This commit is contained in:
commit
6b87d7d633
6
README.rst
Normal file
6
README.rst
Normal file
@ -0,0 +1,6 @@
|
||||
===============================================
|
||||
Tempest Integration of airship-tempest-plugin
|
||||
===============================================
|
||||
|
||||
The purpose of this plugin is to provide automated tests
|
||||
for all OpenStack Airship components.
|
6
airship_tempest_plugin/README.rst
Normal file
6
airship_tempest_plugin/README.rst
Normal file
@ -0,0 +1,6 @@
|
||||
===============================================
|
||||
Tempest Integration of airship-tempest-plugin
|
||||
===============================================
|
||||
|
||||
This directory contains Tempest tests to cover the airship-tempest-plugin project.
|
||||
|
0
airship_tempest_plugin/__init__.py
Normal file
0
airship_tempest_plugin/__init__.py
Normal file
46
airship_tempest_plugin/config.py
Normal file
46
airship_tempest_plugin/config.py
Normal file
@ -0,0 +1,46 @@
|
||||
# Copyright 2015
|
||||
# All Rights Reserved.
|
||||
#
|
||||
# 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.
|
||||
from oslo_config import cfg
|
||||
|
||||
service_available_group = cfg.OptGroup(name="service_available",
|
||||
title="Available Airship Services")
|
||||
|
||||
ServiceAvailableGroup = [
|
||||
cfg.BoolOpt("shipyard",
|
||||
default=True,
|
||||
help="Whether or not Shipyard is expected to be available."),
|
||||
]
|
||||
|
||||
shipyard_group = cfg.OptGroup(name='shipyard',
|
||||
title='Shipyard service options')
|
||||
|
||||
ShipyardGroup = [
|
||||
cfg.StrOpt('endpoint_type',
|
||||
default='internal',
|
||||
choices=['public', 'admin', 'internal'],
|
||||
help="The endpoint type to use for the Shipyard service"),
|
||||
cfg.StrOpt('catalog_type',
|
||||
default='shipyard',
|
||||
help="Catalog type of the Shipyard service"),
|
||||
]
|
||||
|
||||
def get_opt_lists(self, conf):
|
||||
"""
|
||||
Get a list of options for sample config generation
|
||||
"""
|
||||
return [
|
||||
(service_available_group, ServiceAvailableGroup),
|
||||
(shipyard_group, ShipyardGroup)
|
||||
]
|
43
airship_tempest_plugin/plugin.py
Normal file
43
airship_tempest_plugin/plugin.py
Normal file
@ -0,0 +1,43 @@
|
||||
# Copyright 2015
|
||||
# All Rights Reserved.
|
||||
#
|
||||
# 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 os
|
||||
|
||||
from tempest import config
|
||||
from tempest.test_discover import plugins
|
||||
|
||||
from airship_tempest_plugin import config as project_config
|
||||
|
||||
|
||||
class AirshipRbacPlugin(plugins.TempestPlugin):
|
||||
def load_tests(self):
|
||||
base_path = os.path.split(os.path.dirname(
|
||||
os.path.abspath(__file__)))[0]
|
||||
test_dir = "airship_tempest_plugin/tests"
|
||||
full_test_dir = os.path.join(base_path, test_dir)
|
||||
return full_test_dir, base_path
|
||||
|
||||
def register_opts(self, conf):
|
||||
config.register_opt_group(conf, project_config.service_available_group,
|
||||
project_config.ServiceAvailableGroup)
|
||||
config.register_opt_group(conf, project_config.shipyard_group,
|
||||
project_config.ShipyardGroup)
|
||||
def get_opt_lists(self):
|
||||
return [
|
||||
(project_config.service_available_group.name,
|
||||
project_config.ServiceAvailableGroup),
|
||||
(project_config.shipyard_group.name, project_config.ShipyardGroup),
|
||||
]
|
0
airship_tempest_plugin/services/__init__.py
Normal file
0
airship_tempest_plugin/services/__init__.py
Normal file
@ -0,0 +1,34 @@
|
||||
# Copyright 2018 AT&T Corp
|
||||
# All Rights Reserved.
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
|
||||
"""
|
||||
http://airship-shipyard.readthedocs.io/en/latest/API.html#action-api
|
||||
"""
|
||||
|
||||
from oslo_serialization import jsonutils as json
|
||||
from six.moves.urllib import parse as urllib
|
||||
|
||||
from tempest.lib.common import rest_client
|
||||
|
||||
|
||||
class ActionsClient(rest_client.RestClient):
|
||||
api_version = "v1.0"
|
||||
|
||||
def get_actions(self):
|
||||
resp, body = self.get('actions')
|
||||
self.expected_success(200, resp.status)
|
||||
body = json.loads(body)
|
||||
return rest_client.ResponseBody(resp, body)
|
@ -0,0 +1,34 @@
|
||||
# Copyright 2018 AT&T Corp
|
||||
# All Rights Reserved.
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
|
||||
"""
|
||||
http://airship-shipyard.readthedocs.io/en/latest/API.html#airflow-monitoring-api
|
||||
"""
|
||||
|
||||
from oslo_serialization import jsonutils as json
|
||||
from six.moves.urllib import parse as urllib
|
||||
|
||||
from tempest.lib.common import rest_client
|
||||
|
||||
|
||||
class AirflowMonitoringClient(rest_client.RestClient):
|
||||
api_version = "v1.0"
|
||||
|
||||
def get_workflows(self):
|
||||
resp, body = self.get('workflows')
|
||||
self.expected_success(200, resp.status)
|
||||
body = json.loads(body)
|
||||
return rest_client.ResponseBody(resp, body)
|
@ -0,0 +1,34 @@
|
||||
# Copyright 2018 AT&T Corp
|
||||
# All Rights Reserved.
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
|
||||
"""
|
||||
http://airship-shipyard.readthedocs.io/en/latest/API.html#document-staging-api
|
||||
"""
|
||||
|
||||
from oslo_serialization import jsonutils as json
|
||||
from six.moves.urllib import parse as urllib
|
||||
|
||||
from tempest.lib.common import rest_client
|
||||
|
||||
|
||||
class DocumentStagingClient(rest_client.RestClient):
|
||||
api_version = "v1.0"
|
||||
|
||||
def get_configdocs(self):
|
||||
resp, body = self.get('configdocs')
|
||||
self.expected_success(200, resp.status)
|
||||
body = json.loads(body)
|
||||
return rest_client.ResponseBody(resp, body)
|
0
airship_tempest_plugin/tests/__init__.py
Normal file
0
airship_tempest_plugin/tests/__init__.py
Normal file
0
airship_tempest_plugin/tests/api/__init__.py
Normal file
0
airship_tempest_plugin/tests/api/__init__.py
Normal file
0
airship_tempest_plugin/tests/api/common/__init__.py
Normal file
0
airship_tempest_plugin/tests/api/common/__init__.py
Normal file
13
airship_tempest_plugin/tests/api/common/rbac_roles.yaml
Normal file
13
airship_tempest_plugin/tests/api/common/rbac_roles.yaml
Normal file
@ -0,0 +1,13 @@
|
||||
shipyard:
|
||||
get_actions:
|
||||
- admin
|
||||
- admin_ucp
|
||||
- admin_ucp_viewer
|
||||
get_configdocs:
|
||||
- admin
|
||||
- admin_ucp
|
||||
- admin_ucp_viewer
|
||||
get_workflows:
|
||||
- admin
|
||||
- admin_ucp
|
||||
- admin_ucp_viewer
|
57
airship_tempest_plugin/tests/api/shipyard/base.py
Normal file
57
airship_tempest_plugin/tests/api/shipyard/base.py
Normal file
@ -0,0 +1,57 @@
|
||||
# Copyright 2018 AT&T Corp
|
||||
# All Rights Reserved.
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
|
||||
from airship_tempest_plugin.services.shipyard.json.actions_client import ActionsClient
|
||||
from airship_tempest_plugin.services.shipyard.json.document_staging_client import DocumentStagingClient
|
||||
from airship_tempest_plugin.services.shipyard.json.airflow_monitoring_client import AirflowMonitoringClient
|
||||
|
||||
from tempest import config
|
||||
from tempest import test
|
||||
|
||||
from patrole_tempest_plugin import rbac_utils
|
||||
|
||||
CONF = config.CONF
|
||||
|
||||
class BaseShipyardTest(test.BaseTestCase):
|
||||
"""Base class for Shipyard tests."""
|
||||
credentials = ['primary', 'admin']
|
||||
|
||||
@classmethod
|
||||
def skip_checks(cls):
|
||||
super(BaseShipyardTest, cls).skip_checks()
|
||||
if not CONF.service_available.shipyard:
|
||||
raise cls.skipException("Shipyard is not enabled in the deployment")
|
||||
|
||||
@classmethod
|
||||
def setup_clients(cls):
|
||||
super(BaseShipyardTest, cls).setup_clients()
|
||||
cls.auth_provider = cls.os_primary.auth_provider
|
||||
|
||||
cls.shipyard_actions_client = ActionsClient(
|
||||
cls.auth_provider,
|
||||
CONF.shipyard.catalog_type,
|
||||
CONF.identity.region,
|
||||
CONF.shipyard.endpoint_type)
|
||||
cls.shipyard_document_staging_client = DocumentStagingClient(
|
||||
cls.auth_provider,
|
||||
CONF.shipyard.catalog_type,
|
||||
CONF.identity.region,
|
||||
CONF.shipyard.endpoint_type)
|
||||
cls.shipyard_airflow_monitoring_client = AirflowMonitoringClient(
|
||||
cls.auth_provider,
|
||||
CONF.shipyard.catalog_type,
|
||||
CONF.identity.region,
|
||||
CONF.shipyard.endpoint_type)
|
38
airship_tempest_plugin/tests/api/shipyard/rbac/rbac_base.py
Normal file
38
airship_tempest_plugin/tests/api/shipyard/rbac/rbac_base.py
Normal file
@ -0,0 +1,38 @@
|
||||
# Copyright 2018 AT&T Corp
|
||||
# All Rights Reserved.
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
|
||||
from airship_tempest_plugin.services.shipyard.json.actions_client import ActionsClient
|
||||
from airship_tempest_plugin.tests.api.shipyard import base
|
||||
|
||||
from tempest import config
|
||||
|
||||
from patrole_tempest_plugin import rbac_utils
|
||||
|
||||
CONF = config.CONF
|
||||
|
||||
class BaseShipyardRbacTest(rbac_utils.RbacUtilsMixin,
|
||||
base.BaseShipyardTest):
|
||||
"""Base class for Shipyard RBAC tests."""
|
||||
|
||||
@classmethod
|
||||
def skip_checks(cls):
|
||||
super(BaseShipyardRbacTest, cls).skip_checks()
|
||||
cls.skip_rbac_checks()
|
||||
|
||||
@classmethod
|
||||
def setup_clients(cls):
|
||||
super(BaseShipyardRbacTest, cls).setup_clients()
|
||||
cls.setup_rbac_utils()
|
@ -0,0 +1,35 @@
|
||||
# Copyright 2018 AT&T Corp
|
||||
# All Rights Reserved.
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
|
||||
from airship_tempest_plugin.tests.api.shipyard.rbac import rbac_base
|
||||
|
||||
from patrole_tempest_plugin import rbac_rule_validation
|
||||
|
||||
from tempest.common import utils
|
||||
from tempest.lib import decorators
|
||||
from tempest.lib.common.utils import data_utils
|
||||
from tempest.lib.common.utils import test_utils
|
||||
|
||||
from tempest.api.identity import base
|
||||
|
||||
class ActionsRbacTest(rbac_base.BaseShipyardRbacTest):
|
||||
|
||||
@rbac_rule_validation.action(service="shipyard",
|
||||
rules=["get_actions"])
|
||||
@decorators.idempotent_id('183dd007-8a97-4070-afc3-9318401ebad7')
|
||||
def test_get_actions(self):
|
||||
with self.rbac_utils.override_role(self):
|
||||
self.shipyard_actions_client.get_actions()
|
@ -0,0 +1,35 @@
|
||||
# Copyright 2018 AT&T Corp
|
||||
# All Rights Reserved.
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
|
||||
from airship_tempest_plugin.tests.api.shipyard.rbac import rbac_base
|
||||
|
||||
from patrole_tempest_plugin import rbac_rule_validation
|
||||
|
||||
from tempest.common import utils
|
||||
from tempest.lib import decorators
|
||||
from tempest.lib.common.utils import data_utils
|
||||
from tempest.lib.common.utils import test_utils
|
||||
|
||||
from tempest.api.identity import base
|
||||
|
||||
class AirflowMonitoringRbacTest(rbac_base.BaseShipyardRbacTest):
|
||||
|
||||
@rbac_rule_validation.action(service="shipyard",
|
||||
rules=["get_configdocs"])
|
||||
@decorators.idempotent_id('0ab53b15-bce9-494f-9a11-34dd2c44d699')
|
||||
def test_get_workflows(self):
|
||||
with self.rbac_utils.override_role(self):
|
||||
self.shipyard_airflow_monitoring_client.get_workflows()
|
@ -0,0 +1,35 @@
|
||||
# Copyright 2018 AT&T Corp
|
||||
# All Rights Reserved.
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
|
||||
from airship_tempest_plugin.tests.api.shipyard.rbac import rbac_base
|
||||
|
||||
from patrole_tempest_plugin import rbac_rule_validation
|
||||
|
||||
from tempest.common import utils
|
||||
from tempest.lib import decorators
|
||||
from tempest.lib.common.utils import data_utils
|
||||
from tempest.lib.common.utils import test_utils
|
||||
|
||||
from tempest.api.identity import base
|
||||
|
||||
class DocumentStagingRbacTest(rbac_base.BaseShipyardRbacTest):
|
||||
|
||||
@rbac_rule_validation.action(service="shipyard",
|
||||
rules=["get_configdocs"])
|
||||
@decorators.idempotent_id('0ab53b15-bce9-494f-9a11-34dd2c44d699')
|
||||
def test_get_configdocs(self):
|
||||
with self.rbac_utils.override_role(self):
|
||||
self.shipyard_document_staging_client.get_configdocs()
|
0
airship_tempest_plugin/tests/scenario/__init__.py
Normal file
0
airship_tempest_plugin/tests/scenario/__init__.py
Normal file
51
setup.cfg
Normal file
51
setup.cfg
Normal file
@ -0,0 +1,51 @@
|
||||
[metadata]
|
||||
name = airship-tempest-plugin
|
||||
summary = This project contains tests for Airship components
|
||||
description-file =
|
||||
README.rst
|
||||
author = OpenStack
|
||||
author-email = openstack-dev@lists.openstack.org
|
||||
home-page = http://www.openstack.org/
|
||||
classifier =
|
||||
Environment :: OpenStack
|
||||
Intended Audience :: Information Technology
|
||||
Intended Audience :: System Administrators
|
||||
License :: OSI Approved :: Apache Software License
|
||||
Operating System :: POSIX :: Linux
|
||||
Programming Language :: Python
|
||||
Programming Language :: Python :: 2
|
||||
Programming Language :: Python :: 2.7
|
||||
Programming Language :: Python :: 3
|
||||
Programming Language :: Python :: 3.3
|
||||
Programming Language :: Python :: 3.4
|
||||
|
||||
[files]
|
||||
packages =
|
||||
airship_tempest_plugin
|
||||
|
||||
[build_sphinx]
|
||||
all-files = 1
|
||||
warning-is-error = 1
|
||||
source-dir = doc/source
|
||||
build-dir = doc/build
|
||||
|
||||
[upload_sphinx]
|
||||
upload-dir = doc/build/html
|
||||
|
||||
[compile_catalog]
|
||||
directory = airship-tempest-plugin/locale
|
||||
domain = airship-tempest-plugin
|
||||
|
||||
[update_catalog]
|
||||
domain = airship-tempest-plugin
|
||||
output_dir = airship-tempest-plugin/locale
|
||||
input_file = airship-tempest-plugin/locale/airship-tempest-plugin.pot
|
||||
|
||||
[extract_messages]
|
||||
keywords = _ gettext ngettext l_ lazy_gettext
|
||||
mapping_file = babel.cfg
|
||||
output_file = airship-tempest-plugin/locale/airship-tempest-plugin.pot
|
||||
|
||||
[entry_points]
|
||||
tempest.test_plugins =
|
||||
airship_rbac_tests = airship_tempest_plugin.plugin:AirshipRbacPlugin
|
29
setup.py
Normal file
29
setup.py
Normal file
@ -0,0 +1,29 @@
|
||||
# Copyright (c) 2013 Hewlett-Packard Development Company, L.P.
|
||||
#
|
||||
# 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.
|
||||
|
||||
# THIS FILE IS MANAGED BY THE GLOBAL REQUIREMENTS REPO - DO NOT EDIT
|
||||
import setuptools
|
||||
|
||||
# In python < 2.7.4, a lazy loading of package `pbr` will break
|
||||
# setuptools if some other modules registered functions in `atexit`.
|
||||
# solution from: http://bugs.python.org/issue15881#msg170215
|
||||
try:
|
||||
import multiprocessing # noqa
|
||||
except ImportError:
|
||||
pass
|
||||
|
||||
setuptools.setup(
|
||||
setup_requires=['pbr'],
|
||||
pbr=True)
|
Loading…
Reference in New Issue
Block a user