Comment 0 for bug 1819851

Revision history for this message
Zhangdaming (swift.hw) wrote :

Details:
I have tested server side directly by hand. I find there is 'transfer-encoding' header in response only when it is persistent connection。
I have checked the source test code, the test add "Connection:close" in the request explicitly,function as below

def request(self, url, method, *args, **kwargs):

        class Response(dict):
            def __init__(self, info):
                for key, value in info.getheaders().items():
                    # We assume HTTP header name to be string, not random
                    # bytes, thus ensure we have string keys.
                    self[six.u(key).lower()] = value
                self.status = info.status
                self['status'] = str(self.status)
                self.reason = info.reason
                self.version = info.version
                self['content-location'] = url

        original_headers = kwargs.get('headers', {})
        new_headers = dict(original_headers, connection='close')
        new_kwargs = dict(kwargs, headers=new_headers)

        # Follow up to 5 redirections. Don't raise an exception if
        # it's exceeded but return the HTTP 3XX response instead.
        retry = urllib3.util.Retry(raise_on_redirect=False, redirect=5)
        r = super(ClosingHttp, self).request(method, url, retries=retry,
                                             *args, **new_kwargs)
        return Response(r), r.data

function from "tempest.lib.common.http.ClosingHttp#request"

So I think it is not suitable to check 'transfer-encoding' header in test case 'tempest.api.object_storage.test_object_slo.ObjectSloTest.test_delete_large_object'
function as below:
    def test_delete_large_object(self):
        # delete static large object using multipart manifest
        object_name = self._create_large_object()

        params_del = {'multipart-manifest': 'delete'}
        resp, _ = self.object_client.delete_object(
            self.container_name,
            object_name,
            params=params_del)

        # When deleting SLO using multipart manifest, the response contains
        # not 'content-length' but 'transfer-encoding' header. This is the
        # special case, therefore the existence of response headers is checked
        # outside of custom matcher.
        self.assertIn('transfer-encoding', resp)
        self.assertIn('content-type', resp)
        self.assertIn('x-trans-id', resp)
        self.assertIn('date', resp)

function from "tempest.api.object_storage.test_object_slo.ObjectSloTest#test_delete_large_object"

Other information:
1.tempest version:18.0.0
https://github.com/openstack/tempest/releases

2.test case name
tempest.api.object_storage.test_object_slo.ObjectSloTest.test_delete_large_object[id-87b6dfa1-abe9-404d-8bf0-6c3751e6aa77]

3.client side debug log
Traceback (most recent call last):
  File "/home/tempest/refstack-client/.tempest/tempest/common/utils/__init__.py", line 107, in wrapper
    return func(*func_args, **func_kwargs)
  File "/home/tempest/refstack-client/.tempest/tempest/api/object_storage/test_object_slo.py", line 167, in test_delete_large_object
    self.assertIn('transfer-encoding', resp)
  File "/home/tempest/refstack-client/.tempest/.venv/local/lib/python2.7/site-packages/testtools/testcase.py", line 417, in assertIn
    self.assertThat(haystack, Contains(needle), message)
  File "/home/tempest/refstack-client/.tempest/.venv/local/lib/python2.7/site-packages/testtools/testcase.py", line 498, in assertThat
    raise mismatch_error
testtools.matchers._impl.MismatchError: 'transfer-encoding' not in {'status': '200', 'content-location': 'https://swift.eu-de.otc.t-systems.com/v1/AUTH_e88b9cf6908b493fa7c5fd853f306df6/tempest-TestContainer-1214636738/tempest-TestObject-694206116?multipart-manifest=delete', u'connection': 'close', u'x-trans-id': 'tx05210000016974ad0aa80-3c39a872f5', u'date': 'Wed, 13 Mar 2019 01:31:31 GMT', u'content-type': 'text/plain'}
0^M
]
tags: -worker-0

4. server side header infomation
Connection:close
Accept-Encoding:identity
X-Auth-Token:<omitted>
Host:swift.xx.xx.xx.com