)]}'
{"swift/common/middleware/s3api/s3response.py":[{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"7d692cdf57747b86d774a03ceed55166d52e7da4","unresolved":true,"context_lines":[{"line_number":134,"context_line":"            elif _key.startswith(\u0027access-control-\u0027):"},{"line_number":135,"context_line":"                headers[key] \u003d val"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"        if exposed_headers:"},{"line_number":138,"context_line":"            exposed_headers.extend(["},{"line_number":139,"context_line":"                \u0027x-amz-request-id\u0027,"},{"line_number":140,"context_line":"                \u0027x-amz-id-2\u0027,"}],"source_content_type":"text/x-python","patch_set":18,"id":"d9a9a015_a9f04540","line":137,"updated":"2021-02-23 06:13:27.000000000","message":"This is more a question out of ignorance, but why do we only want to add the x-amz headers as exposed headers if there are already some defined. Is there a chance we\u0027d still want to expose these even if there aren\u0027t defined in either ino container meta or hard-coded in the proxy config?\n\nOr if they\u0027re really required we expect them to put them directly in the proxy config?","commit_id":"c188fd4df2815defd35e777c61ec545aa23d8b08"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"2a34228a5b4b4273b2054f78c3a12533ea437600","unresolved":true,"context_lines":[{"line_number":99,"context_line":"        # Handle swift headers"},{"line_number":100,"context_line":"        exposed_headers \u003d []"},{"line_number":101,"context_line":"        for key, val in sw_headers.items():"},{"line_number":102,"context_line":"            _key \u003d swob.bytes_to_wsgi(swob.wsgi_to_bytes(key).lower())"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"            if _key.startswith(\u0027x-object-meta-\u0027):"},{"line_number":105,"context_line":"                # Note that AWS ignores user-defined headers with \u0027\u003d\u0027 in the"}],"source_content_type":"text/x-python","patch_set":20,"id":"d2fc5724_062ced50","line":102,"updated":"2021-02-24 19:36:12.000000000","message":"I should probably extract everything in this loop so we can do something more like\n\n headers \u003d {}\n for key, val in sw_headers.items:\n     s3_pair \u003d translate_swift_to_s3(key, val)\n     if s3_pair is None: continue\n     headers[s3_pair[0]] \u003d s3_pair[1]\n\nso we can\n\n* have more-direct and more-targeted testing and\n* reclaim two tabs worth of indent across 40 or so lines.","commit_id":"84827c3448f69d15dfc61ba70effa4a8bb2583be"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"1d87787039d42b1095b802e0ff08fc3ae2120283","unresolved":true,"context_lines":[{"line_number":124,"context_line":"                headers[\u0027x-amz-delete-marker\u0027] \u003d \u0027true\u0027"},{"line_number":125,"context_line":"            elif _key \u003d\u003d \u0027access-control-expose-headers\u0027:"},{"line_number":126,"context_line":"                exposed_headers \u003d val.split(\u0027, \u0027)"},{"line_number":127,"context_line":"            elif _key \u003d\u003d \u0027access-control-allow-methods\u0027:"},{"line_number":128,"context_line":"                methods \u003d val.split(\u0027, \u0027)"},{"line_number":129,"context_line":"                try:"},{"line_number":130,"context_line":"                    methods.remove(\u0027COPY\u0027)  # that\u0027s not a thing in S3"}],"source_content_type":"text/x-python","patch_set":20,"id":"bba557b8_c54e9c7f","line":127,"range":{"start_line":127,"start_character":26,"end_line":127,"end_character":55},"updated":"2021-02-24 16:52:45.000000000","message":"IIUC this only comes back from a pre-flight request, but the commit message says there\u0027s no support for those...and the next patch adds OPTIONS handling??","commit_id":"84827c3448f69d15dfc61ba70effa4a8bb2583be"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"2a34228a5b4b4273b2054f78c3a12533ea437600","unresolved":true,"context_lines":[{"line_number":124,"context_line":"                headers[\u0027x-amz-delete-marker\u0027] \u003d \u0027true\u0027"},{"line_number":125,"context_line":"            elif _key \u003d\u003d \u0027access-control-expose-headers\u0027:"},{"line_number":126,"context_line":"                exposed_headers \u003d val.split(\u0027, \u0027)"},{"line_number":127,"context_line":"            elif _key \u003d\u003d \u0027access-control-allow-methods\u0027:"},{"line_number":128,"context_line":"                methods \u003d val.split(\u0027, \u0027)"},{"line_number":129,"context_line":"                try:"},{"line_number":130,"context_line":"                    methods.remove(\u0027COPY\u0027)  # that\u0027s not a thing in S3"}],"source_content_type":"text/x-python","patch_set":20,"id":"517ddf69_0d07bae6","line":127,"range":{"start_line":127,"start_character":26,"end_line":127,"end_character":55},"in_reply_to":"bba557b8_c54e9c7f","updated":"2021-02-24 19:36:12.000000000","message":"Yeah, that\u0027s probably right. I think I originally had this, the next one, and probably even https://review.opendev.org/c/openstack/swift/+/720098 lumped together in a dirty working tree at one point, then tried to break it into commits in such a way that\n\n* new functionality is enabled at each step and\n* logically similar things all go together.\n\nThis particular block jumps the gun a little on the first point, but seemed pretty on-topic for header-translation. We can move it to the next patchset, I suppose.\n\nI should make sure there are tests to cover removing COPY...","commit_id":"84827c3448f69d15dfc61ba70effa4a8bb2583be"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"1d87787039d42b1095b802e0ff08fc3ae2120283","unresolved":true,"context_lines":[{"line_number":125,"context_line":"            elif _key \u003d\u003d \u0027access-control-expose-headers\u0027:"},{"line_number":126,"context_line":"                exposed_headers \u003d val.split(\u0027, \u0027)"},{"line_number":127,"context_line":"            elif _key \u003d\u003d \u0027access-control-allow-methods\u0027:"},{"line_number":128,"context_line":"                methods \u003d val.split(\u0027, \u0027)"},{"line_number":129,"context_line":"                try:"},{"line_number":130,"context_line":"                    methods.remove(\u0027COPY\u0027)  # that\u0027s not a thing in S3"},{"line_number":131,"context_line":"                except ValueError:"}],"source_content_type":"text/x-python","patch_set":20,"id":"85524e06_684be204","line":128,"updated":"2021-02-24 16:52:45.000000000","message":"utils.list_from_csv takes care of the sensitivity to the whitespace, although perhaps the whitespace is mandatory anyway","commit_id":"84827c3448f69d15dfc61ba70effa4a8bb2583be"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"2a34228a5b4b4273b2054f78c3a12533ea437600","unresolved":true,"context_lines":[{"line_number":125,"context_line":"            elif _key \u003d\u003d \u0027access-control-expose-headers\u0027:"},{"line_number":126,"context_line":"                exposed_headers \u003d val.split(\u0027, \u0027)"},{"line_number":127,"context_line":"            elif _key \u003d\u003d \u0027access-control-allow-methods\u0027:"},{"line_number":128,"context_line":"                methods \u003d val.split(\u0027, \u0027)"},{"line_number":129,"context_line":"                try:"},{"line_number":130,"context_line":"                    methods.remove(\u0027COPY\u0027)  # that\u0027s not a thing in S3"},{"line_number":131,"context_line":"                except ValueError:"}],"source_content_type":"text/x-python","patch_set":20,"id":"2455cdd1_5a245eb8","line":128,"in_reply_to":"85524e06_684be204","updated":"2021-02-24 19:36:12.000000000","message":"At any rate, we always build it with the space: https://github.com/openstack/swift/blob/2.26.0/swift/proxy/controllers/base.py#L2128-L2129","commit_id":"84827c3448f69d15dfc61ba70effa4a8bb2583be"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"1d87787039d42b1095b802e0ff08fc3ae2120283","unresolved":true,"context_lines":[{"line_number":134,"context_line":"            elif _key.startswith(\u0027access-control-\u0027):"},{"line_number":135,"context_line":"                headers[key] \u003d val"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"        if exposed_headers:"},{"line_number":138,"context_line":"            exposed_headers.extend(["},{"line_number":139,"context_line":"                \u0027x-amz-request-id\u0027,"},{"line_number":140,"context_line":"                \u0027x-amz-id-2\u0027,"}],"source_content_type":"text/x-python","patch_set":20,"id":"0a57d3c9_b75cb589","line":137,"updated":"2021-02-24 16:52:45.000000000","message":"just curious - methods is handled in the elif clause, but exposed_headers is handled here - was there a reason for two patterns? I can see it may help with indentation","commit_id":"84827c3448f69d15dfc61ba70effa4a8bb2583be"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"2a34228a5b4b4273b2054f78c3a12533ea437600","unresolved":true,"context_lines":[{"line_number":134,"context_line":"            elif _key.startswith(\u0027access-control-\u0027):"},{"line_number":135,"context_line":"                headers[key] \u003d val"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"        if exposed_headers:"},{"line_number":138,"context_line":"            exposed_headers.extend(["},{"line_number":139,"context_line":"                \u0027x-amz-request-id\u0027,"},{"line_number":140,"context_line":"                \u0027x-amz-id-2\u0027,"}],"source_content_type":"text/x-python","patch_set":20,"id":"b481dd16_2d205d40","line":137,"in_reply_to":"0a57d3c9_b75cb589","updated":"2021-02-24 19:36:12.000000000","message":"I forget -- probably was indentation-related.","commit_id":"84827c3448f69d15dfc61ba70effa4a8bb2583be"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"1d87787039d42b1095b802e0ff08fc3ae2120283","unresolved":true,"context_lines":[{"line_number":137,"context_line":"        if exposed_headers:"},{"line_number":138,"context_line":"            exposed_headers.extend(["},{"line_number":139,"context_line":"                \u0027x-amz-request-id\u0027,"},{"line_number":140,"context_line":"                \u0027x-amz-id-2\u0027,"},{"line_number":141,"context_line":"            ])"},{"line_number":142,"context_line":"            headers[\u0027access-control-expose-headers\u0027] \u003d \u0027, \u0027.join("},{"line_number":143,"context_line":"                \u0027x-amz-meta-\u0027 + h[14:] if h.startswith(\u0027x-object-meta-\u0027) else h"}],"source_content_type":"text/x-python","patch_set":20,"id":"20d6148d_266e42d5","line":140,"updated":"2021-02-24 16:52:45.000000000","message":"so these are *only* exposed if there are other exposed headers coming from swift?","commit_id":"84827c3448f69d15dfc61ba70effa4a8bb2583be"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"2a34228a5b4b4273b2054f78c3a12533ea437600","unresolved":true,"context_lines":[{"line_number":137,"context_line":"        if exposed_headers:"},{"line_number":138,"context_line":"            exposed_headers.extend(["},{"line_number":139,"context_line":"                \u0027x-amz-request-id\u0027,"},{"line_number":140,"context_line":"                \u0027x-amz-id-2\u0027,"},{"line_number":141,"context_line":"            ])"},{"line_number":142,"context_line":"            headers[\u0027access-control-expose-headers\u0027] \u003d \u0027, \u0027.join("},{"line_number":143,"context_line":"                \u0027x-amz-meta-\u0027 + h[14:] if h.startswith(\u0027x-object-meta-\u0027) else h"}],"source_content_type":"text/x-python","patch_set":20,"id":"97dafd6a_ada23cf7","line":140,"in_reply_to":"20d6148d_266e42d5","updated":"2021-02-24 19:36:12.000000000","message":"Yeah -- my theory is that\n\n* every allowed request should be exposing (at minimum) x-trans-id and\n* any request exposing x-trans-id should be exposing the s3 equivalents.\n\nI could make that second point more explicit with something like\n\n if \u0027x-trans-id\u0027 in exposed_headers:\n     exposed_headers.extend(...)\n\n(Or even go one step further with something like\n\n ... and \u0027x-amz-request-id\u0027 in sw_headers:\n\nHmmm....)","commit_id":"84827c3448f69d15dfc61ba70effa4a8bb2583be"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"1d87787039d42b1095b802e0ff08fc3ae2120283","unresolved":true,"context_lines":[{"line_number":141,"context_line":"            ])"},{"line_number":142,"context_line":"            headers[\u0027access-control-expose-headers\u0027] \u003d \u0027, \u0027.join("},{"line_number":143,"context_line":"                \u0027x-amz-meta-\u0027 + h[14:] if h.startswith(\u0027x-object-meta-\u0027) else h"},{"line_number":144,"context_line":"                for h in exposed_headers)"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"        # Check whether we stored the AWS-style etag on upload"},{"line_number":147,"context_line":"        override_etag \u003d s3_sysmeta_headers.get("}],"source_content_type":"text/x-python","patch_set":20,"id":"34b6a1d6_a5c4d69a","line":144,"updated":"2021-02-24 16:52:45.000000000","message":"ok, so I guess this is why exposed_headers is processed here and not in the loop\n\nnote to self: the \u003d5f to _ replacement has already happened in headers","commit_id":"84827c3448f69d15dfc61ba70effa4a8bb2583be"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"2a34228a5b4b4273b2054f78c3a12533ea437600","unresolved":true,"context_lines":[{"line_number":141,"context_line":"            ])"},{"line_number":142,"context_line":"            headers[\u0027access-control-expose-headers\u0027] \u003d \u0027, \u0027.join("},{"line_number":143,"context_line":"                \u0027x-amz-meta-\u0027 + h[14:] if h.startswith(\u0027x-object-meta-\u0027) else h"},{"line_number":144,"context_line":"                for h in exposed_headers)"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"        # Check whether we stored the AWS-style etag on upload"},{"line_number":147,"context_line":"        override_etag \u003d s3_sysmeta_headers.get("}],"source_content_type":"text/x-python","patch_set":20,"id":"98df407a_086d0a28","line":144,"in_reply_to":"34b6a1d6_a5c4d69a","updated":"2021-02-24 19:36:12.000000000","message":"Nah, doesn\u0027t really matter; the value is entirely dependent upon exposed_headers -- we should be able to do it above.","commit_id":"84827c3448f69d15dfc61ba70effa4a8bb2583be"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"24608733e345ecf5090d2030fe87f0aa31838962","unresolved":true,"context_lines":[{"line_number":50,"context_line":"    _key \u003d swob.bytes_to_wsgi(swob.wsgi_to_bytes(key).lower())"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    if _key.startswith(\u0027x-object-meta-\u0027):"},{"line_number":53,"context_line":"        # Note that AWS ignores user-defined headers with \u0027\u003d\u0027 in the"},{"line_number":54,"context_line":"        # header name. We translated underscores to \u0027\u003d5F\u0027 on the way"},{"line_number":55,"context_line":"        # in, though."},{"line_number":56,"context_line":"        return \u0027x-amz-meta-\u0027 + _key[14:].replace(\u0027\u003d5f\u0027, \u0027_\u0027), val"}],"source_content_type":"text/x-python","patch_set":21,"id":"d8994017_bc0edce0","line":53,"range":{"start_line":53,"start_character":59,"end_line":53,"end_character":60},"updated":"2021-02-26 05:12:33.000000000","message":"I believe this is suppose to be an underscore (_).","commit_id":"8648e815b99aede3843047f23319c90ff6da00cf"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"3a30662c96b503f094edb27cacae5b15a75d6936","unresolved":true,"context_lines":[{"line_number":50,"context_line":"    _key \u003d swob.bytes_to_wsgi(swob.wsgi_to_bytes(key).lower())"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    if _key.startswith(\u0027x-object-meta-\u0027):"},{"line_number":53,"context_line":"        # Note that AWS ignores user-defined headers with \u0027\u003d\u0027 in the"},{"line_number":54,"context_line":"        # header name. We translated underscores to \u0027\u003d5F\u0027 on the way"},{"line_number":55,"context_line":"        # in, though."},{"line_number":56,"context_line":"        return \u0027x-amz-meta-\u0027 + _key[14:].replace(\u0027\u003d5f\u0027, \u0027_\u0027), val"}],"source_content_type":"text/x-python","patch_set":21,"id":"de4c2a60_6b9b69c7","line":53,"range":{"start_line":53,"start_character":59,"end_line":53,"end_character":60},"in_reply_to":"d8994017_bc0edce0","updated":"2021-02-26 19:25:03.000000000","message":"Nope! AWS drops any header with \u0027\u003d\u0027 in it -- but it *will* faithfully preserve \u0027_\u0027 in user meta.\n\nSwift, on the other hand, \"allows\" \u0027_\u0027 but translates them to \u0027-\u0027 -- as best I can tell this wasn\u0027t a conscious design decision, just an artifact of being a WSGI app and inheriting all that CGI baggage. We *do* allow \u0027\u003d\u0027, though, so we can use that to encode a \u0027\u003d\u0027. And since we\u0027ve found one case where we need to encode something funky, I assumed we may find others so I didn\u0027t do it as a simple replacement. See https://github.com/openstack-archive/swift3/commit/f3a933aad1f29a90bd2dbbabe24bf7d1b62ede9b if you\u0027re interested in some of the history.\n\nThe comment could probably stand to be updated with a bit more of that context, though.","commit_id":"8648e815b99aede3843047f23319c90ff6da00cf"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"8779a0409106947aeaa7d43468f38578a814854b","unresolved":true,"context_lines":[{"line_number":67,"context_line":"    elif _key \u003d\u003d \u0027x-backend-content-type\u0027 and \\"},{"line_number":68,"context_line":"            val \u003d\u003d DELETE_MARKER_CONTENT_TYPE:"},{"line_number":69,"context_line":"        return \u0027x-amz-delete-marker\u0027, \u0027true\u0027"},{"line_number":70,"context_line":"    elif _key \u003d\u003d \u0027access-control-expose-headers\u0027:"},{"line_number":71,"context_line":"        exposed_headers \u003d val.split(\u0027, \u0027)"},{"line_number":72,"context_line":"        exposed_headers.extend(["},{"line_number":73,"context_line":"            \u0027x-amz-request-id\u0027,"},{"line_number":74,"context_line":"            \u0027x-amz-id-2\u0027,"},{"line_number":75,"context_line":"        ])"},{"line_number":76,"context_line":"        return \u0027access-control-expose-headers\u0027, \u0027, \u0027.join("},{"line_number":77,"context_line":"            \u0027x-amz-meta-\u0027 + h[14:] if h.startswith(\u0027x-object-meta-\u0027) else h"},{"line_number":78,"context_line":"            for h in exposed_headers)"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    elif _key \u003d\u003d \u0027access-control-allow-methods\u0027:"},{"line_number":81,"context_line":"        methods \u003d val.split(\u0027, \u0027)"}],"source_content_type":"text/x-python","patch_set":21,"id":"745a5ef1_473e7db0","line":78,"range":{"start_line":70,"start_character":4,"end_line":78,"end_character":37},"updated":"2021-03-01 15:31:51.000000000","message":"ok, revert this and the js presigned GET/HEAD tests fail","commit_id":"8648e815b99aede3843047f23319c90ff6da00cf"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"8779a0409106947aeaa7d43468f38578a814854b","unresolved":true,"context_lines":[{"line_number":73,"context_line":"            \u0027x-amz-request-id\u0027,"},{"line_number":74,"context_line":"            \u0027x-amz-id-2\u0027,"},{"line_number":75,"context_line":"        ])"},{"line_number":76,"context_line":"        return \u0027access-control-expose-headers\u0027, \u0027, \u0027.join("},{"line_number":77,"context_line":"            \u0027x-amz-meta-\u0027 + h[14:] if h.startswith(\u0027x-object-meta-\u0027) else h"},{"line_number":78,"context_line":"            for h in exposed_headers)"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    elif _key \u003d\u003d \u0027access-control-allow-methods\u0027:"},{"line_number":81,"context_line":"        methods \u003d val.split(\u0027, \u0027)"},{"line_number":82,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":21,"id":"7ce875d1_fdbfcf99","line":79,"range":{"start_line":76,"start_character":1,"end_line":79,"end_character":0},"updated":"2021-03-01 15:31:51.000000000","message":"doesn\u0027t this need the x-object-meta-* keys to have \u003d5f replaced with underscores?","commit_id":"8648e815b99aede3843047f23319c90ff6da00cf"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"8779a0409106947aeaa7d43468f38578a814854b","unresolved":true,"context_lines":[{"line_number":80,"context_line":"    elif _key \u003d\u003d \u0027access-control-allow-methods\u0027:"},{"line_number":81,"context_line":"        methods \u003d val.split(\u0027, \u0027)"},{"line_number":82,"context_line":"        try:"},{"line_number":83,"context_line":"            methods.remove(\u0027COPY\u0027)  # that\u0027s not a thing in S3"},{"line_number":84,"context_line":"        except ValueError:"},{"line_number":85,"context_line":"            pass  # not there? don\u0027t worry about it"},{"line_number":86,"context_line":"        return key, \u0027, \u0027.join(methods)"}],"source_content_type":"text/x-python","patch_set":21,"id":"a646d304_ef2dbdcc","line":83,"range":{"start_line":83,"start_character":12,"end_line":83,"end_character":34},"updated":"2021-03-01 15:31:51.000000000","message":"ok, revert this and a unit test fails (but no js test, unsurprisingly)","commit_id":"8648e815b99aede3843047f23319c90ff6da00cf"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"8779a0409106947aeaa7d43468f38578a814854b","unresolved":true,"context_lines":[{"line_number":84,"context_line":"        except ValueError:"},{"line_number":85,"context_line":"            pass  # not there? don\u0027t worry about it"},{"line_number":86,"context_line":"        return key, \u0027, \u0027.join(methods)"},{"line_number":87,"context_line":"    elif _key.startswith(\u0027access-control-\u0027):"},{"line_number":88,"context_line":"        return key, val"},{"line_number":89,"context_line":"    return None"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"37e2f78e_2cd143d3","line":88,"range":{"start_line":87,"start_character":4,"end_line":88,"end_character":23},"updated":"2021-03-01 15:31:51.000000000","message":"ok, revert this and unit and js tests fail","commit_id":"8648e815b99aede3843047f23319c90ff6da00cf"}],"test/cors/README.rst":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"2a34228a5b4b4273b2054f78c3a12533ea437600","unresolved":true,"context_lines":[{"line_number":34,"context_line":"    tests passed or failed."},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"All of this is orchestrated through ``main.py``. It uses the standard ``OS_*``"},{"line_number":37,"context_line":"environemnt variables to determine how to connect to Swift."},{"line_number":38,"context_line":""},{"line_number":39,"context_line":".."},{"line_number":40,"context_line":"   TODO: verify that this works with Keystone"}],"source_content_type":"text/x-rst","patch_set":19,"id":"ea8d5e90_7dc30c08","line":37,"updated":"2021-02-24 19:36:12.000000000","message":"Yeah, there should be a call-out to S3_ENDPOINT up here.\n\nAlso, s/environemnt/environment/","commit_id":"5e3a436ef357eaab76a3f62178d9fdff6f6eb008"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"2a34228a5b4b4273b2054f78c3a12533ea437600","unresolved":true,"context_lines":[{"line_number":49,"context_line":"This will create some test containers and object in Swift, start a simple"},{"line_number":50,"context_line":"static site, and emit a URL to visit to run the tests, like::"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"   Serving test at http://localhost:8000/#OS_AUTH_URL\u003dhttp://saio/auth/v1.0\u0026OS_USERNAME\u003dtest:tester\u0026OS_PASSWORD\u003dtesting\u0026OS_STORAGE_URL\u003dhttp://saio/v1/AUTH_test"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":".. note::"},{"line_number":55,"context_line":"   You can use ``--hostname`` and ``--port`` to adjust the origin used."}],"source_content_type":"text/x-rst","patch_set":19,"id":"eb95cf46_72b37383","line":52,"updated":"2021-02-24 19:36:12.000000000","message":"This should get updated, too.","commit_id":"5e3a436ef357eaab76a3f62178d9fdff6f6eb008"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"a28ac27e196f26e33a0459ff66436e608383f830","unresolved":true,"context_lines":[{"line_number":52,"context_line":"   Serving test at http://localhost:8000/#OS_AUTH_URL\u003dhttp://saio/auth/v1.0\u0026OS_USERNAME\u003dtest:tester\u0026OS_PASSWORD\u003dtesting\u0026OS_STORAGE_URL\u003dhttp://saio/v1/AUTH_test"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":".. note::"},{"line_number":55,"context_line":"   You can use ``--hostname`` and ``--port`` to adjust the origin used."},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"Open the link. Toward the top of the page will be a status line; it will cycle"},{"line_number":58,"context_line":"through the following states:"}],"source_content_type":"text/x-rst","patch_set":19,"id":"e3983356_78d4e2c6","line":55,"updated":"2021-02-24 16:50:33.000000000","message":"I always use -H saio; I had to read the source to find S3_ENDPOINT","commit_id":"5e3a436ef357eaab76a3f62178d9fdff6f6eb008"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"8779a0409106947aeaa7d43468f38578a814854b","unresolved":true,"context_lines":[{"line_number":114,"context_line":"* clearing all services,"},{"line_number":115,"context_line":"* explicitly adding AWS.S3,"},{"line_number":116,"context_line":"* clicking \"Build\" to download,"},{"line_number":117,"context_line":"* saving in the ``test/cors/vendored`` directory, and finally"},{"line_number":118,"context_line":"* updating the version number in ``test/cors/test-s3*.js``."}],"source_content_type":"text/x-rst","patch_set":21,"id":"98fb3e2a_4893dbb7","line":117,"range":{"start_line":117,"start_character":28,"end_line":117,"end_character":36},"updated":"2021-03-01 15:31:51.000000000","message":"vendor","commit_id":"8648e815b99aede3843047f23319c90ff6da00cf"}],"test/cors/harness.js":[{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"24608733e345ecf5090d2030fe87f0aa31838962","unresolved":true,"context_lines":[{"line_number":19,"context_line":"  if (!("},{"line_number":20,"context_line":"    url.searchParams.has(\u0027Signature\u0027) ||"},{"line_number":21,"context_line":"    url.searchParams.has(\u0027X-Amz-Signature\u0027) ||"},{"line_number":22,"context_line":"    \u0027Authorization\u0027 in headers"},{"line_number":23,"context_line":"  )) {"},{"line_number":24,"context_line":"    // give each Swift request a unique query string to avoid ever fetching from cache"},{"line_number":25,"context_line":"    params[\u0027cors-test-time\u0027] \u003d Date.now().toString()"}],"source_content_type":"text/javascript","patch_set":21,"id":"1770d5be_84afa460","line":22,"updated":"2021-02-26 05:12:33.000000000","message":"Because the sig is based of a bunch of headers and a date field, I assume this will be unique enough? Just below your also adding a mach.random in case time isn\u0027t enough.","commit_id":"8648e815b99aede3843047f23319c90ff6da00cf"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"3a30662c96b503f094edb27cacae5b15a75d6936","unresolved":true,"context_lines":[{"line_number":19,"context_line":"  if (!("},{"line_number":20,"context_line":"    url.searchParams.has(\u0027Signature\u0027) ||"},{"line_number":21,"context_line":"    url.searchParams.has(\u0027X-Amz-Signature\u0027) ||"},{"line_number":22,"context_line":"    \u0027Authorization\u0027 in headers"},{"line_number":23,"context_line":"  )) {"},{"line_number":24,"context_line":"    // give each Swift request a unique query string to avoid ever fetching from cache"},{"line_number":25,"context_line":"    params[\u0027cors-test-time\u0027] \u003d Date.now().toString()"}],"source_content_type":"text/javascript","patch_set":21,"id":"b57a6254_2a3d5a8f","line":22,"in_reply_to":"1770d5be_84afa460","updated":"2021-02-26 19:25:03.000000000","message":"Yup, this was some cache-busting that Alistair proposed; I wanted to make sure the extra query params didn\u0027t make s3api freak out. I think it would, but don\u0027t remember actually testing -- maybe ALLOWED_SUB_RESOURCES in s3request.py would save us?\n\nSo the signature-in-Authorization-header requests may not cache-bust properly. I never had too much trouble with browser caches, though. *shrug*","commit_id":"8648e815b99aede3843047f23319c90ff6da00cf"}],"test/cors/main.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"a28ac27e196f26e33a0459ff66436e608383f830","unresolved":true,"context_lines":[{"line_number":44,"context_line":"    \u0027S3_KEY\u0027: \u0027testing\u0027,"},{"line_number":45,"context_line":"}"},{"line_number":46,"context_line":"ENV \u003d {key: os.environ.get(key, default)"},{"line_number":47,"context_line":"       for key, default in DEFAULT_ENV.items()}"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"TEST_TIMEOUT \u003d 120.0  # seconds"},{"line_number":50,"context_line":"STEPS \u003d 500"}],"source_content_type":"text/x-python","patch_set":19,"id":"3bb2d63e_bb4cf41a","line":47,"updated":"2021-02-24 16:50:33.000000000","message":"all this configuration happens in the environment I guess; but I haven\u0027t been noticing it since I have ST_* already set - maybe it would make more sense to add a section to /etc/swift/test.conf","commit_id":"5e3a436ef357eaab76a3f62178d9fdff6f6eb008"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"2a34228a5b4b4273b2054f78c3a12533ea437600","unresolved":true,"context_lines":[{"line_number":44,"context_line":"    \u0027S3_KEY\u0027: \u0027testing\u0027,"},{"line_number":45,"context_line":"}"},{"line_number":46,"context_line":"ENV \u003d {key: os.environ.get(key, default)"},{"line_number":47,"context_line":"       for key, default in DEFAULT_ENV.items()}"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"TEST_TIMEOUT \u003d 120.0  # seconds"},{"line_number":50,"context_line":"STEPS \u003d 500"}],"source_content_type":"text/x-python","patch_set":19,"id":"6e01c1a5_32bd2fbf","line":47,"in_reply_to":"3bb2d63e_bb4cf41a","updated":"2021-02-24 19:36:12.000000000","message":"Not a bad idea. Could also make it easier for me to use our DSVM jobs as a template for running these against both tempauth and keystone.","commit_id":"5e3a436ef357eaab76a3f62178d9fdff6f6eb008"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"8779a0409106947aeaa7d43468f38578a814854b","unresolved":true,"context_lines":[{"line_number":39,"context_line":"    \u0027OS_USERNAME\u0027: os.environ.get(\u0027ST_USER\u0027, \u0027test:tester\u0027),"},{"line_number":40,"context_line":"    \u0027OS_PASSWORD\u0027: os.environ.get(\u0027ST_KEY\u0027, \u0027testing\u0027),"},{"line_number":41,"context_line":"    \u0027OS_STORAGE_URL\u0027: None,"},{"line_number":42,"context_line":"    \u0027S3_ENDPOINT\u0027: \u0027http://localhost:8080\u0027,"},{"line_number":43,"context_line":"    \u0027S3_USER\u0027: \u0027test:tester\u0027,"},{"line_number":44,"context_line":"    \u0027S3_KEY\u0027: \u0027testing\u0027,"},{"line_number":45,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":21,"id":"e35889f1_8baf7fc6","line":42,"updated":"2021-03-01 15:31:51.000000000","message":"could this default be based of OS_STORAGE_URL if that is set?","commit_id":"8648e815b99aede3843047f23319c90ff6da00cf"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"24608733e345ecf5090d2030fe87f0aa31838962","unresolved":true,"context_lines":[{"line_number":41,"context_line":"    \u0027OS_STORAGE_URL\u0027: None,"},{"line_number":42,"context_line":"    \u0027S3_ENDPOINT\u0027: \u0027http://localhost:8080\u0027,"},{"line_number":43,"context_line":"    \u0027S3_USER\u0027: \u0027test:tester\u0027,"},{"line_number":44,"context_line":"    \u0027S3_KEY\u0027: \u0027testing\u0027,"},{"line_number":45,"context_line":"}"},{"line_number":46,"context_line":"ENV \u003d {key: os.environ.get(key, default)"},{"line_number":47,"context_line":"       for key, default in DEFAULT_ENV.items()}"}],"source_content_type":"text/x-python","patch_set":21,"id":"4be4650a_f84f70d4","line":44,"updated":"2021-02-26 05:12:33.000000000","message":"Rather then hardcoding here should these be:\n\n  os.environ.get(\u0027ST_USER\u0027, \u0027test:tester\u0027)\n  os.environ.get(\u0027ST_KEY\u0027, \u0027testing\u0027)\n\nAs you seem to add support for having different Swift auth users via the env.","commit_id":"8648e815b99aede3843047f23319c90ff6da00cf"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"3a30662c96b503f094edb27cacae5b15a75d6936","unresolved":true,"context_lines":[{"line_number":41,"context_line":"    \u0027OS_STORAGE_URL\u0027: None,"},{"line_number":42,"context_line":"    \u0027S3_ENDPOINT\u0027: \u0027http://localhost:8080\u0027,"},{"line_number":43,"context_line":"    \u0027S3_USER\u0027: \u0027test:tester\u0027,"},{"line_number":44,"context_line":"    \u0027S3_KEY\u0027: \u0027testing\u0027,"},{"line_number":45,"context_line":"}"},{"line_number":46,"context_line":"ENV \u003d {key: os.environ.get(key, default)"},{"line_number":47,"context_line":"       for key, default in DEFAULT_ENV.items()}"}],"source_content_type":"text/x-python","patch_set":21,"id":"574e6a41_cdbfc984","line":44,"in_reply_to":"4be4650a_f84f70d4","updated":"2021-02-26 19:25:03.000000000","message":"I was thinking ahead to the Keystone case (even though I still haven\u0027t tried it) -- there, the Keystone username rarely matches the s3/ec2 credential\u0027s access key id.","commit_id":"8648e815b99aede3843047f23319c90ff6da00cf"}],"test/cors/test-s3-obj.js":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"2a34228a5b4b4273b2054f78c3a12533ea437600","unresolved":true,"context_lines":[{"line_number":61,"context_line":"    // Don\u0027t *actually* send it"},{"line_number":62,"context_line":"    s3req.removeListener(\u0027send\u0027, AWS.EventListeners.Core.SEND)"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    // Instead, copy method, path, headers over to the test-harness request"},{"line_number":65,"context_line":"    s3req.addListener(\u0027send\u0027, function () {"},{"line_number":66,"context_line":"      const endpoint \u003d s3req.httpRequest.endpoint"},{"line_number":67,"context_line":"      const signedReq \u003d s3req.httpRequest"}],"source_content_type":"text/javascript","patch_set":19,"id":"030ce84b_8d36dd6b","line":64,"range":{"start_line":64,"start_character":51,"end_line":64,"end_character":54},"updated":"2021-02-24 19:36:12.000000000","message":"s/the/a new/\n\nIIRC, this comment made more sense as it currently is in an earlier iteration -- it used to be that each test was a tuple of [label, request-setup-func, resp-check-func]. Now it\u0027s [label, promise] so we can arbitrarily chain requests and more easily make a group of tests conditional on some other thing (like SLO, DLO, and symlink tests all looking at a single /info response).\n\nThe assertions I\u0027m most interested in are all quite low-level, though, so I think it still makes sense to use raw XMLHttpRequests and inspect the results ourselves (rather than let aws-sdk-js hand us back some S3Response object).","commit_id":"5e3a436ef357eaab76a3f62178d9fdff6f6eb008"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"a28ac27e196f26e33a0459ff66436e608383f830","unresolved":true,"context_lines":[{"line_number":81,"context_line":"      ))"},{"line_number":82,"context_line":"    })"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    s3req.send()"},{"line_number":85,"context_line":"  })"},{"line_number":86,"context_line":"}"},{"line_number":87,"context_line":""}],"source_content_type":"text/javascript","patch_set":19,"id":"4cd1993e_df6e279e","line":84,"updated":"2021-02-24 16:50:33.000000000","message":"I\u0027m not sure I understand the flow here.\n\nWe return a promise - that will (when resolved?) hijack the send listener and call a closure over the resolve inline - in which we pass it another MakeRequest promise...","commit_id":"5e3a436ef357eaab76a3f62178d9fdff6f6eb008"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"2a34228a5b4b4273b2054f78c3a12533ea437600","unresolved":true,"context_lines":[{"line_number":81,"context_line":"      ))"},{"line_number":82,"context_line":"    })"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    s3req.send()"},{"line_number":85,"context_line":"  })"},{"line_number":86,"context_line":"}"},{"line_number":87,"context_line":""}],"source_content_type":"text/javascript","patch_set":19,"id":"c5d785fe_016c2c84","line":84,"in_reply_to":"4cd1993e_df6e279e","updated":"2021-02-24 19:36:12.000000000","message":"Yep, so we make a new promise (which can start executing any time between when it\u0027s created and when something tries to resolve it). Inside that promise, we make a new S3 request, prevent it from actually kicking off the request itself, add a new send listener, and then \"send\" it. Instead of aws-sdk-js sending the request, we get all the signing details and headers, filter a few out (I think they caused some spurious warnings in my browser console? or worse, prevented presigned GETs from being treated as a \"simple\" request) and use the same request-response-promise stuff all the other tests use.\n\nThe new promise eventually resolves to the result of the MakeRequest that has all the auth details.","commit_id":"5e3a436ef357eaab76a3f62178d9fdff6f6eb008"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"a28ac27e196f26e33a0459ff66436e608383f830","unresolved":true,"context_lines":[{"line_number":100,"context_line":"        Key: \u0027obj\u0027"},{"line_number":101,"context_line":"      }))"},{"line_number":102,"context_line":"        .then(CorsBlocked)],"},{"line_number":103,"context_line":"    [\u0027presigned GET, object exists\u0027,"},{"line_number":104,"context_line":"      () \u003d\u003e MakeRequest(\u0027GET\u0027, service.getSignedUrl(\u0027getObject\u0027, {"},{"line_number":105,"context_line":"        Bucket: \u0027private-with-cors\u0027,"},{"line_number":106,"context_line":"        Key: \u0027obj\u0027"}],"source_content_type":"text/javascript","patch_set":19,"id":"30e584e9_29893307","line":103,"updated":"2021-02-24 16:50:33.000000000","message":"this one fails with s3_acl \u003d true","commit_id":"5e3a436ef357eaab76a3f62178d9fdff6f6eb008"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"2a34228a5b4b4273b2054f78c3a12533ea437600","unresolved":true,"context_lines":[{"line_number":100,"context_line":"        Key: \u0027obj\u0027"},{"line_number":101,"context_line":"      }))"},{"line_number":102,"context_line":"        .then(CorsBlocked)],"},{"line_number":103,"context_line":"    [\u0027presigned GET, object exists\u0027,"},{"line_number":104,"context_line":"      () \u003d\u003e MakeRequest(\u0027GET\u0027, service.getSignedUrl(\u0027getObject\u0027, {"},{"line_number":105,"context_line":"        Bucket: \u0027private-with-cors\u0027,"},{"line_number":106,"context_line":"        Key: \u0027obj\u0027"}],"source_content_type":"text/javascript","patch_set":19,"id":"bab3927e_3e3b08e7","line":103,"in_reply_to":"30e584e9_29893307","updated":"2021-02-24 19:36:12.000000000","message":"Yup :-(\n\nIt wasn\u0027t worth it to me to dig too deep into how to get that config passing. There\u0027s a whole lot of extra translation going on when s3_acl is enabled.","commit_id":"5e3a436ef357eaab76a3f62178d9fdff6f6eb008"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"a28ac27e196f26e33a0459ff66436e608383f830","unresolved":true,"context_lines":[{"line_number":114,"context_line":"          Etag: \u0027\"0f343b0931126a20f133d67c2b018a3b\"\u0027"},{"line_number":115,"context_line":"        }))"},{"line_number":116,"context_line":"        .then(BodyHasLength(1024))],"},{"line_number":117,"context_line":"    [\u0027presigned HEAD, object exists\u0027,"},{"line_number":118,"context_line":"      () \u003d\u003e MakeRequest(\u0027HEAD\u0027, service.getSignedUrl(\u0027headObject\u0027, {"},{"line_number":119,"context_line":"        Bucket: \u0027private-with-cors\u0027,"},{"line_number":120,"context_line":"        Key: \u0027obj\u0027"}],"source_content_type":"text/javascript","patch_set":19,"id":"0da287f2_c41dcc1f","line":117,"updated":"2021-02-24 16:50:33.000000000","message":"this one fails with s3_acl \u003d true","commit_id":"5e3a436ef357eaab76a3f62178d9fdff6f6eb008"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"a28ac27e196f26e33a0459ff66436e608383f830","unresolved":true,"context_lines":[{"line_number":134,"context_line":"        Key: \u0027obj\u0027"},{"line_number":135,"context_line":"      })"},{"line_number":136,"context_line":"        .then(CorsBlocked)],  // Pre-flight failed"},{"line_number":137,"context_line":"    [\u0027PUT\u0027,"},{"line_number":138,"context_line":"      MakeS3Request(service, \u0027putObject\u0027, {"},{"line_number":139,"context_line":"        Bucket: \u0027private-with-cors\u0027,"},{"line_number":140,"context_line":"        Key: \u0027put-target\u0027,"}],"source_content_type":"text/javascript","patch_set":19,"id":"120763fb_68973f0c","line":137,"updated":"2021-02-24 16:50:33.000000000","message":"this one stays at \"queued\" - running the test by itself shows the pre-flight OPTIONS request is failing with a 400","commit_id":"5e3a436ef357eaab76a3f62178d9fdff6f6eb008"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"a28ac27e196f26e33a0459ff66436e608383f830","unresolved":true,"context_lines":[{"line_number":135,"context_line":"      })"},{"line_number":136,"context_line":"        .then(CorsBlocked)],  // Pre-flight failed"},{"line_number":137,"context_line":"    [\u0027PUT\u0027,"},{"line_number":138,"context_line":"      MakeS3Request(service, \u0027putObject\u0027, {"},{"line_number":139,"context_line":"        Bucket: \u0027private-with-cors\u0027,"},{"line_number":140,"context_line":"        Key: \u0027put-target\u0027,"},{"line_number":141,"context_line":"        Body: \u0027test\u0027"}],"source_content_type":"text/javascript","patch_set":19,"id":"9a88cd34_71c137f7","line":138,"updated":"2021-02-24 16:50:33.000000000","message":"I think a lot of the problem was that this isn\u0027t a lambda","commit_id":"5e3a436ef357eaab76a3f62178d9fdff6f6eb008"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"2a34228a5b4b4273b2054f78c3a12533ea437600","unresolved":true,"context_lines":[{"line_number":135,"context_line":"      })"},{"line_number":136,"context_line":"        .then(CorsBlocked)],  // Pre-flight failed"},{"line_number":137,"context_line":"    [\u0027PUT\u0027,"},{"line_number":138,"context_line":"      MakeS3Request(service, \u0027putObject\u0027, {"},{"line_number":139,"context_line":"        Bucket: \u0027private-with-cors\u0027,"},{"line_number":140,"context_line":"        Key: \u0027put-target\u0027,"},{"line_number":141,"context_line":"        Body: \u0027test\u0027"}],"source_content_type":"text/javascript","patch_set":19,"id":"0327b320_1d75c921","line":138,"in_reply_to":"9a88cd34_71c137f7","updated":"2021-02-24 19:36:12.000000000","message":"100% this. Patchset 20 fixes it.","commit_id":"5e3a436ef357eaab76a3f62178d9fdff6f6eb008"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"a28ac27e196f26e33a0459ff66436e608383f830","unresolved":true,"context_lines":[{"line_number":155,"context_line":"        Range: \u0027bytes\u003d100-199\u0027"},{"line_number":156,"context_line":"      })"},{"line_number":157,"context_line":"        .then(CorsBlocked)],  // Pre-flight failed"},{"line_number":158,"context_line":"  ]"},{"line_number":159,"context_line":"}"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"runTests(\u0027s3 obj (v2)\u0027, makeTests({"}],"source_content_type":"text/javascript","patch_set":19,"id":"5b90ef78_2c91d0e8","line":158,"updated":"2021-02-24 16:50:33.000000000","message":"these last two tests don\u0027t show up for me - maybe something with the queued/stalled PUT test?","commit_id":"5e3a436ef357eaab76a3f62178d9fdff6f6eb008"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"2a34228a5b4b4273b2054f78c3a12533ea437600","unresolved":true,"context_lines":[{"line_number":155,"context_line":"        Range: \u0027bytes\u003d100-199\u0027"},{"line_number":156,"context_line":"      })"},{"line_number":157,"context_line":"        .then(CorsBlocked)],  // Pre-flight failed"},{"line_number":158,"context_line":"  ]"},{"line_number":159,"context_line":"}"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"runTests(\u0027s3 obj (v2)\u0027, makeTests({"}],"source_content_type":"text/javascript","patch_set":19,"id":"2546b2b9_5272eafe","line":158,"in_reply_to":"5b90ef78_2c91d0e8","updated":"2021-02-24 19:36:12.000000000","message":"Yeah, pretty sure the attempt to call the Promise bombed out the test-queueing loop. Again, patchset 20 should have this fixed.","commit_id":"5e3a436ef357eaab76a3f62178d9fdff6f6eb008"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"a28ac27e196f26e33a0459ff66436e608383f830","unresolved":true,"context_lines":[{"line_number":167,"context_line":"  signatureVersion: \u0027v2\u0027"},{"line_number":168,"context_line":"}))"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"runTests(\u0027s3 obj (v4)\u0027, makeTests({"},{"line_number":171,"context_line":"  endpoint: PARAMS.S3_ENDPOINT || \u0027http://localhost:8080\u0027,"},{"line_number":172,"context_line":"  region: PARAMS.S3_REGION || \u0027us-east-1\u0027,"},{"line_number":173,"context_line":"  accessKeyId: PARAMS.S3_USER || \u0027test:tester\u0027,"}],"source_content_type":"text/javascript","patch_set":19,"id":"e1769bf7_faf110ee","line":170,"updated":"2021-02-24 16:50:33.000000000","message":"I only get the \"s3 obj (v4)\" tests if I comment out the above runTests block","commit_id":"5e3a436ef357eaab76a3f62178d9fdff6f6eb008"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"2a34228a5b4b4273b2054f78c3a12533ea437600","unresolved":true,"context_lines":[{"line_number":167,"context_line":"  signatureVersion: \u0027v2\u0027"},{"line_number":168,"context_line":"}))"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"runTests(\u0027s3 obj (v4)\u0027, makeTests({"},{"line_number":171,"context_line":"  endpoint: PARAMS.S3_ENDPOINT || \u0027http://localhost:8080\u0027,"},{"line_number":172,"context_line":"  region: PARAMS.S3_REGION || \u0027us-east-1\u0027,"},{"line_number":173,"context_line":"  accessKeyId: PARAMS.S3_USER || \u0027test:tester\u0027,"}],"source_content_type":"text/javascript","patch_set":19,"id":"648af6f5_04dab8f4","line":170,"in_reply_to":"e1769bf7_faf110ee","updated":"2021-02-24 19:36:12.000000000","message":"Problems enqueuing one test prevent subsequent tests from executing, unfortunately.","commit_id":"5e3a436ef357eaab76a3f62178d9fdff6f6eb008"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"8779a0409106947aeaa7d43468f38578a814854b","unresolved":true,"context_lines":[{"line_number":161,"context_line":"runTests(\u0027s3 obj (v2)\u0027, makeTests({"},{"line_number":162,"context_line":"  endpoint: PARAMS.S3_ENDPOINT || \u0027http://localhost:8080\u0027,"},{"line_number":163,"context_line":"  region: PARAMS.S3_REGION || \u0027us-east-1\u0027,"},{"line_number":164,"context_line":"  accessKeyId: PARAMS.S3_USER || \u0027test:tester\u0027,"},{"line_number":165,"context_line":"  secretAccessKey: PARAMS.S3_KEY || \u0027testing\u0027,"},{"line_number":166,"context_line":"  s3ForcePathStyle: true,"},{"line_number":167,"context_line":"  signatureVersion: \u0027v2\u0027"},{"line_number":168,"context_line":"}))"}],"source_content_type":"text/javascript","patch_set":21,"id":"f499747b_1347da0a","line":165,"range":{"start_line":164,"start_character":2,"end_line":165,"end_character":45},"updated":"2021-03-01 15:31:51.000000000","message":"do these need to be defaulted again (cf main.py)?","commit_id":"8648e815b99aede3843047f23319c90ff6da00cf"}],"test/unit/common/middleware/s3api/test_obj.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"1d87787039d42b1095b802e0ff08fc3ae2120283","unresolved":true,"context_lines":[{"line_number":1727,"context_line":"    def test_cors_headers(self):"},{"line_number":1728,"context_line":"        cors_headers \u003d {"},{"line_number":1729,"context_line":"            \u0027Access-Control-Allow-Origin\u0027: \u0027*\u0027,"},{"line_number":1730,"context_line":"            \u0027Access-Control-Allow-Methods\u0027: (\u0027GET, PUT, POST, COPY, \u0027"},{"line_number":1731,"context_line":"                                             \u0027DELETE, PUT, OPTIONS\u0027),"},{"line_number":1732,"context_line":"            \u0027Access-Control-Expose-Headers\u0027: \u0027x-object-meta-test, etag\u0027,"},{"line_number":1733,"context_line":"        }"},{"line_number":1734,"context_line":"        self.swift.register("}],"source_content_type":"text/x-python","patch_set":20,"id":"f23f4d4c_8cac901d","line":1731,"range":{"start_line":1730,"start_character":12,"end_line":1731,"end_character":69},"updated":"2021-02-24 16:52:45.000000000","message":"AFAICT this header is only returned for an OPTIONS request, but here we\u0027re testing a GET?","commit_id":"84827c3448f69d15dfc61ba70effa4a8bb2583be"}]}
