)]}'
{"tempest/common/cred_client.py":[{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"b321fe7441fc3a702699f3df5ba45476d289c1ae","unresolved":false,"context_lines":[{"line_number":62,"context_line":"            self.identity_client.create_role(role_name)"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    def assign_user_role(self, user, role_name, project_or_domain,"},{"line_number":65,"context_line":"                         target_type\u003d\u0027project\u0027):"},{"line_number":66,"context_line":"        role \u003d self._check_role_exists(role_name)"},{"line_number":67,"context_line":"        if not role:"},{"line_number":68,"context_line":"            msg \u003d \u0027No \"%s\" role found\u0027 % role_name"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a2fa921_d8b5bf7e","line":65,"updated":"2015-10-05 22:22:44.000000000","message":"this will work. Suggest an alternative\n\n def assign_user_role(self, user, role_name, project\u003dNone, domain\u003dNone):\n     if project and domain:\n         raise Exception(project and domain are mutually exclusive)\n\n     if project:\n         self._assign_user_role_on_project(...)\n     else:\n         self._assign_user_role_on_domain(...)","commit_id":"403630e6246ca24ac93906f1c6640fc6a29d9780"},{"author":{"_account_id":16425,"name":"Bin Bin Cong","email":"binbin.cong@easystack.cn","username":"stephen_cong"},"change_message_id":"bafd8c64e17e890f2c549693297b0c55717b32a4","unresolved":false,"context_lines":[{"line_number":114,"context_line":"    def delete_project(self, project_id):"},{"line_number":115,"context_line":"        self.identity_client.delete_tenant(project_id)"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    def _assign_user_role_on_domain(self, user, role, domain\u003dNone):"},{"line_number":118,"context_line":"        if domain is None:"},{"line_number":119,"context_line":"            domain \u003d self.creds_domain"},{"line_number":120,"context_line":"        LOG.debug(\"Role %s not assigned on domain %s for user %s using v2\" % ("}],"source_content_type":"text/x-python","patch_set":6,"id":"3a29b11f_41c00150","line":117,"updated":"2015-10-23 02:53:32.000000000","message":"I am wondering if assigning a domain role to user is needed for V2 client since there is no domain concept in keytone V2","commit_id":"403630e6246ca24ac93906f1c6640fc6a29d9780"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"b321fe7441fc3a702699f3df5ba45476d289c1ae","unresolved":false,"context_lines":[{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    def _assign_user_role_on_domain(self, user, role, domain\u003dNone):"},{"line_number":118,"context_line":"        if domain is None:"},{"line_number":119,"context_line":"            domain \u003d self.creds_domain"},{"line_number":120,"context_line":"        LOG.debug(\"Role %s not assigned on domain %s for user %s using v2\" % ("},{"line_number":121,"context_line":"            role[\u0027id\u0027], domain[\u0027id\u0027], user[\u0027id\u0027]))"},{"line_number":122,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"7a2fa921_d86cdf0a","line":119,"updated":"2015-10-05 22:22:44.000000000","message":"what\u0027s creds_domain? Perhaps a doc string here with an explanation will help the reviewers?","commit_id":"403630e6246ca24ac93906f1c6640fc6a29d9780"},{"author":{"_account_id":15640,"name":"Roxana Gherle","email":"roxana.gherle@hpe.com","username":"roxana-gherle"},"change_message_id":"8abf9546a522982cb3e2229ff75d3f43a8b1bf15","unresolved":false,"context_lines":[{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    def _assign_user_role_on_domain(self, user, role, domain\u003dNone):"},{"line_number":118,"context_line":"        if domain is None:"},{"line_number":119,"context_line":"            domain \u003d self.creds_domain"},{"line_number":120,"context_line":"        LOG.debug(\"Role %s not assigned on domain %s for user %s using v2\" % ("},{"line_number":121,"context_line":"            role[\u0027id\u0027], domain[\u0027id\u0027], user[\u0027id\u0027]))"},{"line_number":122,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"7a2fa921_f4ef3bae","line":119,"in_reply_to":"7a2fa921_d86cdf0a","updated":"2015-10-06 18:02:23.000000000","message":"will creds_domain be existent at all for V2CredsClient? I only see it initialized in V3CredsClient __init__.","commit_id":"403630e6246ca24ac93906f1c6640fc6a29d9780"},{"author":{"_account_id":15640,"name":"Roxana Gherle","email":"roxana.gherle@hpe.com","username":"roxana-gherle"},"change_message_id":"8abf9546a522982cb3e2229ff75d3f43a8b1bf15","unresolved":false,"context_lines":[{"line_number":158,"context_line":""},{"line_number":159,"context_line":"    def _assign_user_role_on_domain(self, user, role, domain\u003dNone):"},{"line_number":160,"context_line":"        if domain is None:"},{"line_number":161,"context_line":"            domain \u003d self.creds_domain"},{"line_number":162,"context_line":"        try:"},{"line_number":163,"context_line":"            self.identity_client.assign_user_role_on_domain("},{"line_number":164,"context_line":"                domain[\u0027id\u0027], user[\u0027id\u0027], role[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a2fa921_b4f30373","line":161,"updated":"2015-10-06 18:02:23.000000000","message":"I am wondering if we shouldn\u0027t choose the \u0027default\u0027 domain always here. Because of this line https://github.com/openstack/keystone/blob/master/etc/policy.v3cloudsample.json#L3 in the v3 Keystone policy file we will have to choose one single admin domain id and the default domain seems the easiest choice if we think about devstack setup as well.","commit_id":"403630e6246ca24ac93906f1c6640fc6a29d9780"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"a135880f98566b1ece1ac137ec474139e3d36727","unresolved":false,"context_lines":[{"line_number":131,"context_line":"    def assign_user_role_on_domain(self, user, domain, role):"},{"line_number":132,"context_line":"        if domain is None:"},{"line_number":133,"context_line":"            domain \u003d self.creds_domain"},{"line_number":134,"context_line":"        LOG.debug(\"Role %s not assigned on domain %s for user %s using v2\" % ("},{"line_number":135,"context_line":"            role[\u0027id\u0027], domain[\u0027id\u0027], user[\u0027id\u0027]))"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"dab17558_0e72b1e5","line":134,"updated":"2016-05-06 09:50:15.000000000","message":"So, just to be sure there\u0027s no typo, the method is called \"assign_user_role_on_domain\" and all it does is log a \u0027role *not* assigned on domain\u0027 ?","commit_id":"8f5c94bcb1a64e834a3e0921b2364f26ff644e1a"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"15db614839fcee1f29f8848f5ff4701e753fcec1","unresolved":false,"context_lines":[{"line_number":128,"context_line":"        self.roles_client.assign_user_role(project[\u0027id\u0027], user[\u0027id\u0027],"},{"line_number":129,"context_line":"                                           role[\u0027id\u0027])"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"    def assign_user_role_on_domain(self, user, domain, role):"},{"line_number":132,"context_line":"        if domain is None:"},{"line_number":133,"context_line":"            domain \u003d self.creds_domain"},{"line_number":134,"context_line":"        LOG.debug(\"Role %s not assigned on domain %s for user %s using v2\" % ("}],"source_content_type":"text/x-python","patch_set":11,"id":"dab17558_ce4ee995","line":131,"updated":"2016-05-06 09:50:39.000000000","message":"So, just to be sure there\u0027s no typo, the method is called \"assign_user_role_on_domain\" and all it does is log a \u0027role *not* assigned on domain\u0027 ?","commit_id":"bea82de5a81d8b414342796197df31ede1fa0216"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"d43e613ff600e9b375f759444cd53d490fd646b5","unresolved":false,"context_lines":[{"line_number":129,"context_line":"                                           role[\u0027id\u0027])"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"    def assign_user_role_on_domain(self, user, domain, role):"},{"line_number":132,"context_line":"        if domain is None:"},{"line_number":133,"context_line":"            domain \u003d self.creds_domain"},{"line_number":134,"context_line":"        LOG.debug(\"Role %s not assigned on domain %s for user %s using v2\" % ("},{"line_number":135,"context_line":"            role[\u0027id\u0027], domain[\u0027id\u0027], user[\u0027id\u0027]))"}],"source_content_type":"text/x-python","patch_set":20,"id":"dab17558_f205027a","line":132,"updated":"2016-05-10 16:16:05.000000000","message":"Why not raise a NotImplementedError here ? We shouldn\"t ever call assign_user_role_on_domain with Keystone V2, as domain doesn\"t exist in V2.","commit_id":"6cd830ca7efe3e530ac87065851d2ecb4112442f"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"57a11702be66112409bc3f0e255c06fb092618de","unresolved":false,"context_lines":[{"line_number":129,"context_line":"                                           role[\u0027id\u0027])"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"    def assign_user_role_on_domain(self, user, domain, role):"},{"line_number":132,"context_line":"        if domain is None:"},{"line_number":133,"context_line":"            domain \u003d self.creds_domain"},{"line_number":134,"context_line":"        LOG.debug(\"Role %s not assigned on domain %s for user %s using v2\" % ("},{"line_number":135,"context_line":"            role[\u0027id\u0027], domain[\u0027id\u0027], user[\u0027id\u0027]))"}],"source_content_type":"text/x-python","patch_set":20,"id":"dab17558_6c810e8f","line":132,"in_reply_to":"dab17558_f205027a","updated":"2016-05-11 10:53:47.000000000","message":"ok, sounds like a good option","commit_id":"6cd830ca7efe3e530ac87065851d2ecb4112442f"},{"author":{"_account_id":5803,"name":"Attila Fazekas","email":"afazekas@redhat.com","username":"afazekas"},"change_message_id":"e8b2132e048bc97663bfbf0bc9f667d668f5f11d","unresolved":false,"context_lines":[{"line_number":181,"context_line":"                                                      role[\u0027id\u0027])"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"    def assign_user_role_on_domain(self, user, domain, role_name):"},{"line_number":184,"context_line":"        if domain is None:"},{"line_number":185,"context_line":"            domain \u003d self.creds_domain"},{"line_number":186,"context_line":"        role \u003d self._check_role_exists(role_name)"},{"line_number":187,"context_line":"        if not role:"}],"source_content_type":"text/x-python","patch_set":21,"id":"dab17558_a1ce5857","line":184,"updated":"2016-05-17 11:24:00.000000000","message":"Don\u0027t you think this kind of magic is confusing ?","commit_id":"88541b7163e35d671cae6b8ea59ae89bbe492d59"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"43a7d03dd4943c53e70b5722a2cf4fd207c7b607","unresolved":false,"context_lines":[{"line_number":181,"context_line":"                                                      role[\u0027id\u0027])"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"    def assign_user_role_on_domain(self, user, domain, role_name):"},{"line_number":184,"context_line":"        if domain is None:"},{"line_number":185,"context_line":"            domain \u003d self.creds_domain"},{"line_number":186,"context_line":"        role \u003d self._check_role_exists(role_name)"},{"line_number":187,"context_line":"        if not role:"}],"source_content_type":"text/x-python","patch_set":21,"id":"bab6814e_e803e90b","line":184,"in_reply_to":"dab17558_a1ce5857","updated":"2016-05-18 09:50:51.000000000","message":"This is done for two reasons:\n- prevent the domain from being None\n- default to creds_domain that is the default domain to be used if none is specified\n\nI think having a same default for domain is good, but perhaps some documentation could clarify this.","commit_id":"88541b7163e35d671cae6b8ea59ae89bbe492d59"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"e249ea075ef0043757936d7a53912c73d6d4cf78","unresolved":false,"context_lines":[{"line_number":204,"context_line":"                domain[\u0027id\u0027], user[\u0027id\u0027], role[\u0027id\u0027])"},{"line_number":205,"context_line":"        except lib_exc.Conflict:"},{"line_number":206,"context_line":"            LOG.debug("},{"line_number":207,"context_line":"                \"Role %s already assigned on domain %s for user %s\" % ("},{"line_number":208,"context_line":"                    role[\u0027id\u0027], domain[\u0027id\u0027], user[\u0027id\u0027]))"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"bab6814e_403bacd1","line":207,"updated":"2016-05-19 09:34:50.000000000","message":"Use \",\" instead of \u0027%\u0027 to avoid possibly costly string interpolation.","commit_id":"f277ff78bb4a90d19574c1735caa416ce926d0e5"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"e435032adb78bab04dbe8694b6112bd75b7ff882","unresolved":false,"context_lines":[{"line_number":77,"context_line":"                role[\u0027id\u0027], project[\u0027id\u0027], user[\u0027id\u0027]))"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    @abc.abstractmethod"},{"line_number":80,"context_line":"    def assign_user_role_on_domain(self, user, role_name, domain\u003dNone):"},{"line_number":81,"context_line":"        \"\"\"Assign the specified role on a domain"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"        :param user: a user dict"}],"source_content_type":"text/x-python","patch_set":29,"id":"bab6814e_ab84d7b0","line":80,"updated":"2016-05-25 16:20:24.000000000","message":"Is this really necessary to add to the abstract class? This is strictly a v3 thing right. Is there anything wrong with just having it be a V3CredsClient only method? You\u0027re already if blocking the call on v3 auth so I don\u0027t think we need to expand the generic interface","commit_id":"44ce1fd9adcd37dea47f1210778a075fde7480ca"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"5157d20312c78f39cd10021fd57be2564ee079da","unresolved":false,"context_lines":[{"line_number":77,"context_line":"                role[\u0027id\u0027], project[\u0027id\u0027], user[\u0027id\u0027]))"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    @abc.abstractmethod"},{"line_number":80,"context_line":"    def assign_user_role_on_domain(self, user, role_name, domain\u003dNone):"},{"line_number":81,"context_line":"        \"\"\"Assign the specified role on a domain"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"        :param user: a user dict"}],"source_content_type":"text/x-python","patch_set":29,"id":"bab6814e_7c456d41","line":80,"in_reply_to":"bab6814e_ab84d7b0","updated":"2016-05-26 11:15:43.000000000","message":"I agree, it is not necessary - I initially thought it would be good to have a common v2/v3 interface for clients of this API, but ultimately they\u0027ll need to know whether it\u0027s v2 or v3 and behave accordingly.","commit_id":"44ce1fd9adcd37dea47f1210778a075fde7480ca"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"8e4253647cd2f8ceaf8178bb68c5c316f0ea3d5b","unresolved":false,"context_lines":[{"line_number":180,"context_line":"        \"\"\""},{"line_number":181,"context_line":"        # NOTE(andreaf) This method is very specific to the v3 case, and"},{"line_number":182,"context_line":"        # because of that it\u0027s not defined in the parent class."},{"line_number":183,"context_line":"        if domain is None:"},{"line_number":184,"context_line":"            domain \u003d self.creds_domain"},{"line_number":185,"context_line":"        role \u003d self._check_role_exists(role_name)"},{"line_number":186,"context_line":"        if not role:"},{"line_number":187,"context_line":"            msg \u003d \u0027No \"%s\" role found\u0027 % role_name"}],"source_content_type":"text/x-python","patch_set":31,"id":"bab6814e_7ddb957c","line":184,"range":{"start_line":183,"start_character":0,"end_line":184,"end_character":38},"updated":"2016-05-26 16:44:02.000000000","message":"In this patch, this domain is not specified. so the default domain is used.\n\nHowever, the tests don\u0027t seem to cover this case.","commit_id":"4bee2e765a77f3f3012e18a1f2db2f076fa00c39"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"ad46d889ddfda8791a64164a375b86f30ae7b7fb","unresolved":false,"context_lines":[{"line_number":180,"context_line":"        \"\"\""},{"line_number":181,"context_line":"        # NOTE(andreaf) This method is very specific to the v3 case, and"},{"line_number":182,"context_line":"        # because of that it\u0027s not defined in the parent class."},{"line_number":183,"context_line":"        if domain is None:"},{"line_number":184,"context_line":"            domain \u003d self.creds_domain"},{"line_number":185,"context_line":"        role \u003d self._check_role_exists(role_name)"},{"line_number":186,"context_line":"        if not role:"},{"line_number":187,"context_line":"            msg \u003d \u0027No \"%s\" role found\u0027 % role_name"}],"source_content_type":"text/x-python","patch_set":31,"id":"9abb7d3a_f8ec6091","line":184,"range":{"start_line":183,"start_character":0,"end_line":184,"end_character":38},"in_reply_to":"bab6814e_5d9cd10d","updated":"2016-05-27 09:36:32.000000000","message":"It\u0027s fine to me to not have a perfect coverage atm. A follow-up patch would be great.","commit_id":"4bee2e765a77f3f3012e18a1f2db2f076fa00c39"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"479342c6ff4d73cdf419384250c53b39a6f2551c","unresolved":false,"context_lines":[{"line_number":180,"context_line":"        \"\"\""},{"line_number":181,"context_line":"        # NOTE(andreaf) This method is very specific to the v3 case, and"},{"line_number":182,"context_line":"        # because of that it\u0027s not defined in the parent class."},{"line_number":183,"context_line":"        if domain is None:"},{"line_number":184,"context_line":"            domain \u003d self.creds_domain"},{"line_number":185,"context_line":"        role \u003d self._check_role_exists(role_name)"},{"line_number":186,"context_line":"        if not role:"},{"line_number":187,"context_line":"            msg \u003d \u0027No \"%s\" role found\u0027 % role_name"}],"source_content_type":"text/x-python","patch_set":31,"id":"bab6814e_5d9cd10d","line":184,"range":{"start_line":183,"start_character":0,"end_line":184,"end_character":38},"in_reply_to":"bab6814e_7ddb957c","updated":"2016-05-26 16:55:15.000000000","message":"Yes, however there is no coverage at all for the cred_client atm, only indirectly via the test_dynamic_creds. If it\u0027s ok with you I would add a new test module as a follow-up patch.","commit_id":"4bee2e765a77f3f3012e18a1f2db2f076fa00c39"},{"author":{"_account_id":15086,"name":"WangXiaoFei","email":"xiaofeix.wang@icloud.com","username":"wangxf"},"change_message_id":"cd41eed6cb3955c8faccc3e8b56f0c0acd1f0848","unresolved":false,"context_lines":[{"line_number":190,"context_line":"            self.roles_client.assign_user_role_on_domain("},{"line_number":191,"context_line":"                domain[\u0027id\u0027], user[\u0027id\u0027], role[\u0027id\u0027])"},{"line_number":192,"context_line":"        except lib_exc.Conflict:"},{"line_number":193,"context_line":"            LOG.debug(\"Role %s already assigned on domain %s for user %s\","},{"line_number":194,"context_line":"                      role[\u0027id\u0027], domain[\u0027id\u0027], user[\u0027id\u0027])"},{"line_number":195,"context_line":""},{"line_number":196,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"bab6814e_a2b68e3b","line":193,"range":{"start_line":193,"start_character":16,"end_line":193,"end_character":21},"updated":"2016-05-26 11:54:32.000000000","message":"I suggest that the \u0027LOG.warning\u0027 replace the \u0027LOG.debug\u0027.\nAnd remind the operator has a warning about that Role already assigned on. \nBut this only advice.Thx","commit_id":"4bee2e765a77f3f3012e18a1f2db2f076fa00c39"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"ad46d889ddfda8791a64164a375b86f30ae7b7fb","unresolved":false,"context_lines":[{"line_number":190,"context_line":"            self.roles_client.assign_user_role_on_domain("},{"line_number":191,"context_line":"                domain[\u0027id\u0027], user[\u0027id\u0027], role[\u0027id\u0027])"},{"line_number":192,"context_line":"        except lib_exc.Conflict:"},{"line_number":193,"context_line":"            LOG.debug(\"Role %s already assigned on domain %s for user %s\","},{"line_number":194,"context_line":"                      role[\u0027id\u0027], domain[\u0027id\u0027], user[\u0027id\u0027])"},{"line_number":195,"context_line":""},{"line_number":196,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"9abb7d3a_58b00c8c","line":193,"range":{"start_line":193,"start_character":16,"end_line":193,"end_character":21},"in_reply_to":"bab6814e_48c5388c","updated":"2016-05-27 09:36:32.000000000","message":"LOG.info would work too.","commit_id":"4bee2e765a77f3f3012e18a1f2db2f076fa00c39"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"9e3fd0cc0a459c401b8aa4027e8a01c7b3543106","unresolved":false,"context_lines":[{"line_number":190,"context_line":"            self.roles_client.assign_user_role_on_domain("},{"line_number":191,"context_line":"                domain[\u0027id\u0027], user[\u0027id\u0027], role[\u0027id\u0027])"},{"line_number":192,"context_line":"        except lib_exc.Conflict:"},{"line_number":193,"context_line":"            LOG.debug(\"Role %s already assigned on domain %s for user %s\","},{"line_number":194,"context_line":"                      role[\u0027id\u0027], domain[\u0027id\u0027], user[\u0027id\u0027])"},{"line_number":195,"context_line":""},{"line_number":196,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"bab6814e_48c5388c","line":193,"range":{"start_line":193,"start_character":16,"end_line":193,"end_character":21},"in_reply_to":"bab6814e_a2b68e3b","updated":"2016-05-26 15:07:59.000000000","message":"I\u0027m not sure there\u0027s a cloud deployment that could cause newly provisioned admin accounts to have a role on the domain by default; but I added this check because the credential client may be used in future by other clients, not only the dynamic creds provider. \nI didn\u0027t use warning because if the role is already assigned then the expected status is achieved in any case; but hitting this may also mean that something is not going as planned, so warning can be a valid option as well.\nIf I have to re-spin this change I\u0027ll update the log level to warning.","commit_id":"4bee2e765a77f3f3012e18a1f2db2f076fa00c39"}],"tempest/tests/common/test_dynamic_creds.py":[{"author":{"_account_id":8866,"name":"Raildo Mascena de Sousa Filho","email":"rmascena@redhat.com","username":"raildo"},"change_message_id":"fa7b3d0b7eeb1094c762f9d5aff12e54aa25e880","unresolved":false,"context_lines":[{"line_number":43,"context_line":""},{"line_number":44,"context_line":"class TestDynamicCredentialProvider(base.TestCase):"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    fixed_params \u003d {\u0027name\u0027: \u0027test class\u0027,"},{"line_number":47,"context_line":"                    \u0027identity_version\u0027: \u0027v2\u0027,"},{"line_number":48,"context_line":"                    \u0027admin_role\u0027: \u0027admin\u0027}"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    token_client \u003d v2_token_client"},{"line_number":51,"context_line":"    iden_client \u003d v2_iden_client"},{"line_number":52,"context_line":"    roles_client \u003d v2_roles_client"},{"line_number":53,"context_line":"    tenants_client \u003d v2_tenants_client"},{"line_number":54,"context_line":"    users_client \u003d v2_users_client"},{"line_number":55,"context_line":"    token_client_class \u003d token_client.TokenClient"},{"line_number":56,"context_line":"    fake_response \u003d fake_identity._fake_v2_response"},{"line_number":57,"context_line":"    assign_role_on_project \u003d \u0027assign_user_role\u0027"},{"line_number":58,"context_line":"    tenants_client_class \u003d tenants_client.TenantsClient"},{"line_number":59,"context_line":"    delete_tenant \u003d \u0027delete_tenant\u0027"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def setUp(self):"},{"line_number":62,"context_line":"        super(TestDynamicCredentialProvider, self).setUp()"}],"source_content_type":"text/x-python","patch_set":27,"id":"bab6814e_2730659e","line":59,"range":{"start_line":46,"start_character":4,"end_line":59,"end_character":35},"updated":"2016-05-24 13:48:01.000000000","message":"Is this shouldn\u0027t be made inside the setup?","commit_id":"8343b53b9c9d8d6c2449ed738aabf8cdc8c155ac"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"b0bb0a97bf2b6ffd3c1649b4f8c5caf9e3f0b03f","unresolved":false,"context_lines":[{"line_number":43,"context_line":""},{"line_number":44,"context_line":"class TestDynamicCredentialProvider(base.TestCase):"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    fixed_params \u003d {\u0027name\u0027: \u0027test class\u0027,"},{"line_number":47,"context_line":"                    \u0027identity_version\u0027: \u0027v2\u0027,"},{"line_number":48,"context_line":"                    \u0027admin_role\u0027: \u0027admin\u0027}"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    token_client \u003d v2_token_client"},{"line_number":51,"context_line":"    iden_client \u003d v2_iden_client"},{"line_number":52,"context_line":"    roles_client \u003d v2_roles_client"},{"line_number":53,"context_line":"    tenants_client \u003d v2_tenants_client"},{"line_number":54,"context_line":"    users_client \u003d v2_users_client"},{"line_number":55,"context_line":"    token_client_class \u003d token_client.TokenClient"},{"line_number":56,"context_line":"    fake_response \u003d fake_identity._fake_v2_response"},{"line_number":57,"context_line":"    assign_role_on_project \u003d \u0027assign_user_role\u0027"},{"line_number":58,"context_line":"    tenants_client_class \u003d tenants_client.TenantsClient"},{"line_number":59,"context_line":"    delete_tenant \u003d \u0027delete_tenant\u0027"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def setUp(self):"},{"line_number":62,"context_line":"        super(TestDynamicCredentialProvider, self).setUp()"}],"source_content_type":"text/x-python","patch_set":27,"id":"bab6814e_6bf985c8","line":59,"range":{"start_line":46,"start_character":4,"end_line":59,"end_character":35},"in_reply_to":"bab6814e_2730659e","updated":"2016-05-24 20:13:56.000000000","message":"Why? This is set once per test class, it doesn\u0027t have to be reset for every test cases. It\u0027s here to have different settings for the V2 and V3 test classes.","commit_id":"8343b53b9c9d8d6c2449ed738aabf8cdc8c155ac"},{"author":{"_account_id":8866,"name":"Raildo Mascena de Sousa Filho","email":"rmascena@redhat.com","username":"raildo"},"change_message_id":"fa7b3d0b7eeb1094c762f9d5aff12e54aa25e880","unresolved":false,"context_lines":[{"line_number":607,"context_line":""},{"line_number":608,"context_line":"class TestDynamicCredentialProviderV3(TestDynamicCredentialProvider):"},{"line_number":609,"context_line":""},{"line_number":610,"context_line":"    fixed_params \u003d {\u0027name\u0027: \u0027test class\u0027,"},{"line_number":611,"context_line":"                    \u0027identity_version\u0027: \u0027v3\u0027,"},{"line_number":612,"context_line":"                    \u0027admin_role\u0027: \u0027admin\u0027}"},{"line_number":613,"context_line":""},{"line_number":614,"context_line":"    token_client \u003d v3_token_client"},{"line_number":615,"context_line":"    iden_client \u003d v3_iden_client"},{"line_number":616,"context_line":"    roles_client \u003d v3_roles_client"},{"line_number":617,"context_line":"    tenants_client \u003d v3_projects_client"},{"line_number":618,"context_line":"    users_client \u003d v3_users_client"},{"line_number":619,"context_line":"    token_client_class \u003d token_client.V3TokenClient"},{"line_number":620,"context_line":"    fake_response \u003d fake_identity._fake_v3_response"},{"line_number":621,"context_line":"    assign_role_on_project \u003d \u0027assign_user_role_on_project\u0027"},{"line_number":622,"context_line":"    tenants_client_class \u003d tenants_client.ProjectsClient"},{"line_number":623,"context_line":"    delete_tenant \u003d \u0027delete_project\u0027"},{"line_number":624,"context_line":""},{"line_number":625,"context_line":"    def setUp(self):"},{"line_number":626,"context_line":"        super(TestDynamicCredentialProviderV3, self).setUp()"}],"source_content_type":"text/x-python","patch_set":27,"id":"bab6814e_a71c5514","line":623,"range":{"start_line":610,"start_character":0,"end_line":623,"end_character":36},"updated":"2016-05-24 13:48:01.000000000","message":"same here","commit_id":"8343b53b9c9d8d6c2449ed738aabf8cdc8c155ac"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"ad46d889ddfda8791a64164a375b86f30ae7b7fb","unresolved":false,"context_lines":[{"line_number":618,"context_line":"    def setUp(self):"},{"line_number":619,"context_line":"        super(TestDynamicCredentialProviderV3, self).setUp()"},{"line_number":620,"context_line":"        self.useFixture(fake_config.ConfigFixture())"},{"line_number":621,"context_line":"        self.useFixture(mockpatch.PatchObject("},{"line_number":622,"context_line":"            domains_client.DomainsClient, \u0027list_domains\u0027,"},{"line_number":623,"context_line":"            return_value\u003ddict(domains\u003d[dict(id\u003d\u0027default\u0027,"},{"line_number":624,"context_line":"                                            name\u003d\u0027Default\u0027)])))"}],"source_content_type":"text/x-python","patch_set":31,"id":"9abb7d3a_3b48a22d","line":621,"updated":"2016-05-27 09:36:32.000000000","message":"The mix of \"self.useFixture(mockpatch.PatchObject(\" and \"self.patchobject\" is a bit confusing. Those 2 constructs do the same thing. (self.patchobject doesn\u0027t take any **kwargs but that can be added easily).\n\nWe lack consistency in our unit tests. But that\u0027s for another day :)","commit_id":"4bee2e765a77f3f3012e18a1f2db2f076fa00c39"}]}
