| # Copyright (c) 2015 Hewlett-Packard Development Company, L.P. |
| # |
| # 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.api.compute import base |
| from tempest import test |
| |
| |
| class TestVersions(base.BaseComputeTest): |
| |
| @test.idempotent_id('6c0a0990-43b6-4529-9b61-5fd8daf7c55c') |
| def test_list_api_versions(self): |
| """Test that a get of the unversioned url returns the choices doc. |
| |
| A key feature in OpenStack services is the idea that you can |
| GET / on the service and get a list of the versioned endpoints |
| that you can access. This comes back as a status 300 |
| request. It's important that this is available to API |
| consumers to discover the API they can use. |
| |
| """ |
| result = self.versions_client.list_versions() |
| versions = result['versions'] |
| # NOTE(sdague): at a later point we may want to loosen this |
| # up, but for now this should be true of all Novas deployed. |
| self.assertEqual(versions[0]['id'], 'v2.0', |
| "The first listed version should be v2.0") |
| |
| @test.idempotent_id('b953a29e-929c-4a8e-81be-ec3a7e03cb76') |
| def test_get_version_details(self): |
| """Test individual version endpoints info works. |
| |
| In addition to the GET / version request, there is also a |
| version info document stored at the top of the versioned |
| endpoints. This provides access to details about that |
| endpoint, including min / max version if that implements |
| microversions. |
| |
| This test starts with the version list, iterates all the |
| returned endpoints, and fetches them. This will also ensure |
| that all the version links are followable constructs which |
| will help detect configuration issues when SSL termination |
| isn't done completely for a site. |
| |
| """ |
| result = self.versions_client.list_versions() |
| versions = result['versions'] |
| |
| # iterate through all the versions that are returned and |
| # attempt to get their version documents. |
| for version in versions: |
| links = [x for x in version['links'] if x['rel'] == 'self'] |
| self.assertEqual( |
| len(links), 1, |
| "There should only be 1 self link in %s" % version) |
| link = links[0] |
| # this is schema validated |
| result = self.versions_client.get_version_by_url(link['href']) |
| # ensure the new self link matches the old one |
| newlinks = [x for x in result['version']['links'] |
| if x['rel'] == 'self'] |
| self.assertEqual(links, newlinks) |