)]}'
{"releasenotes/notes/add-immutable-user-source-support-dd17772a997075e0.yaml":[{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"aeed5e6c3f40a0fbdad5977ddef544e667ee9013","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"prelude: \u003e"},{"line_number":3,"context_line":"    If the keystone user source is immutable, such as with an LDAP active "},{"line_number":4,"context_line":"    directory implementation, tempest tests that try to create or delete a "},{"line_number":5,"context_line":"    user will fail. Instead of failing, they should skip. Introduced is an "}],"source_content_type":"text/x-yaml","patch_set":3,"id":"5f7c97a3_c7c0ae80","line":2,"updated":"2018-07-26 04:18:49.000000000","message":"This prelude should be removed (here is reason: https://review.openstack.org/#/c/578110/). Under features we can just say:\n\nAdd a new config setting ``immutable_user_source`` in the ``[auth]`` group that defaults to false. This setting, combined with the usage of the ``@testtools.skipIf()`` decorator, will allow tests that require user creation to skip instead of fail in environments that are LDAP-backed. In such environments, user creation is impossible so this feature flag is needed to allow such tests to gracefully skip without having to blacklist them.","commit_id":"e38e2e6a0d4183ab731d75c4297d5e9101870307"},{"author":{"_account_id":26198,"name":"Anna Pankiewicz","email":"anna.e.pankiewicz@att.com","username":"apankiewicz"},"change_message_id":"e73c73242f7dc751670aebe5259c84aeb24049cc","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"prelude: \u003e"},{"line_number":3,"context_line":"    If the keystone user source is immutable, such as with an LDAP active "},{"line_number":4,"context_line":"    directory implementation, tempest tests that try to create or delete a "},{"line_number":5,"context_line":"    user will fail. Instead of failing, they should skip. Introduced is an "}],"source_content_type":"text/x-yaml","patch_set":3,"id":"5f7c97a3_592f9aa5","line":2,"in_reply_to":"5f7c97a3_c7c0ae80","updated":"2018-07-26 13:18:09.000000000","message":"Fixed - thanks!","commit_id":"e38e2e6a0d4183ab731d75c4297d5e9101870307"},{"author":{"_account_id":27078,"name":"Manik Bindlish","email":"manikbindlish19@gmail.com","username":"manik"},"change_message_id":"23bf3dbe99a7cd925506fd465033a47d43ac7a13","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"prelude: \u003e"},{"line_number":3,"context_line":"    If the keystone user source is immutable, such as with an LDAP active "},{"line_number":4,"context_line":"    directory implementation, tempest tests that try to create or delete a "},{"line_number":5,"context_line":"    user will fail. Instead of failing, they should skip. Introduced is an "},{"line_number":6,"context_line":"    additional config setting ``immutable_user_source`` in the `[auth]` group"}],"source_content_type":"text/x-yaml","patch_set":3,"id":"5f7c97a3_47233eab","line":3,"range":{"start_line":3,"start_character":73,"end_line":3,"end_character":74},"updated":"2018-07-26 03:59:05.000000000","message":"nit: extra space","commit_id":"e38e2e6a0d4183ab731d75c4297d5e9101870307"},{"author":{"_account_id":26198,"name":"Anna Pankiewicz","email":"anna.e.pankiewicz@att.com","username":"apankiewicz"},"change_message_id":"e73c73242f7dc751670aebe5259c84aeb24049cc","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"prelude: \u003e"},{"line_number":3,"context_line":"    If the keystone user source is immutable, such as with an LDAP active "},{"line_number":4,"context_line":"    directory implementation, tempest tests that try to create or delete a "},{"line_number":5,"context_line":"    user will fail. Instead of failing, they should skip. Introduced is an "},{"line_number":6,"context_line":"    additional config setting ``immutable_user_source`` in the `[auth]` group"}],"source_content_type":"text/x-yaml","patch_set":3,"id":"5f7c97a3_d955ea20","line":3,"range":{"start_line":3,"start_character":73,"end_line":3,"end_character":74},"in_reply_to":"5f7c97a3_47233eab","updated":"2018-07-26 13:18:09.000000000","message":"Fixed","commit_id":"e38e2e6a0d4183ab731d75c4297d5e9101870307"},{"author":{"_account_id":27078,"name":"Manik Bindlish","email":"manikbindlish19@gmail.com","username":"manik"},"change_message_id":"23bf3dbe99a7cd925506fd465033a47d43ac7a13","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"prelude: \u003e"},{"line_number":3,"context_line":"    If the keystone user source is immutable, such as with an LDAP active "},{"line_number":4,"context_line":"    directory implementation, tempest tests that try to create or delete a "},{"line_number":5,"context_line":"    user will fail. Instead of failing, they should skip. Introduced is an "},{"line_number":6,"context_line":"    additional config setting ``immutable_user_source`` in the `[auth]` group"},{"line_number":7,"context_line":"    that defaults to false. This setting, combined with the usage of the"}],"source_content_type":"text/x-yaml","patch_set":3,"id":"5f7c97a3_2720829a","line":4,"range":{"start_line":4,"start_character":74,"end_line":4,"end_character":75},"updated":"2018-07-26 03:59:05.000000000","message":"dito","commit_id":"e38e2e6a0d4183ab731d75c4297d5e9101870307"},{"author":{"_account_id":26198,"name":"Anna Pankiewicz","email":"anna.e.pankiewicz@att.com","username":"apankiewicz"},"change_message_id":"e73c73242f7dc751670aebe5259c84aeb24049cc","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"prelude: \u003e"},{"line_number":3,"context_line":"    If the keystone user source is immutable, such as with an LDAP active "},{"line_number":4,"context_line":"    directory implementation, tempest tests that try to create or delete a "},{"line_number":5,"context_line":"    user will fail. Instead of failing, they should skip. Introduced is an "},{"line_number":6,"context_line":"    additional config setting ``immutable_user_source`` in the `[auth]` group"},{"line_number":7,"context_line":"    that defaults to false. This setting, combined with the usage of the"}],"source_content_type":"text/x-yaml","patch_set":3,"id":"5f7c97a3_7954d622","line":4,"range":{"start_line":4,"start_character":74,"end_line":4,"end_character":75},"in_reply_to":"5f7c97a3_2720829a","updated":"2018-07-26 13:18:09.000000000","message":"Fixed","commit_id":"e38e2e6a0d4183ab731d75c4297d5e9101870307"},{"author":{"_account_id":27078,"name":"Manik Bindlish","email":"manikbindlish19@gmail.com","username":"manik"},"change_message_id":"23bf3dbe99a7cd925506fd465033a47d43ac7a13","unresolved":false,"context_lines":[{"line_number":2,"context_line":"prelude: \u003e"},{"line_number":3,"context_line":"    If the keystone user source is immutable, such as with an LDAP active "},{"line_number":4,"context_line":"    directory implementation, tempest tests that try to create or delete a "},{"line_number":5,"context_line":"    user will fail. Instead of failing, they should skip. Introduced is an "},{"line_number":6,"context_line":"    additional config setting ``immutable_user_source`` in the `[auth]` group"},{"line_number":7,"context_line":"    that defaults to false. This setting, combined with the usage of the"},{"line_number":8,"context_line":"    ``@testtools.skipIf()`` decorator will allow these tests to skip instead"}],"source_content_type":"text/x-yaml","patch_set":3,"id":"5f7c97a3_c7366ee9","line":5,"range":{"start_line":5,"start_character":74,"end_line":5,"end_character":75},"updated":"2018-07-26 03:59:05.000000000","message":"dito","commit_id":"e38e2e6a0d4183ab731d75c4297d5e9101870307"},{"author":{"_account_id":26198,"name":"Anna Pankiewicz","email":"anna.e.pankiewicz@att.com","username":"apankiewicz"},"change_message_id":"e73c73242f7dc751670aebe5259c84aeb24049cc","unresolved":false,"context_lines":[{"line_number":2,"context_line":"prelude: \u003e"},{"line_number":3,"context_line":"    If the keystone user source is immutable, such as with an LDAP active "},{"line_number":4,"context_line":"    directory implementation, tempest tests that try to create or delete a "},{"line_number":5,"context_line":"    user will fail. Instead of failing, they should skip. Introduced is an "},{"line_number":6,"context_line":"    additional config setting ``immutable_user_source`` in the `[auth]` group"},{"line_number":7,"context_line":"    that defaults to false. This setting, combined with the usage of the"},{"line_number":8,"context_line":"    ``@testtools.skipIf()`` decorator will allow these tests to skip instead"}],"source_content_type":"text/x-yaml","patch_set":3,"id":"5f7c97a3_392c1eb1","line":5,"range":{"start_line":5,"start_character":74,"end_line":5,"end_character":75},"in_reply_to":"5f7c97a3_c7366ee9","updated":"2018-07-26 13:18:09.000000000","message":"Fixed","commit_id":"e38e2e6a0d4183ab731d75c4297d5e9101870307"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"a26be749cf647ad0ef6066260850ecba2f1830f9","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    Add a new config setting ``immutable_user_source`` in the ``[auth]``"},{"line_number":5,"context_line":"    group that defaults to false. This setting, combined with the usage"},{"line_number":6,"context_line":"    of the ``@testtools.skipIf()`` decorator, will allow tests that"},{"line_number":7,"context_line":"    require user creation to skip instead of fail in environments that"},{"line_number":8,"context_line":"    are LDAP-backed. In such environments, user creation is impossible"},{"line_number":9,"context_line":"    so this feature flag is needed to allow such tests to gracefully"},{"line_number":10,"context_line":"    skip without having to blacklist them."}],"source_content_type":"text/x-yaml","patch_set":6,"id":"3f79a3b5_9d8ad2b9","line":7,"range":{"start_line":7,"start_character":12,"end_line":7,"end_character":25},"updated":"2018-09-17 21:19:34.000000000","message":"immutable is not equal to user creation. I think we should update the option name or update the description.\n\nimmutable - unchanging over time or unable to be changed.\n\nI believe we should update this release note to so that the decorator will allow tests that require *user modification* to skip instead of fail.","commit_id":"0b4f032713e4839665715c0565203551beca8607"},{"author":{"_account_id":28628,"name":"Michael Beaver","email":"mibeaver@microsoft.com","username":"MichaelBeaver"},"change_message_id":"611f4ff561e5f174d054f04c1e046bdc2561fe76","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    Add a new config setting ``immutable_user_source`` in the ``[auth]``"},{"line_number":5,"context_line":"    group that defaults to false. This setting, combined with the usage"},{"line_number":6,"context_line":"    of the ``@testtools.skipIf()`` decorator, will allow tests that"},{"line_number":7,"context_line":"    require user creation to skip instead of fail in environments that"},{"line_number":8,"context_line":"    are LDAP-backed. In such environments, user creation is impossible"},{"line_number":9,"context_line":"    so this feature flag is needed to allow such tests to gracefully"},{"line_number":10,"context_line":"    skip without having to blacklist them."}],"source_content_type":"text/x-yaml","patch_set":6,"id":"3f79a3b5_6898441a","line":7,"range":{"start_line":7,"start_character":12,"end_line":7,"end_character":25},"in_reply_to":"3f79a3b5_9d8ad2b9","updated":"2018-09-18 18:38:05.000000000","message":"I agree, done.","commit_id":"0b4f032713e4839665715c0565203551beca8607"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"0f9925c91a15b28227aba1d6b56fc7948fb16fc6","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Add a new config setting ``immutable_user_source`` in the ``[auth]``"},{"line_number":5,"context_line":"    group that defaults to false. This setting, combined with the usage"},{"line_number":6,"context_line":"    of the ``@testtools.skipIf()`` decorator, will allow tests that"},{"line_number":7,"context_line":"    require user creation, deletion, or modification to skip instead"}],"source_content_type":"text/x-yaml","patch_set":11,"id":"3f79a3b5_67a89c20","line":4,"range":{"start_line":4,"start_character":65,"end_line":4,"end_character":69},"updated":"2018-11-21 11:03:07.000000000","message":"identity_feature_enabled now","commit_id":"e207d77e68b7b65fb5d3d80a1605f23234b168e2"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"0880119a65c1dc13ce7981f9b73884c7c619aa0d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"3f79a3b5_5e9c455b","updated":"2018-11-21 14:47:19.000000000","message":"In this file, we could also mention the usage of the skip_checks class method but I think the testtools.skipIf is a good enough example to convey what the feature does and how to use it.","commit_id":"a0710668324415497b3ae1b3968156333cc58644"}],"tempest/api/identity/admin/v3/test_users.py":[{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"d62ceba81bb04f6145185a31cb025589b767b9c0","unresolved":false,"context_lines":[{"line_number":140,"context_line":"                         \u0027, \u0027.join(m_project for m_project"},{"line_number":141,"context_line":"                                   in missing_projects))"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"    @testtools.skipIf(CONF.auth.immutable_user_source,"},{"line_number":144,"context_line":"                      \u0027Environment has an immutable user source and does \u0027"},{"line_number":145,"context_line":"                      \u0027not support creating users.\u0027)"},{"line_number":146,"context_line":"    @decorators.idempotent_id(\u0027c10dcd90-461d-4b16-8e23-4eb836c00644\u0027)"},{"line_number":147,"context_line":"    def test_get_user(self):"},{"line_number":148,"context_line":"        # Get a user detail"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_8cd2c05e","line":145,"range":{"start_line":143,"start_character":0,"end_line":145,"end_character":52},"updated":"2018-07-27 00:02:23.000000000","message":"My only question is if this should be here.\n\nSee what Ghanshyam wrote about this: \"Agree on not forcing the dynamic cred on tests which does not change the test account like GET etc.\"\n\n- https://bugs.launchpad.net/tempest/+bug/1714277\n\nThis one is a candidate that can be moved as it\u0027s not in interop:\n\nhttp://codesearch.openstack.org/?q\u003dtest_get_user\u0026i\u003dnope\u0026files\u003d\u0026repos\u003dinterop\n\nOr anywhere else that references it: http://codesearch.openstack.org/?q\u003dtest_get_user\u0026i\u003dnope\u0026files\u003d\u0026repos\u003d\n\nSo I would say we can drop this decorator and target it for being moved to a static class in a follow up.","commit_id":"871fcb584d32e3a088236ebfa1f4f6300923b3bc"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"bccd344202b8b6d732e180d7f76c8a9c79e51a0f","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    @decorators.idempotent_id(\u0027b537d090-afb9-4519-b95d-270b0708e87e\u0027)"},{"line_number":35,"context_line":"    def test_user_update(self):"},{"line_number":36,"context_line":"        # Test case to check if updating of user attributes is successful."},{"line_number":37,"context_line":"        # Creating first user"},{"line_number":38,"context_line":"        u_name \u003d data_utils.rand_name(\u0027user\u0027)"},{"line_number":39,"context_line":"        u_desc \u003d u_name + \u0027description\u0027"},{"line_number":40,"context_line":"        u_email \u003d u_name + \u0027@testmail.tm\u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f7c97a3_4716b5a3","line":37,"updated":"2018-07-27 15:59:48.000000000","message":"so does it make sense to switch to using self.create_test_user() in this file instead of using the decorator?","commit_id":"8a02b8065d13a353a9705a18b247b6a2446836f5"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"fdcd7554d99beb34d4411474963b358c16286181","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    @decorators.idempotent_id(\u0027b537d090-afb9-4519-b95d-270b0708e87e\u0027)"},{"line_number":35,"context_line":"    def test_user_update(self):"},{"line_number":36,"context_line":"        # Test case to check if updating of user attributes is successful."},{"line_number":37,"context_line":"        # Creating first user"},{"line_number":38,"context_line":"        u_name \u003d data_utils.rand_name(\u0027user\u0027)"},{"line_number":39,"context_line":"        u_desc \u003d u_name + \u0027description\u0027"},{"line_number":40,"context_line":"        u_email \u003d u_name + \u0027@testmail.tm\u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f7c97a3_f6fc5072","line":37,"in_reply_to":"5f7c97a3_4716b5a3","updated":"2018-07-27 21:24:41.000000000","message":"create_test_user is just a code optimization that will reduce need for L38-41. How does that help with LDAP?","commit_id":"8a02b8065d13a353a9705a18b247b6a2446836f5"},{"author":{"_account_id":5689,"name":"Masayuki Igawa","email":"masayuki@igawa.io","username":"igawa"},"change_message_id":"7988bf12883274f27246ea1be8d567b060c06e9d","unresolved":false,"context_lines":[{"line_number":149,"context_line":""},{"line_number":150,"context_line":"    @testtools.skipUnless(CONF.identity_feature_enabled.security_compliance,"},{"line_number":151,"context_line":"                          \u0027Security compliance not available.\u0027)"},{"line_number":152,"context_line":"    @decorators.idempotent_id(\u0027568cd46c-ee6c-4ab4-a33a-d3791931979e\u0027)"},{"line_number":153,"context_line":"    def test_password_history_not_enforced_in_admin_reset(self):"},{"line_number":154,"context_line":"        old_password \u003d self.os_primary.credentials.password"},{"line_number":155,"context_line":"        user_id \u003d self.os_primary.credentials.user_id"}],"source_content_type":"text/x-python","patch_set":6,"id":"5f7c97a3_f3d97527","line":152,"updated":"2018-08-01 08:16:35.000000000","message":"I\u0027m wondering, why don\u0027t we need the decorator for this test? It looks like this test updates the password.","commit_id":"0b4f032713e4839665715c0565203551beca8607"},{"author":{"_account_id":28628,"name":"Michael Beaver","email":"mibeaver@microsoft.com","username":"MichaelBeaver"},"change_message_id":"611f4ff561e5f174d054f04c1e046bdc2561fe76","unresolved":false,"context_lines":[{"line_number":149,"context_line":""},{"line_number":150,"context_line":"    @testtools.skipUnless(CONF.identity_feature_enabled.security_compliance,"},{"line_number":151,"context_line":"                          \u0027Security compliance not available.\u0027)"},{"line_number":152,"context_line":"    @decorators.idempotent_id(\u0027568cd46c-ee6c-4ab4-a33a-d3791931979e\u0027)"},{"line_number":153,"context_line":"    def test_password_history_not_enforced_in_admin_reset(self):"},{"line_number":154,"context_line":"        old_password \u003d self.os_primary.credentials.password"},{"line_number":155,"context_line":"        user_id \u003d self.os_primary.credentials.user_id"}],"source_content_type":"text/x-python","patch_set":6,"id":"3f79a3b5_c8c9585a","line":152,"in_reply_to":"3f79a3b5_8f6f18f9","updated":"2018-09-18 18:38:05.000000000","message":"\u003e I think we should skip tests that request a POST, PUT, or DELETE\n \u003e call on the user. Updating the name on an LDAP backed user I\n \u003e believe is not supported and fails silently[1]. I found this to be\n \u003e true with email, but I haven\u0027t tested the password field however I\n \u003e feel the result will be similar.\n \u003e \n \u003e [1] http://paste.openstack.org/show/730144/\n\nI believe you are correct, I am adding the decorator to this test as well.","commit_id":"0b4f032713e4839665715c0565203551beca8607"},{"author":{"_account_id":26198,"name":"Anna Pankiewicz","email":"anna.e.pankiewicz@att.com","username":"apankiewicz"},"change_message_id":"17dfa3496316b4225a5b58219c0a2a79d8e8bffd","unresolved":false,"context_lines":[{"line_number":149,"context_line":""},{"line_number":150,"context_line":"    @testtools.skipUnless(CONF.identity_feature_enabled.security_compliance,"},{"line_number":151,"context_line":"                          \u0027Security compliance not available.\u0027)"},{"line_number":152,"context_line":"    @decorators.idempotent_id(\u0027568cd46c-ee6c-4ab4-a33a-d3791931979e\u0027)"},{"line_number":153,"context_line":"    def test_password_history_not_enforced_in_admin_reset(self):"},{"line_number":154,"context_line":"        old_password \u003d self.os_primary.credentials.password"},{"line_number":155,"context_line":"        user_id \u003d self.os_primary.credentials.user_id"}],"source_content_type":"text/x-python","patch_set":6,"id":"3f79a3b5_e2128858","line":152,"in_reply_to":"3f79a3b5_9611a4af","updated":"2018-08-08 15:34:24.000000000","message":"Should this test be reworked then to avoid relying on addCleanup?","commit_id":"0b4f032713e4839665715c0565203551beca8607"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"b173aec621de4aaa11ee5ee6a4b48acb89814ccf","unresolved":false,"context_lines":[{"line_number":149,"context_line":""},{"line_number":150,"context_line":"    @testtools.skipUnless(CONF.identity_feature_enabled.security_compliance,"},{"line_number":151,"context_line":"                          \u0027Security compliance not available.\u0027)"},{"line_number":152,"context_line":"    @decorators.idempotent_id(\u0027568cd46c-ee6c-4ab4-a33a-d3791931979e\u0027)"},{"line_number":153,"context_line":"    def test_password_history_not_enforced_in_admin_reset(self):"},{"line_number":154,"context_line":"        old_password \u003d self.os_primary.credentials.password"},{"line_number":155,"context_line":"        user_id \u003d self.os_primary.credentials.user_id"}],"source_content_type":"text/x-python","patch_set":6,"id":"3f79a3b5_8f6f18f9","line":152,"in_reply_to":"3f79a3b5_e2128858","updated":"2018-09-15 18:29:46.000000000","message":"I think we should skip tests that request a POST, PUT, or DELETE call on the user. Updating the name on an LDAP backed user I believe is not supported and fails silently[1]. I found this to be true with email, but I haven\u0027t tested the password field however I feel the result will be similar.\n\n[1] http://paste.openstack.org/show/730144/","commit_id":"0b4f032713e4839665715c0565203551beca8607"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"adb2b1866e5178f60de2f39ba90331fd8d1ff519","unresolved":false,"context_lines":[{"line_number":149,"context_line":""},{"line_number":150,"context_line":"    @testtools.skipUnless(CONF.identity_feature_enabled.security_compliance,"},{"line_number":151,"context_line":"                          \u0027Security compliance not available.\u0027)"},{"line_number":152,"context_line":"    @decorators.idempotent_id(\u0027568cd46c-ee6c-4ab4-a33a-d3791931979e\u0027)"},{"line_number":153,"context_line":"    def test_password_history_not_enforced_in_admin_reset(self):"},{"line_number":154,"context_line":"        old_password \u003d self.os_primary.credentials.password"},{"line_number":155,"context_line":"        user_id \u003d self.os_primary.credentials.user_id"}],"source_content_type":"text/x-python","patch_set":6,"id":"3f79a3b5_9611a4af","line":152,"in_reply_to":"5f7c97a3_05fb7ebe","updated":"2018-08-08 06:44:55.000000000","message":"I am curious why updating password tests don\u0027t need creating a new user? addCleanup may not always be safe.","commit_id":"0b4f032713e4839665715c0565203551beca8607"},{"author":{"_account_id":26198,"name":"Anna Pankiewicz","email":"anna.e.pankiewicz@att.com","username":"apankiewicz"},"change_message_id":"eecd68e392757dd4f8fd327de7df3373691a4d81","unresolved":false,"context_lines":[{"line_number":149,"context_line":""},{"line_number":150,"context_line":"    @testtools.skipUnless(CONF.identity_feature_enabled.security_compliance,"},{"line_number":151,"context_line":"                          \u0027Security compliance not available.\u0027)"},{"line_number":152,"context_line":"    @decorators.idempotent_id(\u0027568cd46c-ee6c-4ab4-a33a-d3791931979e\u0027)"},{"line_number":153,"context_line":"    def test_password_history_not_enforced_in_admin_reset(self):"},{"line_number":154,"context_line":"        old_password \u003d self.os_primary.credentials.password"},{"line_number":155,"context_line":"        user_id \u003d self.os_primary.credentials.user_id"}],"source_content_type":"text/x-python","patch_set":6,"id":"5f7c97a3_05fb7ebe","line":152,"in_reply_to":"5f7c97a3_f3d97527","updated":"2018-08-01 13:33:57.000000000","message":"I skipped using the decorator on this one since it doesn\u0027t explicitly create a user and it uses credentials","commit_id":"0b4f032713e4839665715c0565203551beca8607"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"7683ec244670eaae883c89f7d508fe2794a5ac1a","unresolved":false,"context_lines":[{"line_number":155,"context_line":"        user_id \u003d self.os_primary.credentials.user_id"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"        new_password \u003d data_utils.rand_password()"},{"line_number":158,"context_line":"        self.users_client.update_user(user_id, password\u003dnew_password)"},{"line_number":159,"context_line":"        # To be safe, we add this cleanup to restore the original password in"},{"line_number":160,"context_line":"        # case something goes wrong before it is restored later."},{"line_number":161,"context_line":"        self.addCleanup("}],"source_content_type":"text/x-python","patch_set":6,"id":"3f79a3b5_a5469a20","line":158,"range":{"start_line":158,"start_character":26,"end_line":158,"end_character":37},"updated":"2018-09-17 18:19:06.000000000","message":"This call fails in v2 so I think it will fail in this case as well for LDAP.\n\nTraceback (most recent call last):\n  File \"tempest/api/identity/v2/test_users.py\", line 92, in test_user_update_own_password\n    user_id, original_password\u003dold_pass, password\u003dnew_pass)\n  File \"tempest/api/identity/v2/test_users.py\", line 40, in _update_password\n    user_id, password\u003dpassword, original_password\u003doriginal_password)\n  File \"tempest/lib/services/identity/v2/users_client.py\", line 125, in update_user_own_password\n    resp, body \u003d self.patch(\u0027OS-KSCRUD/users/%s\u0027 % user_id, patch_body)\n  File \"tempest/lib/common/rest_client.py\", line 326, in patch\n    return self.request(\u0027PATCH\u0027, url, extra_headers, headers, body)\n  File \"tempest/lib/common/rest_client.py\", line 670, in request\n    self._error_checker(resp, resp_body)\n  File \"tempest/lib/common/rest_client.py\", line 771, in _error_checker\n    raise exceptions.Forbidden(resp_body, resp\u003dresp)\ntempest.lib.exceptions.Forbidden: Forbidden\nDetails: {u\u0027message\u0027: u\u0027You are not authorized to perform the requested action: LDAP user update (Disable debug mode to suppress these details.)\u0027, u\u0027code\u0027: 403, u\u0027title\u0027: u\u0027Forbidden\u0027}","commit_id":"0b4f032713e4839665715c0565203551beca8607"},{"author":{"_account_id":28628,"name":"Michael Beaver","email":"mibeaver@microsoft.com","username":"MichaelBeaver"},"change_message_id":"611f4ff561e5f174d054f04c1e046bdc2561fe76","unresolved":false,"context_lines":[{"line_number":155,"context_line":"        user_id \u003d self.os_primary.credentials.user_id"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"        new_password \u003d data_utils.rand_password()"},{"line_number":158,"context_line":"        self.users_client.update_user(user_id, password\u003dnew_password)"},{"line_number":159,"context_line":"        # To be safe, we add this cleanup to restore the original password in"},{"line_number":160,"context_line":"        # case something goes wrong before it is restored later."},{"line_number":161,"context_line":"        self.addCleanup("}],"source_content_type":"text/x-python","patch_set":6,"id":"3f79a3b5_88bfe0a9","line":158,"range":{"start_line":158,"start_character":26,"end_line":158,"end_character":37},"in_reply_to":"3f79a3b5_a5469a20","updated":"2018-09-18 18:38:05.000000000","message":"Done, added the decorator to this test.","commit_id":"0b4f032713e4839665715c0565203551beca8607"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"b173aec621de4aaa11ee5ee6a4b48acb89814ccf","unresolved":false,"context_lines":[{"line_number":162,"context_line":"            self.users_client.update_user, user_id, password\u003dold_password)"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"        # Check authorization with new password"},{"line_number":165,"context_line":"        self.token.auth(user_id\u003duser_id, password\u003dnew_password)"},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"        if CONF.identity.user_unique_last_password_count \u003e 1:"},{"line_number":168,"context_line":"            # The password history is not enforced via the admin reset route."}],"source_content_type":"text/x-python","patch_set":6,"id":"3f79a3b5_ef2ecca9","line":165,"range":{"start_line":165,"start_character":8,"end_line":165,"end_character":63},"updated":"2018-09-15 18:29:46.000000000","message":"I don\u0027t think this will work with an LDAP backed keystone because they support read-only integration[1] so the client call to update the user may not throw an exception but I believe it does not change the password.\n\n[1] https://docs.openstack.org/keystone/rocky/admin/identity-integrate-with-ldap.html","commit_id":"0b4f032713e4839665715c0565203551beca8607"},{"author":{"_account_id":28628,"name":"Michael Beaver","email":"mibeaver@microsoft.com","username":"MichaelBeaver"},"change_message_id":"611f4ff561e5f174d054f04c1e046bdc2561fe76","unresolved":false,"context_lines":[{"line_number":162,"context_line":"            self.users_client.update_user, user_id, password\u003dold_password)"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"        # Check authorization with new password"},{"line_number":165,"context_line":"        self.token.auth(user_id\u003duser_id, password\u003dnew_password)"},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"        if CONF.identity.user_unique_last_password_count \u003e 1:"},{"line_number":168,"context_line":"            # The password history is not enforced via the admin reset route."}],"source_content_type":"text/x-python","patch_set":6,"id":"3f79a3b5_68e044cd","line":165,"range":{"start_line":165,"start_character":8,"end_line":165,"end_character":63},"in_reply_to":"3f79a3b5_ef2ecca9","updated":"2018-09-18 18:38:05.000000000","message":"Done, added the decorator to this test.","commit_id":"0b4f032713e4839665715c0565203551beca8607"},{"author":{"_account_id":21420,"name":"Gage Hugo","email":"gagehugo@gmail.com","username":"ghugo"},"change_message_id":"6f2a4ad5b023eb0e099e6f51071a6b8ceb7f9b8f","unresolved":false,"context_lines":[{"line_number":143,"context_line":"    @decorators.idempotent_id(\u0027c10dcd90-461d-4b16-8e23-4eb836c00644\u0027)"},{"line_number":144,"context_line":"    def test_get_user(self):"},{"line_number":145,"context_line":"        # Get a user detail"},{"line_number":146,"context_line":"        user \u003d self.setup_test_user()"},{"line_number":147,"context_line":"        fetched_user \u003d self.users_client.show_user(user[\u0027id\u0027])[\u0027user\u0027]"},{"line_number":148,"context_line":"        self.assertEqual(user[\u0027id\u0027], fetched_user[\u0027id\u0027])"},{"line_number":149,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3f79a3b5_56ab701c","line":146,"range":{"start_line":146,"start_character":8,"end_line":146,"end_character":37},"updated":"2018-10-03 14:45:12.000000000","message":"If this is attempting to create a user with an LDAP backed keystone, this will fail as well.","commit_id":"fd3b601908ae2147c176c92b27a575ec34b1babe"},{"author":{"_account_id":28628,"name":"Michael Beaver","email":"mibeaver@microsoft.com","username":"MichaelBeaver"},"change_message_id":"4530d223dcddfec9a2efa3dcd8e64de4bc4be903","unresolved":false,"context_lines":[{"line_number":143,"context_line":"    @decorators.idempotent_id(\u0027c10dcd90-461d-4b16-8e23-4eb836c00644\u0027)"},{"line_number":144,"context_line":"    def test_get_user(self):"},{"line_number":145,"context_line":"        # Get a user detail"},{"line_number":146,"context_line":"        user \u003d self.setup_test_user()"},{"line_number":147,"context_line":"        fetched_user \u003d self.users_client.show_user(user[\u0027id\u0027])[\u0027user\u0027]"},{"line_number":148,"context_line":"        self.assertEqual(user[\u0027id\u0027], fetched_user[\u0027id\u0027])"},{"line_number":149,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3f79a3b5_6e0aded0","line":146,"range":{"start_line":146,"start_character":8,"end_line":146,"end_character":37},"in_reply_to":"3f79a3b5_34e51ea5","updated":"2018-11-19 16:35:45.000000000","message":"Done","commit_id":"fd3b601908ae2147c176c92b27a575ec34b1babe"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"83f6a818500567447473cb8fa8c035764bcbc586","unresolved":false,"context_lines":[{"line_number":143,"context_line":"    @decorators.idempotent_id(\u0027c10dcd90-461d-4b16-8e23-4eb836c00644\u0027)"},{"line_number":144,"context_line":"    def test_get_user(self):"},{"line_number":145,"context_line":"        # Get a user detail"},{"line_number":146,"context_line":"        user \u003d self.setup_test_user()"},{"line_number":147,"context_line":"        fetched_user \u003d self.users_client.show_user(user[\u0027id\u0027])[\u0027user\u0027]"},{"line_number":148,"context_line":"        self.assertEqual(user[\u0027id\u0027], fetched_user[\u0027id\u0027])"},{"line_number":149,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3f79a3b5_34e51ea5","line":146,"range":{"start_line":146,"start_character":8,"end_line":146,"end_character":37},"in_reply_to":"3f79a3b5_56ab701c","updated":"2018-10-09 10:53:25.000000000","message":"yes, this should be skipped.\n\nwhich makes the complete test class should be skipped.","commit_id":"fd3b601908ae2147c176c92b27a575ec34b1babe"},{"author":{"_account_id":8911,"name":"Sergey Vilgelm","email":"sergey@vilgelm.info","username":"sergey.vilgelm"},"change_message_id":"2706922ba274a7699e6a412c721e629331df4a6e","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":"class UsersV3TestJSON(base.BaseIdentityV3AdminTest):"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    @testtools.skipIf(CONF.auth.immutable_user_source,"},{"line_number":32,"context_line":"                      \u0027Environment has an immutable user source and solely \u0027"},{"line_number":33,"context_line":"                      \u0027provides read-only access to users.\u0027)"},{"line_number":34,"context_line":"    @decorators.idempotent_id(\u0027b537d090-afb9-4519-b95d-270b0708e87e\u0027)"}],"source_content_type":"text/x-python","patch_set":8,"id":"3f79a3b5_ee734ee4","line":31,"updated":"2018-11-19 17:01:59.000000000","message":"You use same decorator for all test in UsersV3TestJSON class. I would prefer to see this functionality in skip_checks function. Could you move it?","commit_id":"ec0640bf2772c45527b45c4cb474afc2d4c28ac8"},{"author":{"_account_id":28628,"name":"Michael Beaver","email":"mibeaver@microsoft.com","username":"MichaelBeaver"},"change_message_id":"3ef95f742cc03079fae1410f4502c91b892b85f3","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":"class UsersV3TestJSON(base.BaseIdentityV3AdminTest):"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    @testtools.skipIf(CONF.auth.immutable_user_source,"},{"line_number":32,"context_line":"                      \u0027Environment has an immutable user source and solely \u0027"},{"line_number":33,"context_line":"                      \u0027provides read-only access to users.\u0027)"},{"line_number":34,"context_line":"    @decorators.idempotent_id(\u0027b537d090-afb9-4519-b95d-270b0708e87e\u0027)"}],"source_content_type":"text/x-python","patch_set":8,"id":"3f79a3b5_9aebf078","line":31,"in_reply_to":"3f79a3b5_ee734ee4","updated":"2018-11-19 20:35:25.000000000","message":"Totally missed that thanks, changed to using skip_checks function","commit_id":"ec0640bf2772c45527b45c4cb474afc2d4c28ac8"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"6b44f333f37b08f034c4017aa2402e114f42d25d","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        super(UsersV3TestJSON, cls).skip_checks()"},{"line_number":34,"context_line":"        if not CONF.auth.immutable_user_source:"},{"line_number":35,"context_line":"            raise cls.skipException(\u0027Skipped because environment has an \u0027"},{"line_number":36,"context_line":"                                    \u0027immutable user source and solely provides \u0027"},{"line_number":37,"context_line":"                                    \u0027read-only access to users.\u0027)"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    @decorators.idempotent_id(\u0027b537d090-afb9-4519-b95d-270b0708e87e\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f79a3b5_74c38406","line":36,"range":{"start_line":36,"start_character":77,"end_line":36,"end_character":80},"updated":"2018-11-20 01:41:08.000000000","message":"this is exceeding the 80 char.","commit_id":"0dff01a0788eb4990a85fa67d7fc872703093b19"},{"author":{"_account_id":28628,"name":"Michael Beaver","email":"mibeaver@microsoft.com","username":"MichaelBeaver"},"change_message_id":"eae2ba66fe591f4db76a1305253dfc2d0b8ead4a","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        super(UsersV3TestJSON, cls).skip_checks()"},{"line_number":34,"context_line":"        if not CONF.auth.immutable_user_source:"},{"line_number":35,"context_line":"            raise cls.skipException(\u0027Skipped because environment has an \u0027"},{"line_number":36,"context_line":"                                    \u0027immutable user source and solely provides \u0027"},{"line_number":37,"context_line":"                                    \u0027read-only access to users.\u0027)"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    @decorators.idempotent_id(\u0027b537d090-afb9-4519-b95d-270b0708e87e\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f79a3b5_d8a39faf","line":36,"range":{"start_line":36,"start_character":77,"end_line":36,"end_character":80},"in_reply_to":"3f79a3b5_74c38406","updated":"2018-11-20 16:41:29.000000000","message":"Thanks, somehow missed that","commit_id":"0dff01a0788eb4990a85fa67d7fc872703093b19"}],"tempest/api/identity/base.py":[{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"e11cff9b4e138aac73d39046b345d4789ee628ae","unresolved":false,"context_lines":[{"line_number":68,"context_line":"            return role[0]"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    def create_test_user(self, **kwargs):"},{"line_number":71,"context_line":"        if CONF.identity_feature_enabled.immutable_user_source:"},{"line_number":72,"context_line":"            raise self.skipException(\u0027Environment has an immutable user \u0027"},{"line_number":73,"context_line":"                                     \u0027source and does not support creating \u0027"},{"line_number":74,"context_line":"                                     \u0027users.\u0027)"},{"line_number":75,"context_line":"        if kwargs.get(\u0027password\u0027, None) is None:"},{"line_number":76,"context_line":"            kwargs[\u0027password\u0027] \u003d data_utils.rand_password()"},{"line_number":77,"context_line":"        if \u0027name\u0027 not in kwargs:"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_80b5e07f","line":74,"range":{"start_line":71,"start_character":0,"end_line":74,"end_character":46},"updated":"2018-07-24 23:39:18.000000000","message":"In my opinion, this should be applied on a test by test basis since plugins that consume this base class will start experiencing skips and I\u0027m not sure they would want that behavior.","commit_id":"10beca7508911d7fcff262a71e7b93fe91d93985"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"014b1c8bab3fb8786497e98d3e2827aa6a24c7af","unresolved":false,"context_lines":[{"line_number":68,"context_line":"            return role[0]"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    def create_test_user(self, **kwargs):"},{"line_number":71,"context_line":"        if CONF.identity_feature_enabled.immutable_user_source:"},{"line_number":72,"context_line":"            raise self.skipException(\u0027Environment has an immutable user \u0027"},{"line_number":73,"context_line":"                                     \u0027source and does not support creating \u0027"},{"line_number":74,"context_line":"                                     \u0027users.\u0027)"},{"line_number":75,"context_line":"        if kwargs.get(\u0027password\u0027, None) is None:"},{"line_number":76,"context_line":"            kwargs[\u0027password\u0027] \u003d data_utils.rand_password()"},{"line_number":77,"context_line":"        if \u0027name\u0027 not in kwargs:"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_a47ebabd","line":74,"range":{"start_line":71,"start_character":0,"end_line":74,"end_character":46},"in_reply_to":"5f7c97a3_1a036b0e","updated":"2018-07-26 19:33:58.000000000","message":"sorry i\u0027m not following, how would they start experiencing skips if the default is false?","commit_id":"10beca7508911d7fcff262a71e7b93fe91d93985"},{"author":{"_account_id":26198,"name":"Anna Pankiewicz","email":"anna.e.pankiewicz@att.com","username":"apankiewicz"},"change_message_id":"8b3b8e3b67550aa5d2440f38553f69e63a560d83","unresolved":false,"context_lines":[{"line_number":68,"context_line":"            return role[0]"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    def create_test_user(self, **kwargs):"},{"line_number":71,"context_line":"        if CONF.identity_feature_enabled.immutable_user_source:"},{"line_number":72,"context_line":"            raise self.skipException(\u0027Environment has an immutable user \u0027"},{"line_number":73,"context_line":"                                     \u0027source and does not support creating \u0027"},{"line_number":74,"context_line":"                                     \u0027users.\u0027)"},{"line_number":75,"context_line":"        if kwargs.get(\u0027password\u0027, None) is None:"},{"line_number":76,"context_line":"            kwargs[\u0027password\u0027] \u003d data_utils.rand_password()"},{"line_number":77,"context_line":"        if \u0027name\u0027 not in kwargs:"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_c7b2c505","line":74,"range":{"start_line":71,"start_character":0,"end_line":74,"end_character":46},"in_reply_to":"5f7c97a3_6c3ba4c8","updated":"2018-07-27 15:45:48.000000000","message":"Ah, that was my misunderstanding. Thanks for clearing that up.","commit_id":"10beca7508911d7fcff262a71e7b93fe91d93985"},{"author":{"_account_id":26198,"name":"Anna Pankiewicz","email":"anna.e.pankiewicz@att.com","username":"apankiewicz"},"change_message_id":"db8ad5228fbe60216692167498a0ec815b0cb311","unresolved":false,"context_lines":[{"line_number":68,"context_line":"            return role[0]"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    def create_test_user(self, **kwargs):"},{"line_number":71,"context_line":"        if CONF.identity_feature_enabled.immutable_user_source:"},{"line_number":72,"context_line":"            raise self.skipException(\u0027Environment has an immutable user \u0027"},{"line_number":73,"context_line":"                                     \u0027source and does not support creating \u0027"},{"line_number":74,"context_line":"                                     \u0027users.\u0027)"},{"line_number":75,"context_line":"        if kwargs.get(\u0027password\u0027, None) is None:"},{"line_number":76,"context_line":"            kwargs[\u0027password\u0027] \u003d data_utils.rand_password()"},{"line_number":77,"context_line":"        if \u0027name\u0027 not in kwargs:"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_1a036b0e","line":74,"range":{"start_line":71,"start_character":0,"end_line":74,"end_character":46},"in_reply_to":"5f7c97a3_80b5e07f","updated":"2018-07-25 16:16:32.000000000","message":"That\u0027s a good point.. I\u0027ll go down the test by test basis route instead. Thanks!","commit_id":"10beca7508911d7fcff262a71e7b93fe91d93985"},{"author":{"_account_id":26198,"name":"Anna Pankiewicz","email":"anna.e.pankiewicz@att.com","username":"apankiewicz"},"change_message_id":"911bbd9f2f15ac21e5d4c7c3ceea97076d1465bc","unresolved":false,"context_lines":[{"line_number":68,"context_line":"            return role[0]"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    def create_test_user(self, **kwargs):"},{"line_number":71,"context_line":"        if CONF.identity_feature_enabled.immutable_user_source:"},{"line_number":72,"context_line":"            raise self.skipException(\u0027Environment has an immutable user \u0027"},{"line_number":73,"context_line":"                                     \u0027source and does not support creating \u0027"},{"line_number":74,"context_line":"                                     \u0027users.\u0027)"},{"line_number":75,"context_line":"        if kwargs.get(\u0027password\u0027, None) is None:"},{"line_number":76,"context_line":"            kwargs[\u0027password\u0027] \u003d data_utils.rand_password()"},{"line_number":77,"context_line":"        if \u0027name\u0027 not in kwargs:"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_f8b8d678","line":74,"range":{"start_line":71,"start_character":0,"end_line":74,"end_character":46},"in_reply_to":"5f7c97a3_a47ebabd","updated":"2018-07-26 20:20:39.000000000","message":"the default is false so that those tests won\u0027t skip if they don\u0027t have to. they only should skip in certain environments, and for those, it can be set to true","commit_id":"10beca7508911d7fcff262a71e7b93fe91d93985"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"b6b87b99cc21d9a424507d76cb8fdb30d3249e61","unresolved":false,"context_lines":[{"line_number":68,"context_line":"            return role[0]"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    def create_test_user(self, **kwargs):"},{"line_number":71,"context_line":"        if CONF.identity_feature_enabled.immutable_user_source:"},{"line_number":72,"context_line":"            raise self.skipException(\u0027Environment has an immutable user \u0027"},{"line_number":73,"context_line":"                                     \u0027source and does not support creating \u0027"},{"line_number":74,"context_line":"                                     \u0027users.\u0027)"},{"line_number":75,"context_line":"        if kwargs.get(\u0027password\u0027, None) is None:"},{"line_number":76,"context_line":"            kwargs[\u0027password\u0027] \u003d data_utils.rand_password()"},{"line_number":77,"context_line":"        if \u0027name\u0027 not in kwargs:"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_6c3ba4c8","line":74,"range":{"start_line":71,"start_character":0,"end_line":74,"end_character":46},"in_reply_to":"5f7c97a3_f8b8d678","updated":"2018-07-26 23:51:45.000000000","message":"This change is fine. I mean as an enhancement it might be possible to override the default of false to true in the devstack installation script, conditioned upon the cloud being ldap-backed or some such.","commit_id":"10beca7508911d7fcff262a71e7b93fe91d93985"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"fdcd7554d99beb34d4411474963b358c16286181","unresolved":false,"context_lines":[{"line_number":68,"context_line":"            return role[0]"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    def create_test_user(self, **kwargs):"},{"line_number":71,"context_line":"        if CONF.auth.immutable_user_source:"},{"line_number":72,"context_line":"            raise self.skipException(\u0027Environment has an immutable user \u0027"},{"line_number":73,"context_line":"                                     \u0027source and does not support creating \u0027"},{"line_number":74,"context_line":"                                     \u0027users.\u0027)"},{"line_number":75,"context_line":"        if kwargs.get(\u0027password\u0027, None) is None:"},{"line_number":76,"context_line":"            kwargs[\u0027password\u0027] \u003d data_utils.rand_password()"},{"line_number":77,"context_line":"        if \u0027name\u0027 not in kwargs:"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f7c97a3_56ebc4a3","line":74,"range":{"start_line":71,"start_character":0,"end_line":74,"end_character":46},"updated":"2018-07-27 21:24:41.000000000","message":"This is a regression that was introduced in the latest patch.","commit_id":"8a02b8065d13a353a9705a18b247b6a2446836f5"}],"tempest/config.py":[{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"e11cff9b4e138aac73d39046b345d4789ee628ae","unresolved":false,"context_lines":[{"line_number":245,"context_line":"                     \u0027enabled?\u0027),"},{"line_number":246,"context_line":"    cfg.BoolOpt(\u0027immutable_user_source\u0027,"},{"line_number":247,"context_line":"                default\u003dFalse,"},{"line_number":248,"context_line":"                help\u003d\u0027Does the environment have an immutable user source?\u0027)"},{"line_number":249,"context_line":"]"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"compute_group \u003d cfg.OptGroup(name\u003d\u0027compute\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_a046dc7d","line":248,"range":{"start_line":248,"start_character":51,"end_line":248,"end_character":72},"updated":"2018-07-24 23:39:18.000000000","message":"We should expound on what this means. This isn\u0027t an immediately obvious concept. Also, this isn\u0027t an identity feature per se. This is probably better off being under the `[auth]` group above.","commit_id":"10beca7508911d7fcff262a71e7b93fe91d93985"},{"author":{"_account_id":26198,"name":"Anna Pankiewicz","email":"anna.e.pankiewicz@att.com","username":"apankiewicz"},"change_message_id":"db8ad5228fbe60216692167498a0ec815b0cb311","unresolved":false,"context_lines":[{"line_number":245,"context_line":"                     \u0027enabled?\u0027),"},{"line_number":246,"context_line":"    cfg.BoolOpt(\u0027immutable_user_source\u0027,"},{"line_number":247,"context_line":"                default\u003dFalse,"},{"line_number":248,"context_line":"                help\u003d\u0027Does the environment have an immutable user source?\u0027)"},{"line_number":249,"context_line":"]"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"compute_group \u003d cfg.OptGroup(name\u003d\u0027compute\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_3aa8a789","line":248,"range":{"start_line":248,"start_character":51,"end_line":248,"end_character":72},"in_reply_to":"5f7c97a3_a046dc7d","updated":"2018-07-25 16:16:32.000000000","message":"Fixed - I adjusted the message to be a little more clear and moved it under the `[auth]` group.","commit_id":"10beca7508911d7fcff262a71e7b93fe91d93985"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"f69ecbd3c40d1a2ff566f95501e3442567e2f4ed","unresolved":false,"context_lines":[{"line_number":107,"context_line":"    cfg.BoolOpt(\u0027immutable_user_source\u0027,"},{"line_number":108,"context_line":"                default\u003dFalse,"},{"line_number":109,"context_line":"                help\u003d\u0027Set to True if the environment has a read-only \u0027"},{"line_number":110,"context_line":"                     \u0027user source\u0027)"},{"line_number":111,"context_line":"]"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"identity_group \u003d cfg.OptGroup(name\u003d\u0027identity\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"3f79a3b5_b31084f6","line":110,"range":{"start_line":110,"start_character":33,"end_line":110,"end_character":35},"updated":"2018-11-15 15:08:35.000000000","message":"we can explain more here about the effect of making this True like all the tests creating the user is going to skip. and this will not work for dynamic credential so if you are using dynamic credential then this config option should not be True.","commit_id":"fd3b601908ae2147c176c92b27a575ec34b1babe"},{"author":{"_account_id":17887,"name":"Doug Schveninger","email":"ds6901@att.com","username":"Doug.Schveninger"},"change_message_id":"24fd75c8a06648c894234b4bd0c430c7a38e97c0","unresolved":false,"context_lines":[{"line_number":107,"context_line":"    cfg.BoolOpt(\u0027immutable_user_source\u0027,"},{"line_number":108,"context_line":"                default\u003dFalse,"},{"line_number":109,"context_line":"                help\u003d\u0027Set to True if the environment has a read-only \u0027"},{"line_number":110,"context_line":"                     \u0027user source\u0027)"},{"line_number":111,"context_line":"]"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"identity_group \u003d cfg.OptGroup(name\u003d\u0027identity\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"3f79a3b5_ea903a44","line":110,"range":{"start_line":110,"start_character":33,"end_line":110,"end_character":35},"in_reply_to":"3f79a3b5_b31084f6","updated":"2018-11-16 01:42:58.000000000","message":"GMann  I will get someone to work on the and submit a change soon","commit_id":"fd3b601908ae2147c176c92b27a575ec34b1babe"},{"author":{"_account_id":28628,"name":"Michael Beaver","email":"mibeaver@microsoft.com","username":"MichaelBeaver"},"change_message_id":"4530d223dcddfec9a2efa3dcd8e64de4bc4be903","unresolved":false,"context_lines":[{"line_number":107,"context_line":"    cfg.BoolOpt(\u0027immutable_user_source\u0027,"},{"line_number":108,"context_line":"                default\u003dFalse,"},{"line_number":109,"context_line":"                help\u003d\u0027Set to True if the environment has a read-only \u0027"},{"line_number":110,"context_line":"                     \u0027user source\u0027)"},{"line_number":111,"context_line":"]"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"identity_group \u003d cfg.OptGroup(name\u003d\u0027identity\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"3f79a3b5_4e20424c","line":110,"range":{"start_line":110,"start_character":33,"end_line":110,"end_character":35},"in_reply_to":"3f79a3b5_ea903a44","updated":"2018-11-19 16:35:45.000000000","message":"Updated this to be a bit more verbose, let me know if you would like to see anything else put here.","commit_id":"fd3b601908ae2147c176c92b27a575ec34b1babe"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"6b44f333f37b08f034c4017aa2402e114f42d25d","unresolved":false,"context_lines":[{"line_number":104,"context_line":"               help\u003d\"Admin domain name for authentication (Keystone V3).\""},{"line_number":105,"context_line":"                    \"The same domain applies to user and project\","},{"line_number":106,"context_line":"               deprecated_group\u003d\u0027identity\u0027),"},{"line_number":107,"context_line":"    cfg.BoolOpt(\u0027immutable_user_source\u0027,"},{"line_number":108,"context_line":"                default\u003dFalse,"},{"line_number":109,"context_line":"                help\u003d\u0027Set to True if the environment has a read-only \u0027"},{"line_number":110,"context_line":"                     \u0027user source. This will skip all tests that attempt to \u0027"},{"line_number":111,"context_line":"                     \u0027create, delete, or modify users. This should not be set \u0027"},{"line_number":112,"context_line":"                     \u0027to True if using dynamic credentials\u0027)"},{"line_number":113,"context_line":"]"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"identity_group \u003d cfg.OptGroup(name\u003d\u0027identity\u0027,"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f79a3b5_d4d378d3","line":112,"range":{"start_line":107,"start_character":0,"end_line":112,"end_character":60},"updated":"2018-11-20 01:41:08.000000000","message":"i just noticed it is in auth section. we need to move this to \u0027identity-feature-enabled\u0027 section as this is more feature availability for identity.","commit_id":"0dff01a0788eb4990a85fa67d7fc872703093b19"},{"author":{"_account_id":28628,"name":"Michael Beaver","email":"mibeaver@microsoft.com","username":"MichaelBeaver"},"change_message_id":"eae2ba66fe591f4db76a1305253dfc2d0b8ead4a","unresolved":false,"context_lines":[{"line_number":104,"context_line":"               help\u003d\"Admin domain name for authentication (Keystone V3).\""},{"line_number":105,"context_line":"                    \"The same domain applies to user and project\","},{"line_number":106,"context_line":"               deprecated_group\u003d\u0027identity\u0027),"},{"line_number":107,"context_line":"    cfg.BoolOpt(\u0027immutable_user_source\u0027,"},{"line_number":108,"context_line":"                default\u003dFalse,"},{"line_number":109,"context_line":"                help\u003d\u0027Set to True if the environment has a read-only \u0027"},{"line_number":110,"context_line":"                     \u0027user source. This will skip all tests that attempt to \u0027"},{"line_number":111,"context_line":"                     \u0027create, delete, or modify users. This should not be set \u0027"},{"line_number":112,"context_line":"                     \u0027to True if using dynamic credentials\u0027)"},{"line_number":113,"context_line":"]"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"identity_group \u003d cfg.OptGroup(name\u003d\u0027identity\u0027,"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f79a3b5_f8a69bbf","line":112,"range":{"start_line":107,"start_character":0,"end_line":112,"end_character":60},"in_reply_to":"3f79a3b5_d4d378d3","updated":"2018-11-20 16:41:29.000000000","message":"Done","commit_id":"0dff01a0788eb4990a85fa67d7fc872703093b19"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"0f9925c91a15b28227aba1d6b56fc7948fb16fc6","unresolved":false,"context_lines":[{"line_number":103,"context_line":"               default\u003d\u0027Default\u0027,"},{"line_number":104,"context_line":"               help\u003d\"Admin domain name for authentication (Keystone V3).\""},{"line_number":105,"context_line":"                    \"The same domain applies to user and project\","},{"line_number":106,"context_line":"               deprecated_group\u003d\u0027identity\u0027)"},{"line_number":107,"context_line":"]"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"identity_group \u003d cfg.OptGroup(name\u003d\u0027identity\u0027,"}],"source_content_type":"text/x-python","patch_set":11,"id":"3f79a3b5_47ab201e","line":106,"range":{"start_line":106,"start_character":41,"end_line":106,"end_character":43},"updated":"2018-11-21 11:03:07.000000000","message":"unrelated change","commit_id":"e207d77e68b7b65fb5d3d80a1605f23234b168e2"}]}
