)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"6f28d1c8d47a7464d258ceeb25386408ab614b31","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Edmund Rhudy \u003cerhudy@bloomberg.net\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-05-21 17:32:47 -0400"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Adjusts default value of the query for filter_query to an empty string"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This fixes an issue where, when querying Keystone via the v3 API, you"},{"line_number":10,"context_line":"would get back an invalid LDAP filter, because None was coerced to the"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"7a016987_3eaf762b","line":7,"updated":"2015-05-21 23:03:33.000000000","message":"The title should make it clear that this is fixing a bug.","commit_id":"a6b100721f6f700ebe9591507d779b7ccd2e26ed"}],"keystone/tests/unit/common/test_ldap.py":[{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"52676b1a5c5a7fcf8eccfa6a6b8dab17d4758cf7","unresolved":false,"context_lines":[{"line_number":503,"context_line":"    \"\"\"These test cases test LDAP filter generation.\"\"\""},{"line_number":504,"context_line":""},{"line_number":505,"context_line":"    def test_filter_with_query_and_no_hints_set(self):"},{"line_number":506,"context_line":"        certdir \u003d tempfile.mkdtemp()"},{"line_number":507,"context_line":"        self.addCleanup(shutil.rmtree, certdir)"},{"line_number":508,"context_line":"        self.config_fixture.config(group\u003d\u0027ldap\u0027,"},{"line_number":509,"context_line":"                                   url\u003d\u0027ldap://localhost\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a016987_65ce7d64","line":506,"updated":"2015-05-21 21:13:48.000000000","message":"don\u0027t need certdir","commit_id":"363d7dc795094050518273247bee17e219249971"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"52676b1a5c5a7fcf8eccfa6a6b8dab17d4758cf7","unresolved":false,"context_lines":[{"line_number":508,"context_line":"        self.config_fixture.config(group\u003d\u0027ldap\u0027,"},{"line_number":509,"context_line":"                                   url\u003d\u0027ldap://localhost\u0027,"},{"line_number":510,"context_line":"                                   use_tls\u003dFalse,"},{"line_number":511,"context_line":"                                   tls_cacertdir\u003dcertdir)"},{"line_number":512,"context_line":""},{"line_number":513,"context_line":"        # create base_ldap object and inject an attribute mapping"},{"line_number":514,"context_line":"        base_ldap \u003d ks_ldap.BaseLdap(CONF)"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a016987_c5bc11bd","line":511,"updated":"2015-05-21 21:13:48.000000000","message":"you don\u0027t need tls_cacertdir if use_tls is false","commit_id":"363d7dc795094050518273247bee17e219249971"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"6f28d1c8d47a7464d258ceeb25386408ab614b31","unresolved":false,"context_lines":[{"line_number":507,"context_line":"        self.config_fixture.config(group\u003d\u0027ldap\u0027,"},{"line_number":508,"context_line":"                                   url\u003d\u0027ldap://localhost\u0027)"},{"line_number":509,"context_line":""},{"line_number":510,"context_line":"        # create base_ldap object and inject an attribute mapping"},{"line_number":511,"context_line":"        self.base_ldap \u003d ks_ldap.BaseLdap(CONF)"},{"line_number":512,"context_line":"        self.base_ldap.attribute_mapping \u003d {"},{"line_number":513,"context_line":"            \u0027password\u0027: \u0027userPassword\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a016987_de34e2fc","line":510,"updated":"2015-05-21 23:03:33.000000000","message":"remove the comment it\u0027s obvious. Comments should say why the code is here.","commit_id":"a6b100721f6f700ebe9591507d779b7ccd2e26ed"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"6f28d1c8d47a7464d258ceeb25386408ab614b31","unresolved":false,"context_lines":[{"line_number":520,"context_line":""},{"line_number":521,"context_line":"    def test_filter_with_query_and_no_hints_set(self):"},{"line_number":522,"context_line":"        hints \u003d driver_hints.Hints()"},{"line_number":523,"context_line":"        query \u003d (\"(\u0026(objectclass\u003dgroupOfNames)(member\u003dcn\u003daaaaaa,ou\u003dPeople\""},{"line_number":524,"context_line":"                 \",dc\u003dlocal,dc\u003dlan))\")"},{"line_number":525,"context_line":"        self.assertEqual(query,"},{"line_number":526,"context_line":"                         self.base_ldap.filter_query(hints\u003dhints, query\u003dquery))"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a016987_7e3deedb","line":523,"updated":"2015-05-21 23:03:33.000000000","message":"add a comment why \"aaaaaa\" was chosen, and why the rest of these values were chosen.","commit_id":"a6b100721f6f700ebe9591507d779b7ccd2e26ed"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"6f28d1c8d47a7464d258ceeb25386408ab614b31","unresolved":false,"context_lines":[{"line_number":531,"context_line":"                         value\u003du\u0027testuser\u0027,"},{"line_number":532,"context_line":"                         comparator\u003d\u0027equals\u0027,"},{"line_number":533,"context_line":"                         case_sensitive\u003dFalse)"},{"line_number":534,"context_line":"        self.assertEqual(\"(\u0026(sn\u003dtestuser))\","},{"line_number":535,"context_line":"                         self.base_ldap.filter_query(hints\u003dhints))"},{"line_number":536,"context_line":""},{"line_number":537,"context_line":"    def test_filter_with_both_query_and_hints_set(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a016987_3e0bf62b","line":534,"updated":"2015-05-21 23:03:33.000000000","message":"add a comment why \"testuser\" was chosen. If this testuser string is the same as the testuser string at line 531, make a variable so that it\u0027s self-documenting.","commit_id":"a6b100721f6f700ebe9591507d779b7ccd2e26ed"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"6f28d1c8d47a7464d258ceeb25386408ab614b31","unresolved":false,"context_lines":[{"line_number":536,"context_line":""},{"line_number":537,"context_line":"    def test_filter_with_both_query_and_hints_set(self):"},{"line_number":538,"context_line":"        hints \u003d driver_hints.Hints()"},{"line_number":539,"context_line":"        query \u003d (\"(\u0026(objectClass\u003dgroupOfNames)(member\u003dcn\u003daaaaaa,ou\u003dPeople\""},{"line_number":540,"context_line":"                 \",dc\u003dlocal,dc\u003dlan))\")"},{"line_number":541,"context_line":"        expected_result \u003d (\"(\u0026(\u0026(objectClass\u003dgroupOfNames)(member\u003dcn\u003daaaaaa,\""},{"line_number":542,"context_line":"                           \"ou\u003dPeople,dc\u003dlocal,dc\u003dlan))(sn\u003dtestuser))\")"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a016987_de1bc27f","line":539,"updated":"2015-05-21 23:03:33.000000000","message":"add a comment why \"aaaaaa\" was chosen, and why the rest of these values were chosen.","commit_id":"a6b100721f6f700ebe9591507d779b7ccd2e26ed"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"6630982ef0712a7dbe9a5dbb74d60452c8d9b0e4","unresolved":false,"context_lines":[{"line_number":504,"context_line":""},{"line_number":505,"context_line":"    def setUp(self):"},{"line_number":506,"context_line":"        super(LDAPFilterQueryCompositionTest, self).setUp()"},{"line_number":507,"context_line":"        self.config_fixture.config(group\u003d\u0027ldap\u0027,"},{"line_number":508,"context_line":"                                   url\u003d\u0027ldap://localhost\u0027)"},{"line_number":509,"context_line":""},{"line_number":510,"context_line":"        # create base_ldap object and inject an attribute mapping"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a016987_bd48fab3","line":507,"updated":"2015-05-22 17:53:22.000000000","message":"this should be in config_overrides like the other tests do.","commit_id":"552fd49bab7d68d40b37241101285d53b5ffe2b4"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"6630982ef0712a7dbe9a5dbb74d60452c8d9b0e4","unresolved":false,"context_lines":[{"line_number":507,"context_line":"        self.config_fixture.config(group\u003d\u0027ldap\u0027,"},{"line_number":508,"context_line":"                                   url\u003d\u0027ldap://localhost\u0027)"},{"line_number":509,"context_line":""},{"line_number":510,"context_line":"        # create base_ldap object and inject an attribute mapping"},{"line_number":511,"context_line":"        self.base_ldap \u003d ks_ldap.BaseLdap(CONF)"},{"line_number":512,"context_line":"        self.base_ldap.attribute_mapping \u003d {"},{"line_number":513,"context_line":"            \u0027name\u0027: \u0027sn\u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a016987_f894408b","line":510,"updated":"2015-05-22 17:53:22.000000000","message":"remove this comment it doesn\u0027t add anything.","commit_id":"552fd49bab7d68d40b37241101285d53b5ffe2b4"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"6630982ef0712a7dbe9a5dbb74d60452c8d9b0e4","unresolved":false,"context_lines":[{"line_number":509,"context_line":""},{"line_number":510,"context_line":"        # create base_ldap object and inject an attribute mapping"},{"line_number":511,"context_line":"        self.base_ldap \u003d ks_ldap.BaseLdap(CONF)"},{"line_number":512,"context_line":"        self.base_ldap.attribute_mapping \u003d {"},{"line_number":513,"context_line":"            \u0027name\u0027: \u0027sn\u0027"},{"line_number":514,"context_line":"        }"},{"line_number":515,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"7a016987_3deaca74","line":512,"updated":"2015-05-22 17:53:22.000000000","message":"why does this test need an attribute mapping? add a comment.\n\n # Override the default attribute mapping so the tests can use it.","commit_id":"552fd49bab7d68d40b37241101285d53b5ffe2b4"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"6630982ef0712a7dbe9a5dbb74d60452c8d9b0e4","unresolved":false,"context_lines":[{"line_number":516,"context_line":"    def test_return_query_with_no_hints(self):"},{"line_number":517,"context_line":"        hints \u003d driver_hints.Hints()"},{"line_number":518,"context_line":"        # NOTE: doesn\u0027t have to be a real query, we just need to make sure the"},{"line_number":519,"context_line":"        # same string is return if there are no hints."},{"line_number":520,"context_line":"        query \u003d uuid.uuid4().hex"},{"line_number":521,"context_line":"        self.assertEqual(query,"},{"line_number":522,"context_line":"                         self.base_ldap.filter_query(hints\u003dhints, query\u003dquery))"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a016987_7805f00e","line":519,"updated":"2015-05-22 17:53:22.000000000","message":"(nit) change \"return\" to \"returned\"","commit_id":"552fd49bab7d68d40b37241101285d53b5ffe2b4"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"6630982ef0712a7dbe9a5dbb74d60452c8d9b0e4","unresolved":false,"context_lines":[{"line_number":527,"context_line":"    def test_filter_with_empty_query_and_hints_set(self):"},{"line_number":528,"context_line":"        hints \u003d driver_hints.Hints()"},{"line_number":529,"context_line":"        username \u003d uuid.uuid4().hex"},{"line_number":530,"context_line":"        hints.add_filter(name\u003du\u0027name\u0027,"},{"line_number":531,"context_line":"                         value\u003dusername,"},{"line_number":532,"context_line":"                         comparator\u003d\u0027equals\u0027,"},{"line_number":533,"context_line":"                         case_sensitive\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a016987_183efcc0","line":530,"updated":"2015-05-22 17:53:22.000000000","message":"so I think this is referring to the \u0027name\u0027 in the attribute mapping configured in setUp, use a variable so that it\u0027s obvious.","commit_id":"552fd49bab7d68d40b37241101285d53b5ffe2b4"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"6630982ef0712a7dbe9a5dbb74d60452c8d9b0e4","unresolved":false,"context_lines":[{"line_number":540,"context_line":"        hints \u003d driver_hints.Hints()"},{"line_number":541,"context_line":"        # NOTE: doesn\u0027t have to be a real query, we just need to make sure the"},{"line_number":542,"context_line":"        # filter string is concatenated correctly"},{"line_number":543,"context_line":"        query \u003d \u0027(objectclass\u003dfoo)\u0027"},{"line_number":544,"context_line":"        username \u003d uuid.uuid4().hex"},{"line_number":545,"context_line":"        expected_result \u003d \u0027(\u0026%(query)s(%(user_name_attr)s\u003d%(username)s))\u0027 % ("},{"line_number":546,"context_line":"            {\u0027query\u0027: query,"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a016987_78885071","line":543,"updated":"2015-05-22 17:53:22.000000000","message":"should have been changed to query \u003d uuid.uuid4().hex like the other places?","commit_id":"552fd49bab7d68d40b37241101285d53b5ffe2b4"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"6630982ef0712a7dbe9a5dbb74d60452c8d9b0e4","unresolved":false,"context_lines":[{"line_number":546,"context_line":"            {\u0027query\u0027: query,"},{"line_number":547,"context_line":"             \u0027user_name_attr\u0027: CONF.ldap.user_name_attribute,"},{"line_number":548,"context_line":"             \u0027username\u0027: username})"},{"line_number":549,"context_line":"        hints.add_filter(u\u0027name\u0027, username)"},{"line_number":550,"context_line":"        self.assertEqual(expected_result,"},{"line_number":551,"context_line":"                         self.base_ldap.filter_query(hints\u003dhints, query\u003dquery))"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a016987_586d94ca","line":549,"updated":"2015-05-22 17:53:22.000000000","message":"similar comment here -- I think this is referring to the \u0027name\u0027 in the attribute mapping configured in setUp, use a variable so that it\u0027s obvious.","commit_id":"552fd49bab7d68d40b37241101285d53b5ffe2b4"}]}
