120 lines
4.8 KiB
Python
120 lines
4.8 KiB
Python
# Copyright 2014 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.
|
|
|
|
import copy
|
|
|
|
import mock
|
|
|
|
from nova.api.openstack.compute import hypervisors \
|
|
as hypervisors_v21
|
|
from nova import exception
|
|
from nova import objects
|
|
from nova import test
|
|
from nova.tests.unit.api.openstack.compute import test_hypervisors
|
|
from nova.tests.unit.api.openstack import fakes
|
|
|
|
|
|
def fake_compute_node_get(context, compute_id):
|
|
for hyper in test_hypervisors.TEST_HYPERS_OBJ:
|
|
if hyper.id == int(compute_id):
|
|
return hyper
|
|
raise exception.ComputeHostNotFound(host=compute_id)
|
|
|
|
|
|
def fake_compute_node_get_all(context, limit=None, marker=None):
|
|
return test_hypervisors.TEST_HYPERS_OBJ
|
|
|
|
|
|
def fake_service_get_by_compute_host(context, host):
|
|
for service in test_hypervisors.TEST_SERVICES:
|
|
if service.host == host:
|
|
return service
|
|
|
|
|
|
class ExtendedHypervisorsTestV21(test.NoDBTestCase):
|
|
DETAIL_HYPERS_DICTS = copy.deepcopy(test_hypervisors.TEST_HYPERS)
|
|
del DETAIL_HYPERS_DICTS[0]['service_id']
|
|
del DETAIL_HYPERS_DICTS[1]['service_id']
|
|
del DETAIL_HYPERS_DICTS[0]['host']
|
|
del DETAIL_HYPERS_DICTS[1]['host']
|
|
del DETAIL_HYPERS_DICTS[0]['uuid']
|
|
del DETAIL_HYPERS_DICTS[1]['uuid']
|
|
DETAIL_HYPERS_DICTS[0].update({'state': 'up',
|
|
'status': 'enabled',
|
|
'service': dict(id=1, host='compute1',
|
|
disabled_reason=None)})
|
|
DETAIL_HYPERS_DICTS[1].update({'state': 'up',
|
|
'status': 'enabled',
|
|
'service': dict(id=2, host='compute2',
|
|
disabled_reason=None)})
|
|
|
|
def _set_up_controller(self):
|
|
self.controller = hypervisors_v21.HypervisorsController()
|
|
|
|
def _get_request(self):
|
|
return fakes.HTTPRequest.blank('/v2/fake/os-hypervisors/detail',
|
|
use_admin_context=True)
|
|
|
|
def setUp(self):
|
|
super(ExtendedHypervisorsTestV21, self).setUp()
|
|
self._set_up_controller()
|
|
|
|
def test_view_hypervisor_detail_noservers(self):
|
|
with mock.patch.object(self.controller.servicegroup_api,
|
|
'service_is_up',
|
|
return_value=True) as mock_service_is_up:
|
|
req = self._get_request()
|
|
result = self.controller._view_hypervisor(
|
|
test_hypervisors.TEST_HYPERS_OBJ[0],
|
|
test_hypervisors.TEST_SERVICES[0], True, req)
|
|
|
|
self.assertEqual(self.DETAIL_HYPERS_DICTS[0], result)
|
|
self.assertTrue(mock_service_is_up.called)
|
|
|
|
@mock.patch.object(objects.Service, 'get_by_compute_host',
|
|
side_effect=fake_service_get_by_compute_host)
|
|
def test_detail(self, mock_get_by_host):
|
|
with test.nested(
|
|
mock.patch.object(self.controller.host_api, 'compute_node_get_all',
|
|
side_effect=fake_compute_node_get_all),
|
|
mock.patch.object(self.controller.servicegroup_api,
|
|
'service_is_up', return_value=True),
|
|
) as (mock_node_get_all, mock_service_is_up):
|
|
req = self._get_request()
|
|
result = self.controller.detail(req)
|
|
|
|
self.assertEqual(dict(hypervisors=self.DETAIL_HYPERS_DICTS),
|
|
result)
|
|
self.assertTrue(mock_service_is_up.called)
|
|
self.assertTrue(mock_get_by_host.called)
|
|
self.assertTrue(mock_node_get_all.called)
|
|
|
|
@mock.patch.object(objects.Service, 'get_by_compute_host',
|
|
side_effect=fake_service_get_by_compute_host)
|
|
def test_show_withid(self, mock_get_by_host):
|
|
with test.nested(
|
|
mock.patch.object(self.controller.host_api, 'compute_node_get',
|
|
side_effect=fake_compute_node_get),
|
|
mock.patch.object(self.controller.servicegroup_api,
|
|
'service_is_up', return_value=True),
|
|
) as (mock_node_get, mock_service_is_up):
|
|
req = self._get_request()
|
|
result = self.controller.show(req, '1')
|
|
|
|
self.assertEqual(dict(hypervisor=self.DETAIL_HYPERS_DICTS[0]),
|
|
result)
|
|
self.assertTrue(mock_service_is_up.called)
|
|
self.assertTrue(mock_get_by_host.called)
|
|
self.assertTrue(mock_node_get.called)
|