)]}'
{"keystone/tests/test_backend_ldap.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"2ec8af95a6efa62c711707b5112a60f0047c7c1f","unresolved":false,"context_lines":[{"line_number":352,"context_line":"        self.assertEqual(after_assignments, existing_assignments + 2)"},{"line_number":353,"context_line":""},{"line_number":354,"context_line":"    def test_list_role_assignments_dumb_member(self):"},{"line_number":355,"context_line":"        CONF.ldap.use_dumb_member \u003d True"},{"line_number":356,"context_line":"        CONF.ldap.dumb_member \u003d \u0027cn\u003ddumb,dc\u003dnonexistent\u0027"},{"line_number":357,"context_line":"        self.clear_database()"},{"line_number":358,"context_line":"        self.load_backends()"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAU3%2F%2F%2FuQ%3D","line":355,"updated":"2014-02-22 19:00:13.000000000","message":"use self.opt_in_group() to set config options.","commit_id":"a5c5007d9d46ba8dfb8a9dc2f23f1af4c713fa83"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"670b5a33bdd265f697c6ab34e84caf3eae73de89","unresolved":false,"context_lines":[{"line_number":352,"context_line":"        self.assertEqual(after_assignments, existing_assignments + 2)"},{"line_number":353,"context_line":""},{"line_number":354,"context_line":"    def test_list_role_assignments_dumb_member(self):"},{"line_number":355,"context_line":"        CONF.ldap.use_dumb_member \u003d True"},{"line_number":356,"context_line":"        CONF.ldap.dumb_member \u003d \u0027cn\u003ddumb,dc\u003dnonexistent\u0027"},{"line_number":357,"context_line":"        self.clear_database()"},{"line_number":358,"context_line":"        self.load_backends()"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAU3%2F%2Ft%2Fg%3D","line":355,"in_reply_to":"AAAAU3%2F%2F%2FuQ%3D","updated":"2014-02-28 19:23:39.000000000","message":"Not certain I follow the reasoning for this?  Care to explain?","commit_id":"a5c5007d9d46ba8dfb8a9dc2f23f1af4c713fa83"},{"author":{"_account_id":9098,"name":"Nathan Kinder","email":"nkinder@redhat.com","username":"nkinder"},"change_message_id":"8f5743afbfde9df7c130cd4aa30b75d5d946041e","unresolved":false,"context_lines":[{"line_number":352,"context_line":"        self.assertEqual(after_assignments, existing_assignments + 2)"},{"line_number":353,"context_line":""},{"line_number":354,"context_line":"    def test_list_role_assignments_dumb_member(self):"},{"line_number":355,"context_line":"        CONF.ldap.use_dumb_member \u003d True"},{"line_number":356,"context_line":"        CONF.ldap.dumb_member \u003d \u0027cn\u003ddumb,dc\u003dnonexistent\u0027"},{"line_number":357,"context_line":"        self.clear_database()"},{"line_number":358,"context_line":"        self.load_backends()"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAU3%2F%2FnTs%3D","line":355,"in_reply_to":"AAAAU3%2F%2F%2FuQ%3D","updated":"2014-02-25 17:00:53.000000000","message":"Ok, I\u0027ll change this.  Just to note, there are quite a few other test in test_backend_ldap.py that use direct assignment for config options.","commit_id":"a5c5007d9d46ba8dfb8a9dc2f23f1af4c713fa83"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"568cac0cd23a6b03c20c1261fa1acf0648024b96","unresolved":false,"context_lines":[{"line_number":352,"context_line":"        self.assertEqual(after_assignments, existing_assignments + 2)"},{"line_number":353,"context_line":""},{"line_number":354,"context_line":"    def test_list_role_assignments_dumb_member(self):"},{"line_number":355,"context_line":"        CONF.ldap.use_dumb_member \u003d True"},{"line_number":356,"context_line":"        CONF.ldap.dumb_member \u003d \u0027cn\u003ddumb,dc\u003dnonexistent\u0027"},{"line_number":357,"context_line":"        self.clear_database()"},{"line_number":358,"context_line":"        self.load_backends()"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAVn%2F%2B0ww%3D","line":355,"in_reply_to":"AAAAU3%2F%2Ft%2Fg%3D","updated":"2014-03-11 22:43:44.000000000","message":"self.opt_in_group is no longer available\n\nuse self.config_fixture.config(group\u003d\u0027ldap\u0027, use_dumb_member\u003dTrue)\n\nSame for other config settings.\n\nThe main reason to use config_fixture (formerly opt_in_group) is because the override isn\u0027t \"removed\" if a config file is reloaded somewhere along the line. It\u0027s a bit more sticky than a direct set on the CONF object.","commit_id":"a5c5007d9d46ba8dfb8a9dc2f23f1af4c713fa83"},{"author":{"_account_id":9098,"name":"Nathan Kinder","email":"nkinder@redhat.com","username":"nkinder"},"change_message_id":"ad3246dfb8ed0e700995ac47915ce04e8350dca6","unresolved":false,"context_lines":[{"line_number":352,"context_line":"        self.assertEqual(after_assignments, existing_assignments + 2)"},{"line_number":353,"context_line":""},{"line_number":354,"context_line":"    def test_list_role_assignments_dumb_member(self):"},{"line_number":355,"context_line":"        CONF.ldap.use_dumb_member \u003d True"},{"line_number":356,"context_line":"        CONF.ldap.dumb_member \u003d \u0027cn\u003ddumb,dc\u003dnonexistent\u0027"},{"line_number":357,"context_line":"        self.clear_database()"},{"line_number":358,"context_line":"        self.load_backends()"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAWH%2F%2F%2BE8%3D","line":355,"in_reply_to":"AAAAVn%2F%2B0ww%3D","updated":"2014-03-12 16:27:53.000000000","message":"I\u0027ll update this and submit a new patch.  I\u0027ll convert the other dumb member test to match while I\u0027m in there.","commit_id":"a5c5007d9d46ba8dfb8a9dc2f23f1af4c713fa83"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"2ec8af95a6efa62c711707b5112a60f0047c7c1f","unresolved":false,"context_lines":[{"line_number":353,"context_line":""},{"line_number":354,"context_line":"    def test_list_role_assignments_dumb_member(self):"},{"line_number":355,"context_line":"        CONF.ldap.use_dumb_member \u003d True"},{"line_number":356,"context_line":"        CONF.ldap.dumb_member \u003d \u0027cn\u003ddumb,dc\u003dnonexistent\u0027"},{"line_number":357,"context_line":"        self.clear_database()"},{"line_number":358,"context_line":"        self.load_backends()"},{"line_number":359,"context_line":"        self.load_fixtures(default_fixtures)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAU3%2F%2F%2FuY%3D","line":356,"updated":"2014-02-22 19:00:13.000000000","message":"this is the default. Remove this line.","commit_id":"a5c5007d9d46ba8dfb8a9dc2f23f1af4c713fa83"},{"author":{"_account_id":9098,"name":"Nathan Kinder","email":"nkinder@redhat.com","username":"nkinder"},"change_message_id":"8f5743afbfde9df7c130cd4aa30b75d5d946041e","unresolved":false,"context_lines":[{"line_number":353,"context_line":""},{"line_number":354,"context_line":"    def test_list_role_assignments_dumb_member(self):"},{"line_number":355,"context_line":"        CONF.ldap.use_dumb_member \u003d True"},{"line_number":356,"context_line":"        CONF.ldap.dumb_member \u003d \u0027cn\u003ddumb,dc\u003dnonexistent\u0027"},{"line_number":357,"context_line":"        self.clear_database()"},{"line_number":358,"context_line":"        self.load_backends()"},{"line_number":359,"context_line":"        self.load_fixtures(default_fixtures)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAU3%2F%2FnVM%3D","line":356,"in_reply_to":"AAAAU3%2F%2F%2FuY%3D","updated":"2014-02-25 17:00:53.000000000","message":"I set this so the assertion check at line 378 has a known value to look for.  If someone set the dumb_member option to a DN that isn\u0027t the default, we would need to extract the name that is set in the assignment.  I\u0027m not sure what the best function is to extract the name that is used in an assignment from a DN.","commit_id":"a5c5007d9d46ba8dfb8a9dc2f23f1af4c713fa83"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"a10e721ab9956364094589c5bcad84c1d8262a5e","unresolved":false,"context_lines":[{"line_number":353,"context_line":""},{"line_number":354,"context_line":"    def test_list_role_assignments_dumb_member(self):"},{"line_number":355,"context_line":"        CONF.ldap.use_dumb_member \u003d True"},{"line_number":356,"context_line":"        CONF.ldap.dumb_member \u003d \u0027cn\u003ddumb,dc\u003dnonexistent\u0027"},{"line_number":357,"context_line":"        self.clear_database()"},{"line_number":358,"context_line":"        self.load_backends()"},{"line_number":359,"context_line":"        self.load_fixtures(default_fixtures)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAVn%2F%2ByAs%3D","line":356,"in_reply_to":"AAAAU3%2F%2FnVM%3D","updated":"2014-03-12 07:34:10.000000000","message":"the ldap.dn.str2dn seems to be what we\u0027re using in ``keystone.common.ldap._dn_to_id()``:\n\nSo:\n    \u003e\u003e\u003e ldap.dn.str2dn(\u0027cn\u003ddumb,dc\u003dnonexistent\u0027)\n    [[(\u0027cn\u0027, \u0027dumb\u0027, 1)], [(\u0027dc\u0027, \u0027nonexistent\u0027, 1)]]\n    \u003e\u003e\u003e ldap.dn.str2dn(\u0027cn\u003ddumb,dc\u003dnonexistent\u0027)[0][0][1]\n    \u0027dumb\u0027\n\nYou could use:\n\n    self.assertNotEqual(keystone.common.ldap._dn_to_id(CONF.ldap.dumb_member), \n                        check_assignment[\u0027user_id\u0027])","commit_id":"a5c5007d9d46ba8dfb8a9dc2f23f1af4c713fa83"},{"author":{"_account_id":9098,"name":"Nathan Kinder","email":"nkinder@redhat.com","username":"nkinder"},"change_message_id":"ad3246dfb8ed0e700995ac47915ce04e8350dca6","unresolved":false,"context_lines":[{"line_number":353,"context_line":""},{"line_number":354,"context_line":"    def test_list_role_assignments_dumb_member(self):"},{"line_number":355,"context_line":"        CONF.ldap.use_dumb_member \u003d True"},{"line_number":356,"context_line":"        CONF.ldap.dumb_member \u003d \u0027cn\u003ddumb,dc\u003dnonexistent\u0027"},{"line_number":357,"context_line":"        self.clear_database()"},{"line_number":358,"context_line":"        self.load_backends()"},{"line_number":359,"context_line":"        self.load_fixtures(default_fixtures)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAWH%2F%2F%2BFY%3D","line":356,"in_reply_to":"AAAAVn%2F%2ByAs%3D","updated":"2014-03-12 16:27:53.000000000","message":"Thanks, it looks like that will work.  The _dn_to_id() method is actually a static method in the BaseLdap class, so I\u0027ll need to use the following from the test code:\n\n    common_ldap.BaseLdap._dn_to_id(CONF.ldap.dumb_member)","commit_id":"a5c5007d9d46ba8dfb8a9dc2f23f1af4c713fa83"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"2ec8af95a6efa62c711707b5112a60f0047c7c1f","unresolved":false,"context_lines":[{"line_number":359,"context_line":"        self.load_fixtures(default_fixtures)"},{"line_number":360,"context_line":""},{"line_number":361,"context_line":"        new_domain \u003d self._get_domain_fixture()"},{"line_number":362,"context_line":"        new_user \u003d {\u0027id\u0027: uuid.uuid4().hex, \u0027name\u0027: uuid.uuid4().hex,"},{"line_number":363,"context_line":"                    \u0027password\u0027: uuid.uuid4().hex, \u0027enabled\u0027: True,"},{"line_number":364,"context_line":"                    \u0027domain_id\u0027: new_domain[\u0027id\u0027]}"},{"line_number":365,"context_line":"        self.identity_api.create_user(new_user[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAU3%2F%2F%2FuA%3D","line":362,"updated":"2014-02-22 19:00:13.000000000","message":"seems like the default fixtures provide plenty of users and projects already.","commit_id":"a5c5007d9d46ba8dfb8a9dc2f23f1af4c713fa83"},{"author":{"_account_id":9098,"name":"Nathan Kinder","email":"nkinder@redhat.com","username":"nkinder"},"change_message_id":"8f5743afbfde9df7c130cd4aa30b75d5d946041e","unresolved":false,"context_lines":[{"line_number":359,"context_line":"        self.load_fixtures(default_fixtures)"},{"line_number":360,"context_line":""},{"line_number":361,"context_line":"        new_domain \u003d self._get_domain_fixture()"},{"line_number":362,"context_line":"        new_user \u003d {\u0027id\u0027: uuid.uuid4().hex, \u0027name\u0027: uuid.uuid4().hex,"},{"line_number":363,"context_line":"                    \u0027password\u0027: uuid.uuid4().hex, \u0027enabled\u0027: True,"},{"line_number":364,"context_line":"                    \u0027domain_id\u0027: new_domain[\u0027id\u0027]}"},{"line_number":365,"context_line":"        self.identity_api.create_user(new_user[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAU3%2F%2FnXs%3D","line":362,"in_reply_to":"AAAAU3%2F%2F%2FuA%3D","updated":"2014-02-25 17:00:53.000000000","message":"I can change this, though I\u0027d like to point out that this new test is doing the exact same thing as the existing test_list_role_assignments_unfiltered() in terms of user/group creation.  If I modify this new test, then the other test should be modified as well for consistency.","commit_id":"a5c5007d9d46ba8dfb8a9dc2f23f1af4c713fa83"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"670b5a33bdd265f697c6ab34e84caf3eae73de89","unresolved":false,"context_lines":[{"line_number":359,"context_line":"        self.load_fixtures(default_fixtures)"},{"line_number":360,"context_line":""},{"line_number":361,"context_line":"        new_domain \u003d self._get_domain_fixture()"},{"line_number":362,"context_line":"        new_user \u003d {\u0027id\u0027: uuid.uuid4().hex, \u0027name\u0027: uuid.uuid4().hex,"},{"line_number":363,"context_line":"                    \u0027password\u0027: uuid.uuid4().hex, \u0027enabled\u0027: True,"},{"line_number":364,"context_line":"                    \u0027domain_id\u0027: new_domain[\u0027id\u0027]}"},{"line_number":365,"context_line":"        self.identity_api.create_user(new_user[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAU3%2F%2Ft%2F0%3D","line":362,"in_reply_to":"AAAAU3%2F%2F%2FuA%3D","updated":"2014-02-28 19:23:39.000000000","message":"We were trying to move away from the default fixtures.  Too many tests require them that don\u0027t need them, and we were trying to push the user etc creation down to the tests that actually need them.","commit_id":"a5c5007d9d46ba8dfb8a9dc2f23f1af4c713fa83"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"0a61cc43c9c0064fa1dad65eadcf39d5d1b6acb3","unresolved":false,"context_lines":[{"line_number":375,"context_line":"        for check_assignment in self.assignment_api.list_role_assignments():"},{"line_number":376,"context_line":"            self.assertNotEqual(common_ldap.BaseLdap._dn_to_id("},{"line_number":377,"context_line":"                                CONF.ldap.dumb_member),"},{"line_number":378,"context_line":"                                check_assignment[\u0027user_id\u0027])"},{"line_number":379,"context_line":""},{"line_number":380,"context_line":"    def test_list_role_assignments_bad_role(self):"},{"line_number":381,"context_line":"        self.skipTest(\u0027Blocked by bug 1221805\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAWH%2F%2F6Bs%3D","line":378,"updated":"2014-03-13 01:43:32.000000000","message":"suggest do ...\n\n assignment_ids \u003d [a[\u0027user_id\u0027] for a in self.assignment_api.list_role_assignments()]\n dumb_id \u003d common_ldap.BaseLdap._dn_to_id(CONF.ldap.dumb_member)\n self.assertNotIn(dumb_id, assignment_id)\n\nthen don\u0027t have to do the loop yourself, and it\u0027ll print out more info if there\u0027s a mismatch.\n\nAlso, can we assert anything else here, like assignment_ids isn\u0027t empty?\n\n(Alternatively, if we know what assignment_ids is going to be then just assert that)\n\n self.assertEqual([new_user[\u0027id\u0027]], assignment_id)","commit_id":"c3f4f80f16f71a66657a4cb3a86394ae84c8c186"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"0a61cc43c9c0064fa1dad65eadcf39d5d1b6acb3","unresolved":false,"context_lines":[{"line_number":704,"context_line":"        self.load_fixtures(default_fixtures)"},{"line_number":705,"context_line":"        self.assertRaises(exception.UserNotFound, self.identity_api.get_user,"},{"line_number":706,"context_line":"                          common_ldap.BaseLdap._dn_to_id("},{"line_number":707,"context_line":"                          CONF.ldap.dumb_member))"},{"line_number":708,"context_line":""},{"line_number":709,"context_line":"    def test_project_attribute_mapping(self):"},{"line_number":710,"context_line":"        CONF.ldap.tenant_name_attribute \u003d \u0027ou\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAWH%2F%2F6BQ%3D","line":707,"updated":"2014-03-13 01:43:32.000000000","message":"suggest move getting the dumb member id to a separate line so that this is readable.","commit_id":"c3f4f80f16f71a66657a4cb3a86394ae84c8c186"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"c0ad6a5c2beb4e4c852f0ff0b2633a19b74835eb","unresolved":false,"context_lines":[{"line_number":698,"context_line":"                          self.role_member[\u0027id\u0027])"},{"line_number":699,"context_line":""},{"line_number":700,"context_line":"    def test_dumb_member(self):"},{"line_number":701,"context_line":"        self.config_fixture.config(group\u003d\u0027ldap\u0027, use_dumb_member\u003dTrue)"},{"line_number":702,"context_line":"        self.clear_database()"},{"line_number":703,"context_line":"        self.load_backends()"},{"line_number":704,"context_line":"        self.load_fixtures(default_fixtures)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAWH%2F%2FBD4%3D","line":701,"updated":"2014-03-20 22:20:20.000000000","message":"++ Yay! more config_fixture fixes!","commit_id":"aa89e074f7ccc67882875394f9d054246b71b9e8"}]}
