)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"87723f74c5c76d017a192336edefb48b9c367092","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"02175780_a39455a8","updated":"2023-12-14 05:25:38.000000000","message":"I think the remaining comments are not obviously actionable (unless I missed something).  We could probably debate some of the style.  We could probably try to move more non-acl tests into the new Base classes.  But we\u0027ve also probably done quite enough for one diff with everything squashed.\n\nhttps://review.opendev.org/c/openstack/swift/+/902564","commit_id":"da4ceb5f4e3883befc6622244b9a7f25833479e9"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f5d3b8194927eea1cd81ccf2f3de37511c17efae","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"5ea02272_a0f8994b","updated":"2023-12-13 02:09:14.000000000","message":"I\u0027ve gone cross-eyed; this needs work","commit_id":"da4ceb5f4e3883befc6622244b9a7f25833479e9"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"93bf4c0c664ee2b586ed80dfef26ab1f954e8d78","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"5b40abff_47c08069","updated":"2023-12-13 17:56:50.000000000","message":"some fixups here https://review.opendev.org/c/openstack/swift/+/903602\n\nplus, I think we can clean up even more and get rid of the FakeSwift subclass https://review.opendev.org/c/openstack/swift/+/903603","commit_id":"da4ceb5f4e3883befc6622244b9a7f25833479e9"}],"test/unit/common/middleware/helpers.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f5d3b8194927eea1cd81ccf2f3de37511c17efae","unresolved":true,"context_lines":[{"line_number":197,"context_line":"            is_success \u003d resp_class().is_success"},{"line_number":198,"context_line":"        except Exception:"},{"line_number":199,"context_line":"            # test_reconciler passes in an exploding response"},{"line_number":200,"context_line":"            is_success \u003d False"},{"line_number":201,"context_line":"        if is_success:"},{"line_number":202,"context_line":"            # update sticky resp headers with headers from registered resp"},{"line_number":203,"context_line":"            sticky_headers \u003d self._sticky_headers.get(env[\u0027PATH_INFO\u0027], {})"}],"source_content_type":"text/x-python","patch_set":2,"id":"b482a1c4_86550823","line":200,"updated":"2023-12-13 02:09:14.000000000","message":"i tried this with a lbyl, but isinstance(resp_class, swob.functools.partial) seemed weird.","commit_id":"da4ceb5f4e3883befc6622244b9a7f25833479e9"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"93bf4c0c664ee2b586ed80dfef26ab1f954e8d78","unresolved":true,"context_lines":[{"line_number":198,"context_line":"        except Exception:"},{"line_number":199,"context_line":"            # test_reconciler passes in an exploding response"},{"line_number":200,"context_line":"            is_success \u003d False"},{"line_number":201,"context_line":"        if is_success:"},{"line_number":202,"context_line":"            # update sticky resp headers with headers from registered resp"},{"line_number":203,"context_line":"            sticky_headers \u003d self._sticky_headers.get(env[\u0027PATH_INFO\u0027], {})"},{"line_number":204,"context_line":"            resp_headers \u003d HeaderKeyDict(sticky_headers)"}],"source_content_type":"text/x-python","patch_set":2,"id":"0ee4535b_9f9cc046","line":201,"updated":"2023-12-13 17:56:50.000000000","message":"update_sticky_response_headers docstring says this is only for GET or HEAD response","commit_id":"da4ceb5f4e3883befc6622244b9a7f25833479e9"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"87723f74c5c76d017a192336edefb48b9c367092","unresolved":false,"context_lines":[{"line_number":198,"context_line":"        except Exception:"},{"line_number":199,"context_line":"            # test_reconciler passes in an exploding response"},{"line_number":200,"context_line":"            is_success \u003d False"},{"line_number":201,"context_line":"        if is_success:"},{"line_number":202,"context_line":"            # update sticky resp headers with headers from registered resp"},{"line_number":203,"context_line":"            sticky_headers \u003d self._sticky_headers.get(env[\u0027PATH_INFO\u0027], {})"},{"line_number":204,"context_line":"            resp_headers \u003d HeaderKeyDict(sticky_headers)"}],"source_content_type":"text/x-python","patch_set":2,"id":"23e80282_3900fa8b","line":201,"in_reply_to":"0ee4535b_9f9cc046","updated":"2023-12-14 05:25:38.000000000","message":"nice catch.","commit_id":"da4ceb5f4e3883befc6622244b9a7f25833479e9"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"93bf4c0c664ee2b586ed80dfef26ab1f954e8d78","unresolved":true,"context_lines":[{"line_number":202,"context_line":"            # update sticky resp headers with headers from registered resp"},{"line_number":203,"context_line":"            sticky_headers \u003d self._sticky_headers.get(env[\u0027PATH_INFO\u0027], {})"},{"line_number":204,"context_line":"            resp_headers \u003d HeaderKeyDict(sticky_headers)"},{"line_number":205,"context_line":"            resp_headers.update(headers)"},{"line_number":206,"context_line":"        else:"},{"line_number":207,"context_line":"            # error responses don\u0027t get sticky resp headers"},{"line_number":208,"context_line":"            resp_headers \u003d HeaderKeyDict(headers)"}],"source_content_type":"text/x-python","patch_set":2,"id":"c60a6924_b160ab5a","line":205,"updated":"2023-12-13 17:56:50.000000000","message":"I think I like this better than modifying the responses as they are set, because there\u0027s less scope for confusion while debugging : self_responses should be exactly what was registered","commit_id":"da4ceb5f4e3883befc6622244b9a7f25833479e9"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"87723f74c5c76d017a192336edefb48b9c367092","unresolved":false,"context_lines":[{"line_number":202,"context_line":"            # update sticky resp headers with headers from registered resp"},{"line_number":203,"context_line":"            sticky_headers \u003d self._sticky_headers.get(env[\u0027PATH_INFO\u0027], {})"},{"line_number":204,"context_line":"            resp_headers \u003d HeaderKeyDict(sticky_headers)"},{"line_number":205,"context_line":"            resp_headers.update(headers)"},{"line_number":206,"context_line":"        else:"},{"line_number":207,"context_line":"            # error responses don\u0027t get sticky resp headers"},{"line_number":208,"context_line":"            resp_headers \u003d HeaderKeyDict(headers)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3dfc5980_5139dec2","line":205,"in_reply_to":"c60a6924_b160ab5a","updated":"2023-12-14 05:25:38.000000000","message":"Acknowledged","commit_id":"da4ceb5f4e3883befc6622244b9a7f25833479e9"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f5d3b8194927eea1cd81ccf2f3de37511c17efae","unresolved":true,"context_lines":[{"line_number":204,"context_line":"            resp_headers \u003d HeaderKeyDict(sticky_headers)"},{"line_number":205,"context_line":"            resp_headers.update(headers)"},{"line_number":206,"context_line":"        else:"},{"line_number":207,"context_line":"            # error responses don\u0027t get sticky resp headers"},{"line_number":208,"context_line":"            resp_headers \u003d HeaderKeyDict(headers)"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"        return resp_class, resp_headers, body"}],"source_content_type":"text/x-python","patch_set":2,"id":"f1c37925_7781b700","line":207,"updated":"2023-12-13 02:09:14.000000000","message":"i think this is the key difference from the preceeding change.","commit_id":"da4ceb5f4e3883befc6622244b9a7f25833479e9"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"87723f74c5c76d017a192336edefb48b9c367092","unresolved":false,"context_lines":[{"line_number":204,"context_line":"            resp_headers \u003d HeaderKeyDict(sticky_headers)"},{"line_number":205,"context_line":"            resp_headers.update(headers)"},{"line_number":206,"context_line":"        else:"},{"line_number":207,"context_line":"            # error responses don\u0027t get sticky resp headers"},{"line_number":208,"context_line":"            resp_headers \u003d HeaderKeyDict(headers)"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"        return resp_class, resp_headers, body"}],"source_content_type":"text/x-python","patch_set":2,"id":"a5aef314_ce47a218","line":207,"in_reply_to":"f1c37925_7781b700","updated":"2023-12-14 05:25:38.000000000","message":"Acknowledged","commit_id":"da4ceb5f4e3883befc6622244b9a7f25833479e9"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"93bf4c0c664ee2b586ed80dfef26ab1f954e8d78","unresolved":true,"context_lines":[{"line_number":371,"context_line":"    def call_count(self):"},{"line_number":372,"context_line":"        return len(self._calls)"},{"line_number":373,"context_line":""},{"line_number":374,"context_line":"    def update_sticky_response_headers(self, path, headers):"},{"line_number":375,"context_line":"        \"\"\""},{"line_number":376,"context_line":"        Tests setUp can use this to ensure any successful GET/HEAD response for"},{"line_number":377,"context_line":"        a given path will include these headers."}],"source_content_type":"text/x-python","patch_set":2,"id":"3aa10f81_a9728be7","line":374,"updated":"2023-12-13 17:56:50.000000000","message":"it\u0027s a little weird that there is no way to reset these, but I didn\u0027t find a use case to reset them","commit_id":"da4ceb5f4e3883befc6622244b9a7f25833479e9"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"87723f74c5c76d017a192336edefb48b9c367092","unresolved":false,"context_lines":[{"line_number":371,"context_line":"    def call_count(self):"},{"line_number":372,"context_line":"        return len(self._calls)"},{"line_number":373,"context_line":""},{"line_number":374,"context_line":"    def update_sticky_response_headers(self, path, headers):"},{"line_number":375,"context_line":"        \"\"\""},{"line_number":376,"context_line":"        Tests setUp can use this to ensure any successful GET/HEAD response for"},{"line_number":377,"context_line":"        a given path will include these headers."}],"source_content_type":"text/x-python","patch_set":2,"id":"293e188d_992642d4","line":374,"in_reply_to":"3aa10f81_a9728be7","updated":"2023-12-14 05:25:38.000000000","message":"Acknowledged","commit_id":"da4ceb5f4e3883befc6622244b9a7f25833479e9"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f5d3b8194927eea1cd81ccf2f3de37511c17efae","unresolved":true,"context_lines":[{"line_number":381,"context_line":""},{"line_number":382,"context_line":"    def register(self, method, path, response_class, headers, body\u003db\u0027\u0027):"},{"line_number":383,"context_line":"        path \u003d normalize_path(path)"},{"line_number":384,"context_line":"        self._responses[(method, path)] \u003d [(response_class, headers, body)]"},{"line_number":385,"context_line":""},{"line_number":386,"context_line":"    def register_next_response(self, method, path,"},{"line_number":387,"context_line":"                               response_class, headers, body\u003db\u0027\u0027):"}],"source_content_type":"text/x-python","patch_set":2,"id":"dd1d3373_25524754","line":384,"updated":"2023-12-13 02:09:14.000000000","message":"i sort of like that both of these interfaces methods are trivially obvious.\n\nthey should still get some explicit testing in common.middleare.test_helpers","commit_id":"da4ceb5f4e3883befc6622244b9a7f25833479e9"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"87723f74c5c76d017a192336edefb48b9c367092","unresolved":false,"context_lines":[{"line_number":381,"context_line":""},{"line_number":382,"context_line":"    def register(self, method, path, response_class, headers, body\u003db\u0027\u0027):"},{"line_number":383,"context_line":"        path \u003d normalize_path(path)"},{"line_number":384,"context_line":"        self._responses[(method, path)] \u003d [(response_class, headers, body)]"},{"line_number":385,"context_line":""},{"line_number":386,"context_line":"    def register_next_response(self, method, path,"},{"line_number":387,"context_line":"                               response_class, headers, body\u003db\u0027\u0027):"}],"source_content_type":"text/x-python","patch_set":2,"id":"e12e4400_7f015393","line":384,"in_reply_to":"dd1d3373_25524754","updated":"2023-12-14 05:25:38.000000000","message":"Acknowledged","commit_id":"da4ceb5f4e3883befc6622244b9a7f25833479e9"}],"test/unit/common/middleware/s3api/__init__.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f5d3b8194927eea1cd81ccf2f3de37511c17efae","unresolved":true,"context_lines":[{"line_number":108,"context_line":"        # if you change the registered acl response for /bucket or"},{"line_number":109,"context_line":"        # /bucket/object tearDown will complain at you; you can set this to"},{"line_number":110,"context_line":"        # True in order to indicate you know what you\u0027re doing"},{"line_number":111,"context_line":"        self.s3acl_response_modified \u003d False"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"        self.swift.register(\u0027HEAD\u0027, \u0027/v1/AUTH_test\u0027,"},{"line_number":114,"context_line":"                            swob.HTTPOk, {}, None)"}],"source_content_type":"text/x-python","patch_set":2,"id":"4bfbd4e6_cebb85d0","line":111,"updated":"2023-12-13 02:09:14.000000000","message":"this probably isn\u0027t strictly needed; but I found it useful to sanity-check and annotate tests that mess with the base registered responses.","commit_id":"da4ceb5f4e3883befc6622244b9a7f25833479e9"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"87723f74c5c76d017a192336edefb48b9c367092","unresolved":false,"context_lines":[{"line_number":108,"context_line":"        # if you change the registered acl response for /bucket or"},{"line_number":109,"context_line":"        # /bucket/object tearDown will complain at you; you can set this to"},{"line_number":110,"context_line":"        # True in order to indicate you know what you\u0027re doing"},{"line_number":111,"context_line":"        self.s3acl_response_modified \u003d False"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"        self.swift.register(\u0027HEAD\u0027, \u0027/v1/AUTH_test\u0027,"},{"line_number":114,"context_line":"                            swob.HTTPOk, {}, None)"}],"source_content_type":"text/x-python","patch_set":2,"id":"623d8359_9129f842","line":111,"in_reply_to":"4bfbd4e6_cebb85d0","updated":"2023-12-14 05:25:38.000000000","message":"Acknowledged","commit_id":"da4ceb5f4e3883befc6622244b9a7f25833479e9"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f5d3b8194927eea1cd81ccf2f3de37511c17efae","unresolved":true,"context_lines":[{"line_number":113,"context_line":"        self.swift.register(\u0027HEAD\u0027, \u0027/v1/AUTH_test\u0027,"},{"line_number":114,"context_line":"                            swob.HTTPOk, {}, None)"},{"line_number":115,"context_line":"        self.swift.register(\u0027HEAD\u0027, \u0027/v1/AUTH_test/bucket\u0027,"},{"line_number":116,"context_line":"                            swob.HTTPNoContent, {}, None)"},{"line_number":117,"context_line":"        self.swift.register(\u0027PUT\u0027, \u0027/v1/AUTH_test/bucket\u0027,"},{"line_number":118,"context_line":"                            swob.HTTPCreated, {}, None)"},{"line_number":119,"context_line":"        self.swift.register(\u0027POST\u0027, \u0027/v1/AUTH_test/bucket\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"d9310534_2d221f1e","line":116,"updated":"2023-12-13 02:09:14.000000000","message":"base test doesn\u0027t register a listing response by default, but some of the s3acl(only) tests expected bucket, public \u0026 authenticatd to respond to listings.","commit_id":"da4ceb5f4e3883befc6622244b9a7f25833479e9"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f5d3b8194927eea1cd81ccf2f3de37511c17efae","unresolved":true,"context_lines":[{"line_number":144,"context_line":"        # register bucket HEAD response with given policy index header"},{"line_number":145,"context_line":"        headers \u003d {\u0027X-Backend-Storage-Policy-Index\u0027: str(bucket_policy_index)}"},{"line_number":146,"context_line":"        self.swift.register(\u0027HEAD\u0027, \u0027/v1/AUTH_test/\u0027 + bucket,"},{"line_number":147,"context_line":"                            swob.HTTPNoContent, headers)"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"    def _assert_policy_index(self, req_headers, resp_headers, policy_index):"},{"line_number":150,"context_line":"        self.assertNotIn(\u0027X-Backend-Storage-Policy-Index\u0027, req_headers)"}],"source_content_type":"text/x-python","patch_set":2,"id":"808f6cae_c3837d9a","line":147,"updated":"2023-12-13 02:09:14.000000000","message":"this doesn\u0027t remove any sticky ACLs, but it would wipe out any version sysmeta; it could also use update_sticky_response_headers, but it didn\u0027t seem to be needed in practice.","commit_id":"da4ceb5f4e3883befc6622244b9a7f25833479e9"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f5d3b8194927eea1cd81ccf2f3de37511c17efae","unresolved":true,"context_lines":[{"line_number":238,"context_line":""},{"line_number":239,"context_line":"        with mock.patch(\u0027swift.common.middleware.s3api.s3request.\u0027"},{"line_number":240,"context_line":"                        \u0027get_container_info\u0027, return_value\u003dfake_info):"},{"line_number":241,"context_line":"            yield"},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"    def call_s3api(self, req, **kwargs):"},{"line_number":244,"context_line":"        return self.call_app(req, app\u003dself.s3api, **kwargs)"}],"source_content_type":"text/x-python","patch_set":2,"id":"12744491_ada86878","line":241,"updated":"2023-12-13 02:09:14.000000000","message":"this is something that @s3acl would do indiscriminately, but it wasn\u0027t strictly needed by all tests, and mostly seemed to effect the captured FakeSwift.calls","commit_id":"da4ceb5f4e3883befc6622244b9a7f25833479e9"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f5d3b8194927eea1cd81ccf2f3de37511c17efae","unresolved":true,"context_lines":[{"line_number":271,"context_line":"            owner, [Grant(AuthenticatedUsers(), \u0027READ\u0027)], \u0027bucket\u0027)"},{"line_number":272,"context_line":""},{"line_number":273,"context_line":"        # some extra buckets for s3acl tests"},{"line_number":274,"context_line":"        buckets \u003d [\u0027bucket\u0027, \u0027public\u0027, \u0027authenticated\u0027]"},{"line_number":275,"context_line":"        for bucket in buckets:"},{"line_number":276,"context_line":"            path \u003d \u0027/v1/AUTH_test/\u0027 + bucket"},{"line_number":277,"context_line":"            self.swift.register(\u0027HEAD\u0027, path, swob.HTTPNoContent, {}, None),"}],"source_content_type":"text/x-python","patch_set":2,"id":"51554491_6a65a21b","line":274,"updated":"2023-12-13 02:09:14.000000000","message":"bucket has a pre-existing HEAD response registered form the base but not a listing\n\na lot of the tests need a HEAD response from the bucket for container_info calls, but would probably be happy with a registered GET\n\nthe existing infra ONLY configured GET/listings for the public \u0026 authenticated buckets; and FakeSwift was happy to use the headers for HEADs - I think they\u0027re only needed for a couple of tests and should probably move into there.\n\nI should probably try to make this a bit more uniform; but this seemed explict, obvious and sufficient (if not entirely necessary)","commit_id":"da4ceb5f4e3883befc6622244b9a7f25833479e9"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f5d3b8194927eea1cd81ccf2f3de37511c17efae","unresolved":true,"context_lines":[{"line_number":279,"context_line":""},{"line_number":280,"context_line":"        extra_s3acl_reqs \u003d ["},{"line_number":281,"context_line":"            (\u0027TEST\u0027, \u0027/v1/AUTH_test\u0027, swob.HTTPMethodNotAllowed, {}, None),"},{"line_number":282,"context_line":"            (\u0027TEST\u0027, \u0027/v1/AUTH_X\u0027, swob.HTTPMethodNotAllowed, {}, None),"},{"line_number":283,"context_line":"            (\u0027PUT\u0027, \u0027/v1/AUTH_test/bucket\u0027, swob.HTTPCreated, {}, None),"},{"line_number":284,"context_line":"            (\u0027POST\u0027, \u0027/v1/AUTH_test/bucket\u0027, swob.HTTPNoContent, {}, None),"},{"line_number":285,"context_line":"            (\u0027DELETE\u0027, \u0027/v1/AUTH_test/bucket\u0027, swob.HTTPNoContent, {}, None),"}],"source_content_type":"text/x-python","patch_set":2,"id":"68dfce3a_7f5cf605","line":282,"updated":"2023-12-13 02:09:14.000000000","message":"I think all of the ACL tests need thse; but I don\u0027t really understand what this request_method","commit_id":"da4ceb5f4e3883befc6622244b9a7f25833479e9"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f5d3b8194927eea1cd81ccf2f3de37511c17efae","unresolved":true,"context_lines":[{"line_number":282,"context_line":"            (\u0027TEST\u0027, \u0027/v1/AUTH_X\u0027, swob.HTTPMethodNotAllowed, {}, None),"},{"line_number":283,"context_line":"            (\u0027PUT\u0027, \u0027/v1/AUTH_test/bucket\u0027, swob.HTTPCreated, {}, None),"},{"line_number":284,"context_line":"            (\u0027POST\u0027, \u0027/v1/AUTH_test/bucket\u0027, swob.HTTPNoContent, {}, None),"},{"line_number":285,"context_line":"            (\u0027DELETE\u0027, \u0027/v1/AUTH_test/bucket\u0027, swob.HTTPNoContent, {}, None),"},{"line_number":286,"context_line":"        ]"},{"line_number":287,"context_line":"        for method, path, response_class, headers, body in extra_s3acl_reqs:"},{"line_number":288,"context_line":"            self.swift.register(method, path, response_class, headers, body)"}],"source_content_type":"text/x-python","patch_set":2,"id":"8c03d43d_cadac4b2","line":285,"updated":"2023-12-13 02:09:14.000000000","message":"probably like one s3acl-only test needs these and they should move.","commit_id":"da4ceb5f4e3883befc6622244b9a7f25833479e9"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f5d3b8194927eea1cd81ccf2f3de37511c17efae","unresolved":true,"context_lines":[{"line_number":297,"context_line":"        for path, headers in sticky_s3acl_headers.items():"},{"line_number":298,"context_line":"            self.swift.update_sticky_response_headers(path, headers)"},{"line_number":299,"context_line":""},{"line_number":300,"context_line":"    def tearDown(self):"},{"line_number":301,"context_line":"        # sanity the test didn\u0027t break the the ACLs"},{"line_number":302,"context_line":"        swift_path_acl_resp_checks \u003d {"},{"line_number":303,"context_line":"            \u0027/v1/AUTH_test/bucket\u0027: ("}],"source_content_type":"text/x-python","patch_set":2,"id":"eef23190_28a86dde","line":300,"updated":"2023-12-13 02:09:14.000000000","message":"none of this is strictly needed, but I felt it was keeping me honest about understanding what was going on.","commit_id":"da4ceb5f4e3883befc6622244b9a7f25833479e9"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f5d3b8194927eea1cd81ccf2f3de37511c17efae","unresolved":true,"context_lines":[{"line_number":311,"context_line":"                swift_path_acl_resp_checks.items():"},{"line_number":312,"context_line":"            if self.s3acl_response_modified:"},{"line_number":313,"context_line":"                # this is expected to reset back to the original sticky headers"},{"line_number":314,"context_line":"                self.swift.register(\u0027HEAD\u0027, swift_path, resp_class, {}, None)"},{"line_number":315,"context_line":"            req \u003d swob.Request.blank(swift_path, method\u003d\u0027HEAD\u0027)"},{"line_number":316,"context_line":"            status, headers, body \u003d self.call_app(req)"},{"line_number":317,"context_line":"            if is_success(int(status.split()[0])):"}],"source_content_type":"text/x-python","patch_set":2,"id":"86759c82_0234d03d","line":314,"updated":"2023-12-13 02:09:14.000000000","message":"this is the tests \"get out of jail free card\" - since sticky headers are persistently applied to any 2XX response and only modified by explicit calls to update_sticky_response_headers AND easy to override/bypass with an call to register that overwrites the sysmeta this is an easy way to put things back the way they were in setUp and make sure things still make sense.","commit_id":"da4ceb5f4e3883befc6622244b9a7f25833479e9"}],"test/unit/common/middleware/s3api/helpers.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"93bf4c0c664ee2b586ed80dfef26ab1f954e8d78","unresolved":true,"context_lines":[{"line_number":33,"context_line":"        self.s3_acl \u003d s3_acl"},{"line_number":34,"context_line":"        self.remote_user \u003d \u0027authorized\u0027"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def _fake_auth_middleware(self, env):"},{"line_number":37,"context_line":"        if \u0027swift.authorize_override\u0027 in env:"},{"line_number":38,"context_line":"            return"},{"line_number":39,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"38f3bb41_1350f6c4","side":"PARENT","line":36,"updated":"2023-12-13 17:56:50.000000000","message":"I\u0027m not sure we need this - it seems to be equivalent to FakeApp","commit_id":"57fe37cb6cf5bf38f55659ab22c674b3c7162726"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"87723f74c5c76d017a192336edefb48b9c367092","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        self.s3_acl \u003d s3_acl"},{"line_number":34,"context_line":"        self.remote_user \u003d \u0027authorized\u0027"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def _fake_auth_middleware(self, env):"},{"line_number":37,"context_line":"        if \u0027swift.authorize_override\u0027 in env:"},{"line_number":38,"context_line":"            return"},{"line_number":39,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"922efe50_5d974a34","side":"PARENT","line":36,"in_reply_to":"38f3bb41_1350f6c4","updated":"2023-12-14 05:25:38.000000000","message":"Acknowledged","commit_id":"57fe37cb6cf5bf38f55659ab22c674b3c7162726"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f5d3b8194927eea1cd81ccf2f3de37511c17efae","unresolved":true,"context_lines":[{"line_number":83,"context_line":"        if body is not None and not isinstance(body, (bytes, list)):"},{"line_number":84,"context_line":"            body \u003d body.encode(\u0027utf8\u0027)"},{"line_number":85,"context_line":"        return super(FakeSwift, self).register("},{"line_number":86,"context_line":"            method, path, response_class, headers, body)"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    def register_unconditionally(self, method, path, response_class, headers,"},{"line_number":89,"context_line":"                                 body):"}],"source_content_type":"text/x-python","patch_set":2,"id":"bb122507_2030cb34","side":"PARENT","line":86,"updated":"2023-12-13 02:09:14.000000000","message":"this was a shock last time I discovered it and I\u0027m glad it\u0027s gone","commit_id":"57fe37cb6cf5bf38f55659ab22c674b3c7162726"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"87723f74c5c76d017a192336edefb48b9c367092","unresolved":false,"context_lines":[{"line_number":83,"context_line":"        if body is not None and not isinstance(body, (bytes, list)):"},{"line_number":84,"context_line":"            body \u003d body.encode(\u0027utf8\u0027)"},{"line_number":85,"context_line":"        return super(FakeSwift, self).register("},{"line_number":86,"context_line":"            method, path, response_class, headers, body)"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    def register_unconditionally(self, method, path, response_class, headers,"},{"line_number":89,"context_line":"                                 body):"}],"source_content_type":"text/x-python","patch_set":2,"id":"2eba32a1_c18cd129","side":"PARENT","line":86,"in_reply_to":"bb122507_2030cb34","updated":"2023-12-14 05:25:38.000000000","message":"Acknowledged","commit_id":"57fe37cb6cf5bf38f55659ab22c674b3c7162726"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f5d3b8194927eea1cd81ccf2f3de37511c17efae","unresolved":true,"context_lines":[{"line_number":91,"context_line":"        # register_unconditionally() keeps nothing."},{"line_number":92,"context_line":"        if body is not None and not isinstance(body, bytes):"},{"line_number":93,"context_line":"            body \u003d body.encode(\u0027utf8\u0027)"},{"line_number":94,"context_line":"        self._responses[(method, path)] \u003d [(response_class, headers, body)]"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    def clear_calls(self):"},{"line_number":97,"context_line":"        del self._calls[:]"}],"source_content_type":"text/x-python","patch_set":2,"id":"2c4a7a66_3b4be36a","side":"PARENT","line":94,"updated":"2023-12-13 02:09:14.000000000","message":"aka \"register\" - no tests seemed to actually need the ability to \"wipe\" the s3acl headers; I think maybe they were bumping into sysmeta copying that they didn\u0027t want.  Now only sticky headers bleed through a new register call - which seems to be the s3acl use-case and I\u0027m happy to have a more consistent/flexible pattern to support it.","commit_id":"57fe37cb6cf5bf38f55659ab22c674b3c7162726"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"87723f74c5c76d017a192336edefb48b9c367092","unresolved":false,"context_lines":[{"line_number":91,"context_line":"        # register_unconditionally() keeps nothing."},{"line_number":92,"context_line":"        if body is not None and not isinstance(body, bytes):"},{"line_number":93,"context_line":"            body \u003d body.encode(\u0027utf8\u0027)"},{"line_number":94,"context_line":"        self._responses[(method, path)] \u003d [(response_class, headers, body)]"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    def clear_calls(self):"},{"line_number":97,"context_line":"        del self._calls[:]"}],"source_content_type":"text/x-python","patch_set":2,"id":"06edb9d8_35c5b786","side":"PARENT","line":94,"in_reply_to":"2c4a7a66_3b4be36a","updated":"2023-12-14 05:25:38.000000000","message":"Acknowledged","commit_id":"57fe37cb6cf5bf38f55659ab22c674b3c7162726"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f5d3b8194927eea1cd81ccf2f3de37511c17efae","unresolved":true,"context_lines":[{"line_number":94,"context_line":"        self._responses[(method, path)] \u003d [(response_class, headers, body)]"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    def clear_calls(self):"},{"line_number":97,"context_line":"        del self._calls[:]"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"class UnreadableInput(object):"}],"source_content_type":"text/x-python","patch_set":2,"id":"574f5d46_9b270dd6","side":"PARENT","line":97,"updated":"2023-12-13 02:09:14.000000000","message":"this one we kept, but I moved it to the base.","commit_id":"57fe37cb6cf5bf38f55659ab22c674b3c7162726"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"87723f74c5c76d017a192336edefb48b9c367092","unresolved":false,"context_lines":[{"line_number":94,"context_line":"        self._responses[(method, path)] \u003d [(response_class, headers, body)]"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    def clear_calls(self):"},{"line_number":97,"context_line":"        del self._calls[:]"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"class UnreadableInput(object):"}],"source_content_type":"text/x-python","patch_set":2,"id":"f77ea29e_c0540f16","side":"PARENT","line":97,"in_reply_to":"574f5d46_9b270dd6","updated":"2023-12-14 05:25:38.000000000","message":"Acknowledged","commit_id":"57fe37cb6cf5bf38f55659ab22c674b3c7162726"}],"test/unit/common/middleware/s3api/test_acl.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f5d3b8194927eea1cd81ccf2f3de37511c17efae","unresolved":true,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":"from test.unit.common.middleware.s3api import S3ApiTestCase"},{"line_number":30,"context_line":"from test.unit.common.middleware.s3api.helpers import UnreadableInput"},{"line_number":31,"context_line":"from test.unit.common.middleware.s3api.test_s3_acl import s3acl"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"class TestS3ApiAcl(S3ApiTestCase):"}],"source_content_type":"text/x-python","patch_set":2,"id":"571e0da2_f6e5312b","side":"PARENT","line":31,"updated":"2023-12-13 02:09:14.000000000","message":"noone uses this decorator anymore - it\u0027s gone","commit_id":"57fe37cb6cf5bf38f55659ab22c674b3c7162726"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"93bf4c0c664ee2b586ed80dfef26ab1f954e8d78","unresolved":true,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":"from test.unit.common.middleware.s3api import S3ApiTestCase"},{"line_number":30,"context_line":"from test.unit.common.middleware.s3api.helpers import UnreadableInput"},{"line_number":31,"context_line":"from test.unit.common.middleware.s3api.test_s3_acl import s3acl"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"class TestS3ApiAcl(S3ApiTestCase):"}],"source_content_type":"text/x-python","patch_set":2,"id":"77518a38_40cb3631","side":"PARENT","line":31,"in_reply_to":"571e0da2_f6e5312b","updated":"2023-12-13 17:56:50.000000000","message":"woohoo!","commit_id":"57fe37cb6cf5bf38f55659ab22c674b3c7162726"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"87723f74c5c76d017a192336edefb48b9c367092","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":"from test.unit.common.middleware.s3api import S3ApiTestCase"},{"line_number":30,"context_line":"from test.unit.common.middleware.s3api.helpers import UnreadableInput"},{"line_number":31,"context_line":"from test.unit.common.middleware.s3api.test_s3_acl import s3acl"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"class TestS3ApiAcl(S3ApiTestCase):"}],"source_content_type":"text/x-python","patch_set":2,"id":"00838144_e10363c9","side":"PARENT","line":31,"in_reply_to":"77518a38_40cb3631","updated":"2023-12-14 05:25:38.000000000","message":"Acknowledged","commit_id":"57fe37cb6cf5bf38f55659ab22c674b3c7162726"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f5d3b8194927eea1cd81ccf2f3de37511c17efae","unresolved":true,"context_lines":[{"line_number":46,"context_line":"        name \u003d elem.find(\u0027./AccessControlList/Grant/Grantee/ID\u0027).text"},{"line_number":47,"context_line":"        self.assertEqual(name, owner)"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    @s3acl"},{"line_number":50,"context_line":"    def test_bucket_acl_GET(self):"},{"line_number":51,"context_line":"        req \u003d Request.blank(\u0027/bucket?acl\u0027,"},{"line_number":52,"context_line":"                            environ\u003d{\u0027REQUEST_METHOD\u0027: \u0027GET\u0027},"}],"source_content_type":"text/x-python","patch_set":2,"id":"52bf6a22_d851b313","side":"PARENT","line":49,"updated":"2023-12-13 02:09:14.000000000","message":"stays here as part of base","commit_id":"57fe37cb6cf5bf38f55659ab22c674b3c7162726"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"87723f74c5c76d017a192336edefb48b9c367092","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        name \u003d elem.find(\u0027./AccessControlList/Grant/Grantee/ID\u0027).text"},{"line_number":47,"context_line":"        self.assertEqual(name, owner)"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    @s3acl"},{"line_number":50,"context_line":"    def test_bucket_acl_GET(self):"},{"line_number":51,"context_line":"        req \u003d Request.blank(\u0027/bucket?acl\u0027,"},{"line_number":52,"context_line":"                            environ\u003d{\u0027REQUEST_METHOD\u0027: \u0027GET\u0027},"}],"source_content_type":"text/x-python","patch_set":2,"id":"0cb79e65_94f3ad02","side":"PARENT","line":49,"in_reply_to":"52bf6a22_d851b313","updated":"2023-12-14 05:25:38.000000000","message":"Acknowledged","commit_id":"57fe37cb6cf5bf38f55659ab22c674b3c7162726"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f5d3b8194927eea1cd81ccf2f3de37511c17efae","unresolved":true,"context_lines":[{"line_number":99,"context_line":"        status, headers, body \u003d self.call_s3api(req)"},{"line_number":100,"context_line":"        self.assertEqual(status.split()[0], \u0027200\u0027)"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    @s3acl(s3acl_only\u003dTrue)"},{"line_number":103,"context_line":"    def test_bucket_canned_acl_PUT_with_s3acl(self):"},{"line_number":104,"context_line":"        req \u003d Request.blank(\u0027/bucket?acl\u0027,"},{"line_number":105,"context_line":"                            environ\u003d{\u0027REQUEST_METHOD\u0027: \u0027PUT\u0027},"}],"source_content_type":"text/x-python","patch_set":2,"id":"f05e3696_cd39a826","side":"PARENT","line":102,"updated":"2023-12-13 02:09:14.000000000","message":"s3acl_only tests goes down to S3ApiTestCaseAcl","commit_id":"57fe37cb6cf5bf38f55659ab22c674b3c7162726"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"87723f74c5c76d017a192336edefb48b9c367092","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        status, headers, body \u003d self.call_s3api(req)"},{"line_number":100,"context_line":"        self.assertEqual(status.split()[0], \u0027200\u0027)"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    @s3acl(s3acl_only\u003dTrue)"},{"line_number":103,"context_line":"    def test_bucket_canned_acl_PUT_with_s3acl(self):"},{"line_number":104,"context_line":"        req \u003d Request.blank(\u0027/bucket?acl\u0027,"},{"line_number":105,"context_line":"                            environ\u003d{\u0027REQUEST_METHOD\u0027: \u0027PUT\u0027},"}],"source_content_type":"text/x-python","patch_set":2,"id":"f4dff7e8_2f87ce56","side":"PARENT","line":102,"in_reply_to":"f05e3696_cd39a826","updated":"2023-12-14 05:25:38.000000000","message":"Acknowledged","commit_id":"57fe37cb6cf5bf38f55659ab22c674b3c7162726"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f5d3b8194927eea1cd81ccf2f3de37511c17efae","unresolved":true,"context_lines":[{"line_number":181,"context_line":"        if not self.s3api.conf.s3_acl:"},{"line_number":182,"context_line":"            self._check_acl(\u0027test:tester\u0027, body)"},{"line_number":183,"context_line":"        self.assertSetEqual(set(((\u0027HEAD\u0027, \u0027/v1/AUTH_test/bucket/object\u0027),)),"},{"line_number":184,"context_line":"                            set(self.swift.calls))"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"    def test_invalid_xml(self):"},{"line_number":187,"context_line":"        req \u003d Request.blank(\u0027/bucket?acl\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"accf6004_cfba8c91","side":"PARENT","line":184,"updated":"2023-12-13 02:09:14.000000000","message":"@s3acl tests are run by both TestCase; these move up to base","commit_id":"57fe37cb6cf5bf38f55659ab22c674b3c7162726"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"87723f74c5c76d017a192336edefb48b9c367092","unresolved":false,"context_lines":[{"line_number":181,"context_line":"        if not self.s3api.conf.s3_acl:"},{"line_number":182,"context_line":"            self._check_acl(\u0027test:tester\u0027, body)"},{"line_number":183,"context_line":"        self.assertSetEqual(set(((\u0027HEAD\u0027, \u0027/v1/AUTH_test/bucket/object\u0027),)),"},{"line_number":184,"context_line":"                            set(self.swift.calls))"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"    def test_invalid_xml(self):"},{"line_number":187,"context_line":"        req \u003d Request.blank(\u0027/bucket?acl\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"07d57101_a5e402b3","side":"PARENT","line":184,"in_reply_to":"accf6004_cfba8c91","updated":"2023-12-14 05:25:38.000000000","message":"Acknowledged","commit_id":"57fe37cb6cf5bf38f55659ab22c674b3c7162726"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f5d3b8194927eea1cd81ccf2f3de37511c17efae","unresolved":true,"context_lines":[{"line_number":211,"context_line":"                                    (\u0027X-Container-Write\u0027, \u0027.\u0027)])"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"    @s3acl(s3acl_only\u003dTrue)"},{"line_number":214,"context_line":"    def test_handle_acl_header_with_s3acl(self):"},{"line_number":215,"context_line":"        def check_generated_acl_header(acl, targets):"},{"line_number":216,"context_line":"            req \u003d Request.blank(\u0027/bucket\u0027,"},{"line_number":217,"context_line":"                                headers\u003d{\u0027X-Amz-Acl\u0027: acl})"}],"source_content_type":"text/x-python","patch_set":2,"id":"4e0aa2a6_14cca1b5","side":"PARENT","line":214,"updated":"2023-12-13 02:09:14.000000000","message":"this s3acl-only test is now under S3ApiTestCaseAcl","commit_id":"57fe37cb6cf5bf38f55659ab22c674b3c7162726"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"87723f74c5c76d017a192336edefb48b9c367092","unresolved":false,"context_lines":[{"line_number":211,"context_line":"                                    (\u0027X-Container-Write\u0027, \u0027.\u0027)])"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"    @s3acl(s3acl_only\u003dTrue)"},{"line_number":214,"context_line":"    def test_handle_acl_header_with_s3acl(self):"},{"line_number":215,"context_line":"        def check_generated_acl_header(acl, targets):"},{"line_number":216,"context_line":"            req \u003d Request.blank(\u0027/bucket\u0027,"},{"line_number":217,"context_line":"                                headers\u003d{\u0027X-Amz-Acl\u0027: acl})"}],"source_content_type":"text/x-python","patch_set":2,"id":"1bab27a4_c07cc6de","side":"PARENT","line":214,"in_reply_to":"4e0aa2a6_14cca1b5","updated":"2023-12-14 05:25:38.000000000","message":"Acknowledged","commit_id":"57fe37cb6cf5bf38f55659ab22c674b3c7162726"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f5d3b8194927eea1cd81ccf2f3de37511c17efae","unresolved":true,"context_lines":[{"line_number":227,"context_line":"        check_generated_acl_header(\u0027private\u0027,"},{"line_number":228,"context_line":"                                   [\u0027X-Container-Read\u0027, \u0027X-Container-Write\u0027])"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"    def test_handle_acl_with_invalid_header_string(self):"},{"line_number":231,"context_line":"        req \u003d Request.blank(\u0027/bucket\u0027, headers\u003d{\u0027X-Amz-Acl\u0027: \u0027invalid\u0027})"},{"line_number":232,"context_line":"        with self.assertRaises(InvalidArgument) as cm:"},{"line_number":233,"context_line":"            handle_acl_header(req)"}],"source_content_type":"text/x-python","patch_set":2,"id":"c06e6640_52c0d106","side":"PARENT","line":230,"updated":"2023-12-13 02:09:14.000000000","message":"this had to move up to bottom of TestS3apiTestCase - it doesn\u0027t get run w/ Acl CommonSetup (although it\u0027s not obvious to me that it wouldn\u0027t)","commit_id":"57fe37cb6cf5bf38f55659ab22c674b3c7162726"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"93bf4c0c664ee2b586ed80dfef26ab1f954e8d78","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":2,"id":"aeaea054_3dc9a167","updated":"2023-12-13 17:56:50.000000000","message":"LGTM","commit_id":"da4ceb5f4e3883befc6622244b9a7f25833479e9"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"87723f74c5c76d017a192336edefb48b9c367092","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"ec859dd4_fbed6fe1","in_reply_to":"aeaea054_3dc9a167","updated":"2023-12-14 05:25:38.000000000","message":"Acknowledged","commit_id":"da4ceb5f4e3883befc6622244b9a7f25833479e9"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f5d3b8194927eea1cd81ccf2f3de37511c17efae","unresolved":true,"context_lines":[{"line_number":30,"context_line":"from test.unit.common.middleware.s3api.helpers import UnreadableInput"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"class BaseS3ApiAcl(object):"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    def setUp(self):"},{"line_number":36,"context_line":"        super(BaseS3ApiAcl, self).setUp()"}],"source_content_type":"text/x-python","patch_set":2,"id":"2f482d11_af94030a","line":33,"updated":"2023-12-13 02:09:14.000000000","message":"this is the pattern - BaseTest is a plain object that gets mixed-in on an S3ApiTestCase and an S3ApiTestCaseAcl\n\ntests in Base are never picked up by the runner directly (do not inhert from TestCase); but are run as part of the two S3ApiTestCase[Acl] subclasses.","commit_id":"da4ceb5f4e3883befc6622244b9a7f25833479e9"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"87723f74c5c76d017a192336edefb48b9c367092","unresolved":false,"context_lines":[{"line_number":30,"context_line":"from test.unit.common.middleware.s3api.helpers import UnreadableInput"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"class BaseS3ApiAcl(object):"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    def setUp(self):"},{"line_number":36,"context_line":"        super(BaseS3ApiAcl, self).setUp()"}],"source_content_type":"text/x-python","patch_set":2,"id":"bbaed656_fac41050","line":33,"in_reply_to":"2f482d11_af94030a","updated":"2023-12-14 05:25:38.000000000","message":"Acknowledged","commit_id":"da4ceb5f4e3883befc6622244b9a7f25833479e9"}],"test/unit/common/middleware/s3api/test_bucket.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f5d3b8194927eea1cd81ccf2f3de37511c17efae","unresolved":true,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"from test.unit.common.middleware.helpers import normalize_path"},{"line_number":36,"context_line":"from test.unit.common.middleware.s3api import S3ApiTestCase, S3ApiTestCaseAcl"},{"line_number":37,"context_line":"from test.unit.common.middleware.s3api.test_s3_acl import s3acl"},{"line_number":38,"context_line":"from test.unit.common.middleware.s3api.helpers import UnreadableInput"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"# Example etag from ProxyFS; note that it is already quote-wrapped"}],"source_content_type":"text/x-python","patch_set":2,"id":"e253aa8b_f85b82f4","side":"PARENT","line":37,"updated":"2023-12-13 02:09:14.000000000","message":"@s3acl is gone - noone uses it anymore","commit_id":"57fe37cb6cf5bf38f55659ab22c674b3c7162726"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"87723f74c5c76d017a192336edefb48b9c367092","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"from test.unit.common.middleware.helpers import normalize_path"},{"line_number":36,"context_line":"from test.unit.common.middleware.s3api import S3ApiTestCase, S3ApiTestCaseAcl"},{"line_number":37,"context_line":"from test.unit.common.middleware.s3api.test_s3_acl import s3acl"},{"line_number":38,"context_line":"from test.unit.common.middleware.s3api.helpers import UnreadableInput"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"# Example etag from ProxyFS; note that it is already quote-wrapped"}],"source_content_type":"text/x-python","patch_set":2,"id":"9b753ca3_bdd9e5d2","side":"PARENT","line":37,"in_reply_to":"e253aa8b_f85b82f4","updated":"2023-12-14 05:25:38.000000000","message":"Acknowledged","commit_id":"57fe37cb6cf5bf38f55659ab22c674b3c7162726"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f5d3b8194927eea1cd81ccf2f3de37511c17efae","unresolved":true,"context_lines":[{"line_number":1206,"context_line":"        ])"},{"line_number":1207,"context_line":""},{"line_number":1208,"context_line":"    @s3acl"},{"line_number":1209,"context_line":"    def test_bucket_PUT_error(self):"},{"line_number":1210,"context_line":"        code \u003d self._test_method_error(\u0027PUT\u0027, \u0027/bucket\u0027, swob.HTTPCreated,"},{"line_number":1211,"context_line":"                                       headers\u003d{\u0027Content-Length\u0027: \u0027a\u0027})"},{"line_number":1212,"context_line":"        self.assertEqual(code, \u0027InvalidArgument\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"a62b4e77_34b62b93","side":"PARENT","line":1209,"updated":"2023-12-13 02:09:14.000000000","message":"ok, this was previously @s3acl, but the diff makes it look funny","commit_id":"57fe37cb6cf5bf38f55659ab22c674b3c7162726"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"87723f74c5c76d017a192336edefb48b9c367092","unresolved":false,"context_lines":[{"line_number":1206,"context_line":"        ])"},{"line_number":1207,"context_line":""},{"line_number":1208,"context_line":"    @s3acl"},{"line_number":1209,"context_line":"    def test_bucket_PUT_error(self):"},{"line_number":1210,"context_line":"        code \u003d self._test_method_error(\u0027PUT\u0027, \u0027/bucket\u0027, swob.HTTPCreated,"},{"line_number":1211,"context_line":"                                       headers\u003d{\u0027Content-Length\u0027: \u0027a\u0027})"},{"line_number":1212,"context_line":"        self.assertEqual(code, \u0027InvalidArgument\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"32674a12_2232b684","side":"PARENT","line":1209,"in_reply_to":"a62b4e77_34b62b93","updated":"2023-12-14 05:25:38.000000000","message":"Acknowledged","commit_id":"57fe37cb6cf5bf38f55659ab22c674b3c7162726"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f5d3b8194927eea1cd81ccf2f3de37511c17efae","unresolved":true,"context_lines":[{"line_number":1327,"context_line":"                                     \u0027Date\u0027: self.get_date_header()},"},{"line_number":1328,"context_line":"                            body\u003dxml)"},{"line_number":1329,"context_line":"        status, headers, body \u003d self.call_s3api(req)"},{"line_number":1330,"context_line":"        self.assertEqual(status.split()[0], \u0027200\u0027)"},{"line_number":1331,"context_line":""},{"line_number":1332,"context_line":"    @s3acl"},{"line_number":1333,"context_line":"    def test_bucket_PUT_with_location(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"7bf4f23a_01c3b6c5","side":"PARENT","line":1330,"updated":"2023-12-13 02:09:14.000000000","message":"this moved to base; but I think the way inheritence ends up it could have stayed here.\n\nthe refactor of this module was schitzophrenic","commit_id":"57fe37cb6cf5bf38f55659ab22c674b3c7162726"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"87723f74c5c76d017a192336edefb48b9c367092","unresolved":false,"context_lines":[{"line_number":1327,"context_line":"                                     \u0027Date\u0027: self.get_date_header()},"},{"line_number":1328,"context_line":"                            body\u003dxml)"},{"line_number":1329,"context_line":"        status, headers, body \u003d self.call_s3api(req)"},{"line_number":1330,"context_line":"        self.assertEqual(status.split()[0], \u0027200\u0027)"},{"line_number":1331,"context_line":""},{"line_number":1332,"context_line":"    @s3acl"},{"line_number":1333,"context_line":"    def test_bucket_PUT_with_location(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a88d5de_2f1cd885","side":"PARENT","line":1330,"in_reply_to":"7bf4f23a_01c3b6c5","updated":"2023-12-14 05:25:38.000000000","message":"Done","commit_id":"57fe37cb6cf5bf38f55659ab22c674b3c7162726"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f5d3b8194927eea1cd81ccf2f3de37511c17efae","unresolved":true,"context_lines":[{"line_number":1351,"context_line":"        SubElement(elem, \u0027LocationConstraint\u0027).text \u003d \u0027regionone\u0027"},{"line_number":1352,"context_line":"        headers \u003d {"},{"line_number":1353,"context_line":"            \u0027Authorization\u0027: \u0027AWS4-HMAC-SHA256 \u0027 + \u0027, \u0027.join(["},{"line_number":1354,"context_line":"                \u0027Credential\u003dtest:tester/%s/regionone/s3/aws4_request\u0027 %"},{"line_number":1355,"context_line":"                self.get_v4_amz_date_header().split(\u0027T\u0027, 1)[0],"},{"line_number":1356,"context_line":"                \u0027SignedHeaders\u003dhost\u0027,"},{"line_number":1357,"context_line":"                \u0027Signature\u003dX\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"be4b5a65_5f4ee2b3","side":"PARENT","line":1354,"updated":"2023-12-13 02:09:14.000000000","message":"this test should probalby also work with test;tester s3acl","commit_id":"57fe37cb6cf5bf38f55659ab22c674b3c7162726"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f5d3b8194927eea1cd81ccf2f3de37511c17efae","unresolved":true,"context_lines":[{"line_number":1371,"context_line":"                            environ\u003d{\u0027REQUEST_METHOD\u0027: \u0027PUT\u0027},"},{"line_number":1372,"context_line":"                            headers\u003d{\u0027Authorization\u0027: \u0027AWS test:tester:hmac\u0027,"},{"line_number":1373,"context_line":"                                     \u0027Date\u0027: self.get_date_header(),"},{"line_number":1374,"context_line":"                                     \u0027X-Amz-Acl\u0027: \u0027public-read\u0027})"},{"line_number":1375,"context_line":"        status, headers, body \u003d self.call_s3api(req)"},{"line_number":1376,"context_line":"        self.assertEqual(status.split()[0], \u0027200\u0027)"},{"line_number":1377,"context_line":"        _, _, headers \u003d self.swift.calls_with_headers[-1]"}],"source_content_type":"text/x-python","patch_set":2,"id":"ca1fb16d_0467022b","side":"PARENT","line":1374,"updated":"2023-12-13 02:09:14.000000000","message":"I think this test would work as acl test case - test:tester is authorized to change ACLs - you\u0027d have to set s3acl_response_modified \u003d True to make tearDown happy","commit_id":"57fe37cb6cf5bf38f55659ab22c674b3c7162726"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f5d3b8194927eea1cd81ccf2f3de37511c17efae","unresolved":true,"context_lines":[{"line_number":1377,"context_line":"        _, _, headers \u003d self.swift.calls_with_headers[-1]"},{"line_number":1378,"context_line":"        self.assertTrue(\u0027X-Container-Read\u0027 in headers)"},{"line_number":1379,"context_line":"        self.assertEqual(headers.get(\u0027X-Container-Read\u0027), \u0027.r:*,.rlistings\u0027)"},{"line_number":1380,"context_line":"        self.assertNotIn(\u0027X-Container-Sysmeta-S3api-Acl\u0027, headers)"},{"line_number":1381,"context_line":""},{"line_number":1382,"context_line":"    @s3acl"},{"line_number":1383,"context_line":"    def test_bucket_PUT_with_location_error(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"b452d58c_f44bd9d4","side":"PARENT","line":1380,"updated":"2023-12-13 02:09:14.000000000","message":"ok, these were bounced out to the NonAcl TestCase","commit_id":"57fe37cb6cf5bf38f55659ab22c674b3c7162726"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"87723f74c5c76d017a192336edefb48b9c367092","unresolved":false,"context_lines":[{"line_number":1377,"context_line":"        _, _, headers \u003d self.swift.calls_with_headers[-1]"},{"line_number":1378,"context_line":"        self.assertTrue(\u0027X-Container-Read\u0027 in headers)"},{"line_number":1379,"context_line":"        self.assertEqual(headers.get(\u0027X-Container-Read\u0027), \u0027.r:*,.rlistings\u0027)"},{"line_number":1380,"context_line":"        self.assertNotIn(\u0027X-Container-Sysmeta-S3api-Acl\u0027, headers)"},{"line_number":1381,"context_line":""},{"line_number":1382,"context_line":"    @s3acl"},{"line_number":1383,"context_line":"    def test_bucket_PUT_with_location_error(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"01195ca9_74b9480a","side":"PARENT","line":1380,"in_reply_to":"b452d58c_f44bd9d4","updated":"2023-12-14 05:25:38.000000000","message":"Acknowledged","commit_id":"57fe37cb6cf5bf38f55659ab22c674b3c7162726"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f5d3b8194927eea1cd81ccf2f3de37511c17efae","unresolved":true,"context_lines":[{"line_number":1406,"context_line":""},{"line_number":1407,"context_line":"    def _test_method_error_delete(self, path, sw_resp):"},{"line_number":1408,"context_line":"        self.swift.register(\u0027HEAD\u0027, \u0027/v1/AUTH_test\u0027 + path, sw_resp, {}, None)"},{"line_number":1409,"context_line":"        return self._test_method_error(\u0027DELETE\u0027, path, sw_resp)"},{"line_number":1410,"context_line":""},{"line_number":1411,"context_line":"    @s3acl"},{"line_number":1412,"context_line":"    def test_bucket_DELETE_error(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"0970475f_a4c3a65c","side":"PARENT","line":1409,"updated":"2023-12-13 02:09:14.000000000","message":"moved to base","commit_id":"57fe37cb6cf5bf38f55659ab22c674b3c7162726"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"87723f74c5c76d017a192336edefb48b9c367092","unresolved":false,"context_lines":[{"line_number":1406,"context_line":""},{"line_number":1407,"context_line":"    def _test_method_error_delete(self, path, sw_resp):"},{"line_number":1408,"context_line":"        self.swift.register(\u0027HEAD\u0027, \u0027/v1/AUTH_test\u0027 + path, sw_resp, {}, None)"},{"line_number":1409,"context_line":"        return self._test_method_error(\u0027DELETE\u0027, path, sw_resp)"},{"line_number":1410,"context_line":""},{"line_number":1411,"context_line":"    @s3acl"},{"line_number":1412,"context_line":"    def test_bucket_DELETE_error(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"897e247b_732488a7","side":"PARENT","line":1409,"in_reply_to":"0970475f_a4c3a65c","updated":"2023-12-14 05:25:38.000000000","message":"Acknowledged","commit_id":"57fe37cb6cf5bf38f55659ab22c674b3c7162726"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f5d3b8194927eea1cd81ccf2f3de37511c17efae","unresolved":true,"context_lines":[{"line_number":40,"context_line":"PFS_ETAG \u003d \u0027\"pfsv2/AUTH_test/01234567/89abcdef-32\"\u0027"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"class BaseS3ApiBucket(S3ApiTestCase):"},{"line_number":44,"context_line":"    def setup_objects(self):"},{"line_number":45,"context_line":"        self.objects \u003d ((\u0027lily\u0027, \u00272011-01-05T02:19:14.275290\u0027, \u00270\u0027, \u00273909\u0027),"},{"line_number":46,"context_line":"                        (u\u0027lily-\\u062a\u0027, \u00272011-01-05T02:19:14.275290\u0027, 0, 390),"}],"source_content_type":"text/x-python","patch_set":2,"id":"e13a16d8_9342ae7d","line":43,"updated":"2023-12-13 02:09:14.000000000","message":"this was the first module I ported; I think I was still trying to get my pattern straight and it looks wrong, this should inhert from object and get mixed-in\n\nI think it\u0027s only ok because it has no `def test_xxx` methods?","commit_id":"da4ceb5f4e3883befc6622244b9a7f25833479e9"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"87723f74c5c76d017a192336edefb48b9c367092","unresolved":false,"context_lines":[{"line_number":40,"context_line":"PFS_ETAG \u003d \u0027\"pfsv2/AUTH_test/01234567/89abcdef-32\"\u0027"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"class BaseS3ApiBucket(S3ApiTestCase):"},{"line_number":44,"context_line":"    def setup_objects(self):"},{"line_number":45,"context_line":"        self.objects \u003d ((\u0027lily\u0027, \u00272011-01-05T02:19:14.275290\u0027, \u00270\u0027, \u00273909\u0027),"},{"line_number":46,"context_line":"                        (u\u0027lily-\\u062a\u0027, \u00272011-01-05T02:19:14.275290\u0027, 0, 390),"}],"source_content_type":"text/x-python","patch_set":2,"id":"6b8f3d1e_a9624af8","line":43,"in_reply_to":"e13a16d8_9342ae7d","updated":"2023-12-14 05:25:38.000000000","message":"Acknowledged","commit_id":"da4ceb5f4e3883befc6622244b9a7f25833479e9"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f5d3b8194927eea1cd81ccf2f3de37511c17efae","unresolved":true,"context_lines":[{"line_number":169,"context_line":"        return self._test_method_error(\u0027DELETE\u0027, path, sw_resp)"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"class TestS3ApiBucketNoACL(BaseS3ApiBucket):"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"    def test_bucket_HEAD(self):"},{"line_number":175,"context_line":"        req \u003d Request.blank(\u0027/junk\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"e2871673_8aa1d0cc","line":172,"updated":"2023-12-13 02:09:14.000000000","message":"Normally I\u0027d expect the \"non-acl tests\" to be in a class inheriting from:\n\n(S3ApiTestCase, BaseS3ApiBucket)\n\nwhere BaseS3ApiBucket holds the tests common to non-acl/acl TestCase\n\nas it stands this whole TestCase is all the non-acl tests; but those could also be in the other non-acl TestS3ApiBucket TestCase","commit_id":"da4ceb5f4e3883befc6622244b9a7f25833479e9"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"87723f74c5c76d017a192336edefb48b9c367092","unresolved":false,"context_lines":[{"line_number":169,"context_line":"        return self._test_method_error(\u0027DELETE\u0027, path, sw_resp)"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"class TestS3ApiBucketNoACL(BaseS3ApiBucket):"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"    def test_bucket_HEAD(self):"},{"line_number":175,"context_line":"        req \u003d Request.blank(\u0027/junk\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"42667ea8_684329a2","line":172,"in_reply_to":"e2871673_8aa1d0cc","updated":"2023-12-14 05:25:38.000000000","message":"Done","commit_id":"da4ceb5f4e3883befc6622244b9a7f25833479e9"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f5d3b8194927eea1cd81ccf2f3de37511c17efae","unresolved":true,"context_lines":[{"line_number":1228,"context_line":"        self.assertNotIn(\u0027X-Container-Sysmeta-S3api-Acl\u0027, headers)"},{"line_number":1229,"context_line":""},{"line_number":1230,"context_line":""},{"line_number":1231,"context_line":"class TestS3ApiBucket(BaseS3ApiBucket):"},{"line_number":1232,"context_line":""},{"line_number":1233,"context_line":"    def test_bucket_GET_error(self):"},{"line_number":1234,"context_line":"        code \u003d self._test_method_error(\u0027GET\u0027, \u0027/bucket\u0027, swob.HTTPUnauthorized)"}],"source_content_type":"text/x-python","patch_set":2,"id":"4c0b2c1f_b7040332","line":1231,"updated":"2023-12-13 02:09:14.000000000","message":"these are the @s3acl tests running w/o Acl\n\nI guess they could be arranged this way; but maybe it\u0027d be better to do it consistently.","commit_id":"da4ceb5f4e3883befc6622244b9a7f25833479e9"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"87723f74c5c76d017a192336edefb48b9c367092","unresolved":false,"context_lines":[{"line_number":1228,"context_line":"        self.assertNotIn(\u0027X-Container-Sysmeta-S3api-Acl\u0027, headers)"},{"line_number":1229,"context_line":""},{"line_number":1230,"context_line":""},{"line_number":1231,"context_line":"class TestS3ApiBucket(BaseS3ApiBucket):"},{"line_number":1232,"context_line":""},{"line_number":1233,"context_line":"    def test_bucket_GET_error(self):"},{"line_number":1234,"context_line":"        code \u003d self._test_method_error(\u0027GET\u0027, \u0027/bucket\u0027, swob.HTTPUnauthorized)"}],"source_content_type":"text/x-python","patch_set":2,"id":"c487a348_974878a0","line":1231,"in_reply_to":"4c0b2c1f_b7040332","updated":"2023-12-14 05:25:38.000000000","message":"Done","commit_id":"da4ceb5f4e3883befc6622244b9a7f25833479e9"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f5d3b8194927eea1cd81ccf2f3de37511c17efae","unresolved":true,"context_lines":[{"line_number":1507,"context_line":"        self.assertNotIn((\u0027DELETE\u0027, \u0027/v1/AUTH_test/bucket\u0027), called)"},{"line_number":1508,"context_line":""},{"line_number":1509,"context_line":""},{"line_number":1510,"context_line":"class TestS3ApiBucketAcl(TestS3ApiBucket, S3ApiTestCaseAcl):"},{"line_number":1511,"context_line":"    def test_bucket_PUT_with_canned_s3acl(self):"},{"line_number":1512,"context_line":"        account \u003d \u0027test:tester\u0027"},{"line_number":1513,"context_line":"        acl \u003d \\"}],"source_content_type":"text/x-python","patch_set":2,"id":"519bc798_c37fa250","line":1510,"updated":"2023-12-13 02:09:14.000000000","message":"ok, this is adding in the @s3acl decorated tests - but also creating a multiple inheritnece from S3ApiTestCase","commit_id":"da4ceb5f4e3883befc6622244b9a7f25833479e9"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"87723f74c5c76d017a192336edefb48b9c367092","unresolved":false,"context_lines":[{"line_number":1507,"context_line":"        self.assertNotIn((\u0027DELETE\u0027, \u0027/v1/AUTH_test/bucket\u0027), called)"},{"line_number":1508,"context_line":""},{"line_number":1509,"context_line":""},{"line_number":1510,"context_line":"class TestS3ApiBucketAcl(TestS3ApiBucket, S3ApiTestCaseAcl):"},{"line_number":1511,"context_line":"    def test_bucket_PUT_with_canned_s3acl(self):"},{"line_number":1512,"context_line":"        account \u003d \u0027test:tester\u0027"},{"line_number":1513,"context_line":"        acl \u003d \\"}],"source_content_type":"text/x-python","patch_set":2,"id":"960baf2c_63c7e17a","line":1510,"in_reply_to":"519bc798_c37fa250","updated":"2023-12-14 05:25:38.000000000","message":"Done","commit_id":"da4ceb5f4e3883befc6622244b9a7f25833479e9"}],"test/unit/common/middleware/s3api/test_helpers.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f5d3b8194927eea1cd81ccf2f3de37511c17efae","unresolved":true,"context_lines":[{"line_number":19,"context_line":"from test.unit.common.middleware.s3api.helpers import FakeSwift"},{"line_number":20,"context_line":"from swift.common.middleware.s3api.utils import sysmeta_header"},{"line_number":21,"context_line":"from swift.common.swob import HeaderKeyDict"},{"line_number":22,"context_line":"from mock import MagicMock"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"class S3ApiHelperTestCase(unittest.TestCase):"}],"source_content_type":"text/x-python","patch_set":2,"id":"123ac15d_068a6372","side":"PARENT","line":22,"updated":"2023-12-13 02:09:14.000000000","message":"getting rid of a MagicMock is almost always a win in my book!","commit_id":"57fe37cb6cf5bf38f55659ab22c674b3c7162726"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"87723f74c5c76d017a192336edefb48b9c367092","unresolved":false,"context_lines":[{"line_number":19,"context_line":"from test.unit.common.middleware.s3api.helpers import FakeSwift"},{"line_number":20,"context_line":"from swift.common.middleware.s3api.utils import sysmeta_header"},{"line_number":21,"context_line":"from swift.common.swob import HeaderKeyDict"},{"line_number":22,"context_line":"from mock import MagicMock"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"class S3ApiHelperTestCase(unittest.TestCase):"}],"source_content_type":"text/x-python","patch_set":2,"id":"495689e1_0c712353","side":"PARENT","line":22,"in_reply_to":"123ac15d_068a6372","updated":"2023-12-14 05:25:38.000000000","message":"Acknowledged","commit_id":"57fe37cb6cf5bf38f55659ab22c674b3c7162726"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f5d3b8194927eea1cd81ccf2f3de37511c17efae","unresolved":true,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    def _check_headers(self, swift, method, path, headers):"},{"line_number":31,"context_line":"        _, response_headers, _ \u003d swift._responses[(method, path)][0]"},{"line_number":32,"context_line":"        self.assertEqual(headers, response_headers)"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    def test_fake_swift_sysmeta(self):"},{"line_number":35,"context_line":"        swift \u003d FakeSwift()"}],"source_content_type":"text/x-python","patch_set":2,"id":"54c69b8b_987b529e","side":"PARENT","line":32,"updated":"2023-12-13 02:09:14.000000000","message":"this seemed like an akward way to check headers - and it didn\u0027t work because sticky_headers are added to registered responses dynamically in this implementation.","commit_id":"57fe37cb6cf5bf38f55659ab22c674b3c7162726"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"87723f74c5c76d017a192336edefb48b9c367092","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    def _check_headers(self, swift, method, path, headers):"},{"line_number":31,"context_line":"        _, response_headers, _ \u003d swift._responses[(method, path)][0]"},{"line_number":32,"context_line":"        self.assertEqual(headers, response_headers)"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    def test_fake_swift_sysmeta(self):"},{"line_number":35,"context_line":"        swift \u003d FakeSwift()"}],"source_content_type":"text/x-python","patch_set":2,"id":"697f0225_900f5bf7","side":"PARENT","line":32,"in_reply_to":"54c69b8b_987b529e","updated":"2023-12-14 05:25:38.000000000","message":"Acknowledged","commit_id":"57fe37cb6cf5bf38f55659ab22c674b3c7162726"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f5d3b8194927eea1cd81ccf2f3de37511c17efae","unresolved":true,"context_lines":[{"line_number":25,"context_line":"    def setUp(self):"},{"line_number":26,"context_line":"        self.method \u003d \u0027HEAD\u0027"},{"line_number":27,"context_line":"        self.path \u003d \u0027/v1/AUTH_test/bucket\u0027"},{"line_number":28,"context_line":"        self.resp \u003d swob.HTTPNoContent"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    def _check_headers(self, swift, method, path, headers):"},{"line_number":31,"context_line":"        captured_headers \u003d {}"}],"source_content_type":"text/x-python","patch_set":2,"id":"bafbb542_b376fc3b","line":28,"updated":"2023-12-13 02:09:14.000000000","message":"I\u0027m not sure coupling the helper with the TestCase state is much better than coupling with the caller; but this is probably why I felt comfortable explicitly asserting 204","commit_id":"da4ceb5f4e3883befc6622244b9a7f25833479e9"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"87723f74c5c76d017a192336edefb48b9c367092","unresolved":false,"context_lines":[{"line_number":25,"context_line":"    def setUp(self):"},{"line_number":26,"context_line":"        self.method \u003d \u0027HEAD\u0027"},{"line_number":27,"context_line":"        self.path \u003d \u0027/v1/AUTH_test/bucket\u0027"},{"line_number":28,"context_line":"        self.resp \u003d swob.HTTPNoContent"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    def _check_headers(self, swift, method, path, headers):"},{"line_number":31,"context_line":"        captured_headers \u003d {}"}],"source_content_type":"text/x-python","patch_set":2,"id":"525b3889_fc900a11","line":28,"in_reply_to":"bafbb542_b376fc3b","updated":"2023-12-14 05:25:38.000000000","message":"Done","commit_id":"da4ceb5f4e3883befc6622244b9a7f25833479e9"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f5d3b8194927eea1cd81ccf2f3de37511c17efae","unresolved":true,"context_lines":[{"line_number":31,"context_line":"        captured_headers \u003d {}"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"        def start_response(status, resp_headers):"},{"line_number":34,"context_line":"            self.assertEqual(status, \u0027204 No Content\u0027)"},{"line_number":35,"context_line":"            captured_headers.update(resp_headers)"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"        env \u003d {\u0027REQUEST_METHOD\u0027: method, \u0027PATH_INFO\u0027: path}"}],"source_content_type":"text/x-python","patch_set":2,"id":"6e1704ab_dc0e03f6","line":34,"updated":"2023-12-13 02:09:14.000000000","message":"this was kind of for my sanity, but the first test that wants a different response code will probably just delete it - maybe I shouldn\u0027t couple the helpers with the callers this much to begin with.","commit_id":"da4ceb5f4e3883befc6622244b9a7f25833479e9"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"87723f74c5c76d017a192336edefb48b9c367092","unresolved":false,"context_lines":[{"line_number":31,"context_line":"        captured_headers \u003d {}"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"        def start_response(status, resp_headers):"},{"line_number":34,"context_line":"            self.assertEqual(status, \u0027204 No Content\u0027)"},{"line_number":35,"context_line":"            captured_headers.update(resp_headers)"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"        env \u003d {\u0027REQUEST_METHOD\u0027: method, \u0027PATH_INFO\u0027: path}"}],"source_content_type":"text/x-python","patch_set":2,"id":"ce556b2e_1cec0e15","line":34,"in_reply_to":"6e1704ab_dc0e03f6","updated":"2023-12-14 05:25:38.000000000","message":"Acknowledged","commit_id":"da4ceb5f4e3883befc6622244b9a7f25833479e9"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f5d3b8194927eea1cd81ccf2f3de37511c17efae","unresolved":true,"context_lines":[{"line_number":38,"context_line":"        body_iter \u003d swift(env, start_response)"},{"line_number":39,"context_line":"        b\u0027\u0027.join(body_iter)"},{"line_number":40,"context_line":"        captured_headers.pop(\u0027Content-Type\u0027)"},{"line_number":41,"context_line":"        self.assertEqual(headers, captured_headers)"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def test_fake_swift_sysmeta(self):"},{"line_number":44,"context_line":"        swift \u003d FakeSwift()"}],"source_content_type":"text/x-python","patch_set":2,"id":"dfab2ba3_d90f906e","line":41,"updated":"2023-12-13 02:09:14.000000000","message":"making an actual call seems fool proof, but it actaully didn\u0027t work for me the first try because the registered response was a MagicMock and didn\u0027t have the side-effect of calling start_response like a real swob response.","commit_id":"da4ceb5f4e3883befc6622244b9a7f25833479e9"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"87723f74c5c76d017a192336edefb48b9c367092","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        body_iter \u003d swift(env, start_response)"},{"line_number":39,"context_line":"        b\u0027\u0027.join(body_iter)"},{"line_number":40,"context_line":"        captured_headers.pop(\u0027Content-Type\u0027)"},{"line_number":41,"context_line":"        self.assertEqual(headers, captured_headers)"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def test_fake_swift_sysmeta(self):"},{"line_number":44,"context_line":"        swift \u003d FakeSwift()"}],"source_content_type":"text/x-python","patch_set":2,"id":"21e63d51_7e08cd92","line":41,"in_reply_to":"dfab2ba3_d90f906e","updated":"2023-12-14 05:25:38.000000000","message":"Acknowledged","commit_id":"da4ceb5f4e3883befc6622244b9a7f25833479e9"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f5d3b8194927eea1cd81ccf2f3de37511c17efae","unresolved":true,"context_lines":[{"line_number":40,"context_line":"        captured_headers.pop(\u0027Content-Type\u0027)"},{"line_number":41,"context_line":"        self.assertEqual(headers, captured_headers)"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def test_fake_swift_sysmeta(self):"},{"line_number":44,"context_line":"        swift \u003d FakeSwift()"},{"line_number":45,"context_line":"        orig_headers \u003d swob.HeaderKeyDict({"},{"line_number":46,"context_line":"            sysmeta_header(\u0027container\u0027, \u0027acl\u0027): \u0027test\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"91ebf5e7_0deb5d39","line":43,"updated":"2023-12-13 02:09:14.000000000","message":"this test was obviously trying to make sure registered sysmeta sticks around; now it\u0027s been adapted to transatively test update_sticky_response_headers (which should be done in common.middleare.test_helpers)\n\nprobably should kill the whole module?","commit_id":"da4ceb5f4e3883befc6622244b9a7f25833479e9"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"87723f74c5c76d017a192336edefb48b9c367092","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        captured_headers.pop(\u0027Content-Type\u0027)"},{"line_number":41,"context_line":"        self.assertEqual(headers, captured_headers)"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def test_fake_swift_sysmeta(self):"},{"line_number":44,"context_line":"        swift \u003d FakeSwift()"},{"line_number":45,"context_line":"        orig_headers \u003d swob.HeaderKeyDict({"},{"line_number":46,"context_line":"            sysmeta_header(\u0027container\u0027, \u0027acl\u0027): \u0027test\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"e547f23c_eb89dac0","line":43,"in_reply_to":"91ebf5e7_0deb5d39","updated":"2023-12-14 05:25:38.000000000","message":"Done","commit_id":"da4ceb5f4e3883befc6622244b9a7f25833479e9"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f5d3b8194927eea1cd81ccf2f3de37511c17efae","unresolved":true,"context_lines":[{"line_number":47,"context_line":"            \u0027x-container-meta-foo\u0027: \u0027bar\u0027,"},{"line_number":48,"context_line":"        })"},{"line_number":49,"context_line":"        swift.update_sticky_response_headers(self.path, orig_headers)"},{"line_number":50,"context_line":"        swift.register(self.method, self.path, self.resp, orig_headers, None)"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"        self._check_headers(swift, self.method, self.path, orig_headers)"},{"line_number":53,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"8852401c_4654f547","line":50,"updated":"2023-12-13 02:09:14.000000000","message":"I guess this could just use {} instead of orig_headers.","commit_id":"da4ceb5f4e3883befc6622244b9a7f25833479e9"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"87723f74c5c76d017a192336edefb48b9c367092","unresolved":false,"context_lines":[{"line_number":47,"context_line":"            \u0027x-container-meta-foo\u0027: \u0027bar\u0027,"},{"line_number":48,"context_line":"        })"},{"line_number":49,"context_line":"        swift.update_sticky_response_headers(self.path, orig_headers)"},{"line_number":50,"context_line":"        swift.register(self.method, self.path, self.resp, orig_headers, None)"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"        self._check_headers(swift, self.method, self.path, orig_headers)"},{"line_number":53,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"79ca26da_02625a64","line":50,"in_reply_to":"8852401c_4654f547","updated":"2023-12-14 05:25:38.000000000","message":"Done","commit_id":"da4ceb5f4e3883befc6622244b9a7f25833479e9"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f5d3b8194927eea1cd81ccf2f3de37511c17efae","unresolved":true,"context_lines":[{"line_number":69,"context_line":"        new_headers \u003d orig_headers.copy()"},{"line_number":70,"context_line":"        new_headers[sysmeta_header(\u0027container\u0027, \u0027acl\u0027).title()] \u003d \u0027bar\u0027"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"        swift.register(self.method, self.path, self.resp, new_headers, None)"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        self.assertFalse(orig_headers \u003d\u003d new_headers)"},{"line_number":75,"context_line":"        self._check_headers(swift, self.method, self.path, new_headers)"}],"source_content_type":"text/x-python","patch_set":2,"id":"73e9d5a2_76492cf0","line":72,"updated":"2023-12-13 02:09:14.000000000","message":"this test is ok\n\nit doesn\u0027t use sticky headers tho - it\u0027s just saying if your response overwritees a key that\u0027s the value you get - that was already true for register and would also be true (in this case) if you just pop\u0027d the key instead of replacing it\n\nA more interesting test would use sticky headers and pop a value, and then show that *unless* you overwrite the header key in your registered response - you\u0027re going to get the sticky header bleed through.\n\nIn fact the \"update_sticky_headers\" interface is only addative; the only way to get rid of a header once it\u0027s sticky is to modify swift._sticky_headers directly - there\u0027s no use-case for \"replace_sticky_headers\" or \"pop_sticky_header_key\" - a test could always register a response with an empty value for the header key you don\u0027t want.  Or create a fresh FakeSwift.","commit_id":"da4ceb5f4e3883befc6622244b9a7f25833479e9"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"87723f74c5c76d017a192336edefb48b9c367092","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        new_headers \u003d orig_headers.copy()"},{"line_number":70,"context_line":"        new_headers[sysmeta_header(\u0027container\u0027, \u0027acl\u0027).title()] \u003d \u0027bar\u0027"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"        swift.register(self.method, self.path, self.resp, new_headers, None)"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        self.assertFalse(orig_headers \u003d\u003d new_headers)"},{"line_number":75,"context_line":"        self._check_headers(swift, self.method, self.path, new_headers)"}],"source_content_type":"text/x-python","patch_set":2,"id":"5d2004bd_e58b6dc6","line":72,"in_reply_to":"73e9d5a2_76492cf0","updated":"2023-12-14 05:25:38.000000000","message":"Done","commit_id":"da4ceb5f4e3883befc6622244b9a7f25833479e9"}],"test/unit/common/middleware/s3api/test_multi_delete.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f5d3b8194927eea1cd81ccf2f3de37511c17efae","unresolved":true,"context_lines":[{"line_number":502,"context_line":"        status, headers, body \u003d self.call_s3api(req)"},{"line_number":503,"context_line":"        self.assertEqual(self._get_error_code(body), \u0027MalformedXML\u0027)"},{"line_number":504,"context_line":""},{"line_number":505,"context_line":"    @s3acl"},{"line_number":506,"context_line":"    def test_object_multi_DELETE_unhandled_exception(self):"},{"line_number":507,"context_line":"        exploding_resp \u003d mock.MagicMock("},{"line_number":508,"context_line":"            side_effect\u003dException(\u0027kaboom\u0027))"}],"source_content_type":"text/x-python","patch_set":2,"id":"21788c41_71da9c2b","side":"PARENT","line":505,"updated":"2023-12-13 02:09:14.000000000","message":"all these @s3acl tests stay in the base - they\u0027ll get mixed-in and run by both S3ApiTestCase and S3ApiTestCaseAcl subclasses","commit_id":"57fe37cb6cf5bf38f55659ab22c674b3c7162726"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"87723f74c5c76d017a192336edefb48b9c367092","unresolved":false,"context_lines":[{"line_number":502,"context_line":"        status, headers, body \u003d self.call_s3api(req)"},{"line_number":503,"context_line":"        self.assertEqual(self._get_error_code(body), \u0027MalformedXML\u0027)"},{"line_number":504,"context_line":""},{"line_number":505,"context_line":"    @s3acl"},{"line_number":506,"context_line":"    def test_object_multi_DELETE_unhandled_exception(self):"},{"line_number":507,"context_line":"        exploding_resp \u003d mock.MagicMock("},{"line_number":508,"context_line":"            side_effect\u003dException(\u0027kaboom\u0027))"}],"source_content_type":"text/x-python","patch_set":2,"id":"5b67a960_901143a1","side":"PARENT","line":505,"in_reply_to":"21788c41_71da9c2b","updated":"2023-12-14 05:25:38.000000000","message":"Acknowledged","commit_id":"57fe37cb6cf5bf38f55659ab22c674b3c7162726"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f5d3b8194927eea1cd81ccf2f3de37511c17efae","unresolved":true,"context_lines":[{"line_number":579,"context_line":"            self._test_object_multi_DELETE(\u0027test:full_control\u0027)"},{"line_number":580,"context_line":"        self.assertEqual(status.split()[0], \u0027200\u0027)"},{"line_number":581,"context_line":"        elem \u003d fromstring(body)"},{"line_number":582,"context_line":"        self.assertEqual(len(elem.findall(\u0027Deleted\u0027)), len(self.keys))"},{"line_number":583,"context_line":""},{"line_number":584,"context_line":"    def test_object_multi_DELETE_with_system_entity(self):"},{"line_number":585,"context_line":"        self.keys \u003d [\u0027Key1\u0027, \u0027Key2\u0027]"}],"source_content_type":"text/x-python","patch_set":2,"id":"029314a8_a7d8c59a","side":"PARENT","line":582,"updated":"2023-12-13 02:09:14.000000000","message":"these got moved to the S3ApiTestCaseAcl sublcass - they only run with s3acl enabled because they\u0027re using the test:other account","commit_id":"57fe37cb6cf5bf38f55659ab22c674b3c7162726"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"87723f74c5c76d017a192336edefb48b9c367092","unresolved":false,"context_lines":[{"line_number":579,"context_line":"            self._test_object_multi_DELETE(\u0027test:full_control\u0027)"},{"line_number":580,"context_line":"        self.assertEqual(status.split()[0], \u0027200\u0027)"},{"line_number":581,"context_line":"        elem \u003d fromstring(body)"},{"line_number":582,"context_line":"        self.assertEqual(len(elem.findall(\u0027Deleted\u0027)), len(self.keys))"},{"line_number":583,"context_line":""},{"line_number":584,"context_line":"    def test_object_multi_DELETE_with_system_entity(self):"},{"line_number":585,"context_line":"        self.keys \u003d [\u0027Key1\u0027, \u0027Key2\u0027]"}],"source_content_type":"text/x-python","patch_set":2,"id":"acfc9e1c_fb480987","side":"PARENT","line":582,"in_reply_to":"029314a8_a7d8c59a","updated":"2023-12-14 05:25:38.000000000","message":"Acknowledged","commit_id":"57fe37cb6cf5bf38f55659ab22c674b3c7162726"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f5d3b8194927eea1cd81ccf2f3de37511c17efae","unresolved":true,"context_lines":[{"line_number":581,"context_line":"        elem \u003d fromstring(body)"},{"line_number":582,"context_line":"        self.assertEqual(len(elem.findall(\u0027Deleted\u0027)), len(self.keys))"},{"line_number":583,"context_line":""},{"line_number":584,"context_line":"    def test_object_multi_DELETE_with_system_entity(self):"},{"line_number":585,"context_line":"        self.keys \u003d [\u0027Key1\u0027, \u0027Key2\u0027]"},{"line_number":586,"context_line":"        self.swift.register("},{"line_number":587,"context_line":"            \u0027DELETE\u0027, \u0027/v1/AUTH_test/bucket/%s\u0027 % self.keys[0],"}],"source_content_type":"text/x-python","patch_set":2,"id":"e6f7f5d2_0a5eb462","side":"PARENT","line":584,"updated":"2023-12-13 02:09:14.000000000","message":"this looks like the only test that only gets run in non-acl","commit_id":"57fe37cb6cf5bf38f55659ab22c674b3c7162726"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f5d3b8194927eea1cd81ccf2f3de37511c17efae","unresolved":true,"context_lines":[{"line_number":607,"context_line":"        req \u003d Request.blank(\u0027/bucket?delete\u0027,"},{"line_number":608,"context_line":"                            environ\u003d{\u0027REQUEST_METHOD\u0027: \u0027POST\u0027},"},{"line_number":609,"context_line":"                            headers\u003d{"},{"line_number":610,"context_line":"                                \u0027Authorization\u0027: \u0027AWS test:full_control:hmac\u0027,"},{"line_number":611,"context_line":"                                \u0027Date\u0027: self.get_date_header(),"},{"line_number":612,"context_line":"                                \u0027Content-MD5\u0027: content_md5},"},{"line_number":613,"context_line":"                            body\u003dbody)"}],"source_content_type":"text/x-python","patch_set":2,"id":"08d07520_aab0a77e","side":"PARENT","line":610,"updated":"2023-12-13 02:09:14.000000000","message":"I think in the non-acl context any `test:xxx` will work?  But they way this is written it would probably run fine in both contexts if it was moved to Base","commit_id":"57fe37cb6cf5bf38f55659ab22c674b3c7162726"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f5d3b8194927eea1cd81ccf2f3de37511c17efae","unresolved":true,"context_lines":[{"line_number":651,"context_line":"        self._test_no_body(use_content_length\u003dTrue)"},{"line_number":652,"context_line":"        self._test_no_body(use_content_length\u003dTrue, string_to_md5\u003db\u0027test\u0027)"},{"line_number":653,"context_line":"        self._test_no_body(use_transfer_encoding\u003dTrue)"},{"line_number":654,"context_line":"        self._test_no_body(use_transfer_encoding\u003dTrue, string_to_md5\u003db\u0027test\u0027)"},{"line_number":655,"context_line":""},{"line_number":656,"context_line":""},{"line_number":657,"context_line":"if __name__ \u003d\u003d \u0027__main__\u0027:"}],"source_content_type":"text/x-python","patch_set":2,"id":"ad5e2f20_c380f094","side":"PARENT","line":654,"updated":"2023-12-13 02:09:14.000000000","message":"this test method and it\u0027s helper moved into the bottom of Base","commit_id":"57fe37cb6cf5bf38f55659ab22c674b3c7162726"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"87723f74c5c76d017a192336edefb48b9c367092","unresolved":false,"context_lines":[{"line_number":651,"context_line":"        self._test_no_body(use_content_length\u003dTrue)"},{"line_number":652,"context_line":"        self._test_no_body(use_content_length\u003dTrue, string_to_md5\u003db\u0027test\u0027)"},{"line_number":653,"context_line":"        self._test_no_body(use_transfer_encoding\u003dTrue)"},{"line_number":654,"context_line":"        self._test_no_body(use_transfer_encoding\u003dTrue, string_to_md5\u003db\u0027test\u0027)"},{"line_number":655,"context_line":""},{"line_number":656,"context_line":""},{"line_number":657,"context_line":"if __name__ \u003d\u003d \u0027__main__\u0027:"}],"source_content_type":"text/x-python","patch_set":2,"id":"bbc81701_ccc9b594","side":"PARENT","line":654,"in_reply_to":"ad5e2f20_c380f094","updated":"2023-12-14 05:25:38.000000000","message":"Acknowledged","commit_id":"57fe37cb6cf5bf38f55659ab22c674b3c7162726"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"93bf4c0c664ee2b586ed80dfef26ab1f954e8d78","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":2,"id":"3baa0957_244c5e73","updated":"2023-12-13 17:56:50.000000000","message":"test relocation LGTM","commit_id":"da4ceb5f4e3883befc6622244b9a7f25833479e9"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"87723f74c5c76d017a192336edefb48b9c367092","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"cbfe4ca5_b21c8fa5","in_reply_to":"3baa0957_244c5e73","updated":"2023-12-14 05:25:38.000000000","message":"Acknowledged","commit_id":"da4ceb5f4e3883befc6622244b9a7f25833479e9"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f5d3b8194927eea1cd81ccf2f3de37511c17efae","unresolved":true,"context_lines":[{"line_number":31,"context_line":"from swift.common.utils import md5"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"class BaseS3ApiMultiDelete(object):"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def setUp(self):"},{"line_number":37,"context_line":"        super(BaseS3ApiMultiDelete, self).setUp()"}],"source_content_type":"text/x-python","patch_set":2,"id":"451285e5_1e90397e","line":34,"updated":"2023-12-13 02:09:14.000000000","message":"here we go this is standard pattern","commit_id":"da4ceb5f4e3883befc6622244b9a7f25833479e9"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"87723f74c5c76d017a192336edefb48b9c367092","unresolved":false,"context_lines":[{"line_number":31,"context_line":"from swift.common.utils import md5"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"class BaseS3ApiMultiDelete(object):"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def setUp(self):"},{"line_number":37,"context_line":"        super(BaseS3ApiMultiDelete, self).setUp()"}],"source_content_type":"text/x-python","patch_set":2,"id":"35701cc1_6138d48e","line":34,"in_reply_to":"451285e5_1e90397e","updated":"2023-12-14 05:25:38.000000000","message":"Acknowledged","commit_id":"da4ceb5f4e3883befc6622244b9a7f25833479e9"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"93bf4c0c664ee2b586ed80dfef26ab1f954e8d78","unresolved":true,"context_lines":[{"line_number":517,"context_line":"        self.assertEqual(status.split()[0], \u0027200\u0027)"},{"line_number":518,"context_line":"        self.assertIn(b\u0027\u003cError\u003e\u003cKey\u003eKey1\u003c/Key\u003e\u003cCode\u003eServer Error\u003c/Code\u003e\u0027, body)"},{"line_number":519,"context_line":""},{"line_number":520,"context_line":"    def _test_object_multi_DELETE(self, account):"},{"line_number":521,"context_line":"        self.keys \u003d [\u0027Key1\u0027, \u0027Key2\u0027]"},{"line_number":522,"context_line":"        self.swift.register("},{"line_number":523,"context_line":"            \u0027DELETE\u0027, \u0027/v1/AUTH_test/bucket/%s\u0027 % self.keys[0],"}],"source_content_type":"text/x-python","patch_set":2,"id":"42872b95_a2b0daee","line":520,"updated":"2023-12-13 17:56:50.000000000","message":"this is only used by tests in TestS3ApiMultiDeleteAcl","commit_id":"da4ceb5f4e3883befc6622244b9a7f25833479e9"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"87723f74c5c76d017a192336edefb48b9c367092","unresolved":false,"context_lines":[{"line_number":517,"context_line":"        self.assertEqual(status.split()[0], \u0027200\u0027)"},{"line_number":518,"context_line":"        self.assertIn(b\u0027\u003cError\u003e\u003cKey\u003eKey1\u003c/Key\u003e\u003cCode\u003eServer Error\u003c/Code\u003e\u0027, body)"},{"line_number":519,"context_line":""},{"line_number":520,"context_line":"    def _test_object_multi_DELETE(self, account):"},{"line_number":521,"context_line":"        self.keys \u003d [\u0027Key1\u0027, \u0027Key2\u0027]"},{"line_number":522,"context_line":"        self.swift.register("},{"line_number":523,"context_line":"            \u0027DELETE\u0027, \u0027/v1/AUTH_test/bucket/%s\u0027 % self.keys[0],"}],"source_content_type":"text/x-python","patch_set":2,"id":"56f0d950_08c3adca","line":520,"in_reply_to":"42872b95_a2b0daee","updated":"2023-12-14 05:25:38.000000000","message":"Done","commit_id":"da4ceb5f4e3883befc6622244b9a7f25833479e9"}],"test/unit/common/middleware/s3api/test_multi_upload.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f5d3b8194927eea1cd81ccf2f3de37511c17efae","unresolved":true,"context_lines":[{"line_number":187,"context_line":"        self._do_test_bucket_upload_part_success(0, 0)"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"    def test_bucket_upload_part_success_mixed_policy(self):"},{"line_number":190,"context_line":"        self._do_test_bucket_upload_part_success(0, 1)"},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"    def test_bucket_upload_part_v4_bad_hash(self):"},{"line_number":193,"context_line":"        authz_header \u003d \u0027AWS4-HMAC-SHA256 \u0027 + \u0027, \u0027.join(["}],"source_content_type":"text/x-python","patch_set":2,"id":"800dc4a0_0d86a3bc","side":"PARENT","line":190,"updated":"2023-12-13 02:09:14.000000000","message":"I don\u0027t know why these are non-acl-only tests - they\u0027d probably be fine here in Base (maybe the swift.calls asserts?)","commit_id":"57fe37cb6cf5bf38f55659ab22c674b3c7162726"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f5d3b8194927eea1cd81ccf2f3de37511c17efae","unresolved":true,"context_lines":[{"line_number":205,"context_line":"            body\u003db\u0027test\u0027)"},{"line_number":206,"context_line":"        with patch(\u0027swift.common.middleware.s3api.s3request.\u0027"},{"line_number":207,"context_line":"                   \u0027get_container_info\u0027,"},{"line_number":208,"context_line":"                   lambda env, app, swift_source: {\u0027status\u0027: 204}):"},{"line_number":209,"context_line":"            status, headers, body \u003d self.call_s3api(req)"},{"line_number":210,"context_line":"        self.assertEqual(status, \u0027400 Bad Request\u0027)"},{"line_number":211,"context_line":"        self.assertEqual(self._get_error_code(body), \u0027BadDigest\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"ad81e639_2a7cdb19","side":"PARENT","line":208,"updated":"2023-12-13 02:09:14.000000000","message":"this looks like it could use the new stubbed_container_info context manager from S3ApiTestCase","commit_id":"57fe37cb6cf5bf38f55659ab22c674b3c7162726"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f5d3b8194927eea1cd81ccf2f3de37511c17efae","unresolved":true,"context_lines":[{"line_number":212,"context_line":"        self.assertEqual(["},{"line_number":213,"context_line":"            (\u0027HEAD\u0027, \u0027/v1/AUTH_test/bucket+segments/object/X\u0027),"},{"line_number":214,"context_line":"            (\u0027PUT\u0027, \u0027/v1/AUTH_test/bucket+segments/object/X/1\u0027),"},{"line_number":215,"context_line":"        ], self.swift.calls)"},{"line_number":216,"context_line":"        self.assertEqual(\u0027/v1/AUTH_test/bucket+segments/object/X/1\u0027,"},{"line_number":217,"context_line":"                         req.environ.get(\u0027swift.backend_path\u0027))"},{"line_number":218,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"baa0832d_3e1f47ea","side":"PARENT","line":215,"updated":"2023-12-13 02:09:14.000000000","message":"maybe acl case would generate extra requests and muddy up the asserts","commit_id":"57fe37cb6cf5bf38f55659ab22c674b3c7162726"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f5d3b8194927eea1cd81ccf2f3de37511c17efae","unresolved":true,"context_lines":[{"line_number":351,"context_line":"            self.assertEqual(u.find(\u0027Owner/ID\u0027).text, \u0027test:tester\u0027)"},{"line_number":352,"context_line":"            self.assertEqual(u.find(\u0027Owner/DisplayName\u0027).text, \u0027test:tester\u0027)"},{"line_number":353,"context_line":"            self.assertEqual(u.find(\u0027StorageClass\u0027).text, \u0027STANDARD\u0027)"},{"line_number":354,"context_line":"        self.assertEqual(status.split()[0], \u0027200\u0027)"},{"line_number":355,"context_line":""},{"line_number":356,"context_line":"    @s3acl"},{"line_number":357,"context_line":"    def test_bucket_multipart_uploads_GET(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"dbbea547_d9fa31b6","side":"PARENT","line":354,"updated":"2023-12-13 02:09:14.000000000","message":"this one and the others were pulled down to the non-acl TestCase - they\u0027re not in Base - they don\u0027t get run in the ACL context in the TestS3apiTestCaseAcl subclass.","commit_id":"57fe37cb6cf5bf38f55659ab22c674b3c7162726"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"87723f74c5c76d017a192336edefb48b9c367092","unresolved":false,"context_lines":[{"line_number":351,"context_line":"            self.assertEqual(u.find(\u0027Owner/ID\u0027).text, \u0027test:tester\u0027)"},{"line_number":352,"context_line":"            self.assertEqual(u.find(\u0027Owner/DisplayName\u0027).text, \u0027test:tester\u0027)"},{"line_number":353,"context_line":"            self.assertEqual(u.find(\u0027StorageClass\u0027).text, \u0027STANDARD\u0027)"},{"line_number":354,"context_line":"        self.assertEqual(status.split()[0], \u0027200\u0027)"},{"line_number":355,"context_line":""},{"line_number":356,"context_line":"    @s3acl"},{"line_number":357,"context_line":"    def test_bucket_multipart_uploads_GET(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"1c6e0c21_ed1f2870","side":"PARENT","line":354,"in_reply_to":"dbbea547_d9fa31b6","updated":"2023-12-14 05:25:38.000000000","message":"Acknowledged","commit_id":"57fe37cb6cf5bf38f55659ab22c674b3c7162726"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f5d3b8194927eea1cd81ccf2f3de37511c17efae","unresolved":true,"context_lines":[{"line_number":1725,"context_line":"        self.assertEqual(headers.get(\u0027Content-Type\u0027), \u0027thingy/dingy\u0027)"},{"line_number":1726,"context_line":""},{"line_number":1727,"context_line":"    def test_object_multipart_upload_complete_no_content_type(self):"},{"line_number":1728,"context_line":"        self.swift.register_unconditionally("},{"line_number":1729,"context_line":"            \u0027HEAD\u0027, \u0027/v1/AUTH_test/bucket+segments/object/X\u0027,"},{"line_number":1730,"context_line":"            swob.HTTPOk, {\"X-Object-Sysmeta-S3api-Has-Content-Type\": \"no\"},"},{"line_number":1731,"context_line":"            None)"}],"source_content_type":"text/x-python","patch_set":2,"id":"991f0133_09532f75","side":"PARENT","line":1728,"updated":"2023-12-13 02:09:14.000000000","message":"I\u0027m not sure if these were just being defensive?  they weren\u0027t @s3acl tests to begin with; whatever sysmeta they were trying to avoid wasn\u0027t there on purpose.","commit_id":"57fe37cb6cf5bf38f55659ab22c674b3c7162726"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f5d3b8194927eea1cd81ccf2f3de37511c17efae","unresolved":true,"context_lines":[{"line_number":2005,"context_line":"            tostring(decode_acl(\u0027object\u0027, headers, False).elem()))"},{"line_number":2006,"context_line":""},{"line_number":2007,"context_line":"    @s3acl"},{"line_number":2008,"context_line":"    def test_object_multipart_upload_abort_error(self):"},{"line_number":2009,"context_line":"        req \u003d Request.blank(\u0027/bucket/object?uploadId\u003dinvalid\u0027,"},{"line_number":2010,"context_line":"                            environ\u003d{\u0027REQUEST_METHOD\u0027: \u0027DELETE\u0027},"},{"line_number":2011,"context_line":"                            headers\u003d{\u0027Authorization\u0027: \u0027AWS test:tester:hmac\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"8046c75f_08a01d26","side":"PARENT","line":2008,"updated":"2023-12-13 02:09:14.000000000","message":"see the last test went down and this one went up - theye\u0027re all over the place.\n\nIf we wanted to make the diff look better we could try one commit that groups them \n\n@s3acl\n\"non-s3acl\"\n@s3acl-only\n\nthen this change would just have to slide in the new class definitions and remove the decorators; but meh - they\u0027ve been moved now (assuming I didn\u0027t loose any along the way; I don\u0027t think I did)","commit_id":"57fe37cb6cf5bf38f55659ab22c674b3c7162726"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"87723f74c5c76d017a192336edefb48b9c367092","unresolved":false,"context_lines":[{"line_number":2005,"context_line":"            tostring(decode_acl(\u0027object\u0027, headers, False).elem()))"},{"line_number":2006,"context_line":""},{"line_number":2007,"context_line":"    @s3acl"},{"line_number":2008,"context_line":"    def test_object_multipart_upload_abort_error(self):"},{"line_number":2009,"context_line":"        req \u003d Request.blank(\u0027/bucket/object?uploadId\u003dinvalid\u0027,"},{"line_number":2010,"context_line":"                            environ\u003d{\u0027REQUEST_METHOD\u0027: \u0027DELETE\u0027},"},{"line_number":2011,"context_line":"                            headers\u003d{\u0027Authorization\u0027: \u0027AWS test:tester:hmac\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"ad117132_d8f55e54","side":"PARENT","line":2008,"in_reply_to":"8046c75f_08a01d26","updated":"2023-12-14 05:25:38.000000000","message":"Acknowledged","commit_id":"57fe37cb6cf5bf38f55659ab22c674b3c7162726"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f5d3b8194927eea1cd81ccf2f3de37511c17efae","unresolved":true,"context_lines":[{"line_number":2787,"context_line":"        ], self.swift.calls)"},{"line_number":2788,"context_line":"        put_headers \u003d self.swift.calls_with_headers[-1][2]"},{"line_number":2789,"context_line":"        self.assertEqual(\u0027bytes\u003d0-9\u0027, put_headers[\u0027Range\u0027])"},{"line_number":2790,"context_line":"        self.assertEqual(\u0027/src_bucket/src_obj\u0027, put_headers[\u0027X-Copy-From\u0027])"},{"line_number":2791,"context_line":""},{"line_number":2792,"context_line":"    def _test_no_body(self, use_content_length\u003dFalse,"},{"line_number":2793,"context_line":"                      use_transfer_encoding\u003dFalse, string_to_md5\u003db\u0027\u0027):"}],"source_content_type":"text/x-python","patch_set":2,"id":"ad74bd21_3a982bca","side":"PARENT","line":2790,"updated":"2023-12-13 02:09:14.000000000","message":"these are just staying in the non-acl TestCase","commit_id":"57fe37cb6cf5bf38f55659ab22c674b3c7162726"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"87723f74c5c76d017a192336edefb48b9c367092","unresolved":false,"context_lines":[{"line_number":2787,"context_line":"        ], self.swift.calls)"},{"line_number":2788,"context_line":"        put_headers \u003d self.swift.calls_with_headers[-1][2]"},{"line_number":2789,"context_line":"        self.assertEqual(\u0027bytes\u003d0-9\u0027, put_headers[\u0027Range\u0027])"},{"line_number":2790,"context_line":"        self.assertEqual(\u0027/src_bucket/src_obj\u0027, put_headers[\u0027X-Copy-From\u0027])"},{"line_number":2791,"context_line":""},{"line_number":2792,"context_line":"    def _test_no_body(self, use_content_length\u003dFalse,"},{"line_number":2793,"context_line":"                      use_transfer_encoding\u003dFalse, string_to_md5\u003db\u0027\u0027):"}],"source_content_type":"text/x-python","patch_set":2,"id":"ab29a9ee_513d8cd5","side":"PARENT","line":2790,"in_reply_to":"ad74bd21_3a982bca","updated":"2023-12-14 05:25:38.000000000","message":"Acknowledged","commit_id":"57fe37cb6cf5bf38f55659ab22c674b3c7162726"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"93bf4c0c664ee2b586ed80dfef26ab1f954e8d78","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":2,"id":"9c55356d_dae8733a","updated":"2023-12-13 17:56:50.000000000","message":"test relocation LGTM","commit_id":"da4ceb5f4e3883befc6622244b9a7f25833479e9"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"87723f74c5c76d017a192336edefb48b9c367092","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"3559521c_01abff1c","in_reply_to":"9c55356d_dae8733a","updated":"2023-12-14 05:25:38.000000000","message":"Acknowledged","commit_id":"da4ceb5f4e3883befc6622244b9a7f25833479e9"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f5d3b8194927eea1cd81ccf2f3de37511c17efae","unresolved":true,"context_lines":[{"line_number":919,"context_line":"        self._test_no_body(use_content_length\u003dTrue)"},{"line_number":920,"context_line":"        self._test_no_body(use_content_length\u003dTrue, string_to_md5\u003db\u0027test\u0027)"},{"line_number":921,"context_line":"        self._test_no_body(use_transfer_encoding\u003dTrue)"},{"line_number":922,"context_line":"        self._test_no_body(use_transfer_encoding\u003dTrue, string_to_md5\u003db\u0027test\u0027)"},{"line_number":923,"context_line":""},{"line_number":924,"context_line":""},{"line_number":925,"context_line":"class TestS3ApiMultiUploadNoAcl(BaseS3ApiMultiUpload, S3ApiTestCase):"}],"source_content_type":"text/x-python","patch_set":2,"id":"0bf20d5b_9363e83b","line":922,"updated":"2023-12-13 02:09:14.000000000","message":"looks like theyse were all pulled up from below","commit_id":"da4ceb5f4e3883befc6622244b9a7f25833479e9"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"87723f74c5c76d017a192336edefb48b9c367092","unresolved":false,"context_lines":[{"line_number":919,"context_line":"        self._test_no_body(use_content_length\u003dTrue)"},{"line_number":920,"context_line":"        self._test_no_body(use_content_length\u003dTrue, string_to_md5\u003db\u0027test\u0027)"},{"line_number":921,"context_line":"        self._test_no_body(use_transfer_encoding\u003dTrue)"},{"line_number":922,"context_line":"        self._test_no_body(use_transfer_encoding\u003dTrue, string_to_md5\u003db\u0027test\u0027)"},{"line_number":923,"context_line":""},{"line_number":924,"context_line":""},{"line_number":925,"context_line":"class TestS3ApiMultiUploadNoAcl(BaseS3ApiMultiUpload, S3ApiTestCase):"}],"source_content_type":"text/x-python","patch_set":2,"id":"cc424472_f6738dcd","line":922,"in_reply_to":"0bf20d5b_9363e83b","updated":"2023-12-14 05:25:38.000000000","message":"Acknowledged","commit_id":"da4ceb5f4e3883befc6622244b9a7f25833479e9"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f5d3b8194927eea1cd81ccf2f3de37511c17efae","unresolved":true,"context_lines":[{"line_number":1031,"context_line":"            self.assertEqual(u.find(\u0027Owner/ID\u0027).text, \u0027test:tester\u0027)"},{"line_number":1032,"context_line":"            self.assertEqual(u.find(\u0027Owner/DisplayName\u0027).text, \u0027test:tester\u0027)"},{"line_number":1033,"context_line":"            self.assertEqual(u.find(\u0027StorageClass\u0027).text, \u0027STANDARD\u0027)"},{"line_number":1034,"context_line":"        self.assertEqual(status.split()[0], \u0027200\u0027)"},{"line_number":1035,"context_line":""},{"line_number":1036,"context_line":"    @patch(\u0027swift.common.middleware.s3api.controllers.\u0027"},{"line_number":1037,"context_line":"           \u0027multi_upload.unique_id\u0027, lambda: \u0027X\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"d355309d_174c80fc","line":1034,"updated":"2023-12-13 02:09:14.000000000","message":"there was a lot of non-s3acl/s3acl/s3acl-only tests interleaved in the existing test case, the refactor has a lot of jumping around - I\u0027m not sure I see exactly where these came from; hopefully I did it right when I was in my editor.","commit_id":"da4ceb5f4e3883befc6622244b9a7f25833479e9"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"87723f74c5c76d017a192336edefb48b9c367092","unresolved":false,"context_lines":[{"line_number":1031,"context_line":"            self.assertEqual(u.find(\u0027Owner/ID\u0027).text, \u0027test:tester\u0027)"},{"line_number":1032,"context_line":"            self.assertEqual(u.find(\u0027Owner/DisplayName\u0027).text, \u0027test:tester\u0027)"},{"line_number":1033,"context_line":"            self.assertEqual(u.find(\u0027StorageClass\u0027).text, \u0027STANDARD\u0027)"},{"line_number":1034,"context_line":"        self.assertEqual(status.split()[0], \u0027200\u0027)"},{"line_number":1035,"context_line":""},{"line_number":1036,"context_line":"    @patch(\u0027swift.common.middleware.s3api.controllers.\u0027"},{"line_number":1037,"context_line":"           \u0027multi_upload.unique_id\u0027, lambda: \u0027X\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"c63478f4_37a6ba18","line":1034,"in_reply_to":"d355309d_174c80fc","updated":"2023-12-14 05:25:38.000000000","message":"Acknowledged","commit_id":"da4ceb5f4e3883befc6622244b9a7f25833479e9"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f5d3b8194927eea1cd81ccf2f3de37511c17efae","unresolved":true,"context_lines":[{"line_number":1233,"context_line":"        container_headers[\u0027X-Backend-Storage-Policy-Index\u0027] \u003d \\"},{"line_number":1234,"context_line":"            bucket_policy_index"},{"line_number":1235,"context_line":"        self.swift.register(\u0027HEAD\u0027, \u0027/v1/AUTH_test/bucket\u0027,"},{"line_number":1236,"context_line":"                            swob.HTTPNoContent, container_headers, None)"},{"line_number":1237,"context_line":"        self._register_bucket_policy_index_head(\u0027bucket+segments\u0027,"},{"line_number":1238,"context_line":"                                                segment_bucket_policy_index)"},{"line_number":1239,"context_line":"        cache.store[get_cache_key(\u0027AUTH_test\u0027)] \u003d {\u0027status\u0027: 204}"}],"source_content_type":"text/x-python","patch_set":2,"id":"deea1c1a_7092b665","line":1236,"updated":"2023-12-13 02:09:14.000000000","message":"I think this is why I we should shy away from \"NoAcl\" in the TestS3ApiTestCase subclass name.\n\nA test that wants to exercise ACLs but doesn\u0027t want the common S3ApiTestCaseAcl setup could in theory still be added to a TestCase like TestS3ApiMultiUpload, but it looks strange in TestS3ApiMultiUploadNoAcl\n\nIt might also be resonable to move this to Base as lots of the s3acl/s3acl-only tests update/modify/overwrite the existing ACLs but maybe this test wanted some explicit isolation for some good reason and that should probably be supported too","commit_id":"da4ceb5f4e3883befc6622244b9a7f25833479e9"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"87723f74c5c76d017a192336edefb48b9c367092","unresolved":false,"context_lines":[{"line_number":1233,"context_line":"        container_headers[\u0027X-Backend-Storage-Policy-Index\u0027] \u003d \\"},{"line_number":1234,"context_line":"            bucket_policy_index"},{"line_number":1235,"context_line":"        self.swift.register(\u0027HEAD\u0027, \u0027/v1/AUTH_test/bucket\u0027,"},{"line_number":1236,"context_line":"                            swob.HTTPNoContent, container_headers, None)"},{"line_number":1237,"context_line":"        self._register_bucket_policy_index_head(\u0027bucket+segments\u0027,"},{"line_number":1238,"context_line":"                                                segment_bucket_policy_index)"},{"line_number":1239,"context_line":"        cache.store[get_cache_key(\u0027AUTH_test\u0027)] \u003d {\u0027status\u0027: 204}"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a4cb83c_4a07d3cb","line":1236,"in_reply_to":"deea1c1a_7092b665","updated":"2023-12-14 05:25:38.000000000","message":"Done","commit_id":"da4ceb5f4e3883befc6622244b9a7f25833479e9"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f5d3b8194927eea1cd81ccf2f3de37511c17efae","unresolved":true,"context_lines":[{"line_number":2496,"context_line":"        self.assertEqual(\u0027/src_bucket/src_obj\u0027, put_headers[\u0027X-Copy-From\u0027])"},{"line_number":2497,"context_line":""},{"line_number":2498,"context_line":""},{"line_number":2499,"context_line":"class TestS3ApiMultiUploadNoAclNonUTC(TestS3ApiMultiUploadNoAcl):"},{"line_number":2500,"context_line":"    def setUp(self):"},{"line_number":2501,"context_line":"        self.orig_tz \u003d os.environ.get(\u0027TZ\u0027, \u0027\u0027)"},{"line_number":2502,"context_line":"        os.environ[\u0027TZ\u0027] \u003d \u0027EST+05EDT,M4.1.0,M10.5.0\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"c45127ee_00d3074d","line":2499,"updated":"2023-12-13 02:09:14.000000000","message":"oh right, so both TestS3ApiMultiUpload and TestS3ApiMultiUploadAcl need to *also* get subclassed by to override their orig_tz\n\nso it\u0027s\n\nBase()\nMyTestCase(Base, S3ApiTestCase)\nMutatorTestCase(MyTestCase)\nMyTestCaseAcl(Base, S3ApiTestCaseAcl)\nMutatorTestCaseAcl(MyTestCaseAcl)","commit_id":"da4ceb5f4e3883befc6622244b9a7f25833479e9"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"87723f74c5c76d017a192336edefb48b9c367092","unresolved":false,"context_lines":[{"line_number":2496,"context_line":"        self.assertEqual(\u0027/src_bucket/src_obj\u0027, put_headers[\u0027X-Copy-From\u0027])"},{"line_number":2497,"context_line":""},{"line_number":2498,"context_line":""},{"line_number":2499,"context_line":"class TestS3ApiMultiUploadNoAclNonUTC(TestS3ApiMultiUploadNoAcl):"},{"line_number":2500,"context_line":"    def setUp(self):"},{"line_number":2501,"context_line":"        self.orig_tz \u003d os.environ.get(\u0027TZ\u0027, \u0027\u0027)"},{"line_number":2502,"context_line":"        os.environ[\u0027TZ\u0027] \u003d \u0027EST+05EDT,M4.1.0,M10.5.0\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"f73c56c6_6543a851","line":2499,"in_reply_to":"c45127ee_00d3074d","updated":"2023-12-14 05:25:38.000000000","message":"Acknowledged","commit_id":"da4ceb5f4e3883befc6622244b9a7f25833479e9"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f5d3b8194927eea1cd81ccf2f3de37511c17efae","unresolved":true,"context_lines":[{"line_number":2787,"context_line":"        _, _, headers \u003d self.swift.calls_with_headers[0]"},{"line_number":2788,"context_line":""},{"line_number":2789,"context_line":""},{"line_number":2790,"context_line":"class TestS3ApiMultiUploadAclNonUTC(TestS3ApiMultiUploadAcl):"},{"line_number":2791,"context_line":"    def setUp(self):"},{"line_number":2792,"context_line":"        self.orig_tz \u003d os.environ.get(\u0027TZ\u0027, \u0027\u0027)"},{"line_number":2793,"context_line":"        os.environ[\u0027TZ\u0027] \u003d \u0027EST+05EDT,M4.1.0,M10.5.0\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"ca1b07b0_778d3ce7","line":2790,"updated":"2023-12-13 02:09:14.000000000","message":"and here\u0027s the mutator case for ...AclNonUTC","commit_id":"da4ceb5f4e3883befc6622244b9a7f25833479e9"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"87723f74c5c76d017a192336edefb48b9c367092","unresolved":false,"context_lines":[{"line_number":2787,"context_line":"        _, _, headers \u003d self.swift.calls_with_headers[0]"},{"line_number":2788,"context_line":""},{"line_number":2789,"context_line":""},{"line_number":2790,"context_line":"class TestS3ApiMultiUploadAclNonUTC(TestS3ApiMultiUploadAcl):"},{"line_number":2791,"context_line":"    def setUp(self):"},{"line_number":2792,"context_line":"        self.orig_tz \u003d os.environ.get(\u0027TZ\u0027, \u0027\u0027)"},{"line_number":2793,"context_line":"        os.environ[\u0027TZ\u0027] \u003d \u0027EST+05EDT,M4.1.0,M10.5.0\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"80819cef_b313efd2","line":2790,"in_reply_to":"ca1b07b0_778d3ce7","updated":"2023-12-14 05:25:38.000000000","message":"Acknowledged","commit_id":"da4ceb5f4e3883befc6622244b9a7f25833479e9"}],"test/unit/common/middleware/s3api/test_obj.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"93bf4c0c664ee2b586ed80dfef26ab1f954e8d78","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":2,"id":"33fbc00c_2ed223a5","updated":"2023-12-13 17:56:50.000000000","message":"test relocation LGTM","commit_id":"da4ceb5f4e3883befc6622244b9a7f25833479e9"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"87723f74c5c76d017a192336edefb48b9c367092","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"67140ea4_e2fd2891","in_reply_to":"33fbc00c_2ed223a5","updated":"2023-12-14 05:25:38.000000000","message":"Acknowledged","commit_id":"da4ceb5f4e3883befc6622244b9a7f25833479e9"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"93bf4c0c664ee2b586ed80dfef26ab1f954e8d78","unresolved":true,"context_lines":[{"line_number":347,"context_line":"        self.assertTrue(headers[\u0027content-range\u0027].startswith(\u0027bytes 0-3\u0027))"},{"line_number":348,"context_line":""},{"line_number":349,"context_line":"    def test_object_GET_Range_error(self):"},{"line_number":350,"context_line":"        self.s3acl_response_modified \u003d True"},{"line_number":351,"context_line":"        if self.swift.s3_acl:"},{"line_number":352,"context_line":"            # needed for pre-flight ACL HEAD request, FakeSwift finds the 416"},{"line_number":353,"context_line":"            # for the GET and returns it for HEAD but s3api won\u0027t error"}],"source_content_type":"text/x-python","patch_set":2,"id":"ac43aa8d_fdb67eb0","line":350,"updated":"2023-12-13 17:56:50.000000000","message":"this doesn\u0027t seem to be needed","commit_id":"da4ceb5f4e3883befc6622244b9a7f25833479e9"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"87723f74c5c76d017a192336edefb48b9c367092","unresolved":false,"context_lines":[{"line_number":347,"context_line":"        self.assertTrue(headers[\u0027content-range\u0027].startswith(\u0027bytes 0-3\u0027))"},{"line_number":348,"context_line":""},{"line_number":349,"context_line":"    def test_object_GET_Range_error(self):"},{"line_number":350,"context_line":"        self.s3acl_response_modified \u003d True"},{"line_number":351,"context_line":"        if self.swift.s3_acl:"},{"line_number":352,"context_line":"            # needed for pre-flight ACL HEAD request, FakeSwift finds the 416"},{"line_number":353,"context_line":"            # for the GET and returns it for HEAD but s3api won\u0027t error"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ac5bc75_f421ef9b","line":350,"in_reply_to":"ac43aa8d_fdb67eb0","updated":"2023-12-14 05:25:38.000000000","message":"that\u0027s interesting, I guess because we register the HEAD the tearDown doesn\u0027t bump into the 416 response getting replaced on the GET!","commit_id":"da4ceb5f4e3883befc6622244b9a7f25833479e9"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f5d3b8194927eea1cd81ccf2f3de37511c17efae","unresolved":true,"context_lines":[{"line_number":348,"context_line":""},{"line_number":349,"context_line":"    def test_object_GET_Range_error(self):"},{"line_number":350,"context_line":"        self.s3acl_response_modified \u003d True"},{"line_number":351,"context_line":"        if self.swift.s3_acl:"},{"line_number":352,"context_line":"            # needed for pre-flight ACL HEAD request, FakeSwift finds the 416"},{"line_number":353,"context_line":"            # for the GET and returns it for HEAD but s3api won\u0027t error"},{"line_number":354,"context_line":"            # correctly to 416 on HEAD"}],"source_content_type":"text/x-python","patch_set":2,"id":"2eef6599_a6f95f78","line":351,"updated":"2023-12-13 02:09:14.000000000","message":"so tests in Base do have this trick if they need slightly different asserts for the non-acl/acl cases","commit_id":"da4ceb5f4e3883befc6622244b9a7f25833479e9"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"87723f74c5c76d017a192336edefb48b9c367092","unresolved":true,"context_lines":[{"line_number":348,"context_line":""},{"line_number":349,"context_line":"    def test_object_GET_Range_error(self):"},{"line_number":350,"context_line":"        self.s3acl_response_modified \u003d True"},{"line_number":351,"context_line":"        if self.swift.s3_acl:"},{"line_number":352,"context_line":"            # needed for pre-flight ACL HEAD request, FakeSwift finds the 416"},{"line_number":353,"context_line":"            # for the GET and returns it for HEAD but s3api won\u0027t error"},{"line_number":354,"context_line":"            # correctly to 416 on HEAD"}],"source_content_type":"text/x-python","patch_set":2,"id":"56303f85_82115bac","line":351,"in_reply_to":"0a72436c_538970b5","updated":"2023-12-14 05:25:38.000000000","message":"it can certainly be extra cognative load dealing with tests that execute in multiple contexts; but that\u0027s the pattern with the inheritence based testing, i\u0027m not altogether uncomfortable with it.  We could have the setUp in S3ApiTestACL set an attribute that tests could use if we want to dump s3api.FakeSwift and still let tests bifricate assertions.\n\nI think I\u0027d prefer this test in Base as opposed to two different tests; who\u0027s implementations and assertions will drift with mainteance, that are esentially covering the same thing in two different contexts.  But this seems to be an uncommon anomoly.","commit_id":"da4ceb5f4e3883befc6622244b9a7f25833479e9"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"93bf4c0c664ee2b586ed80dfef26ab1f954e8d78","unresolved":true,"context_lines":[{"line_number":348,"context_line":""},{"line_number":349,"context_line":"    def test_object_GET_Range_error(self):"},{"line_number":350,"context_line":"        self.s3acl_response_modified \u003d True"},{"line_number":351,"context_line":"        if self.swift.s3_acl:"},{"line_number":352,"context_line":"            # needed for pre-flight ACL HEAD request, FakeSwift finds the 416"},{"line_number":353,"context_line":"            # for the GET and returns it for HEAD but s3api won\u0027t error"},{"line_number":354,"context_line":"            # correctly to 416 on HEAD"}],"source_content_type":"text/x-python","patch_set":2,"id":"0a72436c_538970b5","line":351,"in_reply_to":"2eef6599_a6f95f78","updated":"2023-12-13 17:56:50.000000000","message":"AFAICT this is the only place this pattern occurs, so I\u0027d advocate having two versions of the test in respective subclasses. Or always registering the HEAD in this test. In a follow-up I remove the self.swift.s3_acl attribute.","commit_id":"da4ceb5f4e3883befc6622244b9a7f25833479e9"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f5d3b8194927eea1cd81ccf2f3de37511c17efae","unresolved":true,"context_lines":[{"line_number":351,"context_line":"        if self.swift.s3_acl:"},{"line_number":352,"context_line":"            # needed for pre-flight ACL HEAD request, FakeSwift finds the 416"},{"line_number":353,"context_line":"            # for the GET and returns it for HEAD but s3api won\u0027t error"},{"line_number":354,"context_line":"            # correctly to 416 on HEAD"},{"line_number":355,"context_line":"            self.swift.register(\u0027HEAD\u0027, \u0027/v1/AUTH_test/bucket/object\u0027,"},{"line_number":356,"context_line":"                                swob.HTTPOk, {}, None),"},{"line_number":357,"context_line":"        code \u003d self._test_method_error(\u0027GET\u0027, \u0027/bucket/object\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"8c3de21e_4796f2b6","line":354,"updated":"2023-12-13 02:09:14.000000000","message":"oic, this test \"replaces\" the registered /bucket/object GET response with a 416 - I\u0027d guess the existing tests had a HEAD registered in setup that I removed because I felt like it duplicated the GET\n\nif this is the only test that wants to break the GET in way where HEAD still has to work maybe it\u0027s better to one-off here rather than have all of setUp carrying around different response headers for HEAD \u0026 GET\n\nN.B. the sticky headers are already in place for this path, so the test doesn\u0027t need to worry about the registration context; it could probably register it regardless but this felt more explicit.","commit_id":"da4ceb5f4e3883befc6622244b9a7f25833479e9"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"87723f74c5c76d017a192336edefb48b9c367092","unresolved":false,"context_lines":[{"line_number":351,"context_line":"        if self.swift.s3_acl:"},{"line_number":352,"context_line":"            # needed for pre-flight ACL HEAD request, FakeSwift finds the 416"},{"line_number":353,"context_line":"            # for the GET and returns it for HEAD but s3api won\u0027t error"},{"line_number":354,"context_line":"            # correctly to 416 on HEAD"},{"line_number":355,"context_line":"            self.swift.register(\u0027HEAD\u0027, \u0027/v1/AUTH_test/bucket/object\u0027,"},{"line_number":356,"context_line":"                                swob.HTTPOk, {}, None),"},{"line_number":357,"context_line":"        code \u003d self._test_method_error(\u0027GET\u0027, \u0027/bucket/object\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"fb6eb045_849bf9ee","line":354,"in_reply_to":"8c3de21e_4796f2b6","updated":"2023-12-14 05:25:38.000000000","message":"Acknowledged","commit_id":"da4ceb5f4e3883befc6622244b9a7f25833479e9"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f5d3b8194927eea1cd81ccf2f3de37511c17efae","unresolved":true,"context_lines":[{"line_number":471,"context_line":"                            environ\u003d{\u0027REQUEST_METHOD\u0027: \u0027GET\u0027},"},{"line_number":472,"context_line":"                            headers\u003d{\u0027Authorization\u0027: \u0027AWS test:tester:hmac\u0027,"},{"line_number":473,"context_line":"                                     \u0027Date\u0027: self.get_date_header()})"},{"line_number":474,"context_line":"        with self.stubbed_container_info(versioning_enabled\u003dTrue):"},{"line_number":475,"context_line":"            status, headers, body \u003d self.call_s3api(req)"},{"line_number":476,"context_line":"        self.assertEqual(status.split()[0], \u0027404\u0027)"},{"line_number":477,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"f249fa72_4f7e4d4d","line":474,"updated":"2023-12-13 02:09:14.000000000","message":"i\u0027m very confident pulling this out of base test setup and the decorator was a good idea; I have no problem calling out which tests need this - and also note this test wasn\u0027t asking for it before despite doing versoined stuff ... so that\u0027s either making them more realistic or high-lighting that our tests might be a loose.","commit_id":"da4ceb5f4e3883befc6622244b9a7f25833479e9"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"93bf4c0c664ee2b586ed80dfef26ab1f954e8d78","unresolved":true,"context_lines":[{"line_number":1100,"context_line":"        self.assertEqual(query[\u0027async\u0027], \u0027on\u0027)"},{"line_number":1101,"context_line":"        self.assertNotIn(\u0027Content-Type\u0027, headers)"},{"line_number":1102,"context_line":""},{"line_number":1103,"context_line":"    def _test_object_for_s3acl(self, method, account):"},{"line_number":1104,"context_line":"        req \u003d Request.blank(\u0027/bucket/object\u0027,"},{"line_number":1105,"context_line":"                            environ\u003d{\u0027REQUEST_METHOD\u0027: method},"},{"line_number":1106,"context_line":"                            headers\u003d{\u0027Authorization\u0027: \u0027AWS %s:hmac\u0027 % account,"}],"source_content_type":"text/x-python","patch_set":2,"id":"7355d716_9f61c9d3","line":1103,"updated":"2023-12-13 17:56:50.000000000","message":"only used for acl tests","commit_id":"da4ceb5f4e3883befc6622244b9a7f25833479e9"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"87723f74c5c76d017a192336edefb48b9c367092","unresolved":false,"context_lines":[{"line_number":1100,"context_line":"        self.assertEqual(query[\u0027async\u0027], \u0027on\u0027)"},{"line_number":1101,"context_line":"        self.assertNotIn(\u0027Content-Type\u0027, headers)"},{"line_number":1102,"context_line":""},{"line_number":1103,"context_line":"    def _test_object_for_s3acl(self, method, account):"},{"line_number":1104,"context_line":"        req \u003d Request.blank(\u0027/bucket/object\u0027,"},{"line_number":1105,"context_line":"                            environ\u003d{\u0027REQUEST_METHOD\u0027: method},"},{"line_number":1106,"context_line":"                            headers\u003d{\u0027Authorization\u0027: \u0027AWS %s:hmac\u0027 % account,"}],"source_content_type":"text/x-python","patch_set":2,"id":"91c2fa30_424c9e72","line":1103,"in_reply_to":"7355d716_9f61c9d3","updated":"2023-12-14 05:25:38.000000000","message":"Done","commit_id":"da4ceb5f4e3883befc6622244b9a7f25833479e9"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"93bf4c0c664ee2b586ed80dfef26ab1f954e8d78","unresolved":true,"context_lines":[{"line_number":1117,"context_line":"                            swob.HTTPNoContent, headers, None)"},{"line_number":1118,"context_line":""},{"line_number":1119,"context_line":"    def _test_object_copy_for_s3acl(self, account, src_permission\u003dNone,"},{"line_number":1120,"context_line":"                                    src_path\u003d\u0027/src_bucket/src_obj\u0027):"},{"line_number":1121,"context_line":"        owner \u003d \u0027test:tester\u0027"},{"line_number":1122,"context_line":"        grants \u003d [Grant(User(account), src_permission)] \\"},{"line_number":1123,"context_line":"            if src_permission else [Grant(User(owner), \u0027FULL_CONTROL\u0027)]"}],"source_content_type":"text/x-python","patch_set":2,"id":"4ffbcc04_97e6e066","line":1120,"updated":"2023-12-13 17:56:50.000000000","message":"only used for acl tests","commit_id":"da4ceb5f4e3883befc6622244b9a7f25833479e9"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"87723f74c5c76d017a192336edefb48b9c367092","unresolved":false,"context_lines":[{"line_number":1117,"context_line":"                            swob.HTTPNoContent, headers, None)"},{"line_number":1118,"context_line":""},{"line_number":1119,"context_line":"    def _test_object_copy_for_s3acl(self, account, src_permission\u003dNone,"},{"line_number":1120,"context_line":"                                    src_path\u003d\u0027/src_bucket/src_obj\u0027):"},{"line_number":1121,"context_line":"        owner \u003d \u0027test:tester\u0027"},{"line_number":1122,"context_line":"        grants \u003d [Grant(User(account), src_permission)] \\"},{"line_number":1123,"context_line":"            if src_permission else [Grant(User(owner), \u0027FULL_CONTROL\u0027)]"}],"source_content_type":"text/x-python","patch_set":2,"id":"e4b091bc_abaf8416","line":1120,"in_reply_to":"4ffbcc04_97e6e066","updated":"2023-12-14 05:25:38.000000000","message":"Done","commit_id":"da4ceb5f4e3883befc6622244b9a7f25833479e9"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f5d3b8194927eea1cd81ccf2f3de37511c17efae","unresolved":true,"context_lines":[{"line_number":1921,"context_line":"        self.assertEqual(status.split()[0], \u0027400\u0027)"},{"line_number":1922,"context_line":""},{"line_number":1923,"context_line":""},{"line_number":1924,"context_line":"class TestS3ApiObjNonUTCAcl(TestS3ApiObjAcl):"},{"line_number":1925,"context_line":"    def setUp(self):"},{"line_number":1926,"context_line":"        self.orig_tz \u003d os.environ.get(\u0027TZ\u0027, \u0027\u0027)"},{"line_number":1927,"context_line":"        os.environ[\u0027TZ\u0027] \u003d \u0027EST+05EDT,M4.1.0,M10.5.0\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"32b9be6c_648f1bdc","line":1924,"updated":"2023-12-13 02:09:14.000000000","message":"I think I prefer ...NonUTCAcl over ...AclNonUTC","commit_id":"da4ceb5f4e3883befc6622244b9a7f25833479e9"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"87723f74c5c76d017a192336edefb48b9c367092","unresolved":false,"context_lines":[{"line_number":1921,"context_line":"        self.assertEqual(status.split()[0], \u0027400\u0027)"},{"line_number":1922,"context_line":""},{"line_number":1923,"context_line":""},{"line_number":1924,"context_line":"class TestS3ApiObjNonUTCAcl(TestS3ApiObjAcl):"},{"line_number":1925,"context_line":"    def setUp(self):"},{"line_number":1926,"context_line":"        self.orig_tz \u003d os.environ.get(\u0027TZ\u0027, \u0027\u0027)"},{"line_number":1927,"context_line":"        os.environ[\u0027TZ\u0027] \u003d \u0027EST+05EDT,M4.1.0,M10.5.0\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a82915c_4779c159","line":1924,"in_reply_to":"32b9be6c_648f1bdc","updated":"2023-12-14 05:25:38.000000000","message":"Done","commit_id":"da4ceb5f4e3883befc6622244b9a7f25833479e9"}],"test/unit/common/middleware/s3api/test_service.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"93bf4c0c664ee2b586ed80dfef26ab1f954e8d78","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":2,"id":"a599c3f0_f5f96622","updated":"2023-12-13 17:56:50.000000000","message":"LGTM","commit_id":"da4ceb5f4e3883befc6622244b9a7f25833479e9"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"87723f74c5c76d017a192336edefb48b9c367092","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"281d0c1a_5ac5c670","in_reply_to":"a599c3f0_f5f96622","updated":"2023-12-14 05:25:38.000000000","message":"Acknowledged","commit_id":"da4ceb5f4e3883befc6622244b9a7f25833479e9"}]}
