120 lines
3.7 KiB
Python
120 lines
3.7 KiB
Python
# Copyright 2016 FUJITSU LIMITED
|
|
#
|
|
# 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 falcon
|
|
import ujson as json
|
|
|
|
from monasca_log_api.app.controller import versions
|
|
from monasca_log_api.tests import base
|
|
|
|
|
|
def _get_versioned_url(version_id):
|
|
return '/version/%s' % version_id
|
|
|
|
|
|
class TestApiVersions(base.BaseApiTestCase):
|
|
|
|
def before(self):
|
|
self.versions = versions.Versions()
|
|
self.api.add_route("/version/", self.versions)
|
|
self.api.add_route("/version/{version_id}", self.versions)
|
|
|
|
def test_should_fail_for_unsupported_version(self):
|
|
unsupported_version = 'v5.0'
|
|
uri = _get_versioned_url(unsupported_version)
|
|
|
|
self.simulate_request(
|
|
uri,
|
|
method='GET',
|
|
headers={
|
|
'Content-Type': 'application/json'
|
|
}
|
|
)
|
|
|
|
self.assertEqual(falcon.HTTP_400, self.srmock.status)
|
|
|
|
def test_should_return_all_supported_versions(self):
|
|
|
|
def _check_elements():
|
|
self.assertIn('elements', response)
|
|
elements = response.get('elements')
|
|
self.assertIsInstance(elements, list)
|
|
|
|
for el in elements:
|
|
# do checkup by expected keys
|
|
self.assertIn('id', el)
|
|
self.assertItemsEqual([
|
|
u'id',
|
|
u'links',
|
|
u'status',
|
|
u'updated'
|
|
], el.keys())
|
|
|
|
ver = el.get('id')
|
|
self.assertIn(ver, expected_versions)
|
|
|
|
def _check_global_links():
|
|
self.assertIn('links', response)
|
|
links = response.get('links')
|
|
self.assertIsInstance(links, list)
|
|
|
|
for link in links:
|
|
self.assertIn('rel', link)
|
|
key = link.get('rel')
|
|
self.assertIn(key, expected_links_keys)
|
|
|
|
expected_versions = 'v2.0', 'v3.0'
|
|
expected_links_keys = 'self', 'version', 'healthcheck'
|
|
|
|
res = self.simulate_request(
|
|
'/version',
|
|
method='GET',
|
|
headers={
|
|
'Content-Type': 'application/json'
|
|
},
|
|
decode='utf-8'
|
|
)
|
|
self.assertEqual(falcon.HTTP_200, self.srmock.status)
|
|
|
|
response = json.loads(res)
|
|
|
|
_check_elements()
|
|
_check_global_links()
|
|
|
|
def test_should_return_expected_version_id(self):
|
|
expected_versions = 'v2.0', 'v3.0'
|
|
for expected_version in expected_versions:
|
|
uri = _get_versioned_url(expected_version)
|
|
res = self.simulate_request(
|
|
uri,
|
|
method='GET',
|
|
headers={
|
|
'Content-Type': 'application/json'
|
|
},
|
|
decode='utf-8'
|
|
)
|
|
self.assertEqual(falcon.HTTP_200, self.srmock.status)
|
|
|
|
response = json.loads(res)
|
|
self.assertIn('elements', response)
|
|
self.assertIn('links', response)
|
|
|
|
elements = response.get('elements')
|
|
self.assertIsInstance(elements, list)
|
|
self.assertEqual(1, len(elements))
|
|
|
|
el = elements[0]
|
|
ver = el.get('id')
|
|
self.assertEqual(expected_version, ver)
|