)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"fe86ae0089a4f6424b5f77f5720e2f921af87a99","unresolved":true,"context_lines":[{"line_number":29,"context_line":"(See https://datatracker.ietf.org/doc/html/rfc7230#section-5.3.2)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"Fix it at the protocol level, so everywhere else we can mostly continue"},{"line_number":32,"context_line":"to assume that PATH_INFO starts with a / like we always have."},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"Co-Authored-By: Clay Gerrard \u003cclay.gerrard@gmail.com\u003e"},{"line_number":35,"context_line":"Change-Id: I04012e523f01e910f41d5a41cdd86d3d2a1b9c59"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"07f4d251_e68ba008","line":32,"updated":"2022-09-08 19:35:16.000000000","message":"Didn\u0027t the swift API already return 404 for this case - was there an existing test for that which had to change?","commit_id":"41f892994665fe79fa4985b635980c7897b45f65"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"4b536cdc5fd8cb06c2e79dfafdb0841341dfd6ae","unresolved":true,"context_lines":[{"line_number":29,"context_line":"(See https://datatracker.ietf.org/doc/html/rfc7230#section-5.3.2)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"Fix it at the protocol level, so everywhere else we can mostly continue"},{"line_number":32,"context_line":"to assume that PATH_INFO starts with a / like we always have."},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"Co-Authored-By: Clay Gerrard \u003cclay.gerrard@gmail.com\u003e"},{"line_number":35,"context_line":"Change-Id: I04012e523f01e910f41d5a41cdd86d3d2a1b9c59"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"a6c7531b_2319ca13","line":32,"in_reply_to":"07f4d251_e68ba008","updated":"2022-09-08 19:54:25.000000000","message":"The \"like we always have\" speaks to the assumption, not the behavior in practice.","commit_id":"41f892994665fe79fa4985b635980c7897b45f65"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":26274,"name":"Florent Vennetier","email":"florent.vennetier@ovhcloud.com","username":"fvennetier"},"change_message_id":"df94d8c8b041f3c19cf77873946dafb8797afa52","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"8fb4a4e8_0b7a6692","updated":"2022-09-08 10:01:48.000000000","message":"Looks good to me. I\u0027ll close https://review.opendev.org/c/openstack/swift/+/852602.","commit_id":"4d91933104dc13bfaf53f3c20d1fc2ac847a9fa4"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"fe86ae0089a4f6424b5f77f5720e2f921af87a99","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"2afc4f16_85102c4e","updated":"2022-09-08 19:35:16.000000000","message":"this LGTM already, but since it\u0027s right in the heart of every request our proxy handles maybe we\u0027ll want to add even MORE unit/functional testing.","commit_id":"41f892994665fe79fa4985b635980c7897b45f65"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"4b536cdc5fd8cb06c2e79dfafdb0841341dfd6ae","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"f4ca1376_b3a15b08","in_reply_to":"2afc4f16_85102c4e","updated":"2022-09-08 19:54:25.000000000","message":"... FYI, this also impacts backend servers....","commit_id":"41f892994665fe79fa4985b635980c7897b45f65"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"840305bc0f51a10ab6573db888e7b4687b1e982c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"a1f43d66_c88b8d1d","updated":"2022-09-09 00:27:02.000000000","message":"*sigh*\n\nThe test flailing was me rediscovering that there\u0027s a boto patch I wrote forever ago that\u0027s never going to merge: https://github.com/boto/boto/pull/3513","commit_id":"bca0e6f7c8832d11f56de81e8cbb776a6e98a4e5"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"a8da0d1d9ebb46d6c17e4d0c5539612d1738effb","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"6c74ebd6_186cee0d","updated":"2022-09-30 19:39:47.000000000","message":"I don\u0027t think these tests are supurb - i think we could do better, but the follow-up isn\u0027t there yet either.\n\nWhat we have here already is probably sufficient to catch an obvious regression which should be enough to maintain the behavior.","commit_id":"bca0e6f7c8832d11f56de81e8cbb776a6e98a4e5"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"eef109b727e1e2cd04f8e009c11c2696eb92e570","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"f570acc6_ace84cb3","updated":"2022-09-09 15:25:15.000000000","message":"yes, I think this is probably ready to carry\n\nhttps://review.opendev.org/c/openstack/swift/+/856829","commit_id":"bca0e6f7c8832d11f56de81e8cbb776a6e98a4e5"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"3a238002d905c1d0a8488ea83a19a4e09687b051","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"dfdb64a0_54129fd4","updated":"2023-01-03 21:00:27.000000000","message":"looks like we got some new tests!?","commit_id":"f6ac7d44917439489355d9dd4bbc4d068b723db3"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"f2f2fcf34ff86dab7c3ba7170e5e8392e992feed","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"8202ab19_caf84086","updated":"2023-01-04 23:51:36.000000000","message":"recheck\n\nGate troubles should be fixed now that https://review.opendev.org/c/openstack/swift/+/869135 has landed.","commit_id":"f6ac7d44917439489355d9dd4bbc4d068b723db3"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"30190f407b9e0d257310d66e62074565e0504ad7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"fbd3686f_0888a3ce","updated":"2023-01-05 02:02:40.000000000","message":"recheck\n\ngrenade failure was some timeout starting pmlogger; utterly unrelated to us.","commit_id":"f6ac7d44917439489355d9dd4bbc4d068b723db3"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"1505ed1731cfa7c65936678a4af868ccf9c4488d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"1453bb1e_d2408feb","updated":"2023-01-09 20:43:36.000000000","message":"recheck\n\nl-c job was fixed by https://review.opendev.org/c/openstack/swift/+/869581","commit_id":"f6ac7d44917439489355d9dd4bbc4d068b723db3"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"9dfed49c55d6f1fe33f9b8eec1cbd5fbc1c47986","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"b0f564da_978368b2","updated":"2023-01-08 17:39:34.000000000","message":"this works great, we\u0027ve been running it awhile\nunit, s3api and func - it\u0027s well tested, and even more obvious now in http_protocol\nnot sure how this could be much better","commit_id":"f6ac7d44917439489355d9dd4bbc4d068b723db3"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"83c993fd843732433be45860efc35bde18c4c54a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"c3ba2c0d_e1bc539f","in_reply_to":"dfdb64a0_54129fd4","updated":"2023-01-03 23:15:24.000000000","message":"All the same tests as the last patchset -- whatever was in test_wsgi.py is now in test_http_protocol.py, though.","commit_id":"f6ac7d44917439489355d9dd4bbc4d068b723db3"}],"swift/common/http_protocol.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"3a238002d905c1d0a8488ea83a19a4e09687b051","unresolved":true,"context_lines":[{"line_number":134,"context_line":"                return False"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"        if path.startswith((\u0027http://\u0027, \u0027https://\u0027)):"},{"line_number":137,"context_line":"            host, sep, rest \u003d path.partition(\u0027//\u0027)[2].partition(\u0027/\u0027)"},{"line_number":138,"context_line":"            if sep:"},{"line_number":139,"context_line":"                path \u003d \u0027/\u0027 + rest"},{"line_number":140,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"73dd7779_0ca00943","line":137,"updated":"2023-01-03 21:00:27.000000000","message":"would urlparse be better?","commit_id":"f6ac7d44917439489355d9dd4bbc4d068b723db3"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"83c993fd843732433be45860efc35bde18c4c54a","unresolved":true,"context_lines":[{"line_number":134,"context_line":"                return False"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"        if path.startswith((\u0027http://\u0027, \u0027https://\u0027)):"},{"line_number":137,"context_line":"            host, sep, rest \u003d path.partition(\u0027//\u0027)[2].partition(\u0027/\u0027)"},{"line_number":138,"context_line":"            if sep:"},{"line_number":139,"context_line":"                path \u003d \u0027/\u0027 + rest"},{"line_number":140,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"9ea38f90_58fd0f73","line":137,"in_reply_to":"73dd7779_0ca00943","updated":"2023-01-03 23:15:24.000000000","message":"Hard pass from me at this point -- in the discussion of https://github.com/python/cpython/issues/87389 and related fixes, there was definitely some consideration of putting the fix up in urllib.parse (!!): https://github.com/python/cpython/pull/93879#issuecomment-1157339176\n\nWay I figure it, if we\u0027re going to own the protocol parsing, let\u0027s own the protocol parsing -- and do what we can to never give upstream python an opportunity to break us across all stable branches again.","commit_id":"f6ac7d44917439489355d9dd4bbc4d068b723db3"}],"swift/common/wsgi.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"fe86ae0089a4f6424b5f77f5720e2f921af87a99","unresolved":true,"context_lines":[{"line_number":442,"context_line":"            if path.startswith((b\u0027http://\u0027, b\u0027https://\u0027)):"},{"line_number":443,"context_line":"                host, sep, rest \u003d path.partition(b\u0027//\u0027)[2].partition(b\u0027/\u0027)"},{"line_number":444,"context_line":"                if sep:"},{"line_number":445,"context_line":"                    path \u003d b\u0027/\u0027 + rest"},{"line_number":446,"context_line":"            self.__raw_path_info \u003d path"},{"line_number":447,"context_line":"            # unquote first, so we don\u0027t over-quote something"},{"line_number":448,"context_line":"            # that was *correctly* quoted"}],"source_content_type":"text/x-python","patch_set":2,"id":"9039a003_1e24955d","line":445,"updated":"2022-09-08 19:35:16.000000000","message":"ugh, did you crib this from somewhere?  there\u0027s so many crazy things you can put into a url I have no idea how to infer if your tests cover everything that might make this blow up.","commit_id":"41f892994665fe79fa4985b635980c7897b45f65"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"be7305ea04c9bda43f51633c670542c714e14c66","unresolved":true,"context_lines":[{"line_number":442,"context_line":"            if path.startswith((b\u0027http://\u0027, b\u0027https://\u0027)):"},{"line_number":443,"context_line":"                host, sep, rest \u003d path.partition(b\u0027//\u0027)[2].partition(b\u0027/\u0027)"},{"line_number":444,"context_line":"                if sep:"},{"line_number":445,"context_line":"                    path \u003d b\u0027/\u0027 + rest"},{"line_number":446,"context_line":"            self.__raw_path_info \u003d path"},{"line_number":447,"context_line":"            # unquote first, so we don\u0027t over-quote something"},{"line_number":448,"context_line":"            # that was *correctly* quoted"}],"source_content_type":"text/x-python","patch_set":2,"id":"950d2799_52835eb0","line":445,"in_reply_to":"4a87c97c_040957fe","updated":"2022-09-09 05:50:11.000000000","message":"OK so partiion witll _always_ return 3 values, and if they are empty be empty strings not null. So we can always happily move to [2]:\n\n  \u003e\u003e\u003e path \u003d b\"https://\"\n  \u003e\u003e\u003e host, sep, rest \u003d path.partition(b\u0027//\u0027)[2].partition(b\u0027/\u0027)\n  \u003e\u003e\u003e host\n  b\u0027\u0027\n  \u003e\u003e\u003e sep\n  b\u0027\u0027\n  \u003e\u003e\u003e rest\n  b\u0027\u0027\n\nOK, starting to like this partition approach.\n\nBut we\u0027ve already split off the query string etc, so the path is just the path or potentually the full URL ending at the end of the path. So we could just use urlparse like:\n\n  if path.startswith((b\u0027http://\u0027, b\u0027https://\u0027)):\n      path \u003d urlparse(path).path\n\nBut I guess that means we need to use urlparse and we already use partition just above so have precident.\n\nHmm, seems urlparse also supports not having a full url:\n\n  In [2]: from urllib.parse import urlparse\n  In [3]: urlparse(\u0027/somepath?q\u003da\u0027)\n  Out[3]: ParseResult(scheme\u003d\u0027\u0027, netloc\u003d\u0027\u0027, path\u003d\u0027/somepath\u0027, params\u003d\u0027\u0027, query\u003d\u0027q\u003da\u0027, fragment\u003d\u0027\u0027)\n\nAnd already supports byte strings:\n\n  In [5]: urlparse(b\u0027/\u0027)\n  Out[5]: ParseResultBytes(scheme\u003db\u0027\u0027, netloc\u003db\u0027\u0027, path\u003db\u0027/\u0027, params\u003db\u0027\u0027, query\u003db\u0027\u0027, fragment\u003db\u0027\u0027)\n  \nSo if we\u0027re happy with using urlparse and whatever that means for py2 support (I think it moved or something right). Then we could actually just swap lilke 441 with something like:\n\n  parsed_url \u003d urlparse(parts[1])\n  path \u003d parsed_url.path\n  query \u003d parted_url.query\n\nAnd be done with it.","commit_id":"41f892994665fe79fa4985b635980c7897b45f65"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"4b536cdc5fd8cb06c2e79dfafdb0841341dfd6ae","unresolved":true,"context_lines":[{"line_number":442,"context_line":"            if path.startswith((b\u0027http://\u0027, b\u0027https://\u0027)):"},{"line_number":443,"context_line":"                host, sep, rest \u003d path.partition(b\u0027//\u0027)[2].partition(b\u0027/\u0027)"},{"line_number":444,"context_line":"                if sep:"},{"line_number":445,"context_line":"                    path \u003d b\u0027/\u0027 + rest"},{"line_number":446,"context_line":"            self.__raw_path_info \u003d path"},{"line_number":447,"context_line":"            # unquote first, so we don\u0027t over-quote something"},{"line_number":448,"context_line":"            # that was *correctly* quoted"}],"source_content_type":"text/x-python","patch_set":2,"id":"4a87c97c_040957fe","line":445,"in_reply_to":"9039a003_1e24955d","updated":"2022-09-08 19:54:25.000000000","message":"partition() doesn\u0027t blow up -- that\u0027s part of why I chose it. sep or rest may be blank, but they\u0027ll all be byte strings.","commit_id":"41f892994665fe79fa4985b635980c7897b45f65"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"9237fbf94fe244d6b3a5dc8370243c5884604aa2","unresolved":true,"context_lines":[{"line_number":442,"context_line":"            if path.startswith((b\u0027http://\u0027, b\u0027https://\u0027)):"},{"line_number":443,"context_line":"                host, sep, rest \u003d path.partition(b\u0027//\u0027)[2].partition(b\u0027/\u0027)"},{"line_number":444,"context_line":"                if sep:"},{"line_number":445,"context_line":"                    path \u003d b\u0027/\u0027 + rest"},{"line_number":446,"context_line":"            self.__raw_path_info \u003d path"},{"line_number":447,"context_line":"            # unquote first, so we don\u0027t over-quote something"},{"line_number":448,"context_line":"            # that was *correctly* quoted"}],"source_content_type":"text/x-python","patch_set":2,"id":"bd84629b_b2fdfb89","line":445,"in_reply_to":"950d2799_52835eb0","updated":"2022-09-09 18:05:42.000000000","message":"I don\u0027t know that I trust stdlib to be/stay sane. If we *do* go with stdlib, we want urlsplit, not urlparse -- I know I\u0027ve been bit by that before. But I just spent the last hour being gaslit by docs before coming across https://github.com/python/cpython/issues/91708\n\nAt least with direct (byte) string manipulations, I actually know what\u0027s going on.","commit_id":"41f892994665fe79fa4985b635980c7897b45f65"}],"test/functional/s3api/test_presigned.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"fe86ae0089a4f6424b5f77f5720e2f921af87a99","unresolved":true,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"import requests"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from swift.common.bufferedhttp import http_connect_raw"},{"line_number":21,"context_line":"from swift.common.middleware.s3api.etree import fromstring"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"import test.functional as tf"}],"source_content_type":"text/x-python","patch_set":2,"id":"e9694e00_00f3db4c","line":20,"updated":"2022-09-08 19:35:16.000000000","message":"so we don\u0027t use http_connect_raw anywhere else in the functional test suite","commit_id":"41f892994665fe79fa4985b635980c7897b45f65"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"4b536cdc5fd8cb06c2e79dfafdb0841341dfd6ae","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"import requests"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from swift.common.bufferedhttp import http_connect_raw"},{"line_number":21,"context_line":"from swift.common.middleware.s3api.etree import fromstring"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"import test.functional as tf"}],"source_content_type":"text/x-python","patch_set":2,"id":"ce1bacc0_aa1057f2","line":20,"in_reply_to":"e9694e00_00f3db4c","updated":"2022-09-08 19:54:25.000000000","message":"Ack","commit_id":"41f892994665fe79fa4985b635980c7897b45f65"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"fe86ae0089a4f6424b5f77f5720e2f921af87a99","unresolved":true,"context_lines":[{"line_number":233,"context_line":"            self.conn.host,"},{"line_number":234,"context_line":"            self.conn.port,"},{"line_number":235,"context_line":"            \u0027PUT\u0027,"},{"line_number":236,"context_line":"            put_url,  # whole URL, not just the path/query!"},{"line_number":237,"context_line":"            ssl\u003dput_url.startswith(\u0027https:\u0027),"},{"line_number":238,"context_line":"        ).getresponse()"},{"line_number":239,"context_line":"        self.assertEqual(resp.status, 200)"}],"source_content_type":"text/x-python","patch_set":2,"id":"ffc9be2b_d60d1fca","line":236,"updated":"2022-09-08 19:35:16.000000000","message":"maybe for # sanity we should check that a put_path works here with http_connect_raw too\n\nshould we do a similar test for swift API in test_container?","commit_id":"41f892994665fe79fa4985b635980c7897b45f65"}],"test/s3api/test_request_target_style.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"fe86ae0089a4f6424b5f77f5720e2f921af87a99","unresolved":true,"context_lines":[{"line_number":51,"context_line":"        sess._proxy_config \u003d AlwaysAbsoluteURLProxyConfig()"},{"line_number":52,"context_line":"        self.assertEqual({\u0027use_forwarding_for_https\u0027: True},"},{"line_number":53,"context_line":"                         sess._proxies_kwargs())"},{"line_number":54,"context_line":"        resp \u003d self.client.list_buckets()"},{"line_number":55,"context_line":"        self.assertEqual(200, resp[\u0027ResponseMetadata\u0027][\u0027HTTPStatusCode\u0027])"},{"line_number":56,"context_line":"        self.assertIn(self.bucket_name, {"},{"line_number":57,"context_line":"            info[\u0027Name\u0027] for info in resp[\u0027Buckets\u0027]})"}],"source_content_type":"text/x-python","patch_set":2,"id":"78dcaa58_a382304e","line":54,"updated":"2022-09-08 19:35:16.000000000","message":"I wish there was some way to assert the request was made to the absolute-url, maybe if we enabled and captured boto debug logging we could see something.","commit_id":"41f892994665fe79fa4985b635980c7897b45f65"}],"test/unit/common/test_wsgi.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"fe86ae0089a4f6424b5f77f5720e2f921af87a99","unresolved":true,"context_lines":[{"line_number":1244,"context_line":""},{"line_number":1245,"context_line":"    def test_absolute_target(self):"},{"line_number":1246,"context_line":"        bytes_out \u003d self._run_bytes_through_protocol(("},{"line_number":1247,"context_line":"            b\"GET https://cluster.domain/bucket/key HTTP/1.0\\r\\n\""},{"line_number":1248,"context_line":"            b\"\\r\\n\""},{"line_number":1249,"context_line":"        ))"},{"line_number":1250,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"b9eb9995_16c1534d","line":1247,"updated":"2022-09-08 19:35:16.000000000","message":"how about a test that does this but with a big long list of swift/s3 looking urls and even some invalid/negative test cases!","commit_id":"41f892994665fe79fa4985b635980c7897b45f65"}],"test/unit/proxy/test_server.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"3a238002d905c1d0a8488ea83a19a4e09687b051","unresolved":true,"context_lines":[{"line_number":2879,"context_line":"        fd.flush()"},{"line_number":2880,"context_line":"        headers \u003d readuntil2crlfs(fd)"},{"line_number":2881,"context_line":"        exp \u003d b\u0027HTTP/1.1 204\u0027"},{"line_number":2882,"context_line":"        self.assertEqual(headers[:len(exp)], exp)"},{"line_number":2883,"context_line":""},{"line_number":2884,"context_line":"    @unpatch_policies"},{"line_number":2885,"context_line":"    def test_GET_short_read(self):"}],"source_content_type":"text/x-python","patch_set":8,"id":"01b41ec4_eb59fb1f","line":2882,"updated":"2023-01-03 21:00:27.000000000","message":"this is pretty nice!","commit_id":"f6ac7d44917439489355d9dd4bbc4d068b723db3"}]}
