)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":597,"name":"Pete Zaitcev","email":"zaitcev@kotori.zaitcev.us","username":"zaitcev"},"change_message_id":"fb486ebd9f7c71fc8ca138f0bbc300d120ef3cf1","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Add functional test for access control (PUT) with Keystone"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch adds the following cases (PUT):"},{"line_number":10,"context_line":"http://paste.openstack.org/show/383453/"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"These cases are created using Orthogonal array testing technique with"},{"line_number":13,"context_line":"the following procedure in order to gurantee the coverage."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"da20952f_84ab1ad6","line":10,"updated":"2015-08-28 00:48:27.000000000","message":"I\u0027m a little concerned about referring paste.openstack.org documents in commit messages. If the paste contents is important, we do not want to refer to a paste that expires. If they are unimportant, remove the reference.","commit_id":"62472f13ac9b8d5c3baddb60ffd4c824d31dc26a"},{"author":{"_account_id":12193,"name":"Hisashi Osanai","email":"osanai.hisashi@jp.fujitsu.com","username":"ho"},"change_message_id":"fa0f82535976c204c9098b2de659591b220486bb","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Add functional test for access control (PUT) with Keystone"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch adds the following cases (PUT):"},{"line_number":10,"context_line":"http://paste.openstack.org/show/383453/"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"These cases are created using Orthogonal array testing technique with"},{"line_number":13,"context_line":"the following procedure in order to gurantee the coverage."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"da20952f_8cded33d","line":10,"in_reply_to":"da20952f_84ab1ad6","updated":"2015-08-28 08:13:51.000000000","message":"I\u0027m not 100% sure but info in paste.openstack.org were not removed and Alistair checked it at last Hack-a-Thon and said it seems to be not removed.","commit_id":"62472f13ac9b8d5c3baddb60ffd4c824d31dc26a"},{"author":{"_account_id":597,"name":"Pete Zaitcev","email":"zaitcev@kotori.zaitcev.us","username":"zaitcev"},"change_message_id":"fb486ebd9f7c71fc8ca138f0bbc300d120ef3cf1","unresolved":false,"context_lines":[{"line_number":23,"context_line":"* split to several scenarios from the summarized cases using http method"},{"line_number":24,"context_line":"  such as PUT, GET and so on for easier review"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"user information: http://paste.openstack.org/show/405097/"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"Change-Id: Iea8141ac74ad949a3ae7fa47fda3135d0f2612f6"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"da20952f_24632ede","line":26,"updated":"2015-08-28 00:48:27.000000000","message":"This is, fortunately, a duplicate of comment in the code, so this element may refer to that. For example, \"a table of user is in comment in test_xaccess_control.py\".","commit_id":"62472f13ac9b8d5c3baddb60ffd4c824d31dc26a"},{"author":{"_account_id":12193,"name":"Hisashi Osanai","email":"osanai.hisashi@jp.fujitsu.com","username":"ho"},"change_message_id":"fa0f82535976c204c9098b2de659591b220486bb","unresolved":false,"context_lines":[{"line_number":23,"context_line":"* split to several scenarios from the summarized cases using http method"},{"line_number":24,"context_line":"  such as PUT, GET and so on for easier review"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"user information: http://paste.openstack.org/show/405097/"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"Change-Id: Iea8141ac74ad949a3ae7fa47fda3135d0f2612f6"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"da20952f_e330c2a0","line":26,"in_reply_to":"da20952f_24632ede","updated":"2015-08-28 08:13:51.000000000","message":"I will remove this.","commit_id":"62472f13ac9b8d5c3baddb60ffd4c824d31dc26a"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"0aba4f71bd28e05c13cee53fa72f4d5657b68ef0","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Add functional test for access control (PUT) with Keystone"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch adds the following cases (PUT):"},{"line_number":10,"context_line":"http://paste.openstack.org/show/430612/"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"These cases are created using Orthogonal array testing technique with"},{"line_number":13,"context_line":"the following procedure in order to gurantee the coverage."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"da20952f_cf956633","line":10,"updated":"2015-09-04 13:23:26.000000000","message":"I think Pete commented on this before - I am also not keen on links to paste\u0027s being in the commit message.\n\nIn this case I think there is enough info in the patch itself about the scenarios covered, so a brief description here would suffice, e.g.:\n\n\"This patch adds test cases for PUT requests to accounts, containers and objects using various combinations of users/projects, roles and/or service tokens.\"\n\nOr, if the info in the paste is really required, then put in into the module docstring.","commit_id":"45807d1357d4ffcea2b74e270d900b3956814910"},{"author":{"_account_id":12193,"name":"Hisashi Osanai","email":"osanai.hisashi@jp.fujitsu.com","username":"ho"},"change_message_id":"17c0eff1b401077dfcde23d3d54a897a15b073d9","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Add functional test for access control (PUT) with Keystone"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch adds the following cases (PUT):"},{"line_number":10,"context_line":"http://paste.openstack.org/show/430612/"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"These cases are created using Orthogonal array testing technique with"},{"line_number":13,"context_line":"the following procedure in order to gurantee the coverage."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"da20952f_6ef63392","line":10,"in_reply_to":"da20952f_cf956633","updated":"2015-09-08 11:53:56.000000000","message":"Thanks for this advice. I use your sentence.","commit_id":"45807d1357d4ffcea2b74e270d900b3956814910"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"0aba4f71bd28e05c13cee53fa72f4d5657b68ef0","unresolved":false,"context_lines":[{"line_number":10,"context_line":"http://paste.openstack.org/show/430612/"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"These cases are created using Orthogonal array testing technique with"},{"line_number":13,"context_line":"the following procedure in order to gurantee the coverage."},{"line_number":14,"context_line":"* dump all parameters and thier values for the access control test"},{"line_number":15,"context_line":"  http://paste.openstack.org/show/430613/"},{"line_number":16,"context_line":"* create cases, combinations above parameters and values, then map to"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"da20952f_0f727e11","line":13,"updated":"2015-09-04 13:23:26.000000000","message":"Perhaps move this information to a comment on the gerrit review to avoid having the paste url\u0027s in commit message, but still have the information recorded somewhere.\n\nOr put it into new spec and we can merge that into the specs repo.","commit_id":"45807d1357d4ffcea2b74e270d900b3956814910"},{"author":{"_account_id":12193,"name":"Hisashi Osanai","email":"osanai.hisashi@jp.fujitsu.com","username":"ho"},"change_message_id":"17c0eff1b401077dfcde23d3d54a897a15b073d9","unresolved":false,"context_lines":[{"line_number":10,"context_line":"http://paste.openstack.org/show/430612/"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"These cases are created using Orthogonal array testing technique with"},{"line_number":13,"context_line":"the following procedure in order to gurantee the coverage."},{"line_number":14,"context_line":"* dump all parameters and thier values for the access control test"},{"line_number":15,"context_line":"  http://paste.openstack.org/show/430613/"},{"line_number":16,"context_line":"* create cases, combinations above parameters and values, then map to"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"da20952f_4e448fb6","line":13,"in_reply_to":"da20952f_0f727e11","updated":"2015-09-08 11:53:56.000000000","message":"I put them on the comment","commit_id":"45807d1357d4ffcea2b74e270d900b3956814910"}],"test/functional/__init__.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"0aba4f71bd28e05c13cee53fa72f4d5657b68ef0","unresolved":false,"context_lines":[{"line_number":656,"context_line":"                swift_test_key[5] \u003d config[\u0027password6\u0027]"},{"line_number":657,"context_line":"                swift_test_tenant[5] \u003d config[\u0027account6\u0027]"},{"line_number":658,"context_line":"            except KeyError:"},{"line_number":659,"context_line":"                pass  # no tests which need reseller_admin role can be run"},{"line_number":660,"context_line":""},{"line_number":661,"context_line":"            for _ in range(3):"},{"line_number":662,"context_line":"                swift_test_perm[_] \u003d swift_test_user[_]"}],"source_content_type":"text/x-python","patch_set":13,"id":"da20952f_6526bacf","line":659,"updated":"2015-09-04 13:23:26.000000000","message":"I don\u0027t think this is necessary - the new tests skip if not auth version v3 so swift_test_user[5] etc. will never be used with tempauth.","commit_id":"45807d1357d4ffcea2b74e270d900b3956814910"},{"author":{"_account_id":12193,"name":"Hisashi Osanai","email":"osanai.hisashi@jp.fujitsu.com","username":"ho"},"change_message_id":"17c0eff1b401077dfcde23d3d54a897a15b073d9","unresolved":false,"context_lines":[{"line_number":656,"context_line":"                swift_test_key[5] \u003d config[\u0027password6\u0027]"},{"line_number":657,"context_line":"                swift_test_tenant[5] \u003d config[\u0027account6\u0027]"},{"line_number":658,"context_line":"            except KeyError:"},{"line_number":659,"context_line":"                pass  # no tests which need reseller_admin role can be run"},{"line_number":660,"context_line":""},{"line_number":661,"context_line":"            for _ in range(3):"},{"line_number":662,"context_line":"                swift_test_perm[_] \u003d swift_test_user[_]"}],"source_content_type":"text/x-python","patch_set":13,"id":"da20952f_d385accf","line":659,"in_reply_to":"da20952f_6526bacf","updated":"2015-09-08 11:53:56.000000000","message":"I removed this.","commit_id":"45807d1357d4ffcea2b74e270d900b3956814910"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"0aba4f71bd28e05c13cee53fa72f4d5657b68ef0","unresolved":false,"context_lines":[{"line_number":746,"context_line":"                                         swift_test_tenant[5]])"},{"line_number":747,"context_line":"    if not skip and skip_if_no_reseller_admin:"},{"line_number":748,"context_line":"        print("},{"line_number":749,"context_line":"            \u0027SKIPPING FUNCTIONAL TESTS DUE TO NO CONFIG FOR RESELER ADMIN\u0027,"},{"line_number":750,"context_line":"            file\u003dsys.stderr)"},{"line_number":751,"context_line":""},{"line_number":752,"context_line":"    get_cluster_info()"}],"source_content_type":"text/x-python","patch_set":13,"id":"da20952f_e874df9c","line":749,"updated":"2015-09-04 13:23:26.000000000","message":"s/RESELER/RESELLER/","commit_id":"45807d1357d4ffcea2b74e270d900b3956814910"},{"author":{"_account_id":12193,"name":"Hisashi Osanai","email":"osanai.hisashi@jp.fujitsu.com","username":"ho"},"change_message_id":"17c0eff1b401077dfcde23d3d54a897a15b073d9","unresolved":false,"context_lines":[{"line_number":746,"context_line":"                                         swift_test_tenant[5]])"},{"line_number":747,"context_line":"    if not skip and skip_if_no_reseller_admin:"},{"line_number":748,"context_line":"        print("},{"line_number":749,"context_line":"            \u0027SKIPPING FUNCTIONAL TESTS DUE TO NO CONFIG FOR RESELER ADMIN\u0027,"},{"line_number":750,"context_line":"            file\u003dsys.stderr)"},{"line_number":751,"context_line":""},{"line_number":752,"context_line":"    get_cluster_info()"}],"source_content_type":"text/x-python","patch_set":13,"id":"da20952f_d35ccc7f","line":749,"in_reply_to":"da20952f_e874df9c","updated":"2015-09-08 11:53:56.000000000","message":"Done","commit_id":"45807d1357d4ffcea2b74e270d900b3956814910"}],"test/functional/test_access_control.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"8b30ba5b0225cdf836a82c257aeebd5650f2cae8","unresolved":false,"context_lines":[{"line_number":42,"context_line":"#                         name will be created automatically"},{"line_number":43,"context_line":"# object_name           : Object name. If \u0027UUID\u0027 is specified, a container"},{"line_number":44,"context_line":"#                         name will be created automatically"},{"line_number":45,"context_line":"# prep_container_header : a header which set on the container"},{"line_number":46,"context_line":"# reseller_prefix       : Reseller prefix.  Either of AUTH, SERVICE will be"},{"line_number":47,"context_line":"#                         used"},{"line_number":48,"context_line":"# target_user_name      : an user name which is used for getting the project id"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a4dcd0f_a2c8e5a8","line":45,"updated":"2015-08-07 15:01:52.000000000","message":"-\u003e headers which will be set on the container","commit_id":"f491f4df47aa29d5e69693d30961784f3f5f3237"},{"author":{"_account_id":12193,"name":"Hisashi Osanai","email":"osanai.hisashi@jp.fujitsu.com","username":"ho"},"change_message_id":"1bcd7279dbab96a0b44be7ed3e5bfeefc59002d7","unresolved":false,"context_lines":[{"line_number":42,"context_line":"#                         name will be created automatically"},{"line_number":43,"context_line":"# object_name           : Object name. If \u0027UUID\u0027 is specified, a container"},{"line_number":44,"context_line":"#                         name will be created automatically"},{"line_number":45,"context_line":"# prep_container_header : a header which set on the container"},{"line_number":46,"context_line":"# reseller_prefix       : Reseller prefix.  Either of AUTH, SERVICE will be"},{"line_number":47,"context_line":"#                         used"},{"line_number":48,"context_line":"# target_user_name      : an user name which is used for getting the project id"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a4dcd0f_e047a11b","line":45,"in_reply_to":"1a4dcd0f_a2c8e5a8","updated":"2015-08-09 22:53:32.000000000","message":"I will fix it.","commit_id":"f491f4df47aa29d5e69693d30961784f3f5f3237"},{"author":{"_account_id":12193,"name":"Hisashi Osanai","email":"osanai.hisashi@jp.fujitsu.com","username":"ho"},"change_message_id":"8dd90381f03aa9f6ea29d7373ce30975082d73b7","unresolved":false,"context_lines":[{"line_number":42,"context_line":"#                         name will be created automatically"},{"line_number":43,"context_line":"# object_name           : Object name. If \u0027UUID\u0027 is specified, a container"},{"line_number":44,"context_line":"#                         name will be created automatically"},{"line_number":45,"context_line":"# prep_container_header : a header which set on the container"},{"line_number":46,"context_line":"# reseller_prefix       : Reseller prefix.  Either of AUTH, SERVICE will be"},{"line_number":47,"context_line":"#                         used"},{"line_number":48,"context_line":"# target_user_name      : an user name which is used for getting the project id"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a4dcd0f_14adca83","line":45,"in_reply_to":"1a4dcd0f_e047a11b","updated":"2015-08-11 18:49:37.000000000","message":"Done","commit_id":"f491f4df47aa29d5e69693d30961784f3f5f3237"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"8b30ba5b0225cdf836a82c257aeebd5650f2cae8","unresolved":false,"context_lines":[{"line_number":44,"context_line":"#                         name will be created automatically"},{"line_number":45,"context_line":"# prep_container_header : a header which set on the container"},{"line_number":46,"context_line":"# reseller_prefix       : Reseller prefix.  Either of AUTH, SERVICE will be"},{"line_number":47,"context_line":"#                         used"},{"line_number":48,"context_line":"# target_user_name      : an user name which is used for getting the project id"},{"line_number":49,"context_line":"#                         of the target"},{"line_number":50,"context_line":"# auth_user_name        : an user name which is used for getting a token for"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a4dcd0f_a20a2577","line":47,"updated":"2015-08-07 15:01:52.000000000","message":"I find the comment hear confusing - AUTH is a config option of the cluster being tested, the test cannot choose to use \"AUTH_\". SERVICE is also configured in test.conf as service_prefix. How about:\n\n  Selects the reseller prefix that will be used for request url. Can be USER or SERVICE to select the user account prefix or the service prefix respectively.","commit_id":"f491f4df47aa29d5e69693d30961784f3f5f3237"},{"author":{"_account_id":12193,"name":"Hisashi Osanai","email":"osanai.hisashi@jp.fujitsu.com","username":"ho"},"change_message_id":"8dd90381f03aa9f6ea29d7373ce30975082d73b7","unresolved":false,"context_lines":[{"line_number":44,"context_line":"#                         name will be created automatically"},{"line_number":45,"context_line":"# prep_container_header : a header which set on the container"},{"line_number":46,"context_line":"# reseller_prefix       : Reseller prefix.  Either of AUTH, SERVICE will be"},{"line_number":47,"context_line":"#                         used"},{"line_number":48,"context_line":"# target_user_name      : an user name which is used for getting the project id"},{"line_number":49,"context_line":"#                         of the target"},{"line_number":50,"context_line":"# auth_user_name        : an user name which is used for getting a token for"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a4dcd0f_f43dbe2b","line":47,"in_reply_to":"1a4dcd0f_806b3d85","updated":"2015-08-11 18:49:37.000000000","message":"Done","commit_id":"f491f4df47aa29d5e69693d30961784f3f5f3237"},{"author":{"_account_id":12193,"name":"Hisashi Osanai","email":"osanai.hisashi@jp.fujitsu.com","username":"ho"},"change_message_id":"1bcd7279dbab96a0b44be7ed3e5bfeefc59002d7","unresolved":false,"context_lines":[{"line_number":44,"context_line":"#                         name will be created automatically"},{"line_number":45,"context_line":"# prep_container_header : a header which set on the container"},{"line_number":46,"context_line":"# reseller_prefix       : Reseller prefix.  Either of AUTH, SERVICE will be"},{"line_number":47,"context_line":"#                         used"},{"line_number":48,"context_line":"# target_user_name      : an user name which is used for getting the project id"},{"line_number":49,"context_line":"#                         of the target"},{"line_number":50,"context_line":"# auth_user_name        : an user name which is used for getting a token for"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a4dcd0f_806b3d85","line":47,"in_reply_to":"1a4dcd0f_a20a2577","updated":"2015-08-09 22:53:32.000000000","message":"I will fix it.\nReseller prefix that will be used for request url. \nCan be AUTH or SERVICE to select the user account prefix or the service prefix respectively","commit_id":"f491f4df47aa29d5e69693d30961784f3f5f3237"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"8b30ba5b0225cdf836a82c257aeebd5650f2cae8","unresolved":false,"context_lines":[{"line_number":45,"context_line":"# prep_container_header : a header which set on the container"},{"line_number":46,"context_line":"# reseller_prefix       : Reseller prefix.  Either of AUTH, SERVICE will be"},{"line_number":47,"context_line":"#                         used"},{"line_number":48,"context_line":"# target_user_name      : an user name which is used for getting the project id"},{"line_number":49,"context_line":"#                         of the target"},{"line_number":50,"context_line":"# auth_user_name        : an user name which is used for getting a token for"},{"line_number":51,"context_line":"#                         X-Auth_Token"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a4dcd0f_c2d2d1d0","line":48,"updated":"2015-08-07 15:01:52.000000000","message":"nit: s/an user/a user/\n\n(strange English language inconsistency !)","commit_id":"f491f4df47aa29d5e69693d30961784f3f5f3237"},{"author":{"_account_id":12193,"name":"Hisashi Osanai","email":"osanai.hisashi@jp.fujitsu.com","username":"ho"},"change_message_id":"8dd90381f03aa9f6ea29d7373ce30975082d73b7","unresolved":false,"context_lines":[{"line_number":45,"context_line":"# prep_container_header : a header which set on the container"},{"line_number":46,"context_line":"# reseller_prefix       : Reseller prefix.  Either of AUTH, SERVICE will be"},{"line_number":47,"context_line":"#                         used"},{"line_number":48,"context_line":"# target_user_name      : an user name which is used for getting the project id"},{"line_number":49,"context_line":"#                         of the target"},{"line_number":50,"context_line":"# auth_user_name        : an user name which is used for getting a token for"},{"line_number":51,"context_line":"#                         X-Auth_Token"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a4dcd0f_345c867c","line":48,"in_reply_to":"1a4dcd0f_80025db3","updated":"2015-08-11 18:49:37.000000000","message":"Done","commit_id":"f491f4df47aa29d5e69693d30961784f3f5f3237"},{"author":{"_account_id":12193,"name":"Hisashi Osanai","email":"osanai.hisashi@jp.fujitsu.com","username":"ho"},"change_message_id":"1bcd7279dbab96a0b44be7ed3e5bfeefc59002d7","unresolved":false,"context_lines":[{"line_number":45,"context_line":"# prep_container_header : a header which set on the container"},{"line_number":46,"context_line":"# reseller_prefix       : Reseller prefix.  Either of AUTH, SERVICE will be"},{"line_number":47,"context_line":"#                         used"},{"line_number":48,"context_line":"# target_user_name      : an user name which is used for getting the project id"},{"line_number":49,"context_line":"#                         of the target"},{"line_number":50,"context_line":"# auth_user_name        : an user name which is used for getting a token for"},{"line_number":51,"context_line":"#                         X-Auth_Token"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a4dcd0f_80025db3","line":48,"in_reply_to":"1a4dcd0f_c2d2d1d0","updated":"2015-08-09 22:53:32.000000000","message":"I will fix it. (oh, I have mis-understanding it so far...)","commit_id":"f491f4df47aa29d5e69693d30961784f3f5f3237"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"8b30ba5b0225cdf836a82c257aeebd5650f2cae8","unresolved":false,"context_lines":[{"line_number":47,"context_line":"#                         used"},{"line_number":48,"context_line":"# target_user_name      : an user name which is used for getting the project id"},{"line_number":49,"context_line":"#                         of the target"},{"line_number":50,"context_line":"# auth_user_name        : an user name which is used for getting a token for"},{"line_number":51,"context_line":"#                         X-Auth_Token"},{"line_number":52,"context_line":"# service_user_name     : an user name which is used for getting a token for"},{"line_number":53,"context_line":"#                         X-Service-Token"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a4dcd0f_82d929f5","line":50,"updated":"2015-08-07 15:01:52.000000000","message":"same nit","commit_id":"f491f4df47aa29d5e69693d30961784f3f5f3237"},{"author":{"_account_id":12193,"name":"Hisashi Osanai","email":"osanai.hisashi@jp.fujitsu.com","username":"ho"},"change_message_id":"1bcd7279dbab96a0b44be7ed3e5bfeefc59002d7","unresolved":false,"context_lines":[{"line_number":47,"context_line":"#                         used"},{"line_number":48,"context_line":"# target_user_name      : an user name which is used for getting the project id"},{"line_number":49,"context_line":"#                         of the target"},{"line_number":50,"context_line":"# auth_user_name        : an user name which is used for getting a token for"},{"line_number":51,"context_line":"#                         X-Auth_Token"},{"line_number":52,"context_line":"# service_user_name     : an user name which is used for getting a token for"},{"line_number":53,"context_line":"#                         X-Service-Token"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a4dcd0f_a0ff59a9","line":50,"in_reply_to":"1a4dcd0f_82d929f5","updated":"2015-08-09 22:53:32.000000000","message":"I will fix it.","commit_id":"f491f4df47aa29d5e69693d30961784f3f5f3237"},{"author":{"_account_id":12193,"name":"Hisashi Osanai","email":"osanai.hisashi@jp.fujitsu.com","username":"ho"},"change_message_id":"8dd90381f03aa9f6ea29d7373ce30975082d73b7","unresolved":false,"context_lines":[{"line_number":47,"context_line":"#                         used"},{"line_number":48,"context_line":"# target_user_name      : an user name which is used for getting the project id"},{"line_number":49,"context_line":"#                         of the target"},{"line_number":50,"context_line":"# auth_user_name        : an user name which is used for getting a token for"},{"line_number":51,"context_line":"#                         X-Auth_Token"},{"line_number":52,"context_line":"# service_user_name     : an user name which is used for getting a token for"},{"line_number":53,"context_line":"#                         X-Service-Token"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a4dcd0f_74cd2e30","line":50,"in_reply_to":"1a4dcd0f_a0ff59a9","updated":"2015-08-11 18:49:37.000000000","message":"Done","commit_id":"f491f4df47aa29d5e69693d30961784f3f5f3237"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"8b30ba5b0225cdf836a82c257aeebd5650f2cae8","unresolved":false,"context_lines":[{"line_number":49,"context_line":"#                         of the target"},{"line_number":50,"context_line":"# auth_user_name        : an user name which is used for getting a token for"},{"line_number":51,"context_line":"#                         X-Auth_Token"},{"line_number":52,"context_line":"# service_user_name     : an user name which is used for getting a token for"},{"line_number":53,"context_line":"#                         X-Service-Token"},{"line_number":54,"context_line":"# expected              : expected status code"},{"line_number":55,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a4dcd0f_42dfa1d5","line":52,"updated":"2015-08-07 15:01:52.000000000","message":"same nit","commit_id":"f491f4df47aa29d5e69693d30961784f3f5f3237"},{"author":{"_account_id":12193,"name":"Hisashi Osanai","email":"osanai.hisashi@jp.fujitsu.com","username":"ho"},"change_message_id":"1bcd7279dbab96a0b44be7ed3e5bfeefc59002d7","unresolved":false,"context_lines":[{"line_number":49,"context_line":"#                         of the target"},{"line_number":50,"context_line":"# auth_user_name        : an user name which is used for getting a token for"},{"line_number":51,"context_line":"#                         X-Auth_Token"},{"line_number":52,"context_line":"# service_user_name     : an user name which is used for getting a token for"},{"line_number":53,"context_line":"#                         X-Service-Token"},{"line_number":54,"context_line":"# expected              : expected status code"},{"line_number":55,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a4dcd0f_6030719f","line":52,"in_reply_to":"1a4dcd0f_42dfa1d5","updated":"2015-08-09 22:53:32.000000000","message":"I will fix it.","commit_id":"f491f4df47aa29d5e69693d30961784f3f5f3237"},{"author":{"_account_id":12193,"name":"Hisashi Osanai","email":"osanai.hisashi@jp.fujitsu.com","username":"ho"},"change_message_id":"8dd90381f03aa9f6ea29d7373ce30975082d73b7","unresolved":false,"context_lines":[{"line_number":49,"context_line":"#                         of the target"},{"line_number":50,"context_line":"# auth_user_name        : an user name which is used for getting a token for"},{"line_number":51,"context_line":"#                         X-Auth_Token"},{"line_number":52,"context_line":"# service_user_name     : an user name which is used for getting a token for"},{"line_number":53,"context_line":"#                         X-Service-Token"},{"line_number":54,"context_line":"# expected              : expected status code"},{"line_number":55,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a4dcd0f_14ce2a2d","line":52,"in_reply_to":"1a4dcd0f_6030719f","updated":"2015-08-11 18:49:37.000000000","message":"Done","commit_id":"f491f4df47aa29d5e69693d30961784f3f5f3237"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"8b30ba5b0225cdf836a82c257aeebd5650f2cae8","unresolved":false,"context_lines":[{"line_number":84,"context_line":"# +----+-----------+-------+---------+-------------+"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"# A senario of put for account, container and object with"},{"line_number":87,"context_line":"# several roles."},{"line_number":88,"context_line":"RBAC_PUT \u003d ["},{"line_number":89,"context_line":"    (\u0027PUT\u0027, None, None, \u0027UUID\u0027, None, None,"},{"line_number":90,"context_line":"     None, \u0027tester\u0027, \u0027tester\u0027, \u0027tester5\u0027, 201),"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a4dcd0f_427b21be","line":87,"updated":"2015-08-07 15:01:52.000000000","message":"I\u0027d love to think of a way to represent these scenarios so that it was easier for a human to grok! :D","commit_id":"f491f4df47aa29d5e69693d30961784f3f5f3237"},{"author":{"_account_id":12193,"name":"Hisashi Osanai","email":"osanai.hisashi@jp.fujitsu.com","username":"ho"},"change_message_id":"1bcd7279dbab96a0b44be7ed3e5bfeefc59002d7","unresolved":false,"context_lines":[{"line_number":84,"context_line":"# +----+-----------+-------+---------+-------------+"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"# A senario of put for account, container and object with"},{"line_number":87,"context_line":"# several roles."},{"line_number":88,"context_line":"RBAC_PUT \u003d ["},{"line_number":89,"context_line":"    (\u0027PUT\u0027, None, None, \u0027UUID\u0027, None, None,"},{"line_number":90,"context_line":"     None, \u0027tester\u0027, \u0027tester\u0027, \u0027tester5\u0027, 201),"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a4dcd0f_a0c4395f","line":87,"in_reply_to":"1a4dcd0f_427b21be","updated":"2015-08-09 22:53:32.000000000","message":"Matrix testing can cover cases without missing patterns  but it\u0027s difficult to understand a pattern from code. I wrote some info on the commit message and here (specially user info) to get more understanding the cases.","commit_id":"f491f4df47aa29d5e69693d30961784f3f5f3237"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"8b30ba5b0225cdf836a82c257aeebd5650f2cae8","unresolved":false,"context_lines":[{"line_number":86,"context_line":"# A senario of put for account, container and object with"},{"line_number":87,"context_line":"# several roles."},{"line_number":88,"context_line":"RBAC_PUT \u003d ["},{"line_number":89,"context_line":"    (\u0027PUT\u0027, None, None, \u0027UUID\u0027, None, None,"},{"line_number":90,"context_line":"     None, \u0027tester\u0027, \u0027tester\u0027, \u0027tester5\u0027, 201),"},{"line_number":91,"context_line":"    (\u0027PUT\u0027, None, None, \u0027UUID\u0027, None, None,"},{"line_number":92,"context_line":"     None, \u0027tester\u0027, \u0027tester3\u0027, \u0027tester5\u0027, 403),"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a4dcd0f_996be51d","line":89,"updated":"2015-08-07 15:01:52.000000000","message":"the second and third members of the tuples are always None, None - can they be removed?","commit_id":"f491f4df47aa29d5e69693d30961784f3f5f3237"},{"author":{"_account_id":12193,"name":"Hisashi Osanai","email":"osanai.hisashi@jp.fujitsu.com","username":"ho"},"change_message_id":"1bcd7279dbab96a0b44be7ed3e5bfeefc59002d7","unresolved":false,"context_lines":[{"line_number":86,"context_line":"# A senario of put for account, container and object with"},{"line_number":87,"context_line":"# several roles."},{"line_number":88,"context_line":"RBAC_PUT \u003d ["},{"line_number":89,"context_line":"    (\u0027PUT\u0027, None, None, \u0027UUID\u0027, None, None,"},{"line_number":90,"context_line":"     None, \u0027tester\u0027, \u0027tester\u0027, \u0027tester5\u0027, 201),"},{"line_number":91,"context_line":"    (\u0027PUT\u0027, None, None, \u0027UUID\u0027, None, None,"},{"line_number":92,"context_line":"     None, \u0027tester\u0027, \u0027tester3\u0027, \u0027tester5\u0027, 403),"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a4dcd0f_20e109ff","line":89,"in_reply_to":"1a4dcd0f_996be51d","updated":"2015-08-09 22:53:32.000000000","message":"the second will be used other scenarios but third is not used in patches but if we use this framework to other auth system, it\u0027s necessary so I would like to keep it.","commit_id":"f491f4df47aa29d5e69693d30961784f3f5f3237"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"8b30ba5b0225cdf836a82c257aeebd5650f2cae8","unresolved":false,"context_lines":[{"line_number":205,"context_line":"                      \u0027project_domain_name\u0027: info[\u0027domain\u0027]}"},{"line_number":206,"context_line":"        authargs \u003d dict(snet\u003dFalse, tenant_name\u003dinfo[\u0027account\u0027],"},{"line_number":207,"context_line":"                        auth_version\u003dself.auth_version, os_options\u003dos_options,"},{"line_number":208,"context_line":"                        insecure\u003dself.insecure)"},{"line_number":209,"context_line":"        storage_url, token \u003d get_auth("},{"line_number":210,"context_line":"            self.auth_url, user_name, info[\u0027password\u0027], **authargs)"},{"line_number":211,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"1a4dcd0f_b9334161","line":208,"updated":"2015-08-07 15:01:52.000000000","message":"add key\u003dinfo[\u0027password\u0027] (see next comment)","commit_id":"f491f4df47aa29d5e69693d30961784f3f5f3237"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"8b30ba5b0225cdf836a82c257aeebd5650f2cae8","unresolved":false,"context_lines":[{"line_number":207,"context_line":"                        auth_version\u003dself.auth_version, os_options\u003dos_options,"},{"line_number":208,"context_line":"                        insecure\u003dself.insecure)"},{"line_number":209,"context_line":"        storage_url, token \u003d get_auth("},{"line_number":210,"context_line":"            self.auth_url, user_name, info[\u0027password\u0027], **authargs)"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"        return storage_url, token"},{"line_number":213,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"1a4dcd0f_39e411aa","line":210,"updated":"2015-08-07 15:01:52.000000000","message":"info[\u0027password\u0027] could be added to authargs with key \u0027key\u0027, then call:\n\n   get_auth(self.auth_url, user_name, **authargs)\n\n(a positional arg can also be treated like a keyword arg)","commit_id":"f491f4df47aa29d5e69693d30961784f3f5f3237"},{"author":{"_account_id":12193,"name":"Hisashi Osanai","email":"osanai.hisashi@jp.fujitsu.com","username":"ho"},"change_message_id":"1bcd7279dbab96a0b44be7ed3e5bfeefc59002d7","unresolved":false,"context_lines":[{"line_number":207,"context_line":"                        auth_version\u003dself.auth_version, os_options\u003dos_options,"},{"line_number":208,"context_line":"                        insecure\u003dself.insecure)"},{"line_number":209,"context_line":"        storage_url, token \u003d get_auth("},{"line_number":210,"context_line":"            self.auth_url, user_name, info[\u0027password\u0027], **authargs)"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"        return storage_url, token"},{"line_number":213,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"1a4dcd0f_c094e545","line":210,"in_reply_to":"1a4dcd0f_39e411aa","updated":"2015-08-09 22:53:32.000000000","message":"I see. I will fix it.","commit_id":"f491f4df47aa29d5e69693d30961784f3f5f3237"},{"author":{"_account_id":12193,"name":"Hisashi Osanai","email":"osanai.hisashi@jp.fujitsu.com","username":"ho"},"change_message_id":"8dd90381f03aa9f6ea29d7373ce30975082d73b7","unresolved":false,"context_lines":[{"line_number":207,"context_line":"                        auth_version\u003dself.auth_version, os_options\u003dos_options,"},{"line_number":208,"context_line":"                        insecure\u003dself.insecure)"},{"line_number":209,"context_line":"        storage_url, token \u003d get_auth("},{"line_number":210,"context_line":"            self.auth_url, user_name, info[\u0027password\u0027], **authargs)"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"        return storage_url, token"},{"line_number":213,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"1a4dcd0f_fff7d7d0","line":210,"in_reply_to":"1a4dcd0f_c094e545","updated":"2015-08-11 18:49:37.000000000","message":"I checked the code of get_auth. I think it\u0027s better to keep the current logic.\ndef get_auth(url, user, key, auth_version\u003d\u00271.0\u0027, **kwargs):","commit_id":"f491f4df47aa29d5e69693d30961784f3f5f3237"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"8b30ba5b0225cdf836a82c257aeebd5650f2cae8","unresolved":false,"context_lines":[{"line_number":241,"context_line":"        #   storage_url \u003d \u0027http://localhost/v1/AUTH_xxx\u0027"},{"line_number":242,"context_line":"        #   storage_url_list[:4] is [\u0027http:\u0027, \u0027\u0027, \u0027localhost\u0027, \u0027v1\u0027]"},{"line_number":243,"context_line":"        #   storage_url_list[4] is \u0027AUTH_xxx\u0027"},{"line_number":244,"context_line":"        storage_url_list \u003d storage_url.rstrip(\u0027/\u0027).split(\u0027/\u0027)"},{"line_number":245,"context_line":"        base_url \u003d \u0027/\u0027.join(storage_url_list[:4])"},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"        if account is None:"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a4dcd0f_62e18229","line":244,"updated":"2015-08-07 15:01:52.000000000","message":"consider using urlparse throughout this method","commit_id":"f491f4df47aa29d5e69693d30961784f3f5f3237"},{"author":{"_account_id":12193,"name":"Hisashi Osanai","email":"osanai.hisashi@jp.fujitsu.com","username":"ho"},"change_message_id":"8dd90381f03aa9f6ea29d7373ce30975082d73b7","unresolved":false,"context_lines":[{"line_number":241,"context_line":"        #   storage_url \u003d \u0027http://localhost/v1/AUTH_xxx\u0027"},{"line_number":242,"context_line":"        #   storage_url_list[:4] is [\u0027http:\u0027, \u0027\u0027, \u0027localhost\u0027, \u0027v1\u0027]"},{"line_number":243,"context_line":"        #   storage_url_list[4] is \u0027AUTH_xxx\u0027"},{"line_number":244,"context_line":"        storage_url_list \u003d storage_url.rstrip(\u0027/\u0027).split(\u0027/\u0027)"},{"line_number":245,"context_line":"        base_url \u003d \u0027/\u0027.join(storage_url_list[:4])"},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"        if account is None:"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a4dcd0f_45df1e3a","line":244,"in_reply_to":"1a4dcd0f_40877512","updated":"2015-08-11 18:49:37.000000000","message":"I wrote it but it seems to increase complexity (urlparse has a difference bw py2/py3) so I want to keep current code.\n\nparsed_storage_url \u003d urlparse(storage_url)\nstorage_url_list \u003d parsed_storage_url.path.split(\u0027/\u0027)\nstorage_url_list[0] # v1\nstorage_url_list[1] # account\n...","commit_id":"f491f4df47aa29d5e69693d30961784f3f5f3237"},{"author":{"_account_id":12193,"name":"Hisashi Osanai","email":"osanai.hisashi@jp.fujitsu.com","username":"ho"},"change_message_id":"1bcd7279dbab96a0b44be7ed3e5bfeefc59002d7","unresolved":false,"context_lines":[{"line_number":241,"context_line":"        #   storage_url \u003d \u0027http://localhost/v1/AUTH_xxx\u0027"},{"line_number":242,"context_line":"        #   storage_url_list[:4] is [\u0027http:\u0027, \u0027\u0027, \u0027localhost\u0027, \u0027v1\u0027]"},{"line_number":243,"context_line":"        #   storage_url_list[4] is \u0027AUTH_xxx\u0027"},{"line_number":244,"context_line":"        storage_url_list \u003d storage_url.rstrip(\u0027/\u0027).split(\u0027/\u0027)"},{"line_number":245,"context_line":"        base_url \u003d \u0027/\u0027.join(storage_url_list[:4])"},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"        if account is None:"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a4dcd0f_40877512","line":244,"in_reply_to":"1a4dcd0f_62e18229","updated":"2015-08-09 22:53:32.000000000","message":"I will check it.","commit_id":"f491f4df47aa29d5e69693d30961784f3f5f3237"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"8b30ba5b0225cdf836a82c257aeebd5650f2cae8","unresolved":false,"context_lines":[{"line_number":248,"context_line":"            if reseller_prefix is None:"},{"line_number":249,"context_line":"                account \u003d storage_url_list[4]"},{"line_number":250,"context_line":"            else:"},{"line_number":251,"context_line":"                account \u003d storage_url_list[4].replace(\u0027AUTH_\u0027,"},{"line_number":252,"context_line":"                                                      reseller_prefix + \u0027_\u0027)"},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"        return \u0027/\u0027.join([part for part in (base_url, account, container, obj)"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a4dcd0f_c2a3b6fe","line":251,"updated":"2015-08-07 15:01:52.000000000","message":"You should not assume that the reseller prefix is AUTH_ - it could be configured to be anything including the empty string.\n\nI think what you need to do is seach the string for \u0027_\u0027, then replace up to the index of \u0027_\u0027. I think there may be some code in keystoneauth that does that.","commit_id":"f491f4df47aa29d5e69693d30961784f3f5f3237"},{"author":{"_account_id":12193,"name":"Hisashi Osanai","email":"osanai.hisashi@jp.fujitsu.com","username":"ho"},"change_message_id":"1bcd7279dbab96a0b44be7ed3e5bfeefc59002d7","unresolved":false,"context_lines":[{"line_number":248,"context_line":"            if reseller_prefix is None:"},{"line_number":249,"context_line":"                account \u003d storage_url_list[4]"},{"line_number":250,"context_line":"            else:"},{"line_number":251,"context_line":"                account \u003d storage_url_list[4].replace(\u0027AUTH_\u0027,"},{"line_number":252,"context_line":"                                                      reseller_prefix + \u0027_\u0027)"},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"        return \u0027/\u0027.join([part for part in (base_url, account, container, obj)"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a4dcd0f_60e151d0","line":251,"in_reply_to":"1a4dcd0f_c2a3b6fe","updated":"2015-08-09 22:53:32.000000000","message":"Here, I don\u0027t assume prefix. The logic checks a prefix from a test case so I think None, AUTH(default) and other(not empty string: there is no meaning of empty string) are fine.","commit_id":"f491f4df47aa29d5e69693d30961784f3f5f3237"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"8b30ba5b0225cdf836a82c257aeebd5650f2cae8","unresolved":false,"context_lines":[{"line_number":249,"context_line":"                account \u003d storage_url_list[4]"},{"line_number":250,"context_line":"            else:"},{"line_number":251,"context_line":"                account \u003d storage_url_list[4].replace(\u0027AUTH_\u0027,"},{"line_number":252,"context_line":"                                                      reseller_prefix + \u0027_\u0027)"},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"        return \u0027/\u0027.join([part for part in (base_url, account, container, obj)"},{"line_number":255,"context_line":"                         if part])"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a4dcd0f_a51eaf5c","line":252,"updated":"2015-08-07 15:01:52.000000000","message":"Also, I think you need to map reseller_prefix\u003d\u0027SERVICE\u0027 to the value of service_prefix in test.conf. It is a  global swift_test_service_prefix in test/functional/__init__.py","commit_id":"f491f4df47aa29d5e69693d30961784f3f5f3237"},{"author":{"_account_id":12193,"name":"Hisashi Osanai","email":"osanai.hisashi@jp.fujitsu.com","username":"ho"},"change_message_id":"1bcd7279dbab96a0b44be7ed3e5bfeefc59002d7","unresolved":false,"context_lines":[{"line_number":249,"context_line":"                account \u003d storage_url_list[4]"},{"line_number":250,"context_line":"            else:"},{"line_number":251,"context_line":"                account \u003d storage_url_list[4].replace(\u0027AUTH_\u0027,"},{"line_number":252,"context_line":"                                                      reseller_prefix + \u0027_\u0027)"},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"        return \u0027/\u0027.join([part for part in (base_url, account, container, obj)"},{"line_number":255,"context_line":"                         if part])"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a4dcd0f_402a15e9","line":252,"in_reply_to":"1a4dcd0f_a51eaf5c","updated":"2015-08-09 22:53:32.000000000","message":"Basic idea for this functional test is don\u0027t change current functional test configuration because info in proxy-server.conf and test.conf should be matched to keep backward compatibility.\nSo I just added an user, tester6.","commit_id":"f491f4df47aa29d5e69693d30961784f3f5f3237"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"8b30ba5b0225cdf836a82c257aeebd5650f2cae8","unresolved":false,"context_lines":[{"line_number":284,"context_line":"        storage_url, reseller_token \u003d self._get_storage_url_and_token("},{"line_number":285,"context_line":"            test_case[\u0027target_user_name\u0027], RESELLER_ADMIN)"},{"line_number":286,"context_line":""},{"line_number":287,"context_line":"        if test_case[\u0027http_method\u0027] in (\u0027GET\u0027, \u0027POST\u0027, \u0027DELETE\u0027, \u0027HEAD\u0027,"},{"line_number":288,"context_line":"                                        \u0027OPTIONS\u0027):"},{"line_number":289,"context_line":"            temp_test_case \u003d test_case.copy()"},{"line_number":290,"context_line":"            if test_case[\u0027container_name\u0027] is None:"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a4dcd0f_422ec18c","line":287,"updated":"2015-08-07 15:01:52.000000000","message":"I guess this code is here in anticipation of adding scenarios that use these methods. But I think the code should only be added when those methods are added in follow on patches. At the moment I don\u0027t think this code will ever be used *in this patch*?","commit_id":"f491f4df47aa29d5e69693d30961784f3f5f3237"},{"author":{"_account_id":12193,"name":"Hisashi Osanai","email":"osanai.hisashi@jp.fujitsu.com","username":"ho"},"change_message_id":"1bcd7279dbab96a0b44be7ed3e5bfeefc59002d7","unresolved":false,"context_lines":[{"line_number":284,"context_line":"        storage_url, reseller_token \u003d self._get_storage_url_and_token("},{"line_number":285,"context_line":"            test_case[\u0027target_user_name\u0027], RESELLER_ADMIN)"},{"line_number":286,"context_line":""},{"line_number":287,"context_line":"        if test_case[\u0027http_method\u0027] in (\u0027GET\u0027, \u0027POST\u0027, \u0027DELETE\u0027, \u0027HEAD\u0027,"},{"line_number":288,"context_line":"                                        \u0027OPTIONS\u0027):"},{"line_number":289,"context_line":"            temp_test_case \u003d test_case.copy()"},{"line_number":290,"context_line":"            if test_case[\u0027container_name\u0027] is None:"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a4dcd0f_ae7d03e9","line":287,"in_reply_to":"1a4dcd0f_422ec18c","updated":"2015-08-09 22:53:32.000000000","message":"Yes, The status of these patches is WIP. Here is the total plan for functinal test patches.\nhttp://paste.openstack.org/show/412312/","commit_id":"f491f4df47aa29d5e69693d30961784f3f5f3237"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"8b30ba5b0225cdf836a82c257aeebd5650f2cae8","unresolved":false,"context_lines":[{"line_number":349,"context_line":"            try:"},{"line_number":350,"context_line":"                self._prepare(test_case)"},{"line_number":351,"context_line":"                result \u003d self._execute(test_case)"},{"line_number":352,"context_line":"                self.assertEqual(test_case[\u0027expected\u0027], result)"},{"line_number":353,"context_line":"            finally:"},{"line_number":354,"context_line":"                self._cleanup()"},{"line_number":355,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"1a4dcd0f_7c16074d","line":352,"updated":"2015-08-07 15:01:52.000000000","message":"It would be really nice to report the scenario beng tested if the assertion fails. Something like:\n\n  self.assertEqual(test_case[\u0027expected\u0027], result,\n                             \u0027Expected %s but got %s for test case %s\u0027\n                             % (test_case[\u0027expected\u0027], result, test_case))","commit_id":"f491f4df47aa29d5e69693d30961784f3f5f3237"},{"author":{"_account_id":12193,"name":"Hisashi Osanai","email":"osanai.hisashi@jp.fujitsu.com","username":"ho"},"change_message_id":"8dd90381f03aa9f6ea29d7373ce30975082d73b7","unresolved":false,"context_lines":[{"line_number":349,"context_line":"            try:"},{"line_number":350,"context_line":"                self._prepare(test_case)"},{"line_number":351,"context_line":"                result \u003d self._execute(test_case)"},{"line_number":352,"context_line":"                self.assertEqual(test_case[\u0027expected\u0027], result)"},{"line_number":353,"context_line":"            finally:"},{"line_number":354,"context_line":"                self._cleanup()"},{"line_number":355,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"1a4dcd0f_45e95eb6","line":352,"in_reply_to":"1a4dcd0f_20b4a9cf","updated":"2015-08-11 18:49:37.000000000","message":"Done","commit_id":"f491f4df47aa29d5e69693d30961784f3f5f3237"},{"author":{"_account_id":12193,"name":"Hisashi Osanai","email":"osanai.hisashi@jp.fujitsu.com","username":"ho"},"change_message_id":"1bcd7279dbab96a0b44be7ed3e5bfeefc59002d7","unresolved":false,"context_lines":[{"line_number":349,"context_line":"            try:"},{"line_number":350,"context_line":"                self._prepare(test_case)"},{"line_number":351,"context_line":"                result \u003d self._execute(test_case)"},{"line_number":352,"context_line":"                self.assertEqual(test_case[\u0027expected\u0027], result)"},{"line_number":353,"context_line":"            finally:"},{"line_number":354,"context_line":"                self._cleanup()"},{"line_number":355,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"1a4dcd0f_20b4a9cf","line":352,"in_reply_to":"1a4dcd0f_7c16074d","updated":"2015-08-09 22:53:32.000000000","message":"Great idea! I will fix it.","commit_id":"f491f4df47aa29d5e69693d30961784f3f5f3237"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"8b30ba5b0225cdf836a82c257aeebd5650f2cae8","unresolved":false,"context_lines":[{"line_number":357,"context_line":"class TestRBAC(BaseTestAC):"},{"line_number":358,"context_line":""},{"line_number":359,"context_line":"    def test_rbac(self):"},{"line_number":360,"context_line":"        if any((tf.skip, tf.skip2, tf.skip3, tf.skip_if_not_v3,"},{"line_number":361,"context_line":"                tf.skip_service_tokens)):"},{"line_number":362,"context_line":"            raise SkipTest"},{"line_number":363,"context_line":"        scenario_rbac \u003d RBAC_PUT"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a4dcd0f_fcdf770a","line":360,"updated":"2015-08-07 15:01:52.000000000","message":"The tests will fail if account6 is not defined in test.conf. You need to add another skip condition in test/functional/__init__.py:\n\n  skip_if_no_account6 \u003d not all([not skip, swift_test_user[5], swift_test_key[5]])\n\nand include it here.","commit_id":"f491f4df47aa29d5e69693d30961784f3f5f3237"},{"author":{"_account_id":12193,"name":"Hisashi Osanai","email":"osanai.hisashi@jp.fujitsu.com","username":"ho"},"change_message_id":"1bcd7279dbab96a0b44be7ed3e5bfeefc59002d7","unresolved":false,"context_lines":[{"line_number":357,"context_line":"class TestRBAC(BaseTestAC):"},{"line_number":358,"context_line":""},{"line_number":359,"context_line":"    def test_rbac(self):"},{"line_number":360,"context_line":"        if any((tf.skip, tf.skip2, tf.skip3, tf.skip_if_not_v3,"},{"line_number":361,"context_line":"                tf.skip_service_tokens)):"},{"line_number":362,"context_line":"            raise SkipTest"},{"line_number":363,"context_line":"        scenario_rbac \u003d RBAC_PUT"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a4dcd0f_c0c9455c","line":360,"in_reply_to":"1a4dcd0f_fcdf770a","updated":"2015-08-09 22:53:32.000000000","message":"Yeah, I will add it.","commit_id":"f491f4df47aa29d5e69693d30961784f3f5f3237"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"8b30ba5b0225cdf836a82c257aeebd5650f2cae8","unresolved":false,"context_lines":[{"line_number":358,"context_line":""},{"line_number":359,"context_line":"    def test_rbac(self):"},{"line_number":360,"context_line":"        if any((tf.skip, tf.skip2, tf.skip3, tf.skip_if_not_v3,"},{"line_number":361,"context_line":"                tf.skip_service_tokens)):"},{"line_number":362,"context_line":"            raise SkipTest"},{"line_number":363,"context_line":"        scenario_rbac \u003d RBAC_PUT"},{"line_number":364,"context_line":"        self._run_scenario(scenario_rbac)"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a4dcd0f_b9c821a9","line":361,"updated":"2015-08-07 15:01:52.000000000","message":"It is unfortunate that ALL the tests will skip if service token is not configured (same if not v3).\n\nCould you break the scenarios into subsets - those that require service token, those that require v3, all others, and then execute the scenarios as separate tests with separate skip conditions?\n\nThat would also mean that some of these tests would run on jenkins with devstack. At the moment that are all skipped by jenkins :(","commit_id":"f491f4df47aa29d5e69693d30961784f3f5f3237"},{"author":{"_account_id":12193,"name":"Hisashi Osanai","email":"osanai.hisashi@jp.fujitsu.com","username":"ho"},"change_message_id":"1bcd7279dbab96a0b44be7ed3e5bfeefc59002d7","unresolved":false,"context_lines":[{"line_number":358,"context_line":""},{"line_number":359,"context_line":"    def test_rbac(self):"},{"line_number":360,"context_line":"        if any((tf.skip, tf.skip2, tf.skip3, tf.skip_if_not_v3,"},{"line_number":361,"context_line":"                tf.skip_service_tokens)):"},{"line_number":362,"context_line":"            raise SkipTest"},{"line_number":363,"context_line":"        scenario_rbac \u003d RBAC_PUT"},{"line_number":364,"context_line":"        self._run_scenario(scenario_rbac)"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a4dcd0f_aebae3be","line":361,"in_reply_to":"1a4dcd0f_b9c821a9","updated":"2015-08-09 22:53:32.000000000","message":"I think the purpose of this functional test is cover all cases with one framework. And with v3 token we can cover the cases. And it\u0027s introduced, this patch is getting more complex. I would like to avoid the complexity so my idea is provides additional patch after this patch landed. \n\nTo keep backward compatibility patch for devstack should be submitted after this patch landed, it\u0027s my understanding.","commit_id":"f491f4df47aa29d5e69693d30961784f3f5f3237"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"bc133cb65bea0322337f9d084aa4edeb17b64505","unresolved":false,"context_lines":[{"line_number":464,"context_line":"        shuffle(scenario_rbac)"},{"line_number":465,"context_line":"        self._run_scenario(scenario_rbac)"},{"line_number":466,"context_line":""},{"line_number":467,"context_line":"    def test_rbac_with_service_prefix(self):"},{"line_number":468,"context_line":"        if any((tf.skip, tf.skip2, tf.skip3, tf.skip_if_not_v3,"},{"line_number":469,"context_line":"                tf.skip_service_tokens, tf.skip_if_no_reseller_admin)):"},{"line_number":470,"context_line":"            raise SkipTest"}],"source_content_type":"text/x-python","patch_set":14,"id":"9a1a9d01_4548e9cc","line":467,"updated":"2015-10-01 17:09:02.000000000","message":"great to separate the tests :) but, I still see all tests skip on jenkins because devstack does not yet have the test user 6 with reseller admin role :( could you similarly separate the tests that require reseller admin? i.e. make a method test_rbac_reseller_admin?","commit_id":"6f854dc8fb3e103ca751951cf0a19e4d0a4dbd97"},{"author":{"_account_id":12193,"name":"Hisashi Osanai","email":"osanai.hisashi@jp.fujitsu.com","username":"ho"},"change_message_id":"cae03cbd045ebad3959bc7e1de5a143b869c318c","unresolved":false,"context_lines":[{"line_number":464,"context_line":"        shuffle(scenario_rbac)"},{"line_number":465,"context_line":"        self._run_scenario(scenario_rbac)"},{"line_number":466,"context_line":""},{"line_number":467,"context_line":"    def test_rbac_with_service_prefix(self):"},{"line_number":468,"context_line":"        if any((tf.skip, tf.skip2, tf.skip3, tf.skip_if_not_v3,"},{"line_number":469,"context_line":"                tf.skip_service_tokens, tf.skip_if_no_reseller_admin)):"},{"line_number":470,"context_line":"            raise SkipTest"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a2fa921_9b534fe2","line":467,"in_reply_to":"9a1a9d01_4548e9cc","updated":"2015-10-08 05:11:34.000000000","message":"the reseller admin is required by all cases in this functional test. I think it is better to add a reseller admin in devstack after this patch will be merged. Is there any problem with this approach?","commit_id":"6f854dc8fb3e103ca751951cf0a19e4d0a4dbd97"},{"author":{"_account_id":11317,"name":"Eran Rom","email":"eran@itsonlyme.name","username":"eranr"},"change_message_id":"d9f475a9509d6a33132b77b54879bc0cbd552202","unresolved":false,"context_lines":[{"line_number":972,"context_line":"        self.created_resources.append(resource_url)"},{"line_number":973,"context_line":"        self.client.send_request(\u0027PUT\u0027, resource_url, token)"},{"line_number":974,"context_line":""},{"line_number":975,"context_line":"    def _get_storage_url_and_token(self, storage_url_user, token_user):"},{"line_number":976,"context_line":"        storage_url, _junk \u003d self.client.auth(storage_url_user)"},{"line_number":977,"context_line":"        _junk, token \u003d self.client.auth(token_user)"},{"line_number":978,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"7a740942_a7863163","line":975,"updated":"2015-12-06 21:27:35.000000000","message":"All the calls to this method are with storage_url_user \u003d test_case[\u0027target_user_name\u0027]\nIs there some redundancy here?\nDo follow on patches use different users?","commit_id":"7922a50e7ef3350bf753c5fc3cba0a8950e0ad49"},{"author":{"_account_id":11317,"name":"Eran Rom","email":"eran@itsonlyme.name","username":"eranr"},"change_message_id":"d9f475a9509d6a33132b77b54879bc0cbd552202","unresolved":false,"context_lines":[{"line_number":1015,"context_line":"            test_case[\u0027reseller_prefix\u0027])"},{"line_number":1016,"context_line":""},{"line_number":1017,"context_line":"        if test_case[\u0027http_method\u0027] in (\u0027PUT\u0027):"},{"line_number":1018,"context_line":"            self.created_resources.append(resource_url)"},{"line_number":1019,"context_line":""},{"line_number":1020,"context_line":"        resp \u003d self.client.send_request(test_case[\u0027http_method\u0027],"},{"line_number":1021,"context_line":"                                        resource_url,"}],"source_content_type":"text/x-python","patch_set":18,"id":"7a740942_a72ab17c","line":1018,"updated":"2015-12-06 21:27:35.000000000","message":"This resource is different from the other created resources in the sense that its creation might fail. How about keeping it in a test_resource_created. This will allow to have a more \u0027accurate\u0027 cleanup, where you can always clean created_resources (and in line 1033 always expect 204)\nThen you can clean test_created_resources and test the cleanup according to the expected result, e.g. if you expect 401 instead of 201 do not clean, if you expect 201 clean and assert that you get 204.","commit_id":"7922a50e7ef3350bf753c5fc3cba0a8950e0ad49"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"f76b067c3af568d05d6b3c3c0b3318a95f164bb0","unresolved":false,"context_lines":[{"line_number":45,"context_line":"# container_name        : Container name. If \u0027UUID\u0027 is specified, a container"},{"line_number":46,"context_line":"#                         name will be created automatically"},{"line_number":47,"context_line":"# object_name           : Object name. If \u0027UUID\u0027 is specified, a container"},{"line_number":48,"context_line":"#                         name will be created automatically"},{"line_number":49,"context_line":"# prep_container_header : headers which will be set on the container"},{"line_number":50,"context_line":"# reseller_prefix       : Reseller prefix that will be used for request url."},{"line_number":51,"context_line":"#                         Can be None or SERVICE to select the user account"}],"source_content_type":"text/x-python","patch_set":20,"id":"7a5de9d1_a5e75f11","line":48,"updated":"2016-01-27 19:26:42.000000000","message":"s/container/object/","commit_id":"09b188f03c4a40838ea6b3e54e0714d93077b066"},{"author":{"_account_id":12193,"name":"Hisashi Osanai","email":"osanai.hisashi@jp.fujitsu.com","username":"ho"},"change_message_id":"4bee9ad9df24e8e85149c1662b4f5cd53676e6d1","unresolved":false,"context_lines":[{"line_number":45,"context_line":"# container_name        : Container name. If \u0027UUID\u0027 is specified, a container"},{"line_number":46,"context_line":"#                         name will be created automatically"},{"line_number":47,"context_line":"# object_name           : Object name. If \u0027UUID\u0027 is specified, a container"},{"line_number":48,"context_line":"#                         name will be created automatically"},{"line_number":49,"context_line":"# prep_container_header : headers which will be set on the container"},{"line_number":50,"context_line":"# reseller_prefix       : Reseller prefix that will be used for request url."},{"line_number":51,"context_line":"#                         Can be None or SERVICE to select the user account"}],"source_content_type":"text/x-python","patch_set":20,"id":"7a5de9d1_ca680e8a","line":48,"in_reply_to":"7a5de9d1_a5e75f11","updated":"2016-01-29 10:39:14.000000000","message":"Done","commit_id":"09b188f03c4a40838ea6b3e54e0714d93077b066"},{"author":{"_account_id":12193,"name":"Hisashi Osanai","email":"osanai.hisashi@jp.fujitsu.com","username":"ho"},"change_message_id":"7243114b758b62faa258ee017609978372174bd7","unresolved":false,"context_lines":[{"line_number":45,"context_line":"# container_name        : Container name. If \u0027UUID\u0027 is specified, a container"},{"line_number":46,"context_line":"#                         name will be created automatically"},{"line_number":47,"context_line":"# object_name           : Object name. If \u0027UUID\u0027 is specified, a container"},{"line_number":48,"context_line":"#                         name will be created automatically"},{"line_number":49,"context_line":"# prep_container_header : headers which will be set on the container"},{"line_number":50,"context_line":"# reseller_prefix       : Reseller prefix that will be used for request url."},{"line_number":51,"context_line":"#                         Can be None or SERVICE to select the user account"}],"source_content_type":"text/x-python","patch_set":20,"id":"7a5de9d1_2fac579f","line":48,"in_reply_to":"7a5de9d1_a5e75f11","updated":"2016-01-29 07:30:27.000000000","message":"I will fix this in last patch of this patch chain.","commit_id":"09b188f03c4a40838ea6b3e54e0714d93077b066"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"f76b067c3af568d05d6b3c3c0b3318a95f164bb0","unresolved":false,"context_lines":[{"line_number":897,"context_line":"    def _get_auth(self, user_name):"},{"line_number":898,"context_line":"        info \u003d self.users.get(user_name)"},{"line_number":899,"context_line":"        if info is None:"},{"line_number":900,"context_line":"            return None, None"},{"line_number":901,"context_line":""},{"line_number":902,"context_line":"        os_options \u003d {\u0027user_domain_name\u0027: info[\u0027domain\u0027],"},{"line_number":903,"context_line":"                      \u0027project_domain_name\u0027: info[\u0027domain\u0027]}"}],"source_content_type":"text/x-python","patch_set":20,"id":"7a5de9d1_ea13e35a","line":900,"updated":"2016-01-27 19:26:42.000000000","message":"if info is None then I think the tests will error when trying to rsplit the storage url, so perhaps better to assert info is not None here and fail gracefully?","commit_id":"09b188f03c4a40838ea6b3e54e0714d93077b066"},{"author":{"_account_id":12193,"name":"Hisashi Osanai","email":"osanai.hisashi@jp.fujitsu.com","username":"ho"},"change_message_id":"4bee9ad9df24e8e85149c1662b4f5cd53676e6d1","unresolved":false,"context_lines":[{"line_number":897,"context_line":"    def _get_auth(self, user_name):"},{"line_number":898,"context_line":"        info \u003d self.users.get(user_name)"},{"line_number":899,"context_line":"        if info is None:"},{"line_number":900,"context_line":"            return None, None"},{"line_number":901,"context_line":""},{"line_number":902,"context_line":"        os_options \u003d {\u0027user_domain_name\u0027: info[\u0027domain\u0027],"},{"line_number":903,"context_line":"                      \u0027project_domain_name\u0027: info[\u0027domain\u0027]}"}],"source_content_type":"text/x-python","patch_set":20,"id":"7a5de9d1_ac160aef","line":900,"in_reply_to":"7a5de9d1_afae0783","updated":"2016-01-29 10:39:14.000000000","message":"Sorry, asserIsNotNone() can not use here because this class is not a subclass of TestCase... So I will keep this logic.","commit_id":"09b188f03c4a40838ea6b3e54e0714d93077b066"},{"author":{"_account_id":12193,"name":"Hisashi Osanai","email":"osanai.hisashi@jp.fujitsu.com","username":"ho"},"change_message_id":"7243114b758b62faa258ee017609978372174bd7","unresolved":false,"context_lines":[{"line_number":897,"context_line":"    def _get_auth(self, user_name):"},{"line_number":898,"context_line":"        info \u003d self.users.get(user_name)"},{"line_number":899,"context_line":"        if info is None:"},{"line_number":900,"context_line":"            return None, None"},{"line_number":901,"context_line":""},{"line_number":902,"context_line":"        os_options \u003d {\u0027user_domain_name\u0027: info[\u0027domain\u0027],"},{"line_number":903,"context_line":"                      \u0027project_domain_name\u0027: info[\u0027domain\u0027]}"}],"source_content_type":"text/x-python","patch_set":20,"id":"7a5de9d1_afae0783","line":900,"in_reply_to":"7a5de9d1_ea13e35a","updated":"2016-01-29 07:30:27.000000000","message":"Good idea! I will add the assertion in last patch of this patch chain.","commit_id":"09b188f03c4a40838ea6b3e54e0714d93077b066"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"f76b067c3af568d05d6b3c3c0b3318a95f164bb0","unresolved":false,"context_lines":[{"line_number":1055,"context_line":"            try:"},{"line_number":1056,"context_line":"                self._prepare(test_case)"},{"line_number":1057,"context_line":"                result \u003d self._execute(test_case)"},{"line_number":1058,"context_line":"                self.assertEqual(test_case[\u0027expected\u0027],"},{"line_number":1059,"context_line":"                                 result,"},{"line_number":1060,"context_line":"                                 \u0027Expected %s but got %s for test case %s\u0027 %"},{"line_number":1061,"context_line":"                                 (test_case[\u0027expected\u0027], result, test_case))"}],"source_content_type":"text/x-python","patch_set":20,"id":"7a5de9d1_ca5f070d","line":1058,"updated":"2016-01-27 19:26:42.000000000","message":"nit; it would be nice to run all the scenarios, not stop on the first failure - so test for equality and gather failed scenarios in a list, then if after all scenarios have run the list has any items call self.fail() and pretty print the list.","commit_id":"09b188f03c4a40838ea6b3e54e0714d93077b066"},{"author":{"_account_id":12193,"name":"Hisashi Osanai","email":"osanai.hisashi@jp.fujitsu.com","username":"ho"},"change_message_id":"4bee9ad9df24e8e85149c1662b4f5cd53676e6d1","unresolved":false,"context_lines":[{"line_number":1055,"context_line":"            try:"},{"line_number":1056,"context_line":"                self._prepare(test_case)"},{"line_number":1057,"context_line":"                result \u003d self._execute(test_case)"},{"line_number":1058,"context_line":"                self.assertEqual(test_case[\u0027expected\u0027],"},{"line_number":1059,"context_line":"                                 result,"},{"line_number":1060,"context_line":"                                 \u0027Expected %s but got %s for test case %s\u0027 %"},{"line_number":1061,"context_line":"                                 (test_case[\u0027expected\u0027], result, test_case))"}],"source_content_type":"text/x-python","patch_set":20,"id":"7a5de9d1_ac192a7b","line":1058,"in_reply_to":"7a5de9d1_ca5f070d","updated":"2016-01-29 10:39:14.000000000","message":"Done","commit_id":"09b188f03c4a40838ea6b3e54e0714d93077b066"},{"author":{"_account_id":12193,"name":"Hisashi Osanai","email":"osanai.hisashi@jp.fujitsu.com","username":"ho"},"change_message_id":"7243114b758b62faa258ee017609978372174bd7","unresolved":false,"context_lines":[{"line_number":1055,"context_line":"            try:"},{"line_number":1056,"context_line":"                self._prepare(test_case)"},{"line_number":1057,"context_line":"                result \u003d self._execute(test_case)"},{"line_number":1058,"context_line":"                self.assertEqual(test_case[\u0027expected\u0027],"},{"line_number":1059,"context_line":"                                 result,"},{"line_number":1060,"context_line":"                                 \u0027Expected %s but got %s for test case %s\u0027 %"},{"line_number":1061,"context_line":"                                 (test_case[\u0027expected\u0027], result, test_case))"}],"source_content_type":"text/x-python","patch_set":20,"id":"7a5de9d1_6f648f21","line":1058,"in_reply_to":"7a5de9d1_ca5f070d","updated":"2016-01-29 07:30:27.000000000","message":"Interesting! I will add the idea in last patch of this patch chain.","commit_id":"09b188f03c4a40838ea6b3e54e0714d93077b066"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"f76b067c3af568d05d6b3c3c0b3318a95f164bb0","unresolved":false,"context_lines":[{"line_number":1069,"context_line":"        if any((tf.skip, tf.skip2, tf.skip3, tf.skip_if_not_v3,"},{"line_number":1070,"context_line":"                tf.skip_if_no_reseller_admin)):"},{"line_number":1071,"context_line":"            raise SkipTest"},{"line_number":1072,"context_line":"        scenario_rbac \u003d RBAC_PUT + RBAC_DELETE + RBAC_GET +\\"},{"line_number":1073,"context_line":"            RBAC_HEAD + RBAC_POST + RBAC_OPTIONS"},{"line_number":1074,"context_line":"        shuffle(scenario_rbac)"},{"line_number":1075,"context_line":"        self._run_scenario(scenario_rbac)"}],"source_content_type":"text/x-python","patch_set":20,"id":"7a5de9d1_204a7d84","line":1072,"updated":"2016-01-27 19:26:42.000000000","message":"nit: how about one test method for each list of scenarios, so we get more granularity when failures occur? That would also give more frequent feedback to a human that tests are progressing and not just hanging.","commit_id":"09b188f03c4a40838ea6b3e54e0714d93077b066"},{"author":{"_account_id":12193,"name":"Hisashi Osanai","email":"osanai.hisashi@jp.fujitsu.com","username":"ho"},"change_message_id":"7243114b758b62faa258ee017609978372174bd7","unresolved":false,"context_lines":[{"line_number":1069,"context_line":"        if any((tf.skip, tf.skip2, tf.skip3, tf.skip_if_not_v3,"},{"line_number":1070,"context_line":"                tf.skip_if_no_reseller_admin)):"},{"line_number":1071,"context_line":"            raise SkipTest"},{"line_number":1072,"context_line":"        scenario_rbac \u003d RBAC_PUT + RBAC_DELETE + RBAC_GET +\\"},{"line_number":1073,"context_line":"            RBAC_HEAD + RBAC_POST + RBAC_OPTIONS"},{"line_number":1074,"context_line":"        shuffle(scenario_rbac)"},{"line_number":1075,"context_line":"        self._run_scenario(scenario_rbac)"}],"source_content_type":"text/x-python","patch_set":20,"id":"7a5de9d1_4f167356","line":1072,"in_reply_to":"7a5de9d1_204a7d84","updated":"2016-01-29 07:30:27.000000000","message":"I would like to shuffle cases among the scenarios (put/delete ...) so I will keep current logic here.\n\n# I got this shuffle idea from you :-)","commit_id":"09b188f03c4a40838ea6b3e54e0714d93077b066"}],"test/functional/test_object.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"d6234f516811a2cf3f239ab08280cf3104604f94","unresolved":false,"context_lines":[{"line_number":66,"context_line":""},{"line_number":67,"context_line":"        # with keystoneauth we need the accounts to have the project domain id"},{"line_number":68,"context_line":"        # persisted as sysmeta prior to testing ACLs. Ensure that is the case"},{"line_number":69,"context_line":"        # by making a POST to the accounts."},{"line_number":70,"context_line":"        def post(url, token, parsed, conn):"},{"line_number":71,"context_line":"            conn.request(\u0027POST\u0027, parsed.path, \u0027\u0027, {\u0027X-Auth-Token\u0027: token})"},{"line_number":72,"context_line":"            return check_response(conn)"}],"source_content_type":"text/x-python","patch_set":14,"id":"3a29b11f_4816cff2","line":69,"updated":"2015-10-23 15:14:29.000000000","message":"A suggestion:\n\n  With keystoneauth we need the accounts to have had the project domain id\n  persisted as sysmeta prior to testing ACLs. This may not be the case if, for\n  example, the account was created using a request with reseller_admin role,\n  when project domain id may not have been known. So we ensure that the\n  project domain id is in sysmeta by making a POST to the accounts using an\n  admin role.","commit_id":"6f854dc8fb3e103ca751951cf0a19e4d0a4dbd97"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"bc133cb65bea0322337f9d084aa4edeb17b64505","unresolved":false,"context_lines":[{"line_number":72,"context_line":"            return check_response(conn)"},{"line_number":73,"context_line":"        resp \u003d retry(post, use_account\u003duse_account)"},{"line_number":74,"context_line":"        resp.read()"},{"line_number":75,"context_line":"        self.assertEqual(resp.status, 204)"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"        return name"},{"line_number":78,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"9a1a9d01_658c0d80","line":75,"updated":"2015-10-01 17:09:02.000000000","message":"OIC!\n\nIs this needed because if test_access_control.py runs first then the account may have been created using reseller_admin role?\n\nNice!\n\nHowever, I wonder if \n\n(a) you could state that really clearly in the comment because it took me a while to understand (and I did not notice until I ran the tests a few times).\n\n(b) would this be better done in test_access_control.py for example when the account is created OR if needed in a module teardown method. That, it is only needed once and there is no risk of a future new test NOT realising that this is needed?\n\nWhat do you think?","commit_id":"6f854dc8fb3e103ca751951cf0a19e4d0a4dbd97"},{"author":{"_account_id":12193,"name":"Hisashi Osanai","email":"osanai.hisashi@jp.fujitsu.com","username":"ho"},"change_message_id":"ff5c4bda063629e03aae3ba99c6313832f97ea98","unresolved":false,"context_lines":[{"line_number":72,"context_line":"            return check_response(conn)"},{"line_number":73,"context_line":"        resp \u003d retry(post, use_account\u003duse_account)"},{"line_number":74,"context_line":"        resp.read()"},{"line_number":75,"context_line":"        self.assertEqual(resp.status, 204)"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"        return name"},{"line_number":78,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"7a2fa921_cd502ad7","line":75,"in_reply_to":"7a2fa921_5b62973f","updated":"2015-10-08 05:25:57.000000000","message":"how about the following comment?\n\nWith Keystoneauth tests which executed before test_object.py create accounts with reseller_admin_role, there is no domain-id in sysmeta.\nThe tests in test_object.py requires domain-id as sysmeta so\nensure that is the case by making a POST to the accounts.","commit_id":"6f854dc8fb3e103ca751951cf0a19e4d0a4dbd97"},{"author":{"_account_id":12193,"name":"Hisashi Osanai","email":"osanai.hisashi@jp.fujitsu.com","username":"ho"},"change_message_id":"cae03cbd045ebad3959bc7e1de5a143b869c318c","unresolved":false,"context_lines":[{"line_number":72,"context_line":"            return check_response(conn)"},{"line_number":73,"context_line":"        resp \u003d retry(post, use_account\u003duse_account)"},{"line_number":74,"context_line":"        resp.read()"},{"line_number":75,"context_line":"        self.assertEqual(resp.status, 204)"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"        return name"},{"line_number":78,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"7a2fa921_5b62973f","line":75,"in_reply_to":"9a1a9d01_658c0d80","updated":"2015-10-08 05:11:34.000000000","message":"Yeah, this is needed because of ordering tests.\n\n(b) is practical but I prefer to choose (a). Because\n- copy b/w cross projects needs to take care about domain-id (it\u0027s current spec).\n- basic rule for functional tests is each test needs to prepare own condition to run.\n- if the logic is added, it become difficult to put a test for copying b/w cross projects without domain-id configuration.\n\nI think I tried to change the file name for workaround of the behavior and approach (b) looks same (need to care about order) with it so I prefer to choose (a).","commit_id":"6f854dc8fb3e103ca751951cf0a19e4d0a4dbd97"}],"test/functional/test_xaccess_control.py":[{"author":{"_account_id":597,"name":"Pete Zaitcev","email":"zaitcev@kotori.zaitcev.us","username":"zaitcev"},"change_message_id":"fb486ebd9f7c71fc8ca138f0bbc300d120ef3cf1","unresolved":false,"context_lines":[{"line_number":180,"context_line":""},{"line_number":181,"context_line":"    def _set_users(self):"},{"line_number":182,"context_line":"        self.users \u003d {}"},{"line_number":183,"context_line":"        for index in xrange(0, 6):"},{"line_number":184,"context_line":"            self.users[tf.swift_test_user[index]] \u003d {"},{"line_number":185,"context_line":"                \u0027account\u0027: tf.swift_test_tenant[index],"},{"line_number":186,"context_line":"                \u0027password\u0027: tf.swift_test_key[index],"}],"source_content_type":"text/x-python","patch_set":11,"id":"da20952f_8969f327","line":183,"updated":"2015-08-28 00:48:27.000000000","message":"Please use range() for compatibility with py3.","commit_id":"62472f13ac9b8d5c3baddb60ffd4c824d31dc26a"},{"author":{"_account_id":12193,"name":"Hisashi Osanai","email":"osanai.hisashi@jp.fujitsu.com","username":"ho"},"change_message_id":"fa0f82535976c204c9098b2de659591b220486bb","unresolved":false,"context_lines":[{"line_number":180,"context_line":""},{"line_number":181,"context_line":"    def _set_users(self):"},{"line_number":182,"context_line":"        self.users \u003d {}"},{"line_number":183,"context_line":"        for index in xrange(0, 6):"},{"line_number":184,"context_line":"            self.users[tf.swift_test_user[index]] \u003d {"},{"line_number":185,"context_line":"                \u0027account\u0027: tf.swift_test_tenant[index],"},{"line_number":186,"context_line":"                \u0027password\u0027: tf.swift_test_key[index],"}],"source_content_type":"text/x-python","patch_set":11,"id":"da20952f_2048f05a","line":183,"in_reply_to":"da20952f_8969f327","updated":"2015-08-28 08:13:51.000000000","message":"I replaced with range.","commit_id":"62472f13ac9b8d5c3baddb60ffd4c824d31dc26a"},{"author":{"_account_id":12193,"name":"Hisashi Osanai","email":"osanai.hisashi@jp.fujitsu.com","username":"ho"},"change_message_id":"fa0f82535976c204c9098b2de659591b220486bb","unresolved":false,"context_lines":[{"line_number":247,"context_line":"                account \u003d storage_url_list[4]"},{"line_number":248,"context_line":"            else:"},{"line_number":249,"context_line":"                account \u003d storage_url_list[4].replace(\u0027AUTH_\u0027,"},{"line_number":250,"context_line":"                                                      reseller_prefix + \u0027_\u0027)"},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"        return \u0027/\u0027.join([part for part in (base_url, account, container, obj)"},{"line_number":253,"context_line":"                         if part])"}],"source_content_type":"text/x-python","patch_set":11,"id":"da20952f_601d880e","line":250,"updated":"2015-08-28 08:13:51.000000000","message":"I replaced index from 4 to -1.","commit_id":"62472f13ac9b8d5c3baddb60ffd4c824d31dc26a"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"0aba4f71bd28e05c13cee53fa72f4d5657b68ef0","unresolved":false,"context_lines":[{"line_number":41,"context_line":"# reseller_prefix       : Reseller prefix that will be used for request url."},{"line_number":42,"context_line":"#                         Can be AUTH or SERVICE to select the user account"},{"line_number":43,"context_line":"#                         prefix or the service prefix respectively"},{"line_number":44,"context_line":"# target_user_name      : an user name which is used for getting the project id"},{"line_number":45,"context_line":"#                         of the target"},{"line_number":46,"context_line":"# auth_user_name        : a user name which is used for getting a token for"},{"line_number":47,"context_line":"#                         X-Auth_Token"}],"source_content_type":"text/x-python","patch_set":13,"id":"da20952f_0f535e3a","line":44,"updated":"2015-09-04 13:23:26.000000000","message":"s/an user/a user/\n\nEnglish can be so irregular :) When a word starts with \u0027u\u0027 spoken like \u0027you\u0027 then use \u0027a\u0027. When a word starts with \u0027u\u0027 spoken like \u0027ugh\u0027, use \u0027an\u0027. e.g.:\n\n  a user prefix\n  an unknown prefix","commit_id":"45807d1357d4ffcea2b74e270d900b3956814910"},{"author":{"_account_id":12193,"name":"Hisashi Osanai","email":"osanai.hisashi@jp.fujitsu.com","username":"ho"},"change_message_id":"17c0eff1b401077dfcde23d3d54a897a15b073d9","unresolved":false,"context_lines":[{"line_number":41,"context_line":"# reseller_prefix       : Reseller prefix that will be used for request url."},{"line_number":42,"context_line":"#                         Can be AUTH or SERVICE to select the user account"},{"line_number":43,"context_line":"#                         prefix or the service prefix respectively"},{"line_number":44,"context_line":"# target_user_name      : an user name which is used for getting the project id"},{"line_number":45,"context_line":"#                         of the target"},{"line_number":46,"context_line":"# auth_user_name        : a user name which is used for getting a token for"},{"line_number":47,"context_line":"#                         X-Auth_Token"}],"source_content_type":"text/x-python","patch_set":13,"id":"da20952f_d3a12c48","line":44,"in_reply_to":"da20952f_0f535e3a","updated":"2015-09-08 11:53:56.000000000","message":"Thanks! I understand the rule.\nDone","commit_id":"45807d1357d4ffcea2b74e270d900b3956814910"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"0aba4f71bd28e05c13cee53fa72f4d5657b68ef0","unresolved":false,"context_lines":[{"line_number":79,"context_line":"# | 6  |  default  | test  | tester6 |ResellerAdmin|"},{"line_number":80,"context_line":"# +----+-----------+-------+---------+-------------+"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"# A senario of put for account, container and object with"},{"line_number":83,"context_line":"# several roles."},{"line_number":84,"context_line":"RBAC_PUT \u003d ["},{"line_number":85,"context_line":"    (\u0027PUT\u0027, None, None, \u0027UUID\u0027, None, None,"}],"source_content_type":"text/x-python","patch_set":13,"id":"da20952f_2f2742cb","line":82,"updated":"2015-09-04 13:23:26.000000000","message":"nit s/senario/scenario/","commit_id":"45807d1357d4ffcea2b74e270d900b3956814910"},{"author":{"_account_id":12193,"name":"Hisashi Osanai","email":"osanai.hisashi@jp.fujitsu.com","username":"ho"},"change_message_id":"17c0eff1b401077dfcde23d3d54a897a15b073d9","unresolved":false,"context_lines":[{"line_number":79,"context_line":"# | 6  |  default  | test  | tester6 |ResellerAdmin|"},{"line_number":80,"context_line":"# +----+-----------+-------+---------+-------------+"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"# A senario of put for account, container and object with"},{"line_number":83,"context_line":"# several roles."},{"line_number":84,"context_line":"RBAC_PUT \u003d ["},{"line_number":85,"context_line":"    (\u0027PUT\u0027, None, None, \u0027UUID\u0027, None, None,"}],"source_content_type":"text/x-python","patch_set":13,"id":"da20952f_d3460c7b","line":82,"in_reply_to":"da20952f_2f2742cb","updated":"2015-09-08 11:53:56.000000000","message":"Done","commit_id":"45807d1357d4ffcea2b74e270d900b3956814910"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"0aba4f71bd28e05c13cee53fa72f4d5657b68ef0","unresolved":false,"context_lines":[{"line_number":247,"context_line":"                account \u003d storage_url_list[-1]"},{"line_number":248,"context_line":"            else:"},{"line_number":249,"context_line":"                account \u003d storage_url_list[-1].replace(\u0027AUTH_\u0027,"},{"line_number":250,"context_line":"                                                       reseller_prefix + \u0027_\u0027)"},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"        return \u0027/\u0027.join([part for part in (base_url, account, container, obj)"},{"line_number":253,"context_line":"                         if part])"}],"source_content_type":"text/x-python","patch_set":13,"id":"da20952f_e5008bad","line":250,"updated":"2015-09-04 13:23:26.000000000","message":"I still think this is wrong, and if I change my cluster service prefix to anything other than \u0027SERVICE\u0027 then these tests fail.\n\nAlso these tests should work if the cluster reseller_prefix is not \u0027AUTH_\u0027.\n\nYou need to use tf.swift_test_service_prefix to get the value of the service_prefix config option in test.conf. The value if test.conf should be configured to be equal to the service reseller prefix defined in proxy-server.conf. But we should not assume that the value \u0027SERVICE\u0027 is used in the test cluster.\n\nSo something like:\n\n  if reseller_prefix \u003d\u003d \u0027SERVICE\u0027:\n      account \u003d storage_url_list[-1]\n      i \u003d account.index(\u0027_\u0027) if \u0027_\u0027 in account else 0\n      project_id \u003d account[i:]\n      account \u003d tf.swift_test_service_prefix + project_id\n  else:\n      # keep the account given in the storage_url\n      account \u003d storage_url_list[-1]","commit_id":"45807d1357d4ffcea2b74e270d900b3956814910"},{"author":{"_account_id":12193,"name":"Hisashi Osanai","email":"osanai.hisashi@jp.fujitsu.com","username":"ho"},"change_message_id":"17c0eff1b401077dfcde23d3d54a897a15b073d9","unresolved":false,"context_lines":[{"line_number":247,"context_line":"                account \u003d storage_url_list[-1]"},{"line_number":248,"context_line":"            else:"},{"line_number":249,"context_line":"                account \u003d storage_url_list[-1].replace(\u0027AUTH_\u0027,"},{"line_number":250,"context_line":"                                                       reseller_prefix + \u0027_\u0027)"},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"        return \u0027/\u0027.join([part for part in (base_url, account, container, obj)"},{"line_number":253,"context_line":"                         if part])"}],"source_content_type":"text/x-python","patch_set":13,"id":"da20952f_ae544bfe","line":250,"in_reply_to":"da20952f_e5008bad","updated":"2015-09-08 11:53:56.000000000","message":"Thanks for the logic. it\u0027s useful.","commit_id":"45807d1357d4ffcea2b74e270d900b3956814910"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"0aba4f71bd28e05c13cee53fa72f4d5657b68ef0","unresolved":false,"context_lines":[{"line_number":262,"context_line":"        self.client.send_request(\u0027PUT\u0027, resource_url, token,"},{"line_number":263,"context_line":"                                 headers\u003dtest_case[\u0027prep_container_header\u0027])"},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"    def _put_object(self, storage_url, token, test_case):"},{"line_number":266,"context_line":"        resource_url \u003d self._create_resource_url("},{"line_number":267,"context_line":"            storage_url,"},{"line_number":268,"context_line":"            test_case[\u0027account_name\u0027],"}],"source_content_type":"text/x-python","patch_set":13,"id":"da20952f_68cf6f7f","line":265,"updated":"2015-09-04 13:23:26.000000000","message":"these _put methods aren\u0027t used - I understand they are here for the follow on patches, but I think I\u0027d prefer to see them being used before merging - so how about adding one of the other method\u0027s scenario set e.g. the DELETE scenarios to this patch?","commit_id":"45807d1357d4ffcea2b74e270d900b3956814910"},{"author":{"_account_id":12193,"name":"Hisashi Osanai","email":"osanai.hisashi@jp.fujitsu.com","username":"ho"},"change_message_id":"17c0eff1b401077dfcde23d3d54a897a15b073d9","unresolved":false,"context_lines":[{"line_number":262,"context_line":"        self.client.send_request(\u0027PUT\u0027, resource_url, token,"},{"line_number":263,"context_line":"                                 headers\u003dtest_case[\u0027prep_container_header\u0027])"},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"    def _put_object(self, storage_url, token, test_case):"},{"line_number":266,"context_line":"        resource_url \u003d self._create_resource_url("},{"line_number":267,"context_line":"            storage_url,"},{"line_number":268,"context_line":"            test_case[\u0027account_name\u0027],"}],"source_content_type":"text/x-python","patch_set":13,"id":"da20952f_ee71e3ac","line":265,"in_reply_to":"da20952f_68cf6f7f","updated":"2015-09-08 11:53:56.000000000","message":"I added delete cases.","commit_id":"45807d1357d4ffcea2b74e270d900b3956814910"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"0aba4f71bd28e05c13cee53fa72f4d5657b68ef0","unresolved":false,"context_lines":[{"line_number":361,"context_line":"        if any((tf.skip, tf.skip2, tf.skip3, tf.skip_if_not_v3,"},{"line_number":362,"context_line":"                tf.skip_service_tokens, tf.skip_if_no_reseller_admin)):"},{"line_number":363,"context_line":"            raise SkipTest"},{"line_number":364,"context_line":"        scenario_rbac \u003d RBAC_PUT"},{"line_number":365,"context_line":"        self._run_scenario(scenario_rbac)"},{"line_number":366,"context_line":""},{"line_number":367,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"da20952f_284bb7b2","line":364,"updated":"2015-09-04 13:23:26.000000000","message":"the scenarios *should* have no coupling i.e. the order of the scenarios should not matter - so we could shuffle them just to be sure?","commit_id":"45807d1357d4ffcea2b74e270d900b3956814910"},{"author":{"_account_id":12193,"name":"Hisashi Osanai","email":"osanai.hisashi@jp.fujitsu.com","username":"ho"},"change_message_id":"17c0eff1b401077dfcde23d3d54a897a15b073d9","unresolved":false,"context_lines":[{"line_number":361,"context_line":"        if any((tf.skip, tf.skip2, tf.skip3, tf.skip_if_not_v3,"},{"line_number":362,"context_line":"                tf.skip_service_tokens, tf.skip_if_no_reseller_admin)):"},{"line_number":363,"context_line":"            raise SkipTest"},{"line_number":364,"context_line":"        scenario_rbac \u003d RBAC_PUT"},{"line_number":365,"context_line":"        self._run_scenario(scenario_rbac)"},{"line_number":366,"context_line":""},{"line_number":367,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"da20952f_ce117f06","line":364,"in_reply_to":"da20952f_284bb7b2","updated":"2015-09-08 11:53:56.000000000","message":"it\u0027s interesting!","commit_id":"45807d1357d4ffcea2b74e270d900b3956814910"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"0aba4f71bd28e05c13cee53fa72f4d5657b68ef0","unresolved":false,"context_lines":[{"line_number":362,"context_line":"                tf.skip_service_tokens, tf.skip_if_no_reseller_admin)):"},{"line_number":363,"context_line":"            raise SkipTest"},{"line_number":364,"context_line":"        scenario_rbac \u003d RBAC_PUT"},{"line_number":365,"context_line":"        self._run_scenario(scenario_rbac)"},{"line_number":366,"context_line":""},{"line_number":367,"context_line":""},{"line_number":368,"context_line":"if __name__ \u003d\u003d \u0027__main__\u0027:"}],"source_content_type":"text/x-python","patch_set":13,"id":"da20952f_c58466d4","line":365,"updated":"2015-09-04 13:23:26.000000000","message":"I\u0027d like the scenarios that require service tokens to be run in a separate test so that only those tests are skipped when a service prefix is not supported. I understand that we should patch devstack to support service prefix, but other clusters may not have it and we should run as many tests as possible against all cluster configurations.\n\nI don\u0027t think it is a big change to the patch.","commit_id":"45807d1357d4ffcea2b74e270d900b3956814910"},{"author":{"_account_id":12193,"name":"Hisashi Osanai","email":"osanai.hisashi@jp.fujitsu.com","username":"ho"},"change_message_id":"17c0eff1b401077dfcde23d3d54a897a15b073d9","unresolved":false,"context_lines":[{"line_number":362,"context_line":"                tf.skip_service_tokens, tf.skip_if_no_reseller_admin)):"},{"line_number":363,"context_line":"            raise SkipTest"},{"line_number":364,"context_line":"        scenario_rbac \u003d RBAC_PUT"},{"line_number":365,"context_line":"        self._run_scenario(scenario_rbac)"},{"line_number":366,"context_line":""},{"line_number":367,"context_line":""},{"line_number":368,"context_line":"if __name__ \u003d\u003d \u0027__main__\u0027:"}],"source_content_type":"text/x-python","patch_set":13,"id":"da20952f_ce289f36","line":365,"in_reply_to":"da20952f_c58466d4","updated":"2015-09-08 11:53:56.000000000","message":"I understand I use your idea. thanks","commit_id":"45807d1357d4ffcea2b74e270d900b3956814910"}],"test/functional/tests.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"bc133cb65bea0322337f9d084aa4edeb17b64505","unresolved":false,"context_lines":[{"line_number":857,"context_line":"        # persisted as sysmeta prior to testing ACLs. Ensure that is the case"},{"line_number":858,"context_line":"        # by making a POST to the accounts."},{"line_number":859,"context_line":"        cls.account.update_metadata()"},{"line_number":860,"context_line":"        cls.account2.update_metadata()"},{"line_number":861,"context_line":""},{"line_number":862,"context_line":""},{"line_number":863,"context_line":"class TestFileDev(Base):"}],"source_content_type":"text/x-python","patch_set":14,"id":"9a1a9d01_e5cd7db8","line":860,"updated":"2015-10-01 17:09:02.000000000","message":"See comment in test_object.py","commit_id":"6f854dc8fb3e103ca751951cf0a19e4d0a4dbd97"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"d6234f516811a2cf3f239ab08280cf3104604f94","unresolved":false,"context_lines":[{"line_number":857,"context_line":"        # persisted as sysmeta prior to testing ACLs. Ensure that is the case"},{"line_number":858,"context_line":"        # by making a POST to the accounts."},{"line_number":859,"context_line":"        cls.account.update_metadata()"},{"line_number":860,"context_line":"        cls.account2.update_metadata()"},{"line_number":861,"context_line":""},{"line_number":862,"context_line":""},{"line_number":863,"context_line":"class TestFileDev(Base):"}],"source_content_type":"text/x-python","patch_set":14,"id":"3a29b11f_c8ae5f98","line":860,"in_reply_to":"7a2fa921_fb536369","updated":"2015-10-23 15:14:29.000000000","message":"See suggestion in test_object.py","commit_id":"6f854dc8fb3e103ca751951cf0a19e4d0a4dbd97"},{"author":{"_account_id":12193,"name":"Hisashi Osanai","email":"osanai.hisashi@jp.fujitsu.com","username":"ho"},"change_message_id":"cae03cbd045ebad3959bc7e1de5a143b869c318c","unresolved":false,"context_lines":[{"line_number":857,"context_line":"        # persisted as sysmeta prior to testing ACLs. Ensure that is the case"},{"line_number":858,"context_line":"        # by making a POST to the accounts."},{"line_number":859,"context_line":"        cls.account.update_metadata()"},{"line_number":860,"context_line":"        cls.account2.update_metadata()"},{"line_number":861,"context_line":""},{"line_number":862,"context_line":""},{"line_number":863,"context_line":"class TestFileDev(Base):"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a2fa921_fb536369","line":860,"in_reply_to":"9a1a9d01_e5cd7db8","updated":"2015-10-08 05:11:34.000000000","message":"Done","commit_id":"6f854dc8fb3e103ca751951cf0a19e4d0a4dbd97"}],"test/sample.conf":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"8b30ba5b0225cdf836a82c257aeebd5650f2cae8","unresolved":false,"context_lines":[{"line_number":58,"context_line":"# account contains an underscore."},{"line_number":59,"context_line":"#service_prefix \u003d SERVICE"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"# Sixth user is required for access control tests (test_ac.py)."},{"line_number":62,"context_line":"# Account must have a role for reseller_admin_role(keystoneauth)."},{"line_number":63,"context_line":"#account6 \u003d test"},{"line_number":64,"context_line":"#username6 \u003d tester6"}],"source_content_type":"text/plain","patch_set":8,"id":"1a4dcd0f_b95581fa","line":61,"updated":"2015-08-07 15:01:52.000000000","message":"test_ac.py does not exit - I would suggest NOT including reference to a filename that could change","commit_id":"f491f4df47aa29d5e69693d30961784f3f5f3237"},{"author":{"_account_id":12193,"name":"Hisashi Osanai","email":"osanai.hisashi@jp.fujitsu.com","username":"ho"},"change_message_id":"8dd90381f03aa9f6ea29d7373ce30975082d73b7","unresolved":false,"context_lines":[{"line_number":58,"context_line":"# account contains an underscore."},{"line_number":59,"context_line":"#service_prefix \u003d SERVICE"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"# Sixth user is required for access control tests (test_ac.py)."},{"line_number":62,"context_line":"# Account must have a role for reseller_admin_role(keystoneauth)."},{"line_number":63,"context_line":"#account6 \u003d test"},{"line_number":64,"context_line":"#username6 \u003d tester6"}],"source_content_type":"text/plain","patch_set":8,"id":"1a4dcd0f_74c0ce50","line":61,"in_reply_to":"1a4dcd0f_b95581fa","updated":"2015-08-11 18:49:37.000000000","message":"Done","commit_id":"f491f4df47aa29d5e69693d30961784f3f5f3237"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"ca1f46ce1d833e1e941d581b3eb862cd79f31022","unresolved":false,"context_lines":[{"line_number":59,"context_line":"#service_prefix \u003d SERVICE"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"# Sixth user is required for access control tests."},{"line_number":62,"context_line":"# Account must have a role for reseller_admin_role(keystoneauth)."},{"line_number":63,"context_line":"#account6 \u003d test"},{"line_number":64,"context_line":"#username6 \u003d tester6"},{"line_number":65,"context_line":"#password6 \u003d testing6"}],"source_content_type":"text/plain","patch_set":20,"id":"9a68dd71_dcba8971","line":62,"updated":"2016-01-26 09:58:29.000000000","message":"In IRC talk with Hisashi, I found we need to turn on all accounts above (i.e. from account1 to account6) to test run test_access_control.py. (Otherwise, it will be skipped)\n\nIMO, it\u0027s better to explain the constraint here for newbees or operators (users runnable fncttional tests) even if such a constraint described in the code.","commit_id":"09b188f03c4a40838ea6b3e54e0714d93077b066"},{"author":{"_account_id":12193,"name":"Hisashi Osanai","email":"osanai.hisashi@jp.fujitsu.com","username":"ho"},"change_message_id":"4bee9ad9df24e8e85149c1662b4f5cd53676e6d1","unresolved":false,"context_lines":[{"line_number":59,"context_line":"#service_prefix \u003d SERVICE"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"# Sixth user is required for access control tests."},{"line_number":62,"context_line":"# Account must have a role for reseller_admin_role(keystoneauth)."},{"line_number":63,"context_line":"#account6 \u003d test"},{"line_number":64,"context_line":"#username6 \u003d tester6"},{"line_number":65,"context_line":"#password6 \u003d testing6"}],"source_content_type":"text/plain","patch_set":20,"id":"7a5de9d1_4af73ef5","line":62,"in_reply_to":"7a5de9d1_8a48325d","updated":"2016-01-29 10:39:14.000000000","message":"Done","commit_id":"09b188f03c4a40838ea6b3e54e0714d93077b066"},{"author":{"_account_id":12193,"name":"Hisashi Osanai","email":"osanai.hisashi@jp.fujitsu.com","username":"ho"},"change_message_id":"7243114b758b62faa258ee017609978372174bd7","unresolved":false,"context_lines":[{"line_number":59,"context_line":"#service_prefix \u003d SERVICE"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"# Sixth user is required for access control tests."},{"line_number":62,"context_line":"# Account must have a role for reseller_admin_role(keystoneauth)."},{"line_number":63,"context_line":"#account6 \u003d test"},{"line_number":64,"context_line":"#username6 \u003d tester6"},{"line_number":65,"context_line":"#password6 \u003d testing6"}],"source_content_type":"text/plain","patch_set":20,"id":"7a5de9d1_ba1e4761","line":62,"in_reply_to":"7a5de9d1_8a48325d","updated":"2016-01-29 07:30:27.000000000","message":"Yeah, it\u0027s necessary. I will add both in last patch of this patch chain.","commit_id":"09b188f03c4a40838ea6b3e54e0714d93077b066"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"f76b067c3af568d05d6b3c3c0b3318a95f164bb0","unresolved":false,"context_lines":[{"line_number":59,"context_line":"#service_prefix \u003d SERVICE"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"# Sixth user is required for access control tests."},{"line_number":62,"context_line":"# Account must have a role for reseller_admin_role(keystoneauth)."},{"line_number":63,"context_line":"#account6 \u003d test"},{"line_number":64,"context_line":"#username6 \u003d tester6"},{"line_number":65,"context_line":"#password6 \u003d testing6"}],"source_content_type":"text/plain","patch_set":20,"id":"7a5de9d1_8a48325d","line":62,"in_reply_to":"9a68dd71_dcba8971","updated":"2016-01-27 19:26:42.000000000","message":"Can we mention in the comment that this user should have ResellerAdmin role on the \u0027test\u0027 project (I made mistake of creating test6 project and assigning the role on that)","commit_id":"09b188f03c4a40838ea6b3e54e0714d93077b066"},{"author":{"_account_id":12193,"name":"Hisashi Osanai","email":"osanai.hisashi@jp.fujitsu.com","username":"ho"},"change_message_id":"4bee9ad9df24e8e85149c1662b4f5cd53676e6d1","unresolved":false,"context_lines":[{"line_number":59,"context_line":"#service_prefix \u003d SERVICE"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"# Sixth user is required for access control tests."},{"line_number":62,"context_line":"# Account must have a role for reseller_admin_role(keystoneauth)."},{"line_number":63,"context_line":"#account6 \u003d test"},{"line_number":64,"context_line":"#username6 \u003d tester6"},{"line_number":65,"context_line":"#password6 \u003d testing6"}],"source_content_type":"text/plain","patch_set":20,"id":"7a5de9d1_2af442f0","line":62,"in_reply_to":"9a68dd71_dcba8971","updated":"2016-01-29 10:39:14.000000000","message":"Done","commit_id":"09b188f03c4a40838ea6b3e54e0714d93077b066"}]}
