Merge "Fix senlin tempest plugin to work properly"
This commit is contained in:
commit
36b3f4f159
1
.gitignore
vendored
1
.gitignore
vendored
@ -2,3 +2,4 @@ __pycache__
|
|||||||
.testrepository
|
.testrepository
|
||||||
.tox
|
.tox
|
||||||
*.egg-info
|
*.egg-info
|
||||||
|
*.pyc
|
||||||
|
21
.zuul.yaml
Normal file
21
.zuul.yaml
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
- project:
|
||||||
|
name: openstack/senlin-tempest-plugin
|
||||||
|
check:
|
||||||
|
jobs:
|
||||||
|
- senlin-dsvm-tempest-py27-api
|
||||||
|
- senlin-dsvm-tempest-py35-api:
|
||||||
|
voting: false
|
||||||
|
branches: ^(?!stable/newton).*$
|
||||||
|
- senlin-dsvm-tempest-py27-functional
|
||||||
|
- senlin-dsvm-tempest-py35-functional:
|
||||||
|
voting: false
|
||||||
|
branches: ^(?!stable/newton).*$
|
||||||
|
- senlin-dsvm-tempest-py27-integration:
|
||||||
|
voting: false
|
||||||
|
- senlin-dsvm-tempest-py35-integration:
|
||||||
|
voting: false
|
||||||
|
branches: ^(?!stable/newton).*$
|
||||||
|
gate:
|
||||||
|
jobs:
|
||||||
|
- senlin-dsvm-tempest-py27-api
|
||||||
|
- senlin-dsvm-tempest-py27-functional
|
94
README.rst
94
README.rst
@ -7,84 +7,40 @@ Team and repository tags
|
|||||||
|
|
||||||
.. Change things from this point on
|
.. Change things from this point on
|
||||||
|
|
||||||
Senlin
|
==============================
|
||||||
======
|
Tempest integration of Senlin
|
||||||
|
==============================
|
||||||
|
|
||||||
--------
|
This project contains the Tempest plugin for the Senlin project for
|
||||||
Overview
|
OpenStack Clustering.
|
||||||
--------
|
|
||||||
|
|
||||||
Senlin is a clustering service for OpenStack clouds. It creates and operates
|
For more information about Senlin see:
|
||||||
clusters of homogeneous objects exposed by other OpenStack services. The goal
|
https://docs.openstack.org/senlin/latest/
|
||||||
is to make the orchestration of collections of similar objects easier.
|
|
||||||
|
|
||||||
Senlin provides RESTful APIs to users so that they can associate various
|
For more information about Tempest plugins see:
|
||||||
policies to a cluster. Sample policies include placement policy, load
|
https://docs.openstack.org/tempest/latest/plugin.html
|
||||||
balancing policy, health policy, scaling policy, update policy and so on.
|
|
||||||
|
|
||||||
Senlin is designed to be capable of managing different types of objects. An
|
* Free software: Apache license
|
||||||
object's lifecycle is managed using profile type implementations, which are
|
* Source: http://git.openstack.org/cgit/openstack/senlin-tempest-plugin
|
||||||
themselves plugins.
|
|
||||||
|
|
||||||
---------
|
Installing
|
||||||
For Users
|
|
||||||
---------
|
|
||||||
|
|
||||||
If you want to install Senlin for a try out, please refer to the documents
|
|
||||||
under the ``doc/source/user/`` subdirectory.
|
|
||||||
|
|
||||||
--------------
|
|
||||||
For Developers
|
|
||||||
--------------
|
|
||||||
|
|
||||||
There are many ways to help improve the software, for example, filing a bug,
|
|
||||||
submitting or reviewing a patch, writing or reviewing some documents. There
|
|
||||||
are documents under the ``doc/source/developer/`` subdirectory.
|
|
||||||
|
|
||||||
---------
|
|
||||||
Resources
|
|
||||||
---------
|
|
||||||
|
|
||||||
Launchpad Projects
|
|
||||||
------------------
|
|
||||||
- Server: https://launchpad.net/senlin
|
|
||||||
- Client: https://launchpad.net/python-senlinclient
|
|
||||||
- Dashboard: https://launchpad.net/senlin-dashboard
|
|
||||||
- Tempest Plugin: https://launchpad.net/senlin-tempest-plugin
|
|
||||||
|
|
||||||
Code Repository
|
|
||||||
---------------
|
|
||||||
- Server: https://git.openstack.org/cgit/openstack/senlin
|
|
||||||
- Client: https://git.openstack.org/cgit/openstack/python-senlinclient
|
|
||||||
- Dashboard: https://git.openstack.org/cgit/openstack/senlin-dashboard
|
|
||||||
- Tempest Plugin: https://git.openstack.org/cgit/openstack/senlin-tempest-plugin
|
|
||||||
|
|
||||||
Blueprints
|
|
||||||
----------
|
----------
|
||||||
- Blueprints: https://blueprints.launchpad.net/senlin
|
|
||||||
|
|
||||||
Bug Tracking
|
Clone this repository to the destination machine, and call from the repo::
|
||||||
------------
|
|
||||||
- Server Bugs: https://bugs.launchpad.net/senlin
|
|
||||||
- Client Bugs: https://bugs.launchpad.net/python-senlinclient
|
|
||||||
- Dashboard Bugs: https://bugs.launchpad.net/senlin-dashboard
|
|
||||||
- Tempest Plugin Bugs: https://bugs.launchpad.net/senlin-tempest-plugin
|
|
||||||
|
|
||||||
Weekly Meetings
|
$ pip install -e .
|
||||||
---------------
|
|
||||||
- Schedule: every Tuesday at 1300 UTC, on #openstack-meeting channel
|
|
||||||
- Agenda: https://wiki.openstack.org/wiki/Meetings/SenlinAgenda
|
|
||||||
- Archive: http://eavesdrop.openstack.org/meetings/senlin/2017/
|
|
||||||
|
|
||||||
IRC
|
Running the tests
|
||||||
---
|
-----------------
|
||||||
IRC Channel: #senlin on `Freenode`_.
|
|
||||||
|
|
||||||
Mailinglist
|
To run all the tests from this plugin, call from the tempest repo::
|
||||||
-----------
|
|
||||||
Project use http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
|
|
||||||
as the mailinglist. Please use tag ``[Senlin]`` in the subject for new
|
|
||||||
threads.
|
|
||||||
|
|
||||||
|
$ tox -e all-plugin -- senlin_tempest_plugin
|
||||||
|
|
||||||
.. _Freenode: https://freenode.net/
|
To run a single test case, call with full path, for example::
|
||||||
|
|
||||||
|
$ tox -e all-plugin -- senlin_tempest_plugin.tests.api.policies.test_policy_update.TestPolicyUpdate.test_policy_update
|
||||||
|
|
||||||
|
To retrieve a list of all tempest tests, run::
|
||||||
|
|
||||||
|
$ testr list-tests
|
||||||
|
@ -78,7 +78,7 @@ def delete_a_profile(base, profile_id, ignore_missing=False):
|
|||||||
|
|
||||||
def create_a_cluster(base, profile_id, desired_capacity=0, min_size=0,
|
def create_a_cluster(base, profile_id, desired_capacity=0, min_size=0,
|
||||||
max_size=-1, timeout=None, metadata=None, name=None,
|
max_size=-1, timeout=None, metadata=None, name=None,
|
||||||
wait_timeout=None):
|
config=None, wait_timeout=None):
|
||||||
"""Utility function that generates a Senlin cluster.
|
"""Utility function that generates a Senlin cluster.
|
||||||
|
|
||||||
Create a cluster and return it after it is ACTIVE. The function is used for
|
Create a cluster and return it after it is ACTIVE. The function is used for
|
||||||
@ -94,7 +94,8 @@ def create_a_cluster(base, profile_id, desired_capacity=0, min_size=0,
|
|||||||
'max_size': max_size,
|
'max_size': max_size,
|
||||||
'timeout': timeout,
|
'timeout': timeout,
|
||||||
'metadata': metadata,
|
'metadata': metadata,
|
||||||
'name': name
|
'name': name,
|
||||||
|
'config': config
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
res = base.client.create_obj('clusters', params)
|
res = base.client.create_obj('clusters', params)
|
||||||
@ -402,10 +403,13 @@ def create_a_receiver(base, cluster_id, action, r_type=None, name=None,
|
|||||||
'name': name,
|
'name': name,
|
||||||
'cluster_id': cluster_id,
|
'cluster_id': cluster_id,
|
||||||
'type': r_type or 'webhook',
|
'type': r_type or 'webhook',
|
||||||
'action': action,
|
|
||||||
'params': params or {}
|
'params': params or {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if action is not None:
|
||||||
|
body['receiver']['action'] = action
|
||||||
|
|
||||||
res = base.client.create_obj('receivers', body)
|
res = base.client.create_obj('receivers', body)
|
||||||
return res['body']['id']
|
return res['body']['id']
|
||||||
|
|
||||||
|
@ -1,11 +0,0 @@
|
|||||||
OpenStack Test Driver
|
|
||||||
=====================
|
|
||||||
|
|
||||||
This is a fake driver for Senlin test. All interactions between Senlin
|
|
||||||
and backend OpenStack services, like Nova, Heat are simulated using this
|
|
||||||
driver. With it, Senlin API and engine workflow can be easily tested
|
|
||||||
without setting up backend services.
|
|
||||||
|
|
||||||
Configure the following option in senlin.conf to enable this driver:
|
|
||||||
|
|
||||||
`cloud_backend = openstack_test`
|
|
@ -1,85 +0,0 @@
|
|||||||
# 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 senlin_tempest_plugin.drivers import base
|
|
||||||
from senlin_tempest_plugin.drivers.openstack import sdk
|
|
||||||
|
|
||||||
|
|
||||||
class HeatClient(base.DriverBase):
|
|
||||||
'''Heat V1 driver.'''
|
|
||||||
|
|
||||||
def __init__(self, params):
|
|
||||||
super(HeatClient, self).__init__(params)
|
|
||||||
self.fake_stack_create = {
|
|
||||||
"id": "3095aefc-09fb-4bc7-b1f0-f21a304e864c",
|
|
||||||
"links": [
|
|
||||||
{
|
|
||||||
"href": " ",
|
|
||||||
"rel": "self"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
|
|
||||||
self.fake_stack_get = {
|
|
||||||
"capabilities": [],
|
|
||||||
"creation_time": "2014-06-03T20:59:46Z",
|
|
||||||
"description": "sample stack",
|
|
||||||
"disable_rollback": True,
|
|
||||||
"id": "3095aefc-09fb-4bc7-b1f0-f21a304e864c",
|
|
||||||
"links": [
|
|
||||||
{
|
|
||||||
"href": " ",
|
|
||||||
"rel": "self"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"notification_topics": [],
|
|
||||||
"outputs": [],
|
|
||||||
"parameters": {
|
|
||||||
"OS::project_id": "3ab5b02f-a01f-4f95-afa1-e254afc4a435",
|
|
||||||
"OS::stack_id": "3095aefc-09fb-4bc7-b1f0-f21a304e864c",
|
|
||||||
"OS::stack_name": "simple_stack"
|
|
||||||
},
|
|
||||||
"stack_name": "simple_stack",
|
|
||||||
"stack_owner": "simple_username",
|
|
||||||
"stack_status": "CREATE_COMPLETE",
|
|
||||||
"stack_status_reason": "Stack CREATE completed successfully",
|
|
||||||
"template_description": "sample stack",
|
|
||||||
"stack_user_project_id": "65728b74-cfe7-4f17-9c15-11d4f686e591",
|
|
||||||
"timeout_mins": "",
|
|
||||||
"updated_time": "",
|
|
||||||
"parent": "",
|
|
||||||
"tags": "",
|
|
||||||
"status": "CREATE_COMPLETE"
|
|
||||||
}
|
|
||||||
|
|
||||||
def stack_create(self, **params):
|
|
||||||
return sdk.FakeResourceObject(self.fake_stack_create)
|
|
||||||
|
|
||||||
def stack_get(self, stack_id):
|
|
||||||
return sdk.FakeResourceObject(self.fake_stack_get)
|
|
||||||
|
|
||||||
def stack_find(self, name_or_id):
|
|
||||||
return sdk.FakeResourceObject(self.fake_stack_get)
|
|
||||||
|
|
||||||
def stack_update(self, stack_id, **params):
|
|
||||||
self.fake_stack_get["status"] = "UPDATE_COMPLETE"
|
|
||||||
return sdk.FakeResourceObject(self.fake_stack_get)
|
|
||||||
|
|
||||||
def stack_delete(self, stack_id, ignore_missing=True):
|
|
||||||
return
|
|
||||||
|
|
||||||
def wait_for_stack(self, stack_id, status, failures=None, interval=2,
|
|
||||||
timeout=None):
|
|
||||||
return
|
|
||||||
|
|
||||||
def wait_for_stack_delete(self, stack_id, timeout=None):
|
|
||||||
return
|
|
@ -1,38 +0,0 @@
|
|||||||
# 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 senlin_tempest_plugin.drivers import base
|
|
||||||
|
|
||||||
|
|
||||||
class LoadBalancerDriver(base.DriverBase):
|
|
||||||
def __init__(self, params):
|
|
||||||
self.lb_result = {
|
|
||||||
"loadbalancer": "a36c20d0-18e9-42ce-88fd-82a35977ee8c",
|
|
||||||
"vip_address": "192.168.1.100",
|
|
||||||
"listener": "35cb8516-1173-4035-8dae-0dae3453f37f",
|
|
||||||
"pool": "4c0a0a5f-cf8f-44b7-b912-957daa8ce5e5",
|
|
||||||
"healthmonitor": "0a9ac99d-0a09-4b18-8499-a0796850279a"
|
|
||||||
}
|
|
||||||
|
|
||||||
self.member_id = "9a7aff27-fd41-4ec1-ba4c-3eb92c629313"
|
|
||||||
|
|
||||||
def lb_create(self, vip, pool, hm=None):
|
|
||||||
return True, self.lb_result
|
|
||||||
|
|
||||||
def lb_delete(self, **kwargs):
|
|
||||||
return True, 'LB deletion succeeded'
|
|
||||||
|
|
||||||
def member_add(self, node, lb_id, pool_id, port, subnet):
|
|
||||||
return self.member_id
|
|
||||||
|
|
||||||
def member_remove(self, lb_id, pool_id, member_id):
|
|
||||||
return True
|
|
@ -1,80 +0,0 @@
|
|||||||
# 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_utils import uuidutils
|
|
||||||
|
|
||||||
from senlin_tempest_plugin.drivers import base
|
|
||||||
from senlin_tempest_plugin.drivers.openstack import sdk
|
|
||||||
|
|
||||||
|
|
||||||
class MistralClient(base.DriverBase):
|
|
||||||
'''Fake mistral V2 driver for test.'''
|
|
||||||
|
|
||||||
def __init__(self, ctx):
|
|
||||||
|
|
||||||
self.fake_workflow = {
|
|
||||||
'created_at': '1970-01-01T00:00:00.000000',
|
|
||||||
'definition': 'workflow_def',
|
|
||||||
'id': 'ffaed25e-46f5-4089-8e20-b3b4722fd597',
|
|
||||||
'input': {
|
|
||||||
'cluster_id': '8c74607c-5a74-4490-9414-a3475b1926c2',
|
|
||||||
'node_id': 'fba2cc5d-706f-4631-9577-3956048d13a2',
|
|
||||||
'flavor_id': '1'
|
|
||||||
},
|
|
||||||
'name': "cluster-coldmigration",
|
|
||||||
'project_id': 'a7eb669e9819420ea4bd1453e672c0a7',
|
|
||||||
'scope': 'private',
|
|
||||||
'tags': [
|
|
||||||
'large',
|
|
||||||
'expensive'
|
|
||||||
],
|
|
||||||
'updated_at': '1970-01-01T00:00:00.000000',
|
|
||||||
}
|
|
||||||
|
|
||||||
self.fake_workflow_create = {
|
|
||||||
'scope': 'private',
|
|
||||||
'id': 'ffaed25e-46f5-4089-8e20-b3b4722fd597',
|
|
||||||
'definition': 'workflow_def',
|
|
||||||
}
|
|
||||||
|
|
||||||
self.fake_execution_create = {
|
|
||||||
'id': 'ffaed25e-46f5-4089-8e20-b3b4722fd597',
|
|
||||||
'workflow_name': 'cluster-coldmigration',
|
|
||||||
'input': {
|
|
||||||
'cluster_id': '8c74607c-5a74-4490-9414-a3475b1926c2',
|
|
||||||
'node_id': 'fba2cc5d-706f-4631-9577-3956048d13a2',
|
|
||||||
'flavor_id': '1'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
def wait_for_execution(self, execution, status='SUCCESS',
|
|
||||||
failures=['ERROR'], interval=2,
|
|
||||||
timeout=None):
|
|
||||||
return
|
|
||||||
|
|
||||||
def workflow_find(self, name_or_id, ignore_missing=True):
|
|
||||||
return sdk.FakeResourceObject(self.fake_workflow)
|
|
||||||
|
|
||||||
def workflow_delete(self, workflow, ignore_missing=True):
|
|
||||||
return
|
|
||||||
|
|
||||||
def execution_delete(self, execution, ignore_missing=True):
|
|
||||||
return
|
|
||||||
|
|
||||||
def workflow_create(self, definition, scope):
|
|
||||||
self.fake_workflow_create['id'] = uuidutils.generate_uuid()
|
|
||||||
return sdk.FakeResourceObject(self.fake_workflow_create)
|
|
||||||
|
|
||||||
def execution_create(self, name, inputs):
|
|
||||||
self.fake_execution_create['id'] = uuidutils.generate_uuid()
|
|
||||||
return sdk.FakeResourceObject(self.fake_execution_create)
|
|
@ -1,37 +0,0 @@
|
|||||||
# 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 senlin_tempest_plugin.drivers import base
|
|
||||||
from senlin_tempest_plugin.drivers.openstack import sdk
|
|
||||||
|
|
||||||
|
|
||||||
class NeutronClient(base.DriverBase):
|
|
||||||
'''Fake Neutron V2 driver for test.'''
|
|
||||||
|
|
||||||
def __init__(self, ctx):
|
|
||||||
self.fake_network = {
|
|
||||||
"status": "ACTIVE",
|
|
||||||
"subnets": [
|
|
||||||
"54d6f61d-db07-451c-9ab3-b9609b6b6f0b"
|
|
||||||
],
|
|
||||||
"name": "private-network",
|
|
||||||
"router:external": False,
|
|
||||||
"admin_state_up": True,
|
|
||||||
"tenant_id": "4fd44f30292945e481c7b8a0c8908869",
|
|
||||||
"mtu": 0,
|
|
||||||
"shared": True,
|
|
||||||
"port_security_enabled": True,
|
|
||||||
"id": "d32019d3-bc6e-4319-9c1d-6722fc136a22"
|
|
||||||
}
|
|
||||||
|
|
||||||
def network_get(self, value, ignore_missing=False):
|
|
||||||
return sdk.FakeResourceObject(self.fake_network)
|
|
@ -1,255 +0,0 @@
|
|||||||
# 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 copy
|
|
||||||
|
|
||||||
from oslo_utils import uuidutils
|
|
||||||
|
|
||||||
from senlin_tempest_plugin.drivers import base
|
|
||||||
from senlin_tempest_plugin.drivers.openstack import sdk
|
|
||||||
|
|
||||||
|
|
||||||
class NovaClient(base.DriverBase):
|
|
||||||
'''Fake Nova V2 driver for test.'''
|
|
||||||
|
|
||||||
def __init__(self, ctx):
|
|
||||||
self.fake_flavor = {
|
|
||||||
"is_disabled": False,
|
|
||||||
"disk": 1,
|
|
||||||
"OS-FLV-EXT-DATA:ephemeral": 0,
|
|
||||||
"os-flavor-access:is_public": True,
|
|
||||||
"id": "1",
|
|
||||||
"links": [],
|
|
||||||
"name": "m1.tiny",
|
|
||||||
"ram": 512,
|
|
||||||
"swap": "",
|
|
||||||
"vcpus": 1,
|
|
||||||
}
|
|
||||||
|
|
||||||
self.fake_image = {
|
|
||||||
"created": "2015-01-01T01:02:03Z",
|
|
||||||
"id": "70a599e0-31e7-49b7-b260-868f441e862b",
|
|
||||||
"links": [],
|
|
||||||
"metadata": {
|
|
||||||
"architecture": "x86_64",
|
|
||||||
"auto_disk_config": "True",
|
|
||||||
"kernel_id": "nokernel",
|
|
||||||
"ramdisk_id": "nokernel"
|
|
||||||
},
|
|
||||||
"minDisk": 0,
|
|
||||||
"minRam": 0,
|
|
||||||
"name": "cirros-0.3.5-x86_64-disk",
|
|
||||||
"progress": 100,
|
|
||||||
"status": "ACTIVE",
|
|
||||||
"updated": "2011-01-01T01:02:03Z"
|
|
||||||
}
|
|
||||||
|
|
||||||
self.fake_server_create = {
|
|
||||||
"id": "893c7791-f1df-4c3d-8383-3caae9656c62",
|
|
||||||
"availability_zone": "Zone1",
|
|
||||||
"name": "new-server-test",
|
|
||||||
"imageRef": "http://localhost/openstack/images/test-image",
|
|
||||||
"flavorRef": "http://localhost/openstack/flavors/1",
|
|
||||||
"metadata": {
|
|
||||||
"My Server Name": "Apache1"
|
|
||||||
},
|
|
||||||
"personality": [
|
|
||||||
{
|
|
||||||
"path": "/etc/banner.txt",
|
|
||||||
"contents": "personality-content"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"block_device_mapping_v2": [
|
|
||||||
{
|
|
||||||
"device_name": "/dev/sdb1",
|
|
||||||
"source_type": "blank",
|
|
||||||
"destination_type": "local",
|
|
||||||
"delete_on_termination": "True",
|
|
||||||
"guest_format": "swap",
|
|
||||||
"boot_index": "-1"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"device_name": "/dev/sda1",
|
|
||||||
"source_type": "volume",
|
|
||||||
"destination_type": "volume",
|
|
||||||
"uuid": "fake-volume-id-1",
|
|
||||||
"boot_index": "0"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
|
|
||||||
self.fake_server_get = {
|
|
||||||
# Note: The name of some attrs are defined as following to keep
|
|
||||||
# compatible with the resource definition in openstacksdk. But
|
|
||||||
# the real name of these attrs returned by Nova API could be
|
|
||||||
# different, e.g. the name of 'access_ipv4' attribute is actually
|
|
||||||
# 'accessIPv4' in server_get API response.
|
|
||||||
"id": "893c7791-f1df-4c3d-8383-3caae9656c62",
|
|
||||||
"name": "new-server-test",
|
|
||||||
"availability_zone": "ZONE1",
|
|
||||||
"access_ipv4": "192.168.0.3",
|
|
||||||
"access_ipv6": "fe80::ac0e:2aff:fe87:5911",
|
|
||||||
"addresses": {
|
|
||||||
"private": [
|
|
||||||
{
|
|
||||||
"addr": "192.168.0.3",
|
|
||||||
"version": 4
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"created_at": "2015-08-18T21:11:09Z",
|
|
||||||
"updated_at": "2012-08-20T21:11:09Z",
|
|
||||||
"flavor": {
|
|
||||||
"id": "1",
|
|
||||||
"links": []
|
|
||||||
},
|
|
||||||
"host_id": "65201c14a29663e06d0748e561207d998b343",
|
|
||||||
"image": {
|
|
||||||
"id": "FAKE_IMAGE_ID",
|
|
||||||
"links": []
|
|
||||||
},
|
|
||||||
"links": [],
|
|
||||||
"metadata": {
|
|
||||||
"My Server Name": "Apache1"
|
|
||||||
},
|
|
||||||
"progress": 0,
|
|
||||||
"status": "ACTIVE",
|
|
||||||
"project_id": "openstack",
|
|
||||||
"user_id": "fake"
|
|
||||||
}
|
|
||||||
|
|
||||||
self.fake_service_list = [
|
|
||||||
{
|
|
||||||
'id': 'IDENTIFIER1',
|
|
||||||
'binary': 'nova-api',
|
|
||||||
'host': 'host1',
|
|
||||||
'status': 'enabled',
|
|
||||||
'state': 'up',
|
|
||||||
'zone': 'nova'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'id': 'IDENTIFIER2',
|
|
||||||
'binary': 'nova-compute',
|
|
||||||
'host': 'host1',
|
|
||||||
'status': 'enabled',
|
|
||||||
'state': 'up',
|
|
||||||
'zone': 'nova'
|
|
||||||
},
|
|
||||||
]
|
|
||||||
|
|
||||||
self.keypair = {
|
|
||||||
'public_key': 'blahblah',
|
|
||||||
'type': 'ssh',
|
|
||||||
'name': 'oskey',
|
|
||||||
'fingerprint': 'not-real',
|
|
||||||
}
|
|
||||||
|
|
||||||
self.availability_zone = {
|
|
||||||
'zoneState': {
|
|
||||||
'available': True
|
|
||||||
},
|
|
||||||
'hosts': None,
|
|
||||||
'zoneName': 'nova',
|
|
||||||
}
|
|
||||||
|
|
||||||
def flavor_find(self, name_or_id, ignore_missing=False):
|
|
||||||
return sdk.FakeResourceObject(self.fake_flavor)
|
|
||||||
|
|
||||||
def flavor_list(self, details=True, **query):
|
|
||||||
return [sdk.FakeResourceObject(self.fake_flavor)]
|
|
||||||
|
|
||||||
def image_find(self, name_or_id, ignore_missing=False):
|
|
||||||
return sdk.FakeResourceObject(self.fake_image)
|
|
||||||
|
|
||||||
def image_list(self, details=True, **query):
|
|
||||||
return [sdk.FakeResourceObject(self.fake_image)]
|
|
||||||
|
|
||||||
def keypair_list(self, details=True, **query):
|
|
||||||
return [sdk.FakeResourceObject(self.fake_keypair)]
|
|
||||||
|
|
||||||
def keypair_find(self, name_or_id, ignore_missing=False):
|
|
||||||
return sdk.FakeResourceObject(self.keypair)
|
|
||||||
|
|
||||||
def server_create(self, **attrs):
|
|
||||||
self.fake_server_create['id'] = uuidutils.generate_uuid()
|
|
||||||
self.fake_server_get['id'] = self.fake_server_create['id']
|
|
||||||
return sdk.FakeResourceObject(self.fake_server_create)
|
|
||||||
|
|
||||||
def server_get(self, server):
|
|
||||||
return sdk.FakeResourceObject(self.fake_server_get)
|
|
||||||
|
|
||||||
def wait_for_server(self, server, timeout=None):
|
|
||||||
return
|
|
||||||
|
|
||||||
def wait_for_server_delete(self, server, timeout=None):
|
|
||||||
return
|
|
||||||
|
|
||||||
def server_update(self, server, **attrs):
|
|
||||||
self.fake_server_get.update(attrs)
|
|
||||||
return sdk.FakeResourceObject(self.fake_server_get)
|
|
||||||
|
|
||||||
def server_rebuild(self, server, imageref, name=None, admin_password=None,
|
|
||||||
**attrs):
|
|
||||||
if imageref:
|
|
||||||
attrs['image'] = {'id': imageref}
|
|
||||||
if name:
|
|
||||||
attrs['name'] = name
|
|
||||||
if admin_password:
|
|
||||||
attrs['adminPass'] = admin_password
|
|
||||||
self.fake_server_get.update(attrs)
|
|
||||||
|
|
||||||
return sdk.FakeResourceObject(self.fake_server_get)
|
|
||||||
|
|
||||||
def server_resize(self, server, flavor):
|
|
||||||
self.fake_server_get['flavor'].update({'id': flavor})
|
|
||||||
|
|
||||||
def server_resize_confirm(self, server):
|
|
||||||
return
|
|
||||||
|
|
||||||
def server_resize_revert(self, server):
|
|
||||||
return
|
|
||||||
|
|
||||||
def server_reboot(self, server, reboot_type):
|
|
||||||
return
|
|
||||||
|
|
||||||
def server_delete(self, server, ignore_missing=True):
|
|
||||||
return
|
|
||||||
|
|
||||||
def server_force_delete(self, server, ignore_missing=True):
|
|
||||||
return
|
|
||||||
|
|
||||||
def server_metadata_get(self, server):
|
|
||||||
return {}
|
|
||||||
|
|
||||||
def server_metadata_update(self, server, metadata):
|
|
||||||
new_server = copy.deepcopy(self.fake_server_get)
|
|
||||||
new_server['metadata'] = metadata
|
|
||||||
server = sdk.FakeResourceObject(new_server)
|
|
||||||
return server
|
|
||||||
|
|
||||||
def server_metadata_delete(self, server, keys):
|
|
||||||
return
|
|
||||||
|
|
||||||
def service_list(self):
|
|
||||||
return sdk.FakeResourceObject(self.fake_service_list)
|
|
||||||
|
|
||||||
def service_force_down(self, service, host, binary):
|
|
||||||
return
|
|
||||||
|
|
||||||
def service_enable(self, service, host, binary):
|
|
||||||
return
|
|
||||||
|
|
||||||
def service_disable(self, service, host, binary):
|
|
||||||
return
|
|
||||||
|
|
||||||
def availability_zone_list(self, **query):
|
|
||||||
return [sdk.FakeResourceObject(self.availability_zone)]
|
|
@ -1,28 +0,0 @@
|
|||||||
# 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.
|
|
||||||
|
|
||||||
|
|
||||||
class FakeResourceObject(object):
|
|
||||||
'''Generate a fake SDK resource object based on given dictionary'''
|
|
||||||
def __init__(self, params):
|
|
||||||
for key in params:
|
|
||||||
setattr(self, key, params[key])
|
|
||||||
|
|
||||||
def to_dict(self):
|
|
||||||
'''Override this function in subclass to handle special attributes'''
|
|
||||||
data = {}
|
|
||||||
for attr in dir(self):
|
|
||||||
if not attr.startswith('__'):
|
|
||||||
# Exclude built-in attributes of python object
|
|
||||||
data[attr] = getattr(self, attr)
|
|
||||||
|
|
||||||
return data
|
|
@ -23,8 +23,7 @@ class SenlinTempestPlugin(plugins.TempestPlugin):
|
|||||||
def load_tests(self):
|
def load_tests(self):
|
||||||
base_path = os.path.split(os.path.dirname(
|
base_path = os.path.split(os.path.dirname(
|
||||||
os.path.abspath(__file__)))[0]
|
os.path.abspath(__file__)))[0]
|
||||||
base_path += '/..'
|
test_dir = "senlin_tempest_plugin/tests"
|
||||||
test_dir = "senlin_tempest_plugin"
|
|
||||||
full_test_dir = os.path.join(base_path, test_dir)
|
full_test_dir = os.path.join(base_path, test_dir)
|
||||||
return full_test_dir, base_path
|
return full_test_dir, base_path
|
||||||
|
|
||||||
|
@ -12,8 +12,8 @@
|
|||||||
|
|
||||||
from tempest.lib import decorators
|
from tempest.lib import decorators
|
||||||
|
|
||||||
from senlin_tempest_plugin.api import base
|
|
||||||
from senlin_tempest_plugin.common import utils
|
from senlin_tempest_plugin.common import utils
|
||||||
|
from senlin_tempest_plugin.tests.api import base
|
||||||
|
|
||||||
|
|
||||||
class TestActionList(base.BaseSenlinAPITest):
|
class TestActionList(base.BaseSenlinAPITest):
|
@ -13,7 +13,7 @@
|
|||||||
from tempest.lib import decorators
|
from tempest.lib import decorators
|
||||||
from tempest.lib import exceptions
|
from tempest.lib import exceptions
|
||||||
|
|
||||||
from senlin_tempest_plugin.api import base
|
from senlin_tempest_plugin.tests.api import base
|
||||||
|
|
||||||
|
|
||||||
class TestActionListNegativeBadRequest(base.BaseSenlinAPITest):
|
class TestActionListNegativeBadRequest(base.BaseSenlinAPITest):
|
@ -12,8 +12,8 @@
|
|||||||
|
|
||||||
from tempest.lib import decorators
|
from tempest.lib import decorators
|
||||||
|
|
||||||
from senlin_tempest_plugin.api import base
|
|
||||||
from senlin_tempest_plugin.common import utils
|
from senlin_tempest_plugin.common import utils
|
||||||
|
from senlin_tempest_plugin.tests.api import base
|
||||||
|
|
||||||
|
|
||||||
class TestActionShow(base.BaseSenlinAPITest):
|
class TestActionShow(base.BaseSenlinAPITest):
|
@ -13,7 +13,7 @@
|
|||||||
from tempest.lib import decorators
|
from tempest.lib import decorators
|
||||||
from tempest.lib import exceptions
|
from tempest.lib import exceptions
|
||||||
|
|
||||||
from senlin_tempest_plugin.api import base
|
from senlin_tempest_plugin.tests.api import base
|
||||||
|
|
||||||
|
|
||||||
class TestActionShowNegativeNotFound(base.BaseSenlinAPITest):
|
class TestActionShowNegativeNotFound(base.BaseSenlinAPITest):
|
@ -12,7 +12,7 @@
|
|||||||
|
|
||||||
from tempest.lib import decorators
|
from tempest.lib import decorators
|
||||||
|
|
||||||
from senlin_tempest_plugin.api import base
|
from senlin_tempest_plugin.tests.api import base
|
||||||
|
|
||||||
|
|
||||||
class TestAPIVersionShow(base.BaseSenlinAPITest):
|
class TestAPIVersionShow(base.BaseSenlinAPITest):
|
@ -13,7 +13,7 @@
|
|||||||
from tempest.lib import decorators
|
from tempest.lib import decorators
|
||||||
from tempest.lib import exceptions
|
from tempest.lib import exceptions
|
||||||
|
|
||||||
from senlin_tempest_plugin.api import base
|
from senlin_tempest_plugin.tests.api import base
|
||||||
|
|
||||||
|
|
||||||
class TestAPIVersionShowNegative(base.BaseSenlinAPITest):
|
class TestAPIVersionShowNegative(base.BaseSenlinAPITest):
|
@ -12,7 +12,7 @@
|
|||||||
|
|
||||||
from tempest.lib import decorators
|
from tempest.lib import decorators
|
||||||
|
|
||||||
from senlin_tempest_plugin.api import base
|
from senlin_tempest_plugin.tests.api import base
|
||||||
|
|
||||||
|
|
||||||
class TestAPIVersions(base.BaseSenlinAPITest):
|
class TestAPIVersions(base.BaseSenlinAPITest):
|
@ -34,21 +34,21 @@ class BaseSenlinAPITest(base.BaseSenlinTest):
|
|||||||
def setup_clients(cls):
|
def setup_clients(cls):
|
||||||
super(BaseSenlinAPITest, cls).setup_clients()
|
super(BaseSenlinAPITest, cls).setup_clients()
|
||||||
cls.client = clustering_client.ClusteringAPIClient(
|
cls.client = clustering_client.ClusteringAPIClient(
|
||||||
cls.os.auth_provider,
|
cls.os_primary.auth_provider,
|
||||||
CONF.clustering.catalog_type,
|
CONF.clustering.catalog_type,
|
||||||
CONF.identity.region,
|
CONF.identity.region,
|
||||||
**cls.default_params_with_timeout_values
|
**cls.default_params_with_timeout_values
|
||||||
)
|
)
|
||||||
|
|
||||||
cls.compute_client = compute_client.V21ComputeClient(
|
cls.compute_client = compute_client.V21ComputeClient(
|
||||||
cls.os.auth_provider,
|
cls.os_primary.auth_provider,
|
||||||
CONF.compute.catalog_type,
|
CONF.compute.catalog_type,
|
||||||
CONF.identity.region,
|
CONF.identity.region,
|
||||||
**cls.default_params_with_timeout_values
|
**cls.default_params_with_timeout_values
|
||||||
)
|
)
|
||||||
|
|
||||||
cls.network_client = network_client.NetworkClient(
|
cls.network_client = network_client.NetworkClient(
|
||||||
cls.os.auth_provider,
|
cls.os_primary.auth_provider,
|
||||||
CONF.network.catalog_type,
|
CONF.network.catalog_type,
|
||||||
CONF.identity.region,
|
CONF.identity.region,
|
||||||
**cls.default_params_with_timeout_values
|
**cls.default_params_with_timeout_values
|
@ -12,7 +12,7 @@
|
|||||||
|
|
||||||
from tempest.lib import decorators
|
from tempest.lib import decorators
|
||||||
|
|
||||||
from senlin_tempest_plugin.api import base
|
from senlin_tempest_plugin.tests.api import base
|
||||||
|
|
||||||
|
|
||||||
class TestBuildInfo(base.BaseSenlinAPITest):
|
class TestBuildInfo(base.BaseSenlinAPITest):
|
@ -12,8 +12,8 @@
|
|||||||
|
|
||||||
from tempest.lib import decorators
|
from tempest.lib import decorators
|
||||||
|
|
||||||
from senlin_tempest_plugin.api import base
|
|
||||||
from senlin_tempest_plugin.common import utils
|
from senlin_tempest_plugin.common import utils
|
||||||
|
from senlin_tempest_plugin.tests.api import base
|
||||||
|
|
||||||
|
|
||||||
class TestClusterPolicyList(base.BaseSenlinAPITest):
|
class TestClusterPolicyList(base.BaseSenlinAPITest):
|
@ -13,7 +13,7 @@
|
|||||||
from tempest.lib import decorators
|
from tempest.lib import decorators
|
||||||
from tempest.lib import exceptions
|
from tempest.lib import exceptions
|
||||||
|
|
||||||
from senlin_tempest_plugin.api import base
|
from senlin_tempest_plugin.tests.api import base
|
||||||
|
|
||||||
|
|
||||||
class TestClusterPolicyListNegativeBadRequest(base.BaseSenlinAPITest):
|
class TestClusterPolicyListNegativeBadRequest(base.BaseSenlinAPITest):
|
@ -12,8 +12,8 @@
|
|||||||
|
|
||||||
from tempest.lib import decorators
|
from tempest.lib import decorators
|
||||||
|
|
||||||
from senlin_tempest_plugin.api import base
|
|
||||||
from senlin_tempest_plugin.common import utils
|
from senlin_tempest_plugin.common import utils
|
||||||
|
from senlin_tempest_plugin.tests.api import base
|
||||||
|
|
||||||
|
|
||||||
class TestClusterPolicyShow(base.BaseSenlinAPITest):
|
class TestClusterPolicyShow(base.BaseSenlinAPITest):
|
@ -13,8 +13,8 @@
|
|||||||
from tempest.lib import decorators
|
from tempest.lib import decorators
|
||||||
from tempest.lib import exceptions
|
from tempest.lib import exceptions
|
||||||
|
|
||||||
from senlin_tempest_plugin.api import base
|
|
||||||
from senlin_tempest_plugin.common import utils
|
from senlin_tempest_plugin.common import utils
|
||||||
|
from senlin_tempest_plugin.tests.api import base
|
||||||
|
|
||||||
|
|
||||||
class TestClusterPolicyShowNegativeClusterNotFound(base.BaseSenlinAPITest):
|
class TestClusterPolicyShowNegativeClusterNotFound(base.BaseSenlinAPITest):
|
@ -13,7 +13,7 @@
|
|||||||
from tempest.lib import decorators
|
from tempest.lib import decorators
|
||||||
from tempest.lib import exceptions
|
from tempest.lib import exceptions
|
||||||
|
|
||||||
from senlin_tempest_plugin.api import base
|
from senlin_tempest_plugin.tests.api import base
|
||||||
|
|
||||||
|
|
||||||
class TestClusterActionNegativeCommon(base.BaseSenlinAPITest):
|
class TestClusterActionNegativeCommon(base.BaseSenlinAPITest):
|
@ -13,9 +13,9 @@
|
|||||||
from tempest.lib import decorators
|
from tempest.lib import decorators
|
||||||
from tempest.lib import exceptions
|
from tempest.lib import exceptions
|
||||||
|
|
||||||
from senlin_tempest_plugin.api import base
|
|
||||||
from senlin_tempest_plugin.common import constants
|
from senlin_tempest_plugin.common import constants
|
||||||
from senlin_tempest_plugin.common import utils
|
from senlin_tempest_plugin.common import utils
|
||||||
|
from senlin_tempest_plugin.tests.api import base
|
||||||
|
|
||||||
|
|
||||||
class TestClusterActionAddNodes(base.BaseSenlinAPITest):
|
class TestClusterActionAddNodes(base.BaseSenlinAPITest):
|
@ -13,8 +13,8 @@
|
|||||||
from tempest.lib import decorators
|
from tempest.lib import decorators
|
||||||
from tempest.lib import exceptions
|
from tempest.lib import exceptions
|
||||||
|
|
||||||
from senlin_tempest_plugin.api import base
|
|
||||||
from senlin_tempest_plugin.common import utils
|
from senlin_tempest_plugin.common import utils
|
||||||
|
from senlin_tempest_plugin.tests.api import base
|
||||||
|
|
||||||
|
|
||||||
class TestClusterActionCheck(base.BaseSenlinAPITest):
|
class TestClusterActionCheck(base.BaseSenlinAPITest):
|
@ -13,8 +13,8 @@
|
|||||||
from tempest.lib import decorators
|
from tempest.lib import decorators
|
||||||
from tempest.lib import exceptions
|
from tempest.lib import exceptions
|
||||||
|
|
||||||
from senlin_tempest_plugin.api import base
|
|
||||||
from senlin_tempest_plugin.common import utils
|
from senlin_tempest_plugin.common import utils
|
||||||
|
from senlin_tempest_plugin.tests.api import base
|
||||||
|
|
||||||
|
|
||||||
class TestClusterCollect(base.BaseSenlinAPITest):
|
class TestClusterCollect(base.BaseSenlinAPITest):
|
||||||
@ -23,7 +23,8 @@ class TestClusterCollect(base.BaseSenlinAPITest):
|
|||||||
super(TestClusterCollect, self).setUp()
|
super(TestClusterCollect, self).setUp()
|
||||||
profile_id = utils.create_a_profile(self)
|
profile_id = utils.create_a_profile(self)
|
||||||
self.addCleanup(utils.delete_a_profile, self, profile_id)
|
self.addCleanup(utils.delete_a_profile, self, profile_id)
|
||||||
self.cluster_id = utils.create_a_cluster(self, profile_id)
|
self.cluster_id = utils.create_a_cluster(
|
||||||
|
self, profile_id, config={'node.name.format': 'N$2I'})
|
||||||
self.addCleanup(utils.delete_a_cluster, self, self.cluster_id)
|
self.addCleanup(utils.delete_a_cluster, self, self.cluster_id)
|
||||||
self.node1 = utils.create_a_node(self, profile_id, name='N01',
|
self.node1 = utils.create_a_node(self, profile_id, name='N01',
|
||||||
cluster_id=self.cluster_id)
|
cluster_id=self.cluster_id)
|
@ -12,8 +12,8 @@
|
|||||||
|
|
||||||
from tempest.lib import decorators
|
from tempest.lib import decorators
|
||||||
|
|
||||||
from senlin_tempest_plugin.api import base
|
|
||||||
from senlin_tempest_plugin.common import utils
|
from senlin_tempest_plugin.common import utils
|
||||||
|
from senlin_tempest_plugin.tests.api import base
|
||||||
|
|
||||||
|
|
||||||
class TestClusterCreate(base.BaseSenlinAPITest):
|
class TestClusterCreate(base.BaseSenlinAPITest):
|
@ -13,8 +13,8 @@
|
|||||||
from tempest.lib import decorators
|
from tempest.lib import decorators
|
||||||
from tempest.lib import exceptions
|
from tempest.lib import exceptions
|
||||||
|
|
||||||
from senlin_tempest_plugin.api import base
|
|
||||||
from senlin_tempest_plugin.common import utils
|
from senlin_tempest_plugin.common import utils
|
||||||
|
from senlin_tempest_plugin.tests.api import base
|
||||||
|
|
||||||
|
|
||||||
class TestClusterCreateNegativeBadRequest(base.BaseSenlinAPITest):
|
class TestClusterCreateNegativeBadRequest(base.BaseSenlinAPITest):
|
@ -13,8 +13,8 @@
|
|||||||
from tempest.lib import decorators
|
from tempest.lib import decorators
|
||||||
from tempest.lib import exceptions
|
from tempest.lib import exceptions
|
||||||
|
|
||||||
from senlin_tempest_plugin.api import base
|
|
||||||
from senlin_tempest_plugin.common import utils
|
from senlin_tempest_plugin.common import utils
|
||||||
|
from senlin_tempest_plugin.tests.api import base
|
||||||
|
|
||||||
|
|
||||||
class TestClusterActionDelNodes(base.BaseSenlinAPITest):
|
class TestClusterActionDelNodes(base.BaseSenlinAPITest):
|
@ -12,8 +12,8 @@
|
|||||||
|
|
||||||
from tempest.lib import decorators
|
from tempest.lib import decorators
|
||||||
|
|
||||||
from senlin_tempest_plugin.api import base
|
|
||||||
from senlin_tempest_plugin.common import utils
|
from senlin_tempest_plugin.common import utils
|
||||||
|
from senlin_tempest_plugin.tests.api import base
|
||||||
|
|
||||||
|
|
||||||
class TestClusterDelete(base.BaseSenlinAPITest):
|
class TestClusterDelete(base.BaseSenlinAPITest):
|
@ -13,8 +13,8 @@
|
|||||||
from tempest.lib import decorators
|
from tempest.lib import decorators
|
||||||
from tempest.lib import exceptions
|
from tempest.lib import exceptions
|
||||||
|
|
||||||
from senlin_tempest_plugin.api import base
|
|
||||||
from senlin_tempest_plugin.common import utils
|
from senlin_tempest_plugin.common import utils
|
||||||
|
from senlin_tempest_plugin.tests.api import base
|
||||||
|
|
||||||
|
|
||||||
class TestClusterDeleteNegativePolicyConflict(base.BaseSenlinAPITest):
|
class TestClusterDeleteNegativePolicyConflict(base.BaseSenlinAPITest):
|
@ -12,8 +12,8 @@
|
|||||||
|
|
||||||
from tempest.lib import decorators
|
from tempest.lib import decorators
|
||||||
|
|
||||||
from senlin_tempest_plugin.api import base
|
|
||||||
from senlin_tempest_plugin.common import utils
|
from senlin_tempest_plugin.common import utils
|
||||||
|
from senlin_tempest_plugin.tests.api import base
|
||||||
|
|
||||||
|
|
||||||
class TestClusterList(base.BaseSenlinAPITest):
|
class TestClusterList(base.BaseSenlinAPITest):
|
@ -13,7 +13,7 @@
|
|||||||
from tempest.lib import decorators
|
from tempest.lib import decorators
|
||||||
from tempest.lib import exceptions
|
from tempest.lib import exceptions
|
||||||
|
|
||||||
from senlin_tempest_plugin.api import base
|
from senlin_tempest_plugin.tests.api import base
|
||||||
|
|
||||||
|
|
||||||
class TestClusterListNegativeBadRequest(base.BaseSenlinAPITest):
|
class TestClusterListNegativeBadRequest(base.BaseSenlinAPITest):
|
@ -13,8 +13,8 @@
|
|||||||
from tempest.lib import decorators
|
from tempest.lib import decorators
|
||||||
from tempest.lib import exceptions
|
from tempest.lib import exceptions
|
||||||
|
|
||||||
from senlin_tempest_plugin.api import base
|
|
||||||
from senlin_tempest_plugin.common import utils
|
from senlin_tempest_plugin.common import utils
|
||||||
|
from senlin_tempest_plugin.tests.api import base
|
||||||
|
|
||||||
|
|
||||||
class TestClusterActionPolicyAttach(base.BaseSenlinAPITest):
|
class TestClusterActionPolicyAttach(base.BaseSenlinAPITest):
|
@ -13,8 +13,8 @@
|
|||||||
from tempest.lib import decorators
|
from tempest.lib import decorators
|
||||||
from tempest.lib import exceptions
|
from tempest.lib import exceptions
|
||||||
|
|
||||||
from senlin_tempest_plugin.api import base
|
|
||||||
from senlin_tempest_plugin.common import utils
|
from senlin_tempest_plugin.common import utils
|
||||||
|
from senlin_tempest_plugin.tests.api import base
|
||||||
|
|
||||||
|
|
||||||
class TestClusterActionPolicyDetach(base.BaseSenlinAPITest):
|
class TestClusterActionPolicyDetach(base.BaseSenlinAPITest):
|
@ -13,8 +13,8 @@
|
|||||||
from tempest.lib import decorators
|
from tempest.lib import decorators
|
||||||
from tempest.lib import exceptions
|
from tempest.lib import exceptions
|
||||||
|
|
||||||
from senlin_tempest_plugin.api import base
|
|
||||||
from senlin_tempest_plugin.common import utils
|
from senlin_tempest_plugin.common import utils
|
||||||
|
from senlin_tempest_plugin.tests.api import base
|
||||||
|
|
||||||
|
|
||||||
class TestClusterActionPolicyUpdate(base.BaseSenlinAPITest):
|
class TestClusterActionPolicyUpdate(base.BaseSenlinAPITest):
|
@ -13,8 +13,8 @@
|
|||||||
from tempest.lib import decorators
|
from tempest.lib import decorators
|
||||||
from tempest.lib import exceptions
|
from tempest.lib import exceptions
|
||||||
|
|
||||||
from senlin_tempest_plugin.api import base
|
|
||||||
from senlin_tempest_plugin.common import utils
|
from senlin_tempest_plugin.common import utils
|
||||||
|
from senlin_tempest_plugin.tests.api import base
|
||||||
|
|
||||||
|
|
||||||
class TestClusterActionRecover(base.BaseSenlinAPITest):
|
class TestClusterActionRecover(base.BaseSenlinAPITest):
|
@ -13,9 +13,9 @@
|
|||||||
from tempest.lib import decorators
|
from tempest.lib import decorators
|
||||||
from tempest.lib import exceptions
|
from tempest.lib import exceptions
|
||||||
|
|
||||||
from senlin_tempest_plugin.api import base
|
|
||||||
from senlin_tempest_plugin.common import constants
|
from senlin_tempest_plugin.common import constants
|
||||||
from senlin_tempest_plugin.common import utils
|
from senlin_tempest_plugin.common import utils
|
||||||
|
from senlin_tempest_plugin.tests.api import base
|
||||||
|
|
||||||
|
|
||||||
class TestClusterActionReplaceNodes(base.BaseSenlinAPITest):
|
class TestClusterActionReplaceNodes(base.BaseSenlinAPITest):
|
@ -13,8 +13,8 @@
|
|||||||
from tempest.lib import decorators
|
from tempest.lib import decorators
|
||||||
from tempest.lib import exceptions
|
from tempest.lib import exceptions
|
||||||
|
|
||||||
from senlin_tempest_plugin.api import base
|
|
||||||
from senlin_tempest_plugin.common import utils
|
from senlin_tempest_plugin.common import utils
|
||||||
|
from senlin_tempest_plugin.tests.api import base
|
||||||
|
|
||||||
|
|
||||||
class TestClusterActionResize(base.BaseSenlinAPITest):
|
class TestClusterActionResize(base.BaseSenlinAPITest):
|
@ -13,8 +13,8 @@
|
|||||||
from tempest.lib import decorators
|
from tempest.lib import decorators
|
||||||
from tempest.lib import exceptions
|
from tempest.lib import exceptions
|
||||||
|
|
||||||
from senlin_tempest_plugin.api import base
|
|
||||||
from senlin_tempest_plugin.common import utils
|
from senlin_tempest_plugin.common import utils
|
||||||
|
from senlin_tempest_plugin.tests.api import base
|
||||||
|
|
||||||
|
|
||||||
class TestClusterActionScaleIn(base.BaseSenlinAPITest):
|
class TestClusterActionScaleIn(base.BaseSenlinAPITest):
|
@ -13,8 +13,8 @@
|
|||||||
from tempest.lib import decorators
|
from tempest.lib import decorators
|
||||||
from tempest.lib import exceptions
|
from tempest.lib import exceptions
|
||||||
|
|
||||||
from senlin_tempest_plugin.api import base
|
|
||||||
from senlin_tempest_plugin.common import utils
|
from senlin_tempest_plugin.common import utils
|
||||||
|
from senlin_tempest_plugin.tests.api import base
|
||||||
|
|
||||||
|
|
||||||
class TestClusterActionScaleOut(base.BaseSenlinAPITest):
|
class TestClusterActionScaleOut(base.BaseSenlinAPITest):
|
@ -12,8 +12,8 @@
|
|||||||
|
|
||||||
from tempest.lib import decorators
|
from tempest.lib import decorators
|
||||||
|
|
||||||
from senlin_tempest_plugin.api import base
|
|
||||||
from senlin_tempest_plugin.common import utils
|
from senlin_tempest_plugin.common import utils
|
||||||
|
from senlin_tempest_plugin.tests.api import base
|
||||||
|
|
||||||
|
|
||||||
class TestClusterShow(base.BaseSenlinAPITest):
|
class TestClusterShow(base.BaseSenlinAPITest):
|
@ -13,8 +13,8 @@
|
|||||||
from tempest.lib import decorators
|
from tempest.lib import decorators
|
||||||
from tempest.lib import exceptions
|
from tempest.lib import exceptions
|
||||||
|
|
||||||
from senlin_tempest_plugin.api import base
|
|
||||||
from senlin_tempest_plugin.common import utils
|
from senlin_tempest_plugin.common import utils
|
||||||
|
from senlin_tempest_plugin.tests.api import base
|
||||||
|
|
||||||
|
|
||||||
class TestClusterShowNegativeBadRequest(base.BaseSenlinAPITest):
|
class TestClusterShowNegativeBadRequest(base.BaseSenlinAPITest):
|
@ -12,8 +12,8 @@
|
|||||||
|
|
||||||
from tempest.lib import decorators
|
from tempest.lib import decorators
|
||||||
|
|
||||||
from senlin_tempest_plugin.api import base
|
|
||||||
from senlin_tempest_plugin.common import utils
|
from senlin_tempest_plugin.common import utils
|
||||||
|
from senlin_tempest_plugin.tests.api import base
|
||||||
|
|
||||||
|
|
||||||
class TestClusterUpdate(base.BaseSenlinAPITest):
|
class TestClusterUpdate(base.BaseSenlinAPITest):
|
@ -14,9 +14,9 @@ import copy
|
|||||||
from tempest.lib import decorators
|
from tempest.lib import decorators
|
||||||
from tempest.lib import exceptions
|
from tempest.lib import exceptions
|
||||||
|
|
||||||
from senlin_tempest_plugin.api import base
|
|
||||||
from senlin_tempest_plugin.common import constants
|
from senlin_tempest_plugin.common import constants
|
||||||
from senlin_tempest_plugin.common import utils
|
from senlin_tempest_plugin.common import utils
|
||||||
|
from senlin_tempest_plugin.tests.api import base
|
||||||
|
|
||||||
|
|
||||||
class TestClusterUpdateNegativeInvalidParam(base.BaseSenlinAPITest):
|
class TestClusterUpdateNegativeInvalidParam(base.BaseSenlinAPITest):
|
@ -13,9 +13,9 @@
|
|||||||
import copy
|
import copy
|
||||||
from tempest.lib import decorators
|
from tempest.lib import decorators
|
||||||
|
|
||||||
from senlin_tempest_plugin.api import base
|
|
||||||
from senlin_tempest_plugin.common import constants
|
from senlin_tempest_plugin.common import constants
|
||||||
from senlin_tempest_plugin.common import utils
|
from senlin_tempest_plugin.common import utils
|
||||||
|
from senlin_tempest_plugin.tests.api import base
|
||||||
|
|
||||||
|
|
||||||
class TestClusterUpdateProfile(base.BaseSenlinAPITest):
|
class TestClusterUpdateProfile(base.BaseSenlinAPITest):
|
@ -12,8 +12,8 @@
|
|||||||
|
|
||||||
from tempest.lib import decorators
|
from tempest.lib import decorators
|
||||||
|
|
||||||
from senlin_tempest_plugin.api import base
|
|
||||||
from senlin_tempest_plugin.common import utils
|
from senlin_tempest_plugin.common import utils
|
||||||
|
from senlin_tempest_plugin.tests.api import base
|
||||||
|
|
||||||
|
|
||||||
class TestEventList(base.BaseSenlinAPITest):
|
class TestEventList(base.BaseSenlinAPITest):
|
@ -13,7 +13,7 @@
|
|||||||
from tempest.lib import decorators
|
from tempest.lib import decorators
|
||||||
from tempest.lib import exceptions
|
from tempest.lib import exceptions
|
||||||
|
|
||||||
from senlin_tempest_plugin.api import base
|
from senlin_tempest_plugin.tests.api import base
|
||||||
|
|
||||||
|
|
||||||
class TestEventListNegativeBadRequest(base.BaseSenlinAPITest):
|
class TestEventListNegativeBadRequest(base.BaseSenlinAPITest):
|
@ -12,8 +12,8 @@
|
|||||||
|
|
||||||
from tempest.lib import decorators
|
from tempest.lib import decorators
|
||||||
|
|
||||||
from senlin_tempest_plugin.api import base
|
|
||||||
from senlin_tempest_plugin.common import utils
|
from senlin_tempest_plugin.common import utils
|
||||||
|
from senlin_tempest_plugin.tests.api import base
|
||||||
|
|
||||||
|
|
||||||
class TestEventShow(base.BaseSenlinAPITest):
|
class TestEventShow(base.BaseSenlinAPITest):
|
@ -13,7 +13,7 @@
|
|||||||
from tempest.lib import decorators
|
from tempest.lib import decorators
|
||||||
from tempest.lib import exceptions
|
from tempest.lib import exceptions
|
||||||
|
|
||||||
from senlin_tempest_plugin.api import base
|
from senlin_tempest_plugin.tests.api import base
|
||||||
|
|
||||||
|
|
||||||
class TestEventShowNegativeNotFound(base.BaseSenlinAPITest):
|
class TestEventShowNegativeNotFound(base.BaseSenlinAPITest):
|
@ -13,7 +13,7 @@
|
|||||||
from tempest.lib import decorators
|
from tempest.lib import decorators
|
||||||
from tempest.lib import exceptions
|
from tempest.lib import exceptions
|
||||||
|
|
||||||
from senlin_tempest_plugin.api import base
|
from senlin_tempest_plugin.tests.api import base
|
||||||
|
|
||||||
|
|
||||||
class TestNodeActionNegativeBadRequest(base.BaseSenlinAPITest):
|
class TestNodeActionNegativeBadRequest(base.BaseSenlinAPITest):
|
@ -13,8 +13,8 @@
|
|||||||
from tempest.lib import decorators
|
from tempest.lib import decorators
|
||||||
from tempest.lib import exceptions
|
from tempest.lib import exceptions
|
||||||
|
|
||||||
from senlin_tempest_plugin.api import base
|
|
||||||
from senlin_tempest_plugin.common import utils
|
from senlin_tempest_plugin.common import utils
|
||||||
|
from senlin_tempest_plugin.tests.api import base
|
||||||
|
|
||||||
|
|
||||||
class TestNodeCheck(base.BaseSenlinAPITest):
|
class TestNodeCheck(base.BaseSenlinAPITest):
|
@ -12,8 +12,8 @@
|
|||||||
|
|
||||||
from tempest.lib import decorators
|
from tempest.lib import decorators
|
||||||
|
|
||||||
from senlin_tempest_plugin.api import base
|
|
||||||
from senlin_tempest_plugin.common import utils
|
from senlin_tempest_plugin.common import utils
|
||||||
|
from senlin_tempest_plugin.tests.api import base
|
||||||
|
|
||||||
|
|
||||||
class TestNodeCreate(base.BaseSenlinAPITest):
|
class TestNodeCreate(base.BaseSenlinAPITest):
|
||||||
@ -22,7 +22,9 @@ class TestNodeCreate(base.BaseSenlinAPITest):
|
|||||||
super(TestNodeCreate, self).setUp()
|
super(TestNodeCreate, self).setUp()
|
||||||
self.profile_id = utils.create_a_profile(self)
|
self.profile_id = utils.create_a_profile(self)
|
||||||
self.addCleanup(utils.delete_a_profile, self, self.profile_id)
|
self.addCleanup(utils.delete_a_profile, self, self.profile_id)
|
||||||
self.cluster_id = utils.create_a_cluster(self, self.profile_id)
|
self.cluster_id = utils.create_a_cluster(
|
||||||
|
self, self.profile_id,
|
||||||
|
config={'node.name.format': 'test-node'})
|
||||||
self.addCleanup(utils.delete_a_cluster, self, self.cluster_id)
|
self.addCleanup(utils.delete_a_cluster, self, self.cluster_id)
|
||||||
|
|
||||||
@decorators.idempotent_id('14d06753-7f0a-4ad2-84be-37fce7114a8f')
|
@decorators.idempotent_id('14d06753-7f0a-4ad2-84be-37fce7114a8f')
|
@ -13,9 +13,9 @@
|
|||||||
from tempest.lib import decorators
|
from tempest.lib import decorators
|
||||||
from tempest.lib import exceptions
|
from tempest.lib import exceptions
|
||||||
|
|
||||||
from senlin_tempest_plugin.api import base
|
|
||||||
from senlin_tempest_plugin.common import constants
|
from senlin_tempest_plugin.common import constants
|
||||||
from senlin_tempest_plugin.common import utils
|
from senlin_tempest_plugin.common import utils
|
||||||
|
from senlin_tempest_plugin.tests.api import base
|
||||||
|
|
||||||
|
|
||||||
class TestNodeCreateNegativeBadRequest(base.BaseSenlinAPITest):
|
class TestNodeCreateNegativeBadRequest(base.BaseSenlinAPITest):
|
@ -12,8 +12,8 @@
|
|||||||
|
|
||||||
from tempest.lib import decorators
|
from tempest.lib import decorators
|
||||||
|
|
||||||
from senlin_tempest_plugin.api import base
|
|
||||||
from senlin_tempest_plugin.common import utils
|
from senlin_tempest_plugin.common import utils
|
||||||
|
from senlin_tempest_plugin.tests.api import base
|
||||||
|
|
||||||
|
|
||||||
class TestNodeDelete(base.BaseSenlinAPITest):
|
class TestNodeDelete(base.BaseSenlinAPITest):
|
@ -13,8 +13,8 @@
|
|||||||
from tempest.lib import decorators
|
from tempest.lib import decorators
|
||||||
from tempest.lib import exceptions
|
from tempest.lib import exceptions
|
||||||
|
|
||||||
from senlin_tempest_plugin.api import base
|
|
||||||
from senlin_tempest_plugin.common import utils
|
from senlin_tempest_plugin.common import utils
|
||||||
|
from senlin_tempest_plugin.tests.api import base
|
||||||
|
|
||||||
|
|
||||||
class TestNodeDeleteNegativeNotFound(base.BaseSenlinAPITest):
|
class TestNodeDeleteNegativeNotFound(base.BaseSenlinAPITest):
|
@ -12,8 +12,8 @@
|
|||||||
|
|
||||||
from tempest.lib import decorators
|
from tempest.lib import decorators
|
||||||
|
|
||||||
from senlin_tempest_plugin.api import base
|
|
||||||
from senlin_tempest_plugin.common import utils
|
from senlin_tempest_plugin.common import utils
|
||||||
|
from senlin_tempest_plugin.tests.api import base
|
||||||
|
|
||||||
|
|
||||||
class TestNodeList(base.BaseSenlinAPITest):
|
class TestNodeList(base.BaseSenlinAPITest):
|
@ -13,7 +13,7 @@
|
|||||||
from tempest.lib import decorators
|
from tempest.lib import decorators
|
||||||
from tempest.lib import exceptions
|
from tempest.lib import exceptions
|
||||||
|
|
||||||
from senlin_tempest_plugin.api import base
|
from senlin_tempest_plugin.tests.api import base
|
||||||
|
|
||||||
|
|
||||||
class TestNodeListNegativeBadRequest(base.BaseSenlinAPITest):
|
class TestNodeListNegativeBadRequest(base.BaseSenlinAPITest):
|
@ -13,8 +13,8 @@
|
|||||||
from tempest.lib import decorators
|
from tempest.lib import decorators
|
||||||
from tempest.lib import exceptions
|
from tempest.lib import exceptions
|
||||||
|
|
||||||
from senlin_tempest_plugin.api import base
|
|
||||||
from senlin_tempest_plugin.common import utils
|
from senlin_tempest_plugin.common import utils
|
||||||
|
from senlin_tempest_plugin.tests.api import base
|
||||||
|
|
||||||
|
|
||||||
class TestNodeOperation(base.BaseSenlinAPITest):
|
class TestNodeOperation(base.BaseSenlinAPITest):
|
@ -13,8 +13,8 @@
|
|||||||
from tempest.lib import decorators
|
from tempest.lib import decorators
|
||||||
from tempest.lib import exceptions
|
from tempest.lib import exceptions
|
||||||
|
|
||||||
from senlin_tempest_plugin.api import base
|
|
||||||
from senlin_tempest_plugin.common import utils
|
from senlin_tempest_plugin.common import utils
|
||||||
|
from senlin_tempest_plugin.tests.api import base
|
||||||
|
|
||||||
|
|
||||||
class TestNodeRecover(base.BaseSenlinAPITest):
|
class TestNodeRecover(base.BaseSenlinAPITest):
|
@ -12,8 +12,8 @@
|
|||||||
|
|
||||||
from tempest.lib import decorators
|
from tempest.lib import decorators
|
||||||
|
|
||||||
from senlin_tempest_plugin.api import base
|
|
||||||
from senlin_tempest_plugin.common import utils
|
from senlin_tempest_plugin.common import utils
|
||||||
|
from senlin_tempest_plugin.tests.api import base
|
||||||
|
|
||||||
|
|
||||||
class TestNodeShow(base.BaseSenlinAPITest):
|
class TestNodeShow(base.BaseSenlinAPITest):
|
@ -13,8 +13,8 @@
|
|||||||
from tempest.lib import decorators
|
from tempest.lib import decorators
|
||||||
from tempest.lib import exceptions
|
from tempest.lib import exceptions
|
||||||
|
|
||||||
from senlin_tempest_plugin.api import base
|
|
||||||
from senlin_tempest_plugin.common import utils
|
from senlin_tempest_plugin.common import utils
|
||||||
|
from senlin_tempest_plugin.tests.api import base
|
||||||
|
|
||||||
|
|
||||||
class TestNodeShowNegativeNotFound(base.BaseSenlinAPITest):
|
class TestNodeShowNegativeNotFound(base.BaseSenlinAPITest):
|
@ -12,8 +12,8 @@
|
|||||||
|
|
||||||
from tempest.lib import decorators
|
from tempest.lib import decorators
|
||||||
|
|
||||||
from senlin_tempest_plugin.api import base
|
|
||||||
from senlin_tempest_plugin.common import utils
|
from senlin_tempest_plugin.common import utils
|
||||||
|
from senlin_tempest_plugin.tests.api import base
|
||||||
|
|
||||||
|
|
||||||
class TestNodeUpdate(base.BaseSenlinAPITest):
|
class TestNodeUpdate(base.BaseSenlinAPITest):
|
@ -14,9 +14,9 @@ import copy
|
|||||||
from tempest.lib import decorators
|
from tempest.lib import decorators
|
||||||
from tempest.lib import exceptions
|
from tempest.lib import exceptions
|
||||||
|
|
||||||
from senlin_tempest_plugin.api import base
|
|
||||||
from senlin_tempest_plugin.common import constants
|
from senlin_tempest_plugin.common import constants
|
||||||
from senlin_tempest_plugin.common import utils
|
from senlin_tempest_plugin.common import utils
|
||||||
|
from senlin_tempest_plugin.tests.api import base
|
||||||
|
|
||||||
|
|
||||||
class TestNodeUpdateNegativeNotFound(base.BaseSenlinAPITest):
|
class TestNodeUpdateNegativeNotFound(base.BaseSenlinAPITest):
|
@ -13,9 +13,9 @@
|
|||||||
import copy
|
import copy
|
||||||
from tempest.lib import decorators
|
from tempest.lib import decorators
|
||||||
|
|
||||||
from senlin_tempest_plugin.api import base
|
|
||||||
from senlin_tempest_plugin.common import constants
|
from senlin_tempest_plugin.common import constants
|
||||||
from senlin_tempest_plugin.common import utils
|
from senlin_tempest_plugin.common import utils
|
||||||
|
from senlin_tempest_plugin.tests.api import base
|
||||||
|
|
||||||
|
|
||||||
class TestNodeUpdateProfile(base.BaseSenlinAPITest):
|
class TestNodeUpdateProfile(base.BaseSenlinAPITest):
|
@ -12,8 +12,8 @@
|
|||||||
|
|
||||||
from tempest.lib import decorators
|
from tempest.lib import decorators
|
||||||
|
|
||||||
from senlin_tempest_plugin.api import base
|
|
||||||
from senlin_tempest_plugin.common import constants
|
from senlin_tempest_plugin.common import constants
|
||||||
|
from senlin_tempest_plugin.tests.api import base
|
||||||
|
|
||||||
|
|
||||||
class TestPolicyCreate(base.BaseSenlinAPITest):
|
class TestPolicyCreate(base.BaseSenlinAPITest):
|
@ -14,8 +14,8 @@ import copy
|
|||||||
from tempest.lib import decorators
|
from tempest.lib import decorators
|
||||||
from tempest.lib import exceptions
|
from tempest.lib import exceptions
|
||||||
|
|
||||||
from senlin_tempest_plugin.api import base
|
|
||||||
from senlin_tempest_plugin.common import constants
|
from senlin_tempest_plugin.common import constants
|
||||||
|
from senlin_tempest_plugin.tests.api import base
|
||||||
|
|
||||||
|
|
||||||
class TestPolicyCreateNegativeBadRequest(base.BaseSenlinAPITest):
|
class TestPolicyCreateNegativeBadRequest(base.BaseSenlinAPITest):
|
@ -12,8 +12,8 @@
|
|||||||
|
|
||||||
from tempest.lib import decorators
|
from tempest.lib import decorators
|
||||||
|
|
||||||
from senlin_tempest_plugin.api import base
|
|
||||||
from senlin_tempest_plugin.common import utils
|
from senlin_tempest_plugin.common import utils
|
||||||
|
from senlin_tempest_plugin.tests.api import base
|
||||||
|
|
||||||
|
|
||||||
class TestPolicyDelete(base.BaseSenlinAPITest):
|
class TestPolicyDelete(base.BaseSenlinAPITest):
|
@ -13,8 +13,8 @@
|
|||||||
from tempest.lib import decorators
|
from tempest.lib import decorators
|
||||||
from tempest.lib import exceptions
|
from tempest.lib import exceptions
|
||||||
|
|
||||||
from senlin_tempest_plugin.api import base
|
|
||||||
from senlin_tempest_plugin.common import utils
|
from senlin_tempest_plugin.common import utils
|
||||||
|
from senlin_tempest_plugin.tests.api import base
|
||||||
|
|
||||||
|
|
||||||
class TestPolicyDeleteNegativeConflict(base.BaseSenlinAPITest):
|
class TestPolicyDeleteNegativeConflict(base.BaseSenlinAPITest):
|
@ -12,8 +12,8 @@
|
|||||||
|
|
||||||
from tempest.lib import decorators
|
from tempest.lib import decorators
|
||||||
|
|
||||||
from senlin_tempest_plugin.api import base
|
|
||||||
from senlin_tempest_plugin.common import utils
|
from senlin_tempest_plugin.common import utils
|
||||||
|
from senlin_tempest_plugin.tests.api import base
|
||||||
|
|
||||||
|
|
||||||
class TestPolicyList(base.BaseSenlinAPITest):
|
class TestPolicyList(base.BaseSenlinAPITest):
|
@ -13,7 +13,7 @@
|
|||||||
from tempest.lib import decorators
|
from tempest.lib import decorators
|
||||||
from tempest.lib import exceptions
|
from tempest.lib import exceptions
|
||||||
|
|
||||||
from senlin_tempest_plugin.api import base
|
from senlin_tempest_plugin.tests.api import base
|
||||||
|
|
||||||
|
|
||||||
class TestPolicyListNegativeBadRequest(base.BaseSenlinAPITest):
|
class TestPolicyListNegativeBadRequest(base.BaseSenlinAPITest):
|
@ -12,8 +12,8 @@
|
|||||||
|
|
||||||
from tempest.lib import decorators
|
from tempest.lib import decorators
|
||||||
|
|
||||||
from senlin_tempest_plugin.api import base
|
|
||||||
from senlin_tempest_plugin.common import utils
|
from senlin_tempest_plugin.common import utils
|
||||||
|
from senlin_tempest_plugin.tests.api import base
|
||||||
|
|
||||||
|
|
||||||
class TestPolicyShow(base.BaseSenlinAPITest):
|
class TestPolicyShow(base.BaseSenlinAPITest):
|
@ -13,8 +13,8 @@
|
|||||||
from tempest.lib import decorators
|
from tempest.lib import decorators
|
||||||
from tempest.lib import exceptions
|
from tempest.lib import exceptions
|
||||||
|
|
||||||
from senlin_tempest_plugin.api import base
|
|
||||||
from senlin_tempest_plugin.common import utils
|
from senlin_tempest_plugin.common import utils
|
||||||
|
from senlin_tempest_plugin.tests.api import base
|
||||||
|
|
||||||
|
|
||||||
class TestPolicyShowNegativeNotFound(base.BaseSenlinAPITest):
|
class TestPolicyShowNegativeNotFound(base.BaseSenlinAPITest):
|
@ -12,8 +12,8 @@
|
|||||||
|
|
||||||
from tempest.lib import decorators
|
from tempest.lib import decorators
|
||||||
|
|
||||||
from senlin_tempest_plugin.api import base
|
|
||||||
from senlin_tempest_plugin.common import utils
|
from senlin_tempest_plugin.common import utils
|
||||||
|
from senlin_tempest_plugin.tests.api import base
|
||||||
|
|
||||||
|
|
||||||
class TestPolicyUpdate(base.BaseSenlinAPITest):
|
class TestPolicyUpdate(base.BaseSenlinAPITest):
|
@ -13,8 +13,8 @@
|
|||||||
from tempest.lib import decorators
|
from tempest.lib import decorators
|
||||||
from tempest.lib import exceptions
|
from tempest.lib import exceptions
|
||||||
|
|
||||||
from senlin_tempest_plugin.api import base
|
|
||||||
from senlin_tempest_plugin.common import utils
|
from senlin_tempest_plugin.common import utils
|
||||||
|
from senlin_tempest_plugin.tests.api import base
|
||||||
|
|
||||||
|
|
||||||
class TestPolicyUpdateNegativeNotFound(base.BaseSenlinAPITest):
|
class TestPolicyUpdateNegativeNotFound(base.BaseSenlinAPITest):
|
@ -12,8 +12,8 @@
|
|||||||
|
|
||||||
from tempest.lib import decorators
|
from tempest.lib import decorators
|
||||||
|
|
||||||
from senlin_tempest_plugin.api import base
|
|
||||||
from senlin_tempest_plugin.common import constants
|
from senlin_tempest_plugin.common import constants
|
||||||
|
from senlin_tempest_plugin.tests.api import base
|
||||||
|
|
||||||
|
|
||||||
class TestPolicyValidate(base.BaseSenlinAPITest):
|
class TestPolicyValidate(base.BaseSenlinAPITest):
|
@ -14,8 +14,8 @@ import copy
|
|||||||
from tempest.lib import decorators
|
from tempest.lib import decorators
|
||||||
from tempest.lib import exceptions
|
from tempest.lib import exceptions
|
||||||
|
|
||||||
from senlin_tempest_plugin.api import base
|
|
||||||
from senlin_tempest_plugin.common import constants
|
from senlin_tempest_plugin.common import constants
|
||||||
|
from senlin_tempest_plugin.tests.api import base
|
||||||
|
|
||||||
|
|
||||||
class TestPolicyValidateNegativeBadRequest(base.BaseSenlinAPITest):
|
class TestPolicyValidateNegativeBadRequest(base.BaseSenlinAPITest):
|
@ -12,8 +12,8 @@
|
|||||||
|
|
||||||
from tempest.lib import decorators
|
from tempest.lib import decorators
|
||||||
|
|
||||||
from senlin_tempest_plugin.api import base
|
|
||||||
from senlin_tempest_plugin.common import utils
|
from senlin_tempest_plugin.common import utils
|
||||||
|
from senlin_tempest_plugin.tests.api import base
|
||||||
|
|
||||||
|
|
||||||
class TestPolicyTypeList(base.BaseSenlinAPITest):
|
class TestPolicyTypeList(base.BaseSenlinAPITest):
|
@ -12,8 +12,8 @@
|
|||||||
|
|
||||||
from tempest.lib import decorators
|
from tempest.lib import decorators
|
||||||
|
|
||||||
from senlin_tempest_plugin.api import base
|
|
||||||
from senlin_tempest_plugin.common import utils
|
from senlin_tempest_plugin.common import utils
|
||||||
|
from senlin_tempest_plugin.tests.api import base
|
||||||
|
|
||||||
|
|
||||||
class TestPolicyTypeShow(base.BaseSenlinAPITest):
|
class TestPolicyTypeShow(base.BaseSenlinAPITest):
|
@ -13,7 +13,7 @@
|
|||||||
from tempest.lib import decorators
|
from tempest.lib import decorators
|
||||||
from tempest.lib import exceptions
|
from tempest.lib import exceptions
|
||||||
|
|
||||||
from senlin_tempest_plugin.api import base
|
from senlin_tempest_plugin.tests.api import base
|
||||||
|
|
||||||
|
|
||||||
class TestPolicyTypeShowNegative(base.BaseSenlinAPITest):
|
class TestPolicyTypeShowNegative(base.BaseSenlinAPITest):
|
@ -12,8 +12,8 @@
|
|||||||
|
|
||||||
from tempest.lib import decorators
|
from tempest.lib import decorators
|
||||||
|
|
||||||
from senlin_tempest_plugin.api import base
|
|
||||||
from senlin_tempest_plugin.common import utils
|
from senlin_tempest_plugin.common import utils
|
||||||
|
from senlin_tempest_plugin.tests.api import base
|
||||||
|
|
||||||
|
|
||||||
class TestProfileTypeList(base.BaseSenlinAPITest):
|
class TestProfileTypeList(base.BaseSenlinAPITest):
|
@ -12,8 +12,8 @@
|
|||||||
|
|
||||||
from tempest.lib import decorators
|
from tempest.lib import decorators
|
||||||
|
|
||||||
from senlin_tempest_plugin.api import base
|
|
||||||
from senlin_tempest_plugin.common import utils
|
from senlin_tempest_plugin.common import utils
|
||||||
|
from senlin_tempest_plugin.tests.api import base
|
||||||
|
|
||||||
|
|
||||||
class TestProfileTypeShow(base.BaseSenlinAPITest):
|
class TestProfileTypeShow(base.BaseSenlinAPITest):
|
@ -13,7 +13,7 @@
|
|||||||
from tempest.lib import decorators
|
from tempest.lib import decorators
|
||||||
from tempest.lib import exceptions
|
from tempest.lib import exceptions
|
||||||
|
|
||||||
from senlin_tempest_plugin.api import base
|
from senlin_tempest_plugin.tests.api import base
|
||||||
|
|
||||||
|
|
||||||
class TestProfileTypeShowNegativeNotFound(base.BaseSenlinAPITest):
|
class TestProfileTypeShowNegativeNotFound(base.BaseSenlinAPITest):
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user