Source code for openstack_dashboard.test.api_tests.base_tests

# vim: tabstop=4 shiftwidth=4 softtabstop=4

# Copyright 2012 United States Government as represented by the
# Administrator of the National Aeronautics and Space Administration.
# All Rights Reserved.
#
# Copyright 2012 Nebula, Inc.
#
#    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 __future__ import absolute_import

from horizon import exceptions

from openstack_dashboard.api import base as api_base
from openstack_dashboard.test import helpers as test


[docs]class APIResource(api_base.APIResourceWrapper): """Simple APIResource for testing.""" _attrs = ['foo', 'bar', 'baz'] @staticmethod
[docs] def get_instance(innerObject=None): if innerObject is None: class InnerAPIResource(object): pass innerObject = InnerAPIResource() innerObject.foo = 'foo' innerObject.bar = 'bar' return APIResource(innerObject)
[docs]class APIDict(api_base.APIDictWrapper): """Simple APIDict for testing.""" _attrs = ['foo', 'bar', 'baz'] @staticmethod
[docs] def get_instance(innerDict=None): if innerDict is None: innerDict = {'foo': 'foo', 'bar': 'bar'} return APIDict(innerDict) # Wrapper classes that only define _attrs don't need extra testing.
[docs]class APIResourceWrapperTests(test.TestCase):
[docs] def test_get_attribute(self): resource = APIResource.get_instance() self.assertEqual(resource.foo, 'foo')
[docs] def test_get_invalid_attribute(self): resource = APIResource.get_instance() self.assertNotIn('missing', resource._attrs, msg="Test assumption broken. Find new missing attribute") with self.assertRaises(AttributeError): resource.missing
[docs] def test_get_inner_missing_attribute(self): resource = APIResource.get_instance() with self.assertRaises(AttributeError): resource.baz
[docs] def test_repr(self): resource = APIResource.get_instance() resource_str = resource.__repr__() self.assertIn('foo', resource_str) self.assertIn('bar', resource_str) self.assertNotIn('baz', resource_str)
[docs]class APIDictWrapperTests(test.TestCase): # APIDict allows for both attribute access and dictionary style [element] # style access. Test both
[docs] def test_get_item(self): resource = APIDict.get_instance() self.assertEqual(resource.foo, 'foo') self.assertEqual(resource['foo'], 'foo')
[docs] def test_get_invalid_item(self): resource = APIDict.get_instance() self.assertNotIn('missing', resource._attrs, msg="Test assumption broken. Find new missing attribute") with self.assertRaises(AttributeError): resource.missing with self.assertRaises(KeyError): resource['missing']
[docs] def test_get_inner_missing_attribute(self): resource = APIDict.get_instance() with self.assertRaises(AttributeError): resource.baz with self.assertRaises(KeyError): resource['baz']
[docs] def test_get_with_default(self): resource = APIDict.get_instance() self.assertEqual(resource.get('foo'), 'foo') self.assertIsNone(resource.get('baz')) self.assertEqual('retValue', resource.get('baz', 'retValue'))
[docs]class ApiHelperTests(test.TestCase): """Tests for functions that don't use one of the api objects."""
[docs] def test_url_for(self): url = api_base.url_for(self.request, 'image') self.assertEqual(url, 'http://public.glance.example.com:9292/v1') url = api_base.url_for(self.request, 'image', endpoint_type='adminURL') self.assertEqual(url, 'http://admin.glance.example.com:9292/v1') url = api_base.url_for(self.request, 'compute') self.assertEqual(url, 'http://public.nova.example.com:8774/v2') url = api_base.url_for(self.request, 'compute', endpoint_type='adminURL') self.assertEqual(url, 'http://admin.nova.example.com:8774/v2') url = api_base.url_for(self.request, 'volume') self.assertEqual(url, 'http://public.nova.example.com:8776/v1') url = api_base.url_for(self.request, 'volume', endpoint_type="internalURL") self.assertEqual(url, 'http://int.nova.example.com:8776/v1') url = api_base.url_for(self.request, 'volume', endpoint_type='adminURL') self.assertEqual(url, 'http://admin.nova.example.com:8776/v1') self.assertNotIn('notAnApi', self.request.user.service_catalog, 'Select a new nonexistent service catalog key') with self.assertRaises(exceptions.ServiceCatalogException): url = api_base.url_for(self.request, 'notAnApi') self.request.user.services_region = "RegionTwo" url = api_base.url_for(self.request, 'compute') self.assertEqual(url, 'http://public.nova2.example.com:8774/v2') self.request.user.services_region = "RegionTwo" url = api_base.url_for(self.request, 'compute', endpoint_type='adminURL') self.assertEqual(url, 'http://admin.nova2.example.com:8774/v2') self.request.user.services_region = "RegionTwo" with self.assertRaises(exceptions.ServiceCatalogException): url = api_base.url_for(self.request, 'image') self.request.user.services_region = "bogus_value" url = api_base.url_for(self.request, 'identity', endpoint_type='adminURL') self.assertEqual(url, 'http://admin.keystone.example.com:35357/v2.0') self.request.user.services_region = "bogus_value" with self.assertRaises(exceptions.ServiceCatalogException): url = api_base.url_for(self.request, 'image')
[docs]class QuotaSetTests(test.TestCase):
[docs] def test_quotaset_add_with_plus(self): quota_dict = {'foo': 1, 'bar': 10} other_quota_dict = {'my_test': 12} quota_set = api_base.QuotaSet(quota_dict) other_quota_set = api_base.QuotaSet(other_quota_dict) quota_set += other_quota_set self.assertEqual(len(quota_set), 3) quota_dict.update(other_quota_dict) for q in quota_set: self.assertEqual(q.limit, quota_dict[q.name])
[docs] def test_quotaset_add_doesnt_override_existing_quota(self): quota_dict = {'foo': 1, 'bar': 10} quota_set = api_base.QuotaSet(quota_dict) other_quota_set = api_base.QuotaSet({'foo': 12}) quota_set += other_quota_set self.assertEqual(len(quota_set), 2) for q in quota_set: self.assertEqual(q.limit, quota_dict[q.name])
[docs] def test_quotaset_add_method(self): quota_dict = {'foo': 1, 'bar': 10} other_quota_dict = {'my_test': 12} quota_set = api_base.QuotaSet(quota_dict) other_quota_set = api_base.QuotaSet(other_quota_dict) quota_set.add(other_quota_set) self.assertEqual(len(quota_set), 3) quota_dict.update(other_quota_dict) for q in quota_set: self.assertEqual(q.limit, quota_dict[q.name])
[docs] def test_quotaset_add_with_wrong_type(self): quota_set = api_base.QuotaSet({'foo': 1, 'bar': 10}) self.assertRaises(ValueError, quota_set.add, {'test': 7})