Use Tempest-lib's compute hosts_client
Compute hosts_client has been migrated to tempest-lib- I59c82bc896d5036d936e6f9cddb3c7b004648dde Now Tempest-lib provides this client as stable interface so Tempest should start using this from lib and remove its own copy. Also remove its unit tests. This commits makes Tempest to use compute hosts_client from Tempest-lib. Change-Id: I5f0846c3fbe2100223f01f9aa9b22c10d75a2468
This commit is contained in:
parent
1a286ab425
commit
c898a28929
@ -1,116 +0,0 @@
|
||||
# Copyright 2014 NEC Corporation. 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 copy
|
||||
|
||||
|
||||
list_hosts = {
|
||||
'status_code': [200],
|
||||
'response_body': {
|
||||
'type': 'object',
|
||||
'properties': {
|
||||
'hosts': {
|
||||
'type': 'array',
|
||||
'items': {
|
||||
'type': 'object',
|
||||
'properties': {
|
||||
'host_name': {'type': 'string'},
|
||||
'service': {'type': 'string'},
|
||||
'zone': {'type': 'string'}
|
||||
},
|
||||
'additionalProperties': False,
|
||||
'required': ['host_name', 'service', 'zone']
|
||||
}
|
||||
}
|
||||
},
|
||||
'additionalProperties': False,
|
||||
'required': ['hosts']
|
||||
}
|
||||
}
|
||||
|
||||
get_host_detail = {
|
||||
'status_code': [200],
|
||||
'response_body': {
|
||||
'type': 'object',
|
||||
'properties': {
|
||||
'host': {
|
||||
'type': 'array',
|
||||
'item': {
|
||||
'type': 'object',
|
||||
'properties': {
|
||||
'resource': {
|
||||
'type': 'object',
|
||||
'properties': {
|
||||
'cpu': {'type': 'integer'},
|
||||
'disk_gb': {'type': 'integer'},
|
||||
'host': {'type': 'string'},
|
||||
'memory_mb': {'type': 'integer'},
|
||||
'project': {'type': 'string'}
|
||||
},
|
||||
'additionalProperties': False,
|
||||
'required': ['cpu', 'disk_gb', 'host',
|
||||
'memory_mb', 'project']
|
||||
}
|
||||
},
|
||||
'additionalProperties': False,
|
||||
'required': ['resource']
|
||||
}
|
||||
}
|
||||
},
|
||||
'additionalProperties': False,
|
||||
'required': ['host']
|
||||
}
|
||||
}
|
||||
|
||||
startup_host = {
|
||||
'status_code': [200],
|
||||
'response_body': {
|
||||
'type': 'object',
|
||||
'properties': {
|
||||
'host': {'type': 'string'},
|
||||
'power_action': {'enum': ['startup']}
|
||||
},
|
||||
'additionalProperties': False,
|
||||
'required': ['host', 'power_action']
|
||||
}
|
||||
}
|
||||
|
||||
# The 'power_action' attribute of 'shutdown_host' API is 'shutdown'
|
||||
shutdown_host = copy.deepcopy(startup_host)
|
||||
|
||||
shutdown_host['response_body']['properties']['power_action'] = {
|
||||
'enum': ['shutdown']
|
||||
}
|
||||
|
||||
# The 'power_action' attribute of 'reboot_host' API is 'reboot'
|
||||
reboot_host = copy.deepcopy(startup_host)
|
||||
|
||||
reboot_host['response_body']['properties']['power_action'] = {
|
||||
'enum': ['reboot']
|
||||
}
|
||||
|
||||
update_host = {
|
||||
'status_code': [200],
|
||||
'response_body': {
|
||||
'type': 'object',
|
||||
'properties': {
|
||||
'host': {'type': 'string'},
|
||||
'maintenance_mode': {'enum': ['on_maintenance',
|
||||
'off_maintenance']},
|
||||
'status': {'enum': ['enabled', 'disabled']}
|
||||
},
|
||||
'additionalProperties': False,
|
||||
'required': ['host', 'maintenance_mode', 'status']
|
||||
}
|
||||
}
|
@ -32,6 +32,7 @@ from tempest_lib.services.compute.floating_ip_pools_client import \
|
||||
FloatingIPPoolsClient
|
||||
from tempest_lib.services.compute.floating_ips_bulk_client import \
|
||||
FloatingIPsBulkClient
|
||||
from tempest_lib.services.compute.hosts_client import HostsClient
|
||||
from tempest_lib.services.identity.v2.token_client import TokenClient
|
||||
from tempest_lib.services.identity.v3.token_client import V3TokenClient
|
||||
|
||||
@ -45,7 +46,6 @@ from tempest.services.baremetal.v1.json.baremetal_client import \
|
||||
from tempest.services import botoclients
|
||||
from tempest.services.compute.json.floating_ips_client import \
|
||||
FloatingIPsClient
|
||||
from tempest.services.compute.json.hosts_client import HostsClient
|
||||
from tempest.services.compute.json.hypervisor_client import \
|
||||
HypervisorClient
|
||||
from tempest.services.compute.json.images_client import ImagesClient
|
||||
|
@ -1,81 +0,0 @@
|
||||
# Copyright 2013 IBM Corp.
|
||||
#
|
||||
# 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_serialization import jsonutils as json
|
||||
from six.moves.urllib import parse as urllib
|
||||
|
||||
from tempest.api_schema.response.compute.v2_1 import hosts as schema
|
||||
from tempest.common import service_client
|
||||
|
||||
|
||||
class HostsClient(service_client.ServiceClient):
|
||||
|
||||
def list_hosts(self, **params):
|
||||
"""Lists all hosts."""
|
||||
|
||||
url = 'os-hosts'
|
||||
if params:
|
||||
url += '?%s' % urllib.urlencode(params)
|
||||
|
||||
resp, body = self.get(url)
|
||||
body = json.loads(body)
|
||||
self.validate_response(schema.list_hosts, resp, body)
|
||||
return service_client.ResponseBody(resp, body)
|
||||
|
||||
def show_host(self, hostname):
|
||||
"""Show detail information for the host."""
|
||||
|
||||
resp, body = self.get("os-hosts/%s" % hostname)
|
||||
body = json.loads(body)
|
||||
self.validate_response(schema.get_host_detail, resp, body)
|
||||
return service_client.ResponseBody(resp, body)
|
||||
|
||||
def update_host(self, hostname, **kwargs):
|
||||
"""Update a host."""
|
||||
|
||||
request_body = {
|
||||
'status': None,
|
||||
'maintenance_mode': None,
|
||||
}
|
||||
request_body.update(**kwargs)
|
||||
request_body = json.dumps(request_body)
|
||||
|
||||
resp, body = self.put("os-hosts/%s" % hostname, request_body)
|
||||
body = json.loads(body)
|
||||
self.validate_response(schema.update_host, resp, body)
|
||||
return service_client.ResponseBody(resp, body)
|
||||
|
||||
def startup_host(self, hostname):
|
||||
"""Startup a host."""
|
||||
|
||||
resp, body = self.get("os-hosts/%s/startup" % hostname)
|
||||
body = json.loads(body)
|
||||
self.validate_response(schema.startup_host, resp, body)
|
||||
return service_client.ResponseBody(resp, body)
|
||||
|
||||
def shutdown_host(self, hostname):
|
||||
"""Shutdown a host."""
|
||||
|
||||
resp, body = self.get("os-hosts/%s/shutdown" % hostname)
|
||||
body = json.loads(body)
|
||||
self.validate_response(schema.shutdown_host, resp, body)
|
||||
return service_client.ResponseBody(resp, body)
|
||||
|
||||
def reboot_host(self, hostname):
|
||||
"""reboot a host."""
|
||||
|
||||
resp, body = self.get("os-hosts/%s/reboot" % hostname)
|
||||
body = json.loads(body)
|
||||
self.validate_response(schema.reboot_host, resp, body)
|
||||
return service_client.ResponseBody(resp, body)
|
@ -1,147 +0,0 @@
|
||||
# Copyright 2015 NEC Corporation. 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 tempest.services.compute.json import hosts_client
|
||||
from tempest.tests import fake_auth_provider
|
||||
from tempest.tests.services.compute import base
|
||||
|
||||
|
||||
class TestHostsClient(base.BaseComputeServiceTest):
|
||||
FAKE_HOST_DATA = {
|
||||
"host": {
|
||||
"resource": {
|
||||
"cpu": 1,
|
||||
"disk_gb": 1028,
|
||||
"host": "c1a7de0ac9d94e4baceae031d05caae3",
|
||||
"memory_mb": 8192,
|
||||
"project": "(total)"
|
||||
}
|
||||
},
|
||||
"hosts": {
|
||||
"host_name": "c1a7de0ac9d94e4baceae031d05caae3",
|
||||
"service": "conductor",
|
||||
"zone": "internal"
|
||||
},
|
||||
"enable_hosts": {
|
||||
"host": "65c5d5b7e3bd44308e67fc50f362aee6",
|
||||
"maintenance_mode": "off_maintenance",
|
||||
"status": "enabled"
|
||||
}
|
||||
}
|
||||
|
||||
FAKE_CONTROL_DATA = {
|
||||
"shutdown": {
|
||||
"host": "c1a7de0ac9d94e4baceae031d05caae3",
|
||||
"power_action": "shutdown"
|
||||
},
|
||||
"startup": {
|
||||
"host": "c1a7de0ac9d94e4baceae031d05caae3",
|
||||
"power_action": "startup"
|
||||
},
|
||||
"reboot": {
|
||||
"host": "c1a7de0ac9d94e4baceae031d05caae3",
|
||||
"power_action": "reboot"
|
||||
}}
|
||||
|
||||
HOST_DATA = {'host': [FAKE_HOST_DATA['host']]}
|
||||
HOSTS_DATA = {'hosts': [FAKE_HOST_DATA['hosts']]}
|
||||
ENABLE_HOST_DATA = FAKE_HOST_DATA['enable_hosts']
|
||||
HOST_ID = "c1a7de0ac9d94e4baceae031d05caae3"
|
||||
TEST_HOST_DATA = {
|
||||
"status": "enable",
|
||||
"maintenance_mode": "disable"
|
||||
}
|
||||
|
||||
def setUp(self):
|
||||
super(TestHostsClient, self).setUp()
|
||||
fake_auth = fake_auth_provider.FakeAuthProvider()
|
||||
self.client = hosts_client.HostsClient(fake_auth, 'compute',
|
||||
'regionOne')
|
||||
self.params = {'hostname': self.HOST_ID}
|
||||
self.func2mock = {
|
||||
'get': 'tempest.common.service_client.ServiceClient.get',
|
||||
'put': 'tempest.common.service_client.ServiceClient.put'}
|
||||
|
||||
def _test_host_data(self, test_type='list', bytes_body=False):
|
||||
expected_resp = self.HOST_DATA
|
||||
if test_type != 'list':
|
||||
function_call = self.client.show_host
|
||||
else:
|
||||
expected_resp = self.HOSTS_DATA
|
||||
function_call = self.client.list_hosts
|
||||
self.params = {'host_name': self.HOST_ID}
|
||||
|
||||
self.check_service_client_function(
|
||||
function_call, self.func2mock['get'],
|
||||
expected_resp, bytes_body,
|
||||
200, **self.params)
|
||||
|
||||
def _test_update_hosts(self, bytes_body=False):
|
||||
expected_resp = self.ENABLE_HOST_DATA
|
||||
self.check_service_client_function(
|
||||
self.client.update_host, self.func2mock['put'],
|
||||
expected_resp, bytes_body,
|
||||
200, **self.params)
|
||||
|
||||
def _test_control_host(self, control_op='reboot', bytes_body=False):
|
||||
if control_op == 'start':
|
||||
expected_resp = self.FAKE_CONTROL_DATA['startup']
|
||||
function_call = self.client.startup_host
|
||||
elif control_op == 'stop':
|
||||
expected_resp = self.FAKE_CONTROL_DATA['shutdown']
|
||||
function_call = self.client.shutdown_host
|
||||
else:
|
||||
expected_resp = self.FAKE_CONTROL_DATA['reboot']
|
||||
function_call = self.client.reboot_host
|
||||
|
||||
self.check_service_client_function(
|
||||
function_call, self.func2mock['get'],
|
||||
expected_resp, bytes_body,
|
||||
200, **self.params)
|
||||
|
||||
def test_show_host_with_str_body(self):
|
||||
self._test_host_data('show')
|
||||
|
||||
def test_show_host_with_bytes_body(self):
|
||||
self._test_host_data('show', True)
|
||||
|
||||
def test_list_host_with_str_body(self):
|
||||
self._test_host_data()
|
||||
|
||||
def test_list_host_with_bytes_body(self):
|
||||
self._test_host_data(bytes_body=True)
|
||||
|
||||
def test_start_host_with_str_body(self):
|
||||
self._test_control_host('start')
|
||||
|
||||
def test_start_host_with_bytes_body(self):
|
||||
self._test_control_host('start', True)
|
||||
|
||||
def test_stop_host_with_str_body(self):
|
||||
self._test_control_host('stop')
|
||||
|
||||
def test_stop_host_with_bytes_body(self):
|
||||
self._test_control_host('stop', True)
|
||||
|
||||
def test_reboot_host_with_str_body(self):
|
||||
self._test_control_host('reboot')
|
||||
|
||||
def test_reboot_host_with_bytes_body(self):
|
||||
self._test_control_host('reboot', True)
|
||||
|
||||
def test_update_host_with_str_body(self):
|
||||
self._test_update_hosts()
|
||||
|
||||
def test_update_host_with_bytes_body(self):
|
||||
self._test_update_hosts(True)
|
Loading…
Reference in New Issue
Block a user