When Tempest is used in customer site, often we are required to provide a testcase list including testcase names and descriptions. Now no this kind of doc is available, so we can add descriptions with the format of doc string for every testcase, so later we can generata such a testcase description list. There are hundreds of testcases missing descriptions, so we can add them gradually, and limit the modified files in one patch for the convenience of reviewing. Change-Id: I60d39b91ae064300347a789aa1b72a3115afae76 partially-implements: blueprint testcase-description
165 lines
6.7 KiB
Python
165 lines
6.7 KiB
Python
# Copyright (C) 2013 eNovance SAS <licensing@enovance.com>
|
|
#
|
|
# 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.object_storage import base
|
|
from tempest.common import custom_matchers
|
|
from tempest.common import utils
|
|
from tempest.lib.common.utils import data_utils
|
|
from tempest.lib import decorators
|
|
from tempest.lib import exceptions as lib_exc
|
|
|
|
|
|
class StaticWebTest(base.BaseObjectTest):
|
|
"""Test static web"""
|
|
|
|
@classmethod
|
|
def resource_setup(cls):
|
|
super(StaticWebTest, cls).resource_setup()
|
|
|
|
# This header should be posted on the container before every test
|
|
headers_public_read_acl = {'Read': '.r:*,.rlistings'}
|
|
|
|
# Create test container and create one object in it
|
|
cls.container_name = cls.create_container()
|
|
cls.object_name, cls.object_data = cls.create_object(
|
|
cls.container_name)
|
|
|
|
cls.container_client.create_update_or_delete_container_metadata(
|
|
cls.container_name,
|
|
create_update_metadata=headers_public_read_acl,
|
|
create_update_metadata_prefix="X-Container-")
|
|
|
|
@classmethod
|
|
def resource_cleanup(cls):
|
|
cls.delete_containers()
|
|
super(StaticWebTest, cls).resource_cleanup()
|
|
|
|
@decorators.idempotent_id('c1f055ab-621d-4a6a-831f-846fcb578b8b')
|
|
@utils.requires_ext(extension='staticweb', service='object')
|
|
def test_web_index(self):
|
|
"""Test web index"""
|
|
headers = {'web-index': self.object_name}
|
|
|
|
self.container_client.create_update_or_delete_container_metadata(
|
|
self.container_name, create_update_metadata=headers)
|
|
|
|
# Maintain original headers, no auth added
|
|
self.account_client.auth_provider.set_alt_auth_data(
|
|
request_part='headers',
|
|
auth_data=None
|
|
)
|
|
|
|
# test GET on http://account_url/container_name
|
|
# we should retrieve the self.object_name file
|
|
resp, body = self.account_client.request("GET",
|
|
self.container_name,
|
|
headers={})
|
|
# This request is equivalent to GET object
|
|
self.assertHeaders(resp, 'Object', 'GET')
|
|
self.assertEqual(body, self.object_data)
|
|
|
|
# clean up before exiting
|
|
self.container_client.create_update_or_delete_container_metadata(
|
|
self.container_name,
|
|
create_update_metadata={'web-index': ""})
|
|
|
|
_, body = self.container_client.list_container_metadata(
|
|
self.container_name)
|
|
self.assertNotIn('x-container-meta-web-index', body)
|
|
|
|
@decorators.idempotent_id('941814cf-db9e-4b21-8112-2b6d0af10ee5')
|
|
@utils.requires_ext(extension='staticweb', service='object')
|
|
def test_web_listing(self):
|
|
"""Test web listing"""
|
|
headers = {'web-listings': 'true'}
|
|
|
|
self.container_client.create_update_or_delete_container_metadata(
|
|
self.container_name, create_update_metadata=headers)
|
|
|
|
# test GET on http://account_url/container_name
|
|
# we should retrieve a listing of objects
|
|
resp, body = self.account_client.request("GET",
|
|
self.container_name,
|
|
headers={})
|
|
# The target of the request is not any Swift resource. Therefore, the
|
|
# existence of response header is checked without a custom matcher.
|
|
self.assertIn('content-length', resp)
|
|
self.assertIn('content-type', resp)
|
|
self.assertIn('x-trans-id', resp)
|
|
self.assertIn('date', resp)
|
|
# Check only the format of common headers with custom matcher
|
|
self.assertThat(resp, custom_matchers.AreAllWellFormatted())
|
|
|
|
self.assertIn(self.object_name, body.decode())
|
|
|
|
# clean up before exiting
|
|
self.container_client.create_update_or_delete_container_metadata(
|
|
self.container_name,
|
|
create_update_metadata={'web-listings': ""})
|
|
_, body = self.container_client.list_container_metadata(
|
|
self.container_name)
|
|
self.assertNotIn('x-container-meta-web-listings', body)
|
|
|
|
@decorators.idempotent_id('bc37ec94-43c8-4990-842e-0e5e02fc8926')
|
|
@utils.requires_ext(extension='staticweb', service='object')
|
|
def test_web_listing_css(self):
|
|
"""Test web listing css"""
|
|
headers = {'web-listings': 'true',
|
|
'web-listings-css': 'listings.css'}
|
|
|
|
self.container_client.create_update_or_delete_container_metadata(
|
|
self.container_name, create_update_metadata=headers)
|
|
|
|
# Maintain original headers, no auth added
|
|
self.account_client.auth_provider.set_alt_auth_data(
|
|
request_part='headers',
|
|
auth_data=None
|
|
)
|
|
|
|
# test GET on http://account_url/container_name
|
|
# we should retrieve a listing of objects
|
|
_, body = self.account_client.request("GET", self.container_name,
|
|
headers={})
|
|
self.assertIn(self.object_name, body.decode())
|
|
css = '<link rel="stylesheet" type="text/css" href="listings.css" />'
|
|
self.assertIn(css, body.decode())
|
|
|
|
@decorators.idempotent_id('f18b4bef-212e-45e7-b3ca-59af3a465f82')
|
|
@utils.requires_ext(extension='staticweb', service='object')
|
|
def test_web_error(self):
|
|
"""Test web error"""
|
|
headers = {'web-listings': 'true',
|
|
'web-error': self.object_name}
|
|
|
|
self.container_client.create_update_or_delete_container_metadata(
|
|
self.container_name, create_update_metadata=headers)
|
|
|
|
# Create object to return when requested object not found
|
|
object_name_404 = "404" + self.object_name
|
|
object_data_404 = data_utils.arbitrary_string()
|
|
self.object_client.create_object(self.container_name,
|
|
object_name_404,
|
|
object_data_404)
|
|
|
|
# Do not set auth in HTTP headers for next request
|
|
self.object_client.auth_provider.set_alt_auth_data(
|
|
request_part='headers',
|
|
auth_data=None
|
|
)
|
|
|
|
# Request non-existing object
|
|
self.assertRaises(
|
|
lib_exc.NotFound, self.object_client.get_object,
|
|
self.container_name, "notexisting")
|