)]}'
{"tempest/api/object_storage/test_account_services.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"5f94630e8b74534cb6fbaf7dc9a8a657482398a0","unresolved":false,"context_lines":[{"line_number":78,"context_line":"        # container request, the response does not contain \u0027accept-ranges\u0027"},{"line_number":79,"context_line":"        # header. This is a special case, therefore the existence of response"},{"line_number":80,"context_line":"        # headers is checked without custom matcher."},{"line_number":81,"context_line":"        self.assertIn(\u0027content-length\u0027, resp)"},{"line_number":82,"context_line":"        self.assertIn(\u0027x-timestamp\u0027, resp)"},{"line_number":83,"context_line":"        self.assertIn(\u0027x-account-bytes-used\u0027, resp)"},{"line_number":84,"context_line":"        self.assertIn(\u0027x-account-container-count\u0027, resp)"}],"source_content_type":"text/x-python","patch_set":3,"id":"bab6814e_91781d2d","side":"PARENT","line":81,"updated":"2016-05-19 21:09:34.000000000","message":"Wouldn\u0027t just removing this line (and not changing the matcher in the matcher.py file) ostensibly fix this issue?","commit_id":"aff9cc072bbbb222b09a3411b203c180b493eae8"},{"author":{"_account_id":15488,"name":"Radoslaw Zarzynski","email":"rzarzynski@mirantis.com","username":"rzarzynski"},"change_message_id":"5b347b313a4bd8771d2d012334e5c2eb2dda3d97","unresolved":false,"context_lines":[{"line_number":78,"context_line":"        # container request, the response does not contain \u0027accept-ranges\u0027"},{"line_number":79,"context_line":"        # header. This is a special case, therefore the existence of response"},{"line_number":80,"context_line":"        # headers is checked without custom matcher."},{"line_number":81,"context_line":"        self.assertIn(\u0027content-length\u0027, resp)"},{"line_number":82,"context_line":"        self.assertIn(\u0027x-timestamp\u0027, resp)"},{"line_number":83,"context_line":"        self.assertIn(\u0027x-account-bytes-used\u0027, resp)"},{"line_number":84,"context_line":"        self.assertIn(\u0027x-account-container-count\u0027, resp)"}],"source_content_type":"text/x-python","patch_set":3,"id":"9ad45d7e_25ec52f2","side":"PARENT","line":81,"in_reply_to":"9ad45d7e_58fe0939","updated":"2016-08-11 10:51:28.000000000","message":"Done","commit_id":"aff9cc072bbbb222b09a3411b203c180b493eae8"},{"author":{"_account_id":15488,"name":"Radoslaw Zarzynski","email":"rzarzynski@mirantis.com","username":"rzarzynski"},"change_message_id":"e0c67f66aee2edcbcd85c575f1c2692b87f85e28","unresolved":false,"context_lines":[{"line_number":78,"context_line":"        # container request, the response does not contain \u0027accept-ranges\u0027"},{"line_number":79,"context_line":"        # header. This is a special case, therefore the existence of response"},{"line_number":80,"context_line":"        # headers is checked without custom matcher."},{"line_number":81,"context_line":"        self.assertIn(\u0027content-length\u0027, resp)"},{"line_number":82,"context_line":"        self.assertIn(\u0027x-timestamp\u0027, resp)"},{"line_number":83,"context_line":"        self.assertIn(\u0027x-account-bytes-used\u0027, resp)"},{"line_number":84,"context_line":"        self.assertIn(\u0027x-account-container-count\u0027, resp)"}],"source_content_type":"text/x-python","patch_set":3,"id":"9ad45d7e_58fe0939","side":"PARENT","line":81,"in_reply_to":"9ad45d7e_7295f3e2","updated":"2016-08-09 10:48:59.000000000","message":"I can update this commit and send a new patch set, no problem at all. :-)\n\nActually the change set alters the custom matcher as well to *not enforce* Content-Length in 1xx and 204 responses.\n\nAndrea, Clay: I\u0027m going to propose in the new revision a comment explicitly stating that we aren\u0027t checking here the presence of Content-Length as the expected response code is 204. According to RFC 7230 HTTP server must not send the header. Thus, clients shouldn\u0027t depend on it. However, the standard doesn\u0027t require them to validate the behavior. We leverage that to not refuse any implementation that sends Content-Length in 204 like Swift (https://bugs.launchpad.net/swift/+bug/1537811) or some versions of RadosGW (http://tracker.ceph.com/issues/13582).","commit_id":"aff9cc072bbbb222b09a3411b203c180b493eae8"},{"author":{"_account_id":15488,"name":"Radoslaw Zarzynski","email":"rzarzynski@mirantis.com","username":"rzarzynski"},"change_message_id":"9e9f89c967b31a002520e12b72566bb1692ae713","unresolved":false,"context_lines":[{"line_number":78,"context_line":"        # container request, the response does not contain \u0027accept-ranges\u0027"},{"line_number":79,"context_line":"        # header. This is a special case, therefore the existence of response"},{"line_number":80,"context_line":"        # headers is checked without custom matcher."},{"line_number":81,"context_line":"        self.assertIn(\u0027content-length\u0027, resp)"},{"line_number":82,"context_line":"        self.assertIn(\u0027x-timestamp\u0027, resp)"},{"line_number":83,"context_line":"        self.assertIn(\u0027x-account-bytes-used\u0027, resp)"},{"line_number":84,"context_line":"        self.assertIn(\u0027x-account-container-count\u0027, resp)"}],"source_content_type":"text/x-python","patch_set":3,"id":"bab6814e_e278b9f4","side":"PARENT","line":81,"in_reply_to":"bab6814e_91781d2d","updated":"2016-05-19 22:19:33.000000000","message":"I don\u0027t think so. \"test_list_no_containers\" is rather an exception. The lion\u0027s share of tests use the matcher.\n\nThis is especially true for \"tempest.api.object_storage.test_object_services.ObjectTest.test_delete_object\" that is also a part of RefStack.","commit_id":"aff9cc072bbbb222b09a3411b203c180b493eae8"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"6250cb5326e0315e022fef10edff3eba71835272","unresolved":false,"context_lines":[{"line_number":78,"context_line":"        # container request, the response does not contain \u0027accept-ranges\u0027"},{"line_number":79,"context_line":"        # header. This is a special case, therefore the existence of response"},{"line_number":80,"context_line":"        # headers is checked without custom matcher."},{"line_number":81,"context_line":"        self.assertIn(\u0027content-length\u0027, resp)"},{"line_number":82,"context_line":"        self.assertIn(\u0027x-timestamp\u0027, resp)"},{"line_number":83,"context_line":"        self.assertIn(\u0027x-account-bytes-used\u0027, resp)"},{"line_number":84,"context_line":"        self.assertIn(\u0027x-account-container-count\u0027, resp)"}],"source_content_type":"text/x-python","patch_set":3,"id":"9ad45d7e_7295f3e2","side":"PARENT","line":81,"in_reply_to":"bab6814e_e278b9f4","updated":"2016-08-09 08:29:04.000000000","message":"Given all the discussion on this special topic, I think it\u0027s worth adding a note here, to avoid having the same discussion yet again on the next patch.\n\nI would mention here that the matcher enforces the RFC behaviour, but this use case is an exception to that in swift, so it cannot be used here as it would enforce content-length not being there.","commit_id":"aff9cc072bbbb222b09a3411b203c180b493eae8"}],"tempest/common/custom_matchers.py":[{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"039ee5db0c0fdb954a29dca82937fa7613c4f95a","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        self.target \u003d target"},{"line_number":38,"context_line":"        self.method \u003d method"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    def _conlen_required(self, resp):"},{"line_number":41,"context_line":"        # Verify whether given HTTP response must contain content-length."},{"line_number":42,"context_line":"        # Take into account the exceptions defined in RFC 7230."},{"line_number":43,"context_line":"        if resp.status \u003d\u003d 204:"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a68dd71_0202f26f","line":40,"updated":"2016-01-26 13:16:30.000000000","message":"This should be a staticmethod. \n\nAnd this method is misnamed. The method is about status code not \"conlen\" (and \"conlen\" is ambiguous).","commit_id":"9e55b7a18e2cb6b15cc29a09cbaec4b2ffd92916"},{"author":{"_account_id":15488,"name":"Radoslaw Zarzynski","email":"rzarzynski@mirantis.com","username":"rzarzynski"},"change_message_id":"abcf4681c3aca53851effc989f19c37dc730bff2","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        self.target \u003d target"},{"line_number":38,"context_line":"        self.method \u003d method"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    def _conlen_required(self, resp):"},{"line_number":41,"context_line":"        # Verify whether given HTTP response must contain content-length."},{"line_number":42,"context_line":"        # Take into account the exceptions defined in RFC 7230."},{"line_number":43,"context_line":"        if resp.status \u003d\u003d 204:"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a5de9d1_2f603035","line":40,"in_reply_to":"9a68dd71_0202f26f","updated":"2016-01-27 17:43:25.000000000","message":"IMO method name should reflect programmer\u0027s intention and code\u0027s purpose, not an internal realization.\nIn this particular case the method is about verifying whether \"content-length\" header is obligatory or not. Checking the status code is nothing more than a mean to achieve that. Thus, it\u0027s far for being important for a method\u0027s caller.","commit_id":"9e55b7a18e2cb6b15cc29a09cbaec4b2ffd92916"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"039ee5db0c0fdb954a29dca82937fa7613c4f95a","unresolved":false,"context_lines":[{"line_number":50,"context_line":"    def match(self, actual):"},{"line_number":51,"context_line":"        \"\"\"Check headers"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"        param: actual HTTP response object inc. headers and status"},{"line_number":54,"context_line":"        \"\"\""},{"line_number":55,"context_line":"        # Check common headers for all HTTP methods"},{"line_number":56,"context_line":"        if \u0027content-length\u0027 not in actual and self._conlen_required(actual):"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a68dd71_22a056a5","line":53,"updated":"2016-01-26 13:16:30.000000000","message":"inc. ?","commit_id":"9e55b7a18e2cb6b15cc29a09cbaec4b2ffd92916"},{"author":{"_account_id":15488,"name":"Radoslaw Zarzynski","email":"rzarzynski@mirantis.com","username":"rzarzynski"},"change_message_id":"abcf4681c3aca53851effc989f19c37dc730bff2","unresolved":false,"context_lines":[{"line_number":50,"context_line":"    def match(self, actual):"},{"line_number":51,"context_line":"        \"\"\"Check headers"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"        param: actual HTTP response object inc. headers and status"},{"line_number":54,"context_line":"        \"\"\""},{"line_number":55,"context_line":"        # Check common headers for all HTTP methods"},{"line_number":56,"context_line":"        if \u0027content-length\u0027 not in actual and self._conlen_required(actual):"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a5de9d1_4f680cf6","line":53,"in_reply_to":"9a68dd71_22a056a5","updated":"2016-01-27 17:43:25.000000000","message":"\"including\". I will rephrase.","commit_id":"9e55b7a18e2cb6b15cc29a09cbaec4b2ffd92916"},{"author":{"_account_id":7428,"name":"Yaroslav Lobankov","email":"lobankovyv@gmail.com","username":"ylobankov"},"change_message_id":"87b1854d9310c05fb9caa575d098e64c203b51f1","unresolved":false,"context_lines":[{"line_number":40,"context_line":"    def _content_length_required(self, resp):"},{"line_number":41,"context_line":"        # Verify whether given HTTP response must contain content-length."},{"line_number":42,"context_line":"        # Take into account the exceptions defined in RFC 7230."},{"line_number":43,"context_line":"        if resp.status \u003d\u003d 204:"},{"line_number":44,"context_line":"            return False"},{"line_number":45,"context_line":"        elif resp.status \u003e\u003d 100 and resp.status \u003c 200:"},{"line_number":46,"context_line":"            return False"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a5de9d1_007930c8","line":43,"updated":"2016-01-29 03:48:55.000000000","message":"It looks like it can be shorter:\n\n\nif resp.status in range(100, 200) or resp.status \u003d\u003d 204:\n    return False","commit_id":"09fea8268cee7191aa75cd37481f11405cde78f2"},{"author":{"_account_id":15488,"name":"Radoslaw Zarzynski","email":"rzarzynski@mirantis.com","username":"rzarzynski"},"change_message_id":"1605ad629e24c6b06614783087a55f6c76eb9c87","unresolved":false,"context_lines":[{"line_number":40,"context_line":"    def _content_length_required(self, resp):"},{"line_number":41,"context_line":"        # Verify whether given HTTP response must contain content-length."},{"line_number":42,"context_line":"        # Take into account the exceptions defined in RFC 7230."},{"line_number":43,"context_line":"        if resp.status \u003d\u003d 204:"},{"line_number":44,"context_line":"            return False"},{"line_number":45,"context_line":"        elif resp.status \u003e\u003d 100 and resp.status \u003c 200:"},{"line_number":46,"context_line":"            return False"}],"source_content_type":"text/x-python","patch_set":2,"id":"dab17558_92d431ec","line":43,"in_reply_to":"7a5de9d1_007930c8","updated":"2016-05-11 19:00:38.000000000","message":"Done","commit_id":"09fea8268cee7191aa75cd37481f11405cde78f2"},{"author":{"_account_id":7428,"name":"Yaroslav Lobankov","email":"lobankovyv@gmail.com","username":"ylobankov"},"change_message_id":"87b1854d9310c05fb9caa575d098e64c203b51f1","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        param: actual HTTP response object containing headers and status"},{"line_number":54,"context_line":"        \"\"\""},{"line_number":55,"context_line":"        # Check common headers for all HTTP methods"},{"line_number":56,"context_line":"        if \u0027content-length\u0027 not in actual \\"},{"line_number":57,"context_line":"            and self._content_length_required(actual):"},{"line_number":58,"context_line":"            return NonExistentHeader(\u0027content-length\u0027)"},{"line_number":59,"context_line":"        if \u0027content-type\u0027 not in actual:"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a5de9d1_6324aeae","line":56,"updated":"2016-01-29 03:48:55.000000000","message":"Could you please use parentheses here instead of \"\\\" ?","commit_id":"09fea8268cee7191aa75cd37481f11405cde78f2"},{"author":{"_account_id":15488,"name":"Radoslaw Zarzynski","email":"rzarzynski@mirantis.com","username":"rzarzynski"},"change_message_id":"1605ad629e24c6b06614783087a55f6c76eb9c87","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        param: actual HTTP response object containing headers and status"},{"line_number":54,"context_line":"        \"\"\""},{"line_number":55,"context_line":"        # Check common headers for all HTTP methods"},{"line_number":56,"context_line":"        if \u0027content-length\u0027 not in actual \\"},{"line_number":57,"context_line":"            and self._content_length_required(actual):"},{"line_number":58,"context_line":"            return NonExistentHeader(\u0027content-length\u0027)"},{"line_number":59,"context_line":"        if \u0027content-type\u0027 not in actual:"}],"source_content_type":"text/x-python","patch_set":2,"id":"dab17558_d2da3916","line":56,"in_reply_to":"7a5de9d1_6324aeae","updated":"2016-05-11 19:00:38.000000000","message":"Done","commit_id":"09fea8268cee7191aa75cd37481f11405cde78f2"}]}
