)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"1d31b64c558b7833cbb54da364c7f37f8be28253","unresolved":false,"context_lines":[{"line_number":9,"context_line":"We test the filtering and limiting of projects, users and"},{"line_number":10,"context_line":"groups lists in test_backend.py, and we don\u0027t do this for domains."},{"line_number":11,"context_line":"Created a special test for the filtering and limiting of domains list"},{"line_number":12,"context_line":"inside LDAP specific multi-domain classes."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: I86094021e2e12e0c0ecf5e1745e0c66ecfb2f96e"},{"line_number":15,"context_line":"Closes-Bug: #1413276"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"9a8ffd7b_6f133bb9","line":12,"updated":"2015-11-26 06:05:52.000000000","message":"SQL backend should also support multi-domain, and also need to be tested somewhere.","commit_id":"cc11c31f067e6a98e7f03c06c74e359c3f9f11cc"},{"author":{"_account_id":14211,"name":"Konstantin Maksimov","email":"kmaksimov@ru.ibm.com","username":"konstantin-maximov"},"change_message_id":"b6203942fd0e6ccf62c4e1b79e2f1b3babf0dc1b","unresolved":false,"context_lines":[{"line_number":9,"context_line":"We test the filtering and limiting of projects, users and"},{"line_number":10,"context_line":"groups lists in test_backend.py, and we don\u0027t do this for domains."},{"line_number":11,"context_line":"Created a special test for the filtering and limiting of domains list"},{"line_number":12,"context_line":"inside LDAP specific multi-domain classes."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: I86094021e2e12e0c0ecf5e1745e0c66ecfb2f96e"},{"line_number":15,"context_line":"Closes-Bug: #1413276"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"1a7b0d38_f076683d","line":12,"in_reply_to":"7a740942_e594e68b","updated":"2015-12-23 17:34:56.000000000","message":"Fixed the test code and modified the commit message (test will be run for both SQL and LDAP backends)","commit_id":"cc11c31f067e6a98e7f03c06c74e359c3f9f11cc"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"1acdc67ad08be4901c3049605eb7dd52f481abd5","unresolved":false,"context_lines":[{"line_number":9,"context_line":"We test the filtering and limiting of projects, users and"},{"line_number":10,"context_line":"groups lists in test_backend.py, and we don\u0027t do this for domains."},{"line_number":11,"context_line":"Created a special test for the filtering and limiting of domains list"},{"line_number":12,"context_line":"inside LDAP specific multi-domain classes."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: I86094021e2e12e0c0ecf5e1745e0c66ecfb2f96e"},{"line_number":15,"context_line":"Closes-Bug: #1413276"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"7a740942_e594e68b","line":12,"in_reply_to":"9a8ffd7b_09f04690","updated":"2015-12-12 23:46:55.000000000","message":"That\u0027s properly true, but the testcase in the test_backend_sql.py should be updated.","commit_id":"cc11c31f067e6a98e7f03c06c74e359c3f9f11cc"},{"author":{"_account_id":10046,"name":"Henrique Truta","email":"henrique@lsd.ufcg.edu.br","username":"henriquetruta"},"change_message_id":"ad3118aec5adad0dc714900aec755e12341492b4","unresolved":false,"context_lines":[{"line_number":9,"context_line":"We test the filtering and limiting of projects, users and"},{"line_number":10,"context_line":"groups lists in test_backend.py, and we don\u0027t do this for domains."},{"line_number":11,"context_line":"Created a special test for the filtering and limiting of domains list"},{"line_number":12,"context_line":"inside LDAP specific multi-domain classes."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: I86094021e2e12e0c0ecf5e1745e0c66ecfb2f96e"},{"line_number":15,"context_line":"Closes-Bug: #1413276"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"9a8ffd7b_09f04690","line":12,"in_reply_to":"9a8ffd7b_6f133bb9","updated":"2015-12-02 18:31:53.000000000","message":"it\u0027s done in test_backend.py","commit_id":"cc11c31f067e6a98e7f03c06c74e359c3f9f11cc"}],"keystone/tests/unit/identity/test_backends.py":[{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"363b9501597b173085e0e8a2deda05f5a56a9018","unresolved":false,"context_lines":[{"line_number":993,"context_line":"            self.resource_api.update_domain(domain[\u0027id\u0027], domain)"},{"line_number":994,"context_line":"            self.resource_api.delete_domain(domain[\u0027id\u0027])"},{"line_number":995,"context_line":""},{"line_number":996,"context_line":"    def test_list_domains_filtered_and_limited(self):"},{"line_number":997,"context_line":"        # The test is designed for multiple domains only"},{"line_number":998,"context_line":"        if not self.identity_api.multiple_domains_supported \\"},{"line_number":999,"context_line":"                or not self.identity_api.driver.is_domain_aware():"}],"source_content_type":"text/x-python","patch_set":11,"id":"5aef4532_1281678f","line":996,"range":{"start_line":996,"start_character":8,"end_line":996,"end_character":47},"updated":"2016-03-10 14:13:37.000000000","message":"is there a reason this is not in the LimitTests class?","commit_id":"912ae06e5d67482cc30b0f043b5c01512a3ef9be"},{"author":{"_account_id":14211,"name":"Konstantin Maksimov","email":"kmaksimov@ru.ibm.com","username":"konstantin-maximov"},"change_message_id":"79b4d111f3c8683d5eb71a9288d6aefae401b54b","unresolved":false,"context_lines":[{"line_number":993,"context_line":"            self.resource_api.update_domain(domain[\u0027id\u0027], domain)"},{"line_number":994,"context_line":"            self.resource_api.delete_domain(domain[\u0027id\u0027])"},{"line_number":995,"context_line":""},{"line_number":996,"context_line":"    def test_list_domains_filtered_and_limited(self):"},{"line_number":997,"context_line":"        # The test is designed for multiple domains only"},{"line_number":998,"context_line":"        if not self.identity_api.multiple_domains_supported \\"},{"line_number":999,"context_line":"                or not self.identity_api.driver.is_domain_aware():"}],"source_content_type":"text/x-python","patch_set":11,"id":"3afc51ec_fc7bc979","line":996,"range":{"start_line":996,"start_character":8,"end_line":996,"end_character":47},"in_reply_to":"5aef4532_1281678f","updated":"2016-03-11 10:54:49.000000000","message":"Multi-domain classes (MultiLDAPandSQLIdentity, MultiLDAPandSQLIdentityDomainConfigsInSQL) are inherited (and called) from IdentityTests class only (and not from LimitTests class).\nIf we put the new test to LimitTests class, then it won\u0027t be called for multi-domain scenario tests.","commit_id":"912ae06e5d67482cc30b0f043b5c01512a3ef9be"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"363b9501597b173085e0e8a2deda05f5a56a9018","unresolved":false,"context_lines":[{"line_number":997,"context_line":"        # The test is designed for multiple domains only"},{"line_number":998,"context_line":"        if not self.identity_api.multiple_domains_supported \\"},{"line_number":999,"context_line":"                or not self.identity_api.driver.is_domain_aware():"},{"line_number":1000,"context_line":"            return"},{"line_number":1001,"context_line":"        self.domain_list \u003d {}"},{"line_number":1002,"context_line":"        for x in range(1, 6):"},{"line_number":1003,"context_line":"            if x \u003c\u003d 2:"}],"source_content_type":"text/x-python","patch_set":11,"id":"5aef4532_32c2a3e9","line":1000,"range":{"start_line":1000,"start_character":12,"end_line":1000,"end_character":18},"updated":"2016-03-10 14:13:37.000000000","message":"this will be silent in cases of non multi-domain ldap....maybe better to explicitly skip here (so that the test output will show when we skipped or ran the full test","commit_id":"912ae06e5d67482cc30b0f043b5c01512a3ef9be"},{"author":{"_account_id":14211,"name":"Konstantin Maksimov","email":"kmaksimov@ru.ibm.com","username":"konstantin-maximov"},"change_message_id":"79b4d111f3c8683d5eb71a9288d6aefae401b54b","unresolved":false,"context_lines":[{"line_number":997,"context_line":"        # The test is designed for multiple domains only"},{"line_number":998,"context_line":"        if not self.identity_api.multiple_domains_supported \\"},{"line_number":999,"context_line":"                or not self.identity_api.driver.is_domain_aware():"},{"line_number":1000,"context_line":"            return"},{"line_number":1001,"context_line":"        self.domain_list \u003d {}"},{"line_number":1002,"context_line":"        for x in range(1, 6):"},{"line_number":1003,"context_line":"            if x \u003c\u003d 2:"}],"source_content_type":"text/x-python","patch_set":11,"id":"3afc51ec_bccf81b2","line":1000,"range":{"start_line":1000,"start_character":12,"end_line":1000,"end_character":18},"in_reply_to":"5aef4532_32c2a3e9","updated":"2016-03-11 10:54:49.000000000","message":"Will change this in the next patch set.","commit_id":"912ae06e5d67482cc30b0f043b5c01512a3ef9be"},{"author":{"_account_id":8866,"name":"Raildo Mascena de Sousa Filho","email":"rmascena@redhat.com","username":"raildo"},"change_message_id":"e8753cad2bef287849e69f2daa88f53e3b42a56f","unresolved":false,"context_lines":[{"line_number":994,"context_line":"            self.resource_api.delete_domain(domain[\u0027id\u0027])"},{"line_number":995,"context_line":""},{"line_number":996,"context_line":"    def test_list_domains_filtered_and_limited(self):"},{"line_number":997,"context_line":"        # The test is designed for multiple domains only"},{"line_number":998,"context_line":"        if not self.identity_api.multiple_domains_supported \\"},{"line_number":999,"context_line":"                or not self.identity_api.driver.is_domain_aware():"},{"line_number":1000,"context_line":"            self.skipTest(\u0027No multiple domains support\u0027)"},{"line_number":1001,"context_line":"        self.domain_list \u003d {}"},{"line_number":1002,"context_line":"        for x in range(1, 6):"},{"line_number":1003,"context_line":"            if x \u003c\u003d 2:"}],"source_content_type":"text/x-python","patch_set":13,"id":"1af94dfe_8970c5a5","line":1000,"range":{"start_line":997,"start_character":0,"end_line":1000,"end_character":56},"updated":"2016-03-18 12:48:23.000000000","message":"Keystone already have a decorator to skip tests if \"no multiple domain support\"\nfor example on this case:\nhttps://github.com/openstack/keystone/blob/2a24e359c6af26e4da6c2b4b2dc40a958acc59ad/keystone/tests/unit/resource/test_backends.py#L150\n\ncan you use this decorator here?","commit_id":"f038d424cc1da6e933752b3839cb5e49fbf92733"},{"author":{"_account_id":14211,"name":"Konstantin Maksimov","email":"kmaksimov@ru.ibm.com","username":"konstantin-maximov"},"change_message_id":"2592c38a93c216b279d0e68a42208e709dedbd8a","unresolved":false,"context_lines":[{"line_number":994,"context_line":"            self.resource_api.delete_domain(domain[\u0027id\u0027])"},{"line_number":995,"context_line":""},{"line_number":996,"context_line":"    def test_list_domains_filtered_and_limited(self):"},{"line_number":997,"context_line":"        # The test is designed for multiple domains only"},{"line_number":998,"context_line":"        if not self.identity_api.multiple_domains_supported \\"},{"line_number":999,"context_line":"                or not self.identity_api.driver.is_domain_aware():"},{"line_number":1000,"context_line":"            self.skipTest(\u0027No multiple domains support\u0027)"},{"line_number":1001,"context_line":"        self.domain_list \u003d {}"},{"line_number":1002,"context_line":"        for x in range(1, 6):"},{"line_number":1003,"context_line":"            if x \u003c\u003d 2:"}],"source_content_type":"text/x-python","patch_set":13,"id":"1af94dfe_55a12245","line":1000,"range":{"start_line":997,"start_character":0,"end_line":1000,"end_character":56},"in_reply_to":"1af94dfe_8970c5a5","updated":"2016-03-18 16:19:11.000000000","message":"Added the decorator. However the decorator doesn\u0027t exclude specific restricted multi-ldap classes (DomainSpecificLDAPandSQLIdentity), for which multiple domains do not supported. So I added the overridden method with skipTest() for this class.","commit_id":"f038d424cc1da6e933752b3839cb5e49fbf92733"},{"author":{"_account_id":8866,"name":"Raildo Mascena de Sousa Filho","email":"rmascena@redhat.com","username":"raildo"},"change_message_id":"e8753cad2bef287849e69f2daa88f53e3b42a56f","unresolved":false,"context_lines":[{"line_number":999,"context_line":"                or not self.identity_api.driver.is_domain_aware():"},{"line_number":1000,"context_line":"            self.skipTest(\u0027No multiple domains support\u0027)"},{"line_number":1001,"context_line":"        self.domain_list \u003d {}"},{"line_number":1002,"context_line":"        for x in range(1, 6):"},{"line_number":1003,"context_line":"            if x \u003c\u003d 2:"},{"line_number":1004,"context_line":"                domain_name \u003d \u0027domaingroup1-%s\u0027 % uuid.uuid4().hex"},{"line_number":1005,"context_line":"            else:"},{"line_number":1006,"context_line":"                domain_name \u003d \u0027domaingroup2-%s\u0027 % uuid.uuid4().hex"},{"line_number":1007,"context_line":"            domain \u003d unit.new_domain_ref(name\u003ddomain_name)"},{"line_number":1008,"context_line":"            self.domain_list[domain_name] \u003d self.resource_api.create_domain("},{"line_number":1009,"context_line":"                domain[\u0027id\u0027], domain)"},{"line_number":1010,"context_line":""},{"line_number":1011,"context_line":"        self.addCleanup(self.clean_up_domains)"},{"line_number":1012,"context_line":"        unfiltered_domains \u003d self.resource_api.list_domains()"}],"source_content_type":"text/x-python","patch_set":13,"id":"1af94dfe_296c119b","line":1009,"range":{"start_line":1002,"start_character":0,"end_line":1009,"end_character":37},"updated":"2016-03-18 12:48:23.000000000","message":"I suggest create a another method for this code, something like create_domain(domain_count, domain_name), so we can reuse this code for new tests.","commit_id":"f038d424cc1da6e933752b3839cb5e49fbf92733"},{"author":{"_account_id":14211,"name":"Konstantin Maksimov","email":"kmaksimov@ru.ibm.com","username":"konstantin-maximov"},"change_message_id":"2592c38a93c216b279d0e68a42208e709dedbd8a","unresolved":false,"context_lines":[{"line_number":999,"context_line":"                or not self.identity_api.driver.is_domain_aware():"},{"line_number":1000,"context_line":"            self.skipTest(\u0027No multiple domains support\u0027)"},{"line_number":1001,"context_line":"        self.domain_list \u003d {}"},{"line_number":1002,"context_line":"        for x in range(1, 6):"},{"line_number":1003,"context_line":"            if x \u003c\u003d 2:"},{"line_number":1004,"context_line":"                domain_name \u003d \u0027domaingroup1-%s\u0027 % uuid.uuid4().hex"},{"line_number":1005,"context_line":"            else:"},{"line_number":1006,"context_line":"                domain_name \u003d \u0027domaingroup2-%s\u0027 % uuid.uuid4().hex"},{"line_number":1007,"context_line":"            domain \u003d unit.new_domain_ref(name\u003ddomain_name)"},{"line_number":1008,"context_line":"            self.domain_list[domain_name] \u003d self.resource_api.create_domain("},{"line_number":1009,"context_line":"                domain[\u0027id\u0027], domain)"},{"line_number":1010,"context_line":""},{"line_number":1011,"context_line":"        self.addCleanup(self.clean_up_domains)"},{"line_number":1012,"context_line":"        unfiltered_domains \u003d self.resource_api.list_domains()"}],"source_content_type":"text/x-python","patch_set":13,"id":"1af94dfe_95872ab4","line":1009,"range":{"start_line":1002,"start_character":0,"end_line":1009,"end_character":37},"in_reply_to":"1af94dfe_296c119b","updated":"2016-03-18 16:19:11.000000000","message":"Done","commit_id":"f038d424cc1da6e933752b3839cb5e49fbf92733"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"59150160afcfad17575affc79273ceb0fa961b18","unresolved":false,"context_lines":[{"line_number":987,"context_line":"        user_ref \u003d self.identity_api.get_user(user[\u0027id\u0027])"},{"line_number":988,"context_line":"        self.assertDictEqual(updated_user_ref, user_ref)"},{"line_number":989,"context_line":""},{"line_number":990,"context_line":"    def create_domains(self, domain_count, domain_name_prefix):"},{"line_number":991,"context_line":"        for _ in range(domain_count):"},{"line_number":992,"context_line":"            domain_name \u003d \u0027%s-%s\u0027 % (domain_name_prefix, uuid.uuid4().hex)"},{"line_number":993,"context_line":"            domain \u003d unit.new_domain_ref(name\u003ddomain_name)"}],"source_content_type":"text/x-python","patch_set":14,"id":"1af94dfe_d2753b64","line":990,"updated":"2016-03-18 19:57:36.000000000","message":"nit: suggest making this a private method","commit_id":"8bcba04ab4255abbb403501d9a39cbe7db29ac08"},{"author":{"_account_id":14211,"name":"Konstantin Maksimov","email":"kmaksimov@ru.ibm.com","username":"konstantin-maximov"},"change_message_id":"addffbe57eb4aa50dd33e94721745e03522c5214","unresolved":false,"context_lines":[{"line_number":987,"context_line":"        user_ref \u003d self.identity_api.get_user(user[\u0027id\u0027])"},{"line_number":988,"context_line":"        self.assertDictEqual(updated_user_ref, user_ref)"},{"line_number":989,"context_line":""},{"line_number":990,"context_line":"    def create_domains(self, domain_count, domain_name_prefix):"},{"line_number":991,"context_line":"        for _ in range(domain_count):"},{"line_number":992,"context_line":"            domain_name \u003d \u0027%s-%s\u0027 % (domain_name_prefix, uuid.uuid4().hex)"},{"line_number":993,"context_line":"            domain \u003d unit.new_domain_ref(name\u003ddomain_name)"}],"source_content_type":"text/x-python","patch_set":14,"id":"fa0719c6_2f2cc849","line":990,"in_reply_to":"1af94dfe_d2753b64","updated":"2016-03-21 11:18:09.000000000","message":"Done","commit_id":"8bcba04ab4255abbb403501d9a39cbe7db29ac08"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"59150160afcfad17575affc79273ceb0fa961b18","unresolved":false,"context_lines":[{"line_number":994,"context_line":"            self.domain_list[domain_name] \u003d self.resource_api.create_domain("},{"line_number":995,"context_line":"                domain[\u0027id\u0027], domain)"},{"line_number":996,"context_line":""},{"line_number":997,"context_line":"    def clean_up_domains(self):"},{"line_number":998,"context_line":"        for _, domain in self.domain_list.items():"},{"line_number":999,"context_line":"            domain[\u0027enabled\u0027] \u003d False"},{"line_number":1000,"context_line":"            self.resource_api.update_domain(domain[\u0027id\u0027], domain)"}],"source_content_type":"text/x-python","patch_set":14,"id":"1af94dfe_126cc39a","line":997,"updated":"2016-03-18 19:57:36.000000000","message":"nit: suggest making this a private method","commit_id":"8bcba04ab4255abbb403501d9a39cbe7db29ac08"},{"author":{"_account_id":14211,"name":"Konstantin Maksimov","email":"kmaksimov@ru.ibm.com","username":"konstantin-maximov"},"change_message_id":"addffbe57eb4aa50dd33e94721745e03522c5214","unresolved":false,"context_lines":[{"line_number":994,"context_line":"            self.domain_list[domain_name] \u003d self.resource_api.create_domain("},{"line_number":995,"context_line":"                domain[\u0027id\u0027], domain)"},{"line_number":996,"context_line":""},{"line_number":997,"context_line":"    def clean_up_domains(self):"},{"line_number":998,"context_line":"        for _, domain in self.domain_list.items():"},{"line_number":999,"context_line":"            domain[\u0027enabled\u0027] \u003d False"},{"line_number":1000,"context_line":"            self.resource_api.update_domain(domain[\u0027id\u0027], domain)"}],"source_content_type":"text/x-python","patch_set":14,"id":"fa0719c6_af20d84a","line":997,"in_reply_to":"1af94dfe_126cc39a","updated":"2016-03-21 11:18:09.000000000","message":"Done","commit_id":"8bcba04ab4255abbb403501d9a39cbe7db29ac08"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"8677e94d067cbc72a28590fde1f1554b7e7f3c20","unresolved":false,"context_lines":[{"line_number":987,"context_line":"        user_ref \u003d self.identity_api.get_user(user[\u0027id\u0027])"},{"line_number":988,"context_line":"        self.assertDictEqual(updated_user_ref, user_ref)"},{"line_number":989,"context_line":""},{"line_number":990,"context_line":"    def __create_domains(self, domain_count, domain_name_prefix):"},{"line_number":991,"context_line":"        for _ in range(domain_count):"},{"line_number":992,"context_line":"            domain_name \u003d \u0027%s-%s\u0027 % (domain_name_prefix, uuid.uuid4().hex)"},{"line_number":993,"context_line":"            domain \u003d unit.new_domain_ref(name\u003ddomain_name)"}],"source_content_type":"text/x-python","patch_set":15,"id":"fa0719c6_960c0896","line":990,"range":{"start_line":990,"start_character":8,"end_line":990,"end_character":65},"updated":"2016-03-21 13:39:31.000000000","message":"I think what was meant in terms of private was to move these inside test_list_domains_filtered_and_limited(), since they are only used by this method....if you do that, you also don\u0027t need to start the method names with odd characters....","commit_id":"29c0c6a01fd629daf25358106bd216bcec1e122c"},{"author":{"_account_id":8866,"name":"Raildo Mascena de Sousa Filho","email":"rmascena@redhat.com","username":"raildo"},"change_message_id":"eac8c14edd7dd884b490509798eb952520fbd8f6","unresolved":false,"context_lines":[{"line_number":987,"context_line":"        user_ref \u003d self.identity_api.get_user(user[\u0027id\u0027])"},{"line_number":988,"context_line":"        self.assertDictEqual(updated_user_ref, user_ref)"},{"line_number":989,"context_line":""},{"line_number":990,"context_line":"    def __create_domains(self, domain_count, domain_name_prefix):"},{"line_number":991,"context_line":"        for _ in range(domain_count):"},{"line_number":992,"context_line":"            domain_name \u003d \u0027%s-%s\u0027 % (domain_name_prefix, uuid.uuid4().hex)"},{"line_number":993,"context_line":"            domain \u003d unit.new_domain_ref(name\u003ddomain_name)"}],"source_content_type":"text/x-python","patch_set":15,"id":"fa0719c6_1c6db998","line":990,"range":{"start_line":990,"start_character":8,"end_line":990,"end_character":65},"in_reply_to":"fa0719c6_960c0896","updated":"2016-03-21 14:05:46.000000000","message":"I ask him to create a different method, since we can reuse this method for new tests in a future.","commit_id":"29c0c6a01fd629daf25358106bd216bcec1e122c"},{"author":{"_account_id":14211,"name":"Konstantin Maksimov","email":"kmaksimov@ru.ibm.com","username":"konstantin-maximov"},"change_message_id":"00d473c00cb2e1c71f7f88d04e1a026d1d16f6f3","unresolved":false,"context_lines":[{"line_number":987,"context_line":"        user_ref \u003d self.identity_api.get_user(user[\u0027id\u0027])"},{"line_number":988,"context_line":"        self.assertDictEqual(updated_user_ref, user_ref)"},{"line_number":989,"context_line":""},{"line_number":990,"context_line":"    def __create_domains(self, domain_count, domain_name_prefix):"},{"line_number":991,"context_line":"        for _ in range(domain_count):"},{"line_number":992,"context_line":"            domain_name \u003d \u0027%s-%s\u0027 % (domain_name_prefix, uuid.uuid4().hex)"},{"line_number":993,"context_line":"            domain \u003d unit.new_domain_ref(name\u003ddomain_name)"}],"source_content_type":"text/x-python","patch_set":15,"id":"fa0719c6_7c5f9572","line":990,"range":{"start_line":990,"start_character":8,"end_line":990,"end_character":65},"in_reply_to":"fa0719c6_960c0896","updated":"2016-03-21 14:13:03.000000000","message":"These 2 methods were specifically created for future re-using in other tests, see the previous review comment:\nhttps://review.openstack.org/#/c/207456/13/keystone/tests/unit/identity/test_backends.py@1009","commit_id":"29c0c6a01fd629daf25358106bd216bcec1e122c"}],"keystone/tests/unit/test_backend.py":[{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"8616ebfde6ff959b5e74defda74f4fc254e513d8","unresolved":false,"context_lines":[{"line_number":6851,"context_line":"        self._test_list_entity_filtered_and_limited(\u0027project\u0027)"},{"line_number":6852,"context_line":""},{"line_number":6853,"context_line":""},{"line_number":6854,"context_line":"class DomainLimitTests(filtering.FilterTests):"},{"line_number":6855,"context_line":""},{"line_number":6856,"context_line":"    def test_list_domains_filtered_and_limited(self):"},{"line_number":6857,"context_line":"        self.domain_count \u003d 20"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba15a1d1_18301a9e","line":6854,"updated":"2015-09-19 09:41:29.000000000","message":"Is there a reason you chose to do this is a separate class?  Maybe to ensure it only runs in the specific LDAP test class you want?  Since you have created a new class, this isn\u0027t being run in the SQL tests either (since you\u0027d have to add this class to test_backend_sql).\n\nThe other way of doing it is to put the test in the main class in test_backend, and then override with an expected failure where you expect it to not work (i.e. in non-multi-domain LDAP classes). Take a look at how we do this for test_list_role_assignment_by_user_with_domain_group_roles","commit_id":"5110b8f620fdf08cb45b1dcd8ad28e157ca1e32b"},{"author":{"_account_id":10046,"name":"Henrique Truta","email":"henrique@lsd.ufcg.edu.br","username":"henriquetruta"},"change_message_id":"fdb1cb1f1d97968a210f684dafeb57465f6f79f5","unresolved":false,"context_lines":[{"line_number":6851,"context_line":"        self._test_list_entity_filtered_and_limited(\u0027project\u0027)"},{"line_number":6852,"context_line":""},{"line_number":6853,"context_line":""},{"line_number":6854,"context_line":"class DomainLimitTests(filtering.FilterTests):"},{"line_number":6855,"context_line":""},{"line_number":6856,"context_line":"    def test_list_domains_filtered_and_limited(self):"},{"line_number":6857,"context_line":"        self.domain_count \u003d 20"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a2fa921_fb6c67d1","line":6854,"in_reply_to":"ba15a1d1_18301a9e","updated":"2015-10-09 17:03:02.000000000","message":"++","commit_id":"5110b8f620fdf08cb45b1dcd8ad28e157ca1e32b"},{"author":{"_account_id":14211,"name":"Konstantin Maksimov","email":"kmaksimov@ru.ibm.com","username":"konstantin-maximov"},"change_message_id":"c4e0e4f2bab1dcae989824887727ce4823d01afc","unresolved":false,"context_lines":[{"line_number":6851,"context_line":"        self._test_list_entity_filtered_and_limited(\u0027project\u0027)"},{"line_number":6852,"context_line":""},{"line_number":6853,"context_line":""},{"line_number":6854,"context_line":"class DomainLimitTests(filtering.FilterTests):"},{"line_number":6855,"context_line":""},{"line_number":6856,"context_line":"    def test_list_domains_filtered_and_limited(self):"},{"line_number":6857,"context_line":"        self.domain_count \u003d 20"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a8ffd7b_707829f3","line":6854,"in_reply_to":"ba15a1d1_18301a9e","updated":"2015-11-25 13:08:41.000000000","message":"Moved the test to the existing main class in test_backend.","commit_id":"5110b8f620fdf08cb45b1dcd8ad28e157ca1e32b"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"47daa240c6ae57bf55167d0897ee2d19162a5a15","unresolved":false,"context_lines":[{"line_number":6861,"context_line":"        # Should get back just 10 entities"},{"line_number":6862,"context_line":"        self.config_fixture.config(list_limit\u003d10)"},{"line_number":6863,"context_line":"        hints \u003d driver_hints.Hints()"},{"line_number":6864,"context_line":"        hints.add_filter(\u0027name\u0027, \u0027domain\u0027, comparator\u003d\u0027startswith\u0027)"},{"line_number":6865,"context_line":"        entities \u003d self._list_entities(\u0027domain\u0027)(hints\u003dhints)"},{"line_number":6866,"context_line":""},{"line_number":6867,"context_line":"        self.assertThat(entities, matchers.HasLength(hints.limit[\u0027limit\u0027]))"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba15a1d1_957393e7","line":6864,"updated":"2015-09-19 08:44:08.000000000","message":"all domain\u0027s name starts with \"domain\", cannot see whether filter is effective or not, suggest to test the filter seperately as what other testcase did.","commit_id":"5110b8f620fdf08cb45b1dcd8ad28e157ca1e32b"},{"author":{"_account_id":14211,"name":"Konstantin Maksimov","email":"kmaksimov@ru.ibm.com","username":"konstantin-maximov"},"change_message_id":"c4e0e4f2bab1dcae989824887727ce4823d01afc","unresolved":false,"context_lines":[{"line_number":6861,"context_line":"        # Should get back just 10 entities"},{"line_number":6862,"context_line":"        self.config_fixture.config(list_limit\u003d10)"},{"line_number":6863,"context_line":"        hints \u003d driver_hints.Hints()"},{"line_number":6864,"context_line":"        hints.add_filter(\u0027name\u0027, \u0027domain\u0027, comparator\u003d\u0027startswith\u0027)"},{"line_number":6865,"context_line":"        entities \u003d self._list_entities(\u0027domain\u0027)(hints\u003dhints)"},{"line_number":6866,"context_line":""},{"line_number":6867,"context_line":"        self.assertThat(entities, matchers.HasLength(hints.limit[\u0027limit\u0027]))"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a8ffd7b_135be72f","line":6864,"in_reply_to":"ba15a1d1_957393e7","updated":"2015-11-25 13:08:41.000000000","message":"removed this filter and added 2 filters instead: exact filter  add_filter(\u0027name\u0027, unfiltered_domains[10][\u0027name\u0027]) and inexact filter add_filter(\u0027name\u0027, \u00275\u0027, comparator\u003d\u0027endswith\u0027)","commit_id":"5110b8f620fdf08cb45b1dcd8ad28e157ca1e32b"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"47daa240c6ae57bf55167d0897ee2d19162a5a15","unresolved":false,"context_lines":[{"line_number":6869,"context_line":"        self._match_with_list(entities, unfiltered_domains)"},{"line_number":6870,"context_line":""},{"line_number":6871,"context_line":"        # Finally, let\u0027s pretend we want to get the full list of entities,"},{"line_number":6872,"context_line":"        # even with the limits set, as part of some internal calculation."},{"line_number":6873,"context_line":"        # Calling the API without a hints list should achieve this and"},{"line_number":6874,"context_line":"        # return at least the 20 entries we created (there may be other"},{"line_number":6875,"context_line":"        # entities lying around created by other tests/setup)."}],"source_content_type":"text/x-python","patch_set":4,"id":"ba15a1d1_7524bfc5","line":6872,"updated":"2015-09-19 08:44:08.000000000","message":"does this try to test how @response_truncated decorator works? this is not tied to what we want to test here.","commit_id":"5110b8f620fdf08cb45b1dcd8ad28e157ca1e32b"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"47daa240c6ae57bf55167d0897ee2d19162a5a15","unresolved":false,"context_lines":[{"line_number":6872,"context_line":"        # even with the limits set, as part of some internal calculation."},{"line_number":6873,"context_line":"        # Calling the API without a hints list should achieve this and"},{"line_number":6874,"context_line":"        # return at least the 20 entries we created (there may be other"},{"line_number":6875,"context_line":"        # entities lying around created by other tests/setup)."},{"line_number":6876,"context_line":"        entities \u003d self.resource_api.list_domains()"},{"line_number":6877,"context_line":"        self.assertThat(entities, matchers.HasLength(20))"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba15a1d1_f548cf8c","line":6875,"updated":"2015-09-19 08:44:08.000000000","message":"if there are other domain entities created in setup, the following assertion will fail, so what\u0027s the point of this? not quite understand the comments here.","commit_id":"5110b8f620fdf08cb45b1dcd8ad28e157ca1e32b"},{"author":{"_account_id":14211,"name":"Konstantin Maksimov","email":"kmaksimov@ru.ibm.com","username":"konstantin-maximov"},"change_message_id":"c4e0e4f2bab1dcae989824887727ce4823d01afc","unresolved":false,"context_lines":[{"line_number":6872,"context_line":"        # even with the limits set, as part of some internal calculation."},{"line_number":6873,"context_line":"        # Calling the API without a hints list should achieve this and"},{"line_number":6874,"context_line":"        # return at least the 20 entries we created (there may be other"},{"line_number":6875,"context_line":"        # entities lying around created by other tests/setup)."},{"line_number":6876,"context_line":"        entities \u003d self.resource_api.list_domains()"},{"line_number":6877,"context_line":"        self.assertThat(entities, matchers.HasLength(20))"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a8ffd7b_13ce87b4","line":6875,"in_reply_to":"ba15a1d1_f548cf8c","updated":"2015-11-25 13:08:41.000000000","message":"Didn\u0027t take into account that other domains could be created in setup. Removed this check.","commit_id":"5110b8f620fdf08cb45b1dcd8ad28e157ca1e32b"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"8bc8d0657376c73ddc7a34fc62ba8cf15c26a868","unresolved":false,"context_lines":[{"line_number":4105,"context_line":"            try:"},{"line_number":4106,"context_line":"                self.resource_api.create_domain(domain[\u0027id\u0027], domain)"},{"line_number":4107,"context_line":"            except exception.Conflict:"},{"line_number":4108,"context_line":"                self.resource_api.get_domain_by_name(domain[\u0027name\u0027])"},{"line_number":4109,"context_line":"        for x in range(1, 20):"},{"line_number":4110,"context_line":"            domain \u003d \u0027domain%s\u0027 % x"},{"line_number":4111,"context_line":"            create_domain({\u0027id\u0027: uuid.uuid4().hex, \u0027name\u0027: domain})"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a7b0d38_0a02933d","line":4108,"range":{"start_line":4108,"start_character":16,"end_line":4108,"end_character":68},"updated":"2015-12-27 12:21:04.000000000","message":"this looks like meaningless here, get the domain and then? return the domain or does\u0027t do anything here?","commit_id":"2ea823653d7123ddc5cba20951a790d47fb60fe4"},{"author":{"_account_id":14211,"name":"Konstantin Maksimov","email":"kmaksimov@ru.ibm.com","username":"konstantin-maximov"},"change_message_id":"0425dab0a3305264369cfac031c411f267f82d1f","unresolved":false,"context_lines":[{"line_number":4105,"context_line":"            try:"},{"line_number":4106,"context_line":"                self.resource_api.create_domain(domain[\u0027id\u0027], domain)"},{"line_number":4107,"context_line":"            except exception.Conflict:"},{"line_number":4108,"context_line":"                self.resource_api.get_domain_by_name(domain[\u0027name\u0027])"},{"line_number":4109,"context_line":"        for x in range(1, 20):"},{"line_number":4110,"context_line":"            domain \u003d \u0027domain%s\u0027 % x"},{"line_number":4111,"context_line":"            create_domain({\u0027id\u0027: uuid.uuid4().hex, \u0027name\u0027: domain})"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa69d971_a6dbea1a","line":4108,"range":{"start_line":4108,"start_character":16,"end_line":4108,"end_character":68},"in_reply_to":"1a7b0d38_0a02933d","updated":"2015-12-30 15:17:33.000000000","message":"Fixed (assigned the returned domain to the domains dict.)","commit_id":"2ea823653d7123ddc5cba20951a790d47fb60fe4"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"8bc8d0657376c73ddc7a34fc62ba8cf15c26a868","unresolved":false,"context_lines":[{"line_number":4109,"context_line":"        for x in range(1, 20):"},{"line_number":4110,"context_line":"            domain \u003d \u0027domain%s\u0027 % x"},{"line_number":4111,"context_line":"            create_domain({\u0027id\u0027: uuid.uuid4().hex, \u0027name\u0027: domain})"},{"line_number":4112,"context_line":"        create_domain(resource.calc_default_domain())"},{"line_number":4113,"context_line":""},{"line_number":4114,"context_line":"        unfiltered_domains \u003d self.resource_api.list_domains()"},{"line_number":4115,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"1a7b0d38_aa47bfba","line":4112,"range":{"start_line":4112,"start_character":22,"end_line":4112,"end_character":52},"updated":"2015-12-27 12:21:04.000000000","message":"why bother to create a default domain? this is not used anywhere,right?","commit_id":"2ea823653d7123ddc5cba20951a790d47fb60fe4"},{"author":{"_account_id":14211,"name":"Konstantin Maksimov","email":"kmaksimov@ru.ibm.com","username":"konstantin-maximov"},"change_message_id":"0425dab0a3305264369cfac031c411f267f82d1f","unresolved":false,"context_lines":[{"line_number":4109,"context_line":"        for x in range(1, 20):"},{"line_number":4110,"context_line":"            domain \u003d \u0027domain%s\u0027 % x"},{"line_number":4111,"context_line":"            create_domain({\u0027id\u0027: uuid.uuid4().hex, \u0027name\u0027: domain})"},{"line_number":4112,"context_line":"        create_domain(resource.calc_default_domain())"},{"line_number":4113,"context_line":""},{"line_number":4114,"context_line":"        unfiltered_domains \u003d self.resource_api.list_domains()"},{"line_number":4115,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"fa69d971_6604127e","line":4112,"range":{"start_line":4112,"start_character":22,"end_line":4112,"end_character":52},"in_reply_to":"1a7b0d38_aa47bfba","updated":"2015-12-30 15:17:33.000000000","message":"Done","commit_id":"2ea823653d7123ddc5cba20951a790d47fb60fe4"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"8bc8d0657376c73ddc7a34fc62ba8cf15c26a868","unresolved":false,"context_lines":[{"line_number":4131,"context_line":"        hints \u003d driver_hints.Hints()"},{"line_number":4132,"context_line":"        hints.add_filter(\u0027name\u0027, \u00275\u0027, comparator\u003d\u0027endswith\u0027)"},{"line_number":4133,"context_line":"        entities \u003d self.resource_api.list_domains(hints\u003dhints)"},{"line_number":4134,"context_line":"        self.assertThat(entities, matchers.HasLength(2))"},{"line_number":4135,"context_line":"        self.assertIn(entities[0], unfiltered_domains)"},{"line_number":4136,"context_line":"        self.assertIn(entities[1], unfiltered_domains)"},{"line_number":4137,"context_line":""},{"line_number":4138,"context_line":""},{"line_number":4139,"context_line":"class TokenTests(object):"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a7b0d38_8ac3e3ec","line":4136,"range":{"start_line":4134,"start_character":8,"end_line":4136,"end_character":54},"updated":"2015-12-27 12:21:04.000000000","message":"how do you know it returns domain5 and domain15?  suppose it returns domain4 and domain14, does those assertion is wise enough to prove the filtering is working as expected?","commit_id":"2ea823653d7123ddc5cba20951a790d47fb60fe4"},{"author":{"_account_id":14211,"name":"Konstantin Maksimov","email":"kmaksimov@ru.ibm.com","username":"konstantin-maximov"},"change_message_id":"0425dab0a3305264369cfac031c411f267f82d1f","unresolved":false,"context_lines":[{"line_number":4131,"context_line":"        hints \u003d driver_hints.Hints()"},{"line_number":4132,"context_line":"        hints.add_filter(\u0027name\u0027, \u00275\u0027, comparator\u003d\u0027endswith\u0027)"},{"line_number":4133,"context_line":"        entities \u003d self.resource_api.list_domains(hints\u003dhints)"},{"line_number":4134,"context_line":"        self.assertThat(entities, matchers.HasLength(2))"},{"line_number":4135,"context_line":"        self.assertIn(entities[0], unfiltered_domains)"},{"line_number":4136,"context_line":"        self.assertIn(entities[1], unfiltered_domains)"},{"line_number":4137,"context_line":""},{"line_number":4138,"context_line":""},{"line_number":4139,"context_line":"class TokenTests(object):"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa69d971_260cda93","line":4136,"range":{"start_line":4134,"start_character":8,"end_line":4136,"end_character":54},"in_reply_to":"1a7b0d38_8ac3e3ec","updated":"2015-12-30 15:17:33.000000000","message":"Changed these lines (check against the list with 2 domains: 5 and 15)","commit_id":"2ea823653d7123ddc5cba20951a790d47fb60fe4"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"4a97bf230bce3f46814be844331c6661d0c8ba72","unresolved":false,"context_lines":[{"line_number":4104,"context_line":"        domains \u003d {}"},{"line_number":4105,"context_line":"        for x in range(1, 20):"},{"line_number":4106,"context_line":"            domain_name \u003d \u0027domain%s\u0027 % x"},{"line_number":4107,"context_line":"            domain \u003d {\u0027id\u0027: uuid.uuid4().hex, \u0027name\u0027: domain_name}"},{"line_number":4108,"context_line":"            try:"},{"line_number":4109,"context_line":"                domains[domain_name] \u003d self.resource_api.create_domain("},{"line_number":4110,"context_line":"                    domain[\u0027id\u0027], domain)"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa69d971_46722ee7","line":4107,"range":{"start_line":4107,"start_character":12,"end_line":4107,"end_character":66},"updated":"2015-12-30 15:12:04.000000000","message":"I would suggest you use unit.new_domain_ref() instead of this line","commit_id":"4ef233ff31737f05ee53fd7d5ed8b3116456f1c0"},{"author":{"_account_id":14211,"name":"Konstantin Maksimov","email":"kmaksimov@ru.ibm.com","username":"konstantin-maximov"},"change_message_id":"cd4468e9c9b3ced632e48e011765880551875e86","unresolved":false,"context_lines":[{"line_number":4104,"context_line":"        domains \u003d {}"},{"line_number":4105,"context_line":"        for x in range(1, 20):"},{"line_number":4106,"context_line":"            domain_name \u003d \u0027domain%s\u0027 % x"},{"line_number":4107,"context_line":"            domain \u003d {\u0027id\u0027: uuid.uuid4().hex, \u0027name\u0027: domain_name}"},{"line_number":4108,"context_line":"            try:"},{"line_number":4109,"context_line":"                domains[domain_name] \u003d self.resource_api.create_domain("},{"line_number":4110,"context_line":"                    domain[\u0027id\u0027], domain)"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa69d971_ac066b1e","line":4107,"range":{"start_line":4107,"start_character":12,"end_line":4107,"end_character":66},"in_reply_to":"fa69d971_46722ee7","updated":"2015-12-30 16:04:26.000000000","message":"Done","commit_id":"4ef233ff31737f05ee53fd7d5ed8b3116456f1c0"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"0c4ce273daefe2a56fdfcc9cdc60ce92ea04b149","unresolved":false,"context_lines":[{"line_number":28,"context_line":"from keystone.catalog import core"},{"line_number":29,"context_line":"from keystone.common import driver_hints"},{"line_number":30,"context_line":"from keystone import exception"},{"line_number":31,"context_line":"from keystone import resource"},{"line_number":32,"context_line":"from keystone.tests import unit"},{"line_number":33,"context_line":"from keystone.tests.unit import default_fixtures"},{"line_number":34,"context_line":"from keystone.tests.unit import filtering"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa69d971_17fe976b","line":31,"range":{"start_line":31,"start_character":0,"end_line":31,"end_character":29},"updated":"2015-12-31 03:11:36.000000000","message":"this line is causing a pep8 failure","commit_id":"96f51a0c742e074b47405fda66c3c2bdaf7b8b30"},{"author":{"_account_id":14211,"name":"Konstantin Maksimov","email":"kmaksimov@ru.ibm.com","username":"konstantin-maximov"},"change_message_id":"51c08c6a961fc1f092ffd39b19bf96a00c1104c5","unresolved":false,"context_lines":[{"line_number":28,"context_line":"from keystone.catalog import core"},{"line_number":29,"context_line":"from keystone.common import driver_hints"},{"line_number":30,"context_line":"from keystone import exception"},{"line_number":31,"context_line":"from keystone import resource"},{"line_number":32,"context_line":"from keystone.tests import unit"},{"line_number":33,"context_line":"from keystone.tests.unit import default_fixtures"},{"line_number":34,"context_line":"from keystone.tests.unit import filtering"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa69d971_5d3f4db4","line":31,"range":{"start_line":31,"start_character":0,"end_line":31,"end_character":29},"in_reply_to":"fa69d971_17fe976b","updated":"2015-12-31 08:14:11.000000000","message":"Thanks a lot for fixing this.","commit_id":"96f51a0c742e074b47405fda66c3c2bdaf7b8b30"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"0c4ce273daefe2a56fdfcc9cdc60ce92ea04b149","unresolved":false,"context_lines":[{"line_number":4105,"context_line":"        for x in range(1, 20):"},{"line_number":4106,"context_line":"            domain_name \u003d \u0027domain%s\u0027 % x"},{"line_number":4107,"context_line":"            domain \u003d unit.new_domain_ref(name\u003ddomain_name)"},{"line_number":4108,"context_line":"            try:"},{"line_number":4109,"context_line":"                domains[domain_name] \u003d self.resource_api.create_domain("},{"line_number":4110,"context_line":"                    domain[\u0027id\u0027], domain)"},{"line_number":4111,"context_line":"            except exception.Conflict:"},{"line_number":4112,"context_line":"                domains[domain_name] \u003d self.resource_api.get_domain_by_name("},{"line_number":4113,"context_line":"                    domain_name)"},{"line_number":4114,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"fa69d971_77303357","line":4111,"range":{"start_line":4108,"start_character":12,"end_line":4111,"end_character":38},"updated":"2015-12-31 03:11:36.000000000","message":"this try/catch block seems unnecessary. it\u0027s a test, are we really expecting things to break unexpectedly?","commit_id":"96f51a0c742e074b47405fda66c3c2bdaf7b8b30"},{"author":{"_account_id":14211,"name":"Konstantin Maksimov","email":"kmaksimov@ru.ibm.com","username":"konstantin-maximov"},"change_message_id":"51c08c6a961fc1f092ffd39b19bf96a00c1104c5","unresolved":false,"context_lines":[{"line_number":4105,"context_line":"        for x in range(1, 20):"},{"line_number":4106,"context_line":"            domain_name \u003d \u0027domain%s\u0027 % x"},{"line_number":4107,"context_line":"            domain \u003d unit.new_domain_ref(name\u003ddomain_name)"},{"line_number":4108,"context_line":"            try:"},{"line_number":4109,"context_line":"                domains[domain_name] \u003d self.resource_api.create_domain("},{"line_number":4110,"context_line":"                    domain[\u0027id\u0027], domain)"},{"line_number":4111,"context_line":"            except exception.Conflict:"},{"line_number":4112,"context_line":"                domains[domain_name] \u003d self.resource_api.get_domain_by_name("},{"line_number":4113,"context_line":"                    domain_name)"},{"line_number":4114,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"fa69d971_1dbc7504","line":4111,"range":{"start_line":4108,"start_character":12,"end_line":4111,"end_character":38},"in_reply_to":"fa69d971_77303357","updated":"2015-12-31 08:14:11.000000000","message":"Domains are created only once, and during the rest tests they are reused; if we remove try/except, we will get multiple errors:\n\"keystone.exception.Conflict: Conflict occurred attempting to store domain - Duplicate Entry\"","commit_id":"96f51a0c742e074b47405fda66c3c2bdaf7b8b30"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"66e4816ad225917455ec97f78f8e0ea46e431a65","unresolved":false,"context_lines":[{"line_number":4102,"context_line":"    def test_list_domains_filtered_and_limited(self):"},{"line_number":4103,"context_line":"        domains \u003d {}"},{"line_number":4104,"context_line":"        for x in range(1, 20):"},{"line_number":4105,"context_line":"            domain_name \u003d \u0027domain%s\u0027 % x"},{"line_number":4106,"context_line":"            domain \u003d unit.new_domain_ref(name\u003ddomain_name)"},{"line_number":4107,"context_line":"            try:"},{"line_number":4108,"context_line":"                domains[domain_name] \u003d self.resource_api.create_domain("}],"source_content_type":"text/x-python","patch_set":9,"id":"da6ed579_8e94bb37","line":4105,"range":{"start_line":4105,"start_character":33,"end_line":4105,"end_character":35},"updated":"2016-01-12 13:41:42.000000000","message":"(nit) you may use %d as the replacement is a decimal value","commit_id":"8e125e5b5bfd764ac746b52effec3bcdda6ca315"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"57b29b871d6a422538330125edcab477919f4c00","unresolved":false,"context_lines":[{"line_number":4107,"context_line":"            try:"},{"line_number":4108,"context_line":"                domains[domain_name] \u003d self.resource_api.create_domain("},{"line_number":4109,"context_line":"                    domain[\u0027id\u0027], domain)"},{"line_number":4110,"context_line":"            except exception.Conflict:"},{"line_number":4111,"context_line":"                domains[domain_name] \u003d self.resource_api.get_domain_by_name("},{"line_number":4112,"context_line":"                    domain_name)"},{"line_number":4113,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"fa69d971_318ecb79","line":4110,"range":{"start_line":4110,"start_character":19,"end_line":4110,"end_character":28},"updated":"2016-01-05 17:56:44.000000000","message":"This try except is incase a previous test run isn\u0027t cleaned up properly? Technically we shouldn\u0027t have a conflict if we always iterate x.","commit_id":"8e125e5b5bfd764ac746b52effec3bcdda6ca315"},{"author":{"_account_id":14211,"name":"Konstantin Maksimov","email":"kmaksimov@ru.ibm.com","username":"konstantin-maximov"},"change_message_id":"3872736c70708d4eca91f687b204a7e35b2fa6d8","unresolved":false,"context_lines":[{"line_number":4107,"context_line":"            try:"},{"line_number":4108,"context_line":"                domains[domain_name] \u003d self.resource_api.create_domain("},{"line_number":4109,"context_line":"                    domain[\u0027id\u0027], domain)"},{"line_number":4110,"context_line":"            except exception.Conflict:"},{"line_number":4111,"context_line":"                domains[domain_name] \u003d self.resource_api.get_domain_by_name("},{"line_number":4112,"context_line":"                    domain_name)"},{"line_number":4113,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"dae33548_a6703e0c","line":4110,"in_reply_to":"da6ed579_6e7947fc","updated":"2016-02-18 10:18:19.000000000","message":"Included these suggestions into the patch set 10","commit_id":"8e125e5b5bfd764ac746b52effec3bcdda6ca315"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"6df29835d2c5706af9319b58f359ffb55dd0ef74","unresolved":false,"context_lines":[{"line_number":4107,"context_line":"            try:"},{"line_number":4108,"context_line":"                domains[domain_name] \u003d self.resource_api.create_domain("},{"line_number":4109,"context_line":"                    domain[\u0027id\u0027], domain)"},{"line_number":4110,"context_line":"            except exception.Conflict:"},{"line_number":4111,"context_line":"                domains[domain_name] \u003d self.resource_api.get_domain_by_name("},{"line_number":4112,"context_line":"                    domain_name)"},{"line_number":4113,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"fa69d971_e787dcb2","line":4110,"in_reply_to":"fa69d971_318ecb79","updated":"2016-01-06 20:13:56.000000000","message":"I don\u0027t understand the except, either. It seems like the test is broken (not cleaning up domain name\u003d\u0027domain18\u0027, for example, and this is trying to hide it without any explanation.\n\nJust add a self.cleanUp() for each domain you create. Better yet, do this work in setUp and clean it up there.","commit_id":"8e125e5b5bfd764ac746b52effec3bcdda6ca315"},{"author":{"_account_id":11428,"name":"Ajaya Agrawal","email":"ajku.agr@gmail.com","username":"ajayaa"},"change_message_id":"ce8cc080df6c66c228e60c077de4bb6b25a3cc61","unresolved":false,"context_lines":[{"line_number":4107,"context_line":"            try:"},{"line_number":4108,"context_line":"                domains[domain_name] \u003d self.resource_api.create_domain("},{"line_number":4109,"context_line":"                    domain[\u0027id\u0027], domain)"},{"line_number":4110,"context_line":"            except exception.Conflict:"},{"line_number":4111,"context_line":"                domains[domain_name] \u003d self.resource_api.get_domain_by_name("},{"line_number":4112,"context_line":"                    domain_name)"},{"line_number":4113,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"fa69d971_a5aefc2b","line":4110,"in_reply_to":"fa69d971_75b916ec","updated":"2016-01-11 12:32:08.000000000","message":"Using UUID is always a good idea. Although this should run fine, keeping things simple and explicit is always a good practice.\n\nAlso I would not create 20 domains. Just create 5 or so to keep the running time under check.\n\nThe \"Get 2 entries\" section would need some change if this is changed to UUID.","commit_id":"8e125e5b5bfd764ac746b52effec3bcdda6ca315"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"66e4816ad225917455ec97f78f8e0ea46e431a65","unresolved":false,"context_lines":[{"line_number":4107,"context_line":"            try:"},{"line_number":4108,"context_line":"                domains[domain_name] \u003d self.resource_api.create_domain("},{"line_number":4109,"context_line":"                    domain[\u0027id\u0027], domain)"},{"line_number":4110,"context_line":"            except exception.Conflict:"},{"line_number":4111,"context_line":"                domains[domain_name] \u003d self.resource_api.get_domain_by_name("},{"line_number":4112,"context_line":"                    domain_name)"},{"line_number":4113,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"da6ed579_6e7947fc","line":4110,"in_reply_to":"fa69d971_a5aefc2b","updated":"2016-01-12 13:41:42.000000000","message":"Agree with comments. Try dstanek\u0027s suggestion. Also, a smaller number of domains should suffice.","commit_id":"8e125e5b5bfd764ac746b52effec3bcdda6ca315"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"a9f2c12a9debaca87d67ed06401fc2623041175e","unresolved":false,"context_lines":[{"line_number":4107,"context_line":"            try:"},{"line_number":4108,"context_line":"                domains[domain_name] \u003d self.resource_api.create_domain("},{"line_number":4109,"context_line":"                    domain[\u0027id\u0027], domain)"},{"line_number":4110,"context_line":"            except exception.Conflict:"},{"line_number":4111,"context_line":"                domains[domain_name] \u003d self.resource_api.get_domain_by_name("},{"line_number":4112,"context_line":"                    domain_name)"},{"line_number":4113,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"fa69d971_75b916ec","line":4110,"in_reply_to":"fa69d971_e787dcb2","updated":"2016-01-08 00:26:28.000000000","message":"This may be because some other test is creating domains using a similar pattern. A better pattern may just be \u0027\u0027domain-\u0027 + uuid.uuid4().hex","commit_id":"8e125e5b5bfd764ac746b52effec3bcdda6ca315"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"57b29b871d6a422538330125edcab477919f4c00","unresolved":false,"context_lines":[{"line_number":4132,"context_line":"        hints.add_filter(\u0027name\u0027, \u00275\u0027, comparator\u003d\u0027endswith\u0027)"},{"line_number":4133,"context_line":"        entities \u003d self.resource_api.list_domains(hints\u003dhints)"},{"line_number":4134,"context_line":"        self.assertThat(entities, matchers.HasLength(2))"},{"line_number":4135,"context_line":"        filtered_domains \u003d [domains[\u0027domain5\u0027], domains[\u0027domain15\u0027]]"},{"line_number":4136,"context_line":"        self.assertIn(entities[0], filtered_domains)"},{"line_number":4137,"context_line":"        self.assertIn(entities[1], filtered_domains)"},{"line_number":4138,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"fa69d971_51d6dff1","line":4135,"range":{"start_line":4135,"start_character":28,"end_line":4135,"end_character":35},"updated":"2016-01-05 17:56:44.000000000","message":"Should we be using `unfiltered_domains` here?","commit_id":"8e125e5b5bfd764ac746b52effec3bcdda6ca315"},{"author":{"_account_id":14211,"name":"Konstantin Maksimov","email":"kmaksimov@ru.ibm.com","username":"konstantin-maximov"},"change_message_id":"3872736c70708d4eca91f687b204a7e35b2fa6d8","unresolved":false,"context_lines":[{"line_number":4132,"context_line":"        hints.add_filter(\u0027name\u0027, \u00275\u0027, comparator\u003d\u0027endswith\u0027)"},{"line_number":4133,"context_line":"        entities \u003d self.resource_api.list_domains(hints\u003dhints)"},{"line_number":4134,"context_line":"        self.assertThat(entities, matchers.HasLength(2))"},{"line_number":4135,"context_line":"        filtered_domains \u003d [domains[\u0027domain5\u0027], domains[\u0027domain15\u0027]]"},{"line_number":4136,"context_line":"        self.assertIn(entities[0], filtered_domains)"},{"line_number":4137,"context_line":"        self.assertIn(entities[1], filtered_domains)"},{"line_number":4138,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"dae33548_e69246f5","line":4135,"range":{"start_line":4135,"start_character":28,"end_line":4135,"end_character":35},"in_reply_to":"fa69d971_51d6dff1","updated":"2016-02-18 10:18:19.000000000","message":"Redesigned \u0027Get 2 entries\u0027 test in patch set 10 (filtered_domains is not used)","commit_id":"8e125e5b5bfd764ac746b52effec3bcdda6ca315"}],"keystone/tests/unit/test_backend_ldap.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"0120264bea9113ad754f64193b5471f86f6e6a7b","unresolved":false,"context_lines":[{"line_number":2643,"context_line":"    def test_list_domains_filtered_and_limited(self):"},{"line_number":2644,"context_line":"        self.domain_count \u003d 20"},{"line_number":2645,"context_line":"        self.setup_initial_domains()"},{"line_number":2646,"context_line":"        unfiltered_domains \u003d self._list_entities(\u0027domain\u0027)()"},{"line_number":2647,"context_line":""},{"line_number":2648,"context_line":"        # Should get back just 10 entities"},{"line_number":2649,"context_line":"        self.config_fixture.config(list_limit\u003d10)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a4dcd0f_28e7f0ac","line":2646,"updated":"2015-08-07 05:44:45.000000000","message":"remove the extra () at the end of this line","commit_id":"07f31151fb2abef2291f2e813ae09a6546bf3e63"},{"author":{"_account_id":14211,"name":"Konstantin Maksimov","email":"kmaksimov@ru.ibm.com","username":"konstantin-maximov"},"change_message_id":"41af451db18ec4042d0895827d81dbb40a92145d","unresolved":false,"context_lines":[{"line_number":2643,"context_line":"    def test_list_domains_filtered_and_limited(self):"},{"line_number":2644,"context_line":"        self.domain_count \u003d 20"},{"line_number":2645,"context_line":"        self.setup_initial_domains()"},{"line_number":2646,"context_line":"        unfiltered_domains \u003d self._list_entities(\u0027domain\u0027)()"},{"line_number":2647,"context_line":""},{"line_number":2648,"context_line":"        # Should get back just 10 entities"},{"line_number":2649,"context_line":"        self.config_fixture.config(list_limit\u003d10)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a4dcd0f_a4b31f97","line":2646,"in_reply_to":"1a4dcd0f_28e7f0ac","updated":"2015-08-07 11:47:11.000000000","message":"Extra () at the end of this line are required to call the method:\nunfiltered_domains should be a \u0027list\u0027 type. \nself._list_entities(\u0027domain\u0027) returns the reference to the method (object of type \u0027instancemethod\u0027) \nwhich returns the list (and not the list itself) and we need extra () to call that method.\nIf we remove (), then self._list_entities(\u0027domain\u0027) returns the reference to the method and that\nreference will be assigned to unfiltered_domains, and the method is not called. In this case the following error happens:\n\nTraceback (most recent call last):\n  File \"keystone/tests/unit/test_backend_ldap.py\", line 2655, in test_list_domains_filtered_and_limited\n    self._match_with_list(entities, unfiltered_domains)\n  File \"keystone/tests/unit/filtering.py\", line 36, in _match_with_list\n    list_end \u003d len(total_list)\nTypeError: object of type \u0027instancemethod\u0027 has no len()\n\nWe need to call the method that is returned by self._list_entities(\u0027domain\u0027), therefore we need extra ().\nIn this case the list will be assigned to unfiltered_domains (and not the reference to the method),\n and this is the expected behavior: unfiltered_domains \u003d self._list_entities(\u0027domain\u0027)()","commit_id":"07f31151fb2abef2291f2e813ae09a6546bf3e63"},{"author":{"_account_id":13478,"name":"Boris Bobrov","email":"b.bobrov@sap.com","username":"bbobrov"},"change_message_id":"9825b0edbbcf0b2bd77211b28057c864e1d1420a","unresolved":false,"context_lines":[{"line_number":2643,"context_line":"    def test_list_domains_filtered_and_limited(self):"},{"line_number":2644,"context_line":"        self.domain_count \u003d 20"},{"line_number":2645,"context_line":"        self.setup_initial_domains()"},{"line_number":2646,"context_line":"        unfiltered_domains \u003d self._list_entities(\u0027domain\u0027)()"},{"line_number":2647,"context_line":""},{"line_number":2648,"context_line":"        # Should get back just 10 entities"},{"line_number":2649,"context_line":"        self.config_fixture.config(list_limit\u003d10)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a4dcd0f_b6f4a3f0","line":2646,"in_reply_to":"1a4dcd0f_85ae132c","updated":"2015-08-07 16:00:06.000000000","message":"++, we use it like this in several places across the tests","commit_id":"07f31151fb2abef2291f2e813ae09a6546bf3e63"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"539dda27e5c4f9ca60f328179a40a8be433d5d73","unresolved":false,"context_lines":[{"line_number":2643,"context_line":"    def test_list_domains_filtered_and_limited(self):"},{"line_number":2644,"context_line":"        self.domain_count \u003d 20"},{"line_number":2645,"context_line":"        self.setup_initial_domains()"},{"line_number":2646,"context_line":"        unfiltered_domains \u003d self._list_entities(\u0027domain\u0027)()"},{"line_number":2647,"context_line":""},{"line_number":2648,"context_line":"        # Should get back just 10 entities"},{"line_number":2649,"context_line":"        self.config_fixture.config(list_limit\u003d10)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a4dcd0f_85ae132c","line":2646,"in_reply_to":"1a4dcd0f_a4b31f97","updated":"2015-08-07 15:13:42.000000000","message":"cool, thanks for letting me know!","commit_id":"07f31151fb2abef2291f2e813ae09a6546bf3e63"},{"author":{"_account_id":14211,"name":"Konstantin Maksimov","email":"kmaksimov@ru.ibm.com","username":"konstantin-maximov"},"change_message_id":"63fff9845798387fac4e1aeaea9efa81c5f38fa1","unresolved":false,"context_lines":[{"line_number":2643,"context_line":"    def test_list_domains_filtered_and_limited(self):"},{"line_number":2644,"context_line":"        self.domain_count \u003d 20"},{"line_number":2645,"context_line":"        self.setup_initial_domains()"},{"line_number":2646,"context_line":"        unfiltered_domains \u003d self._list_entities(\u0027domain\u0027)()"},{"line_number":2647,"context_line":""},{"line_number":2648,"context_line":"        # Should get back just 10 entities"},{"line_number":2649,"context_line":"        self.config_fixture.config(list_limit\u003d10)"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba15a1d1_32d4cb45","line":2646,"in_reply_to":"1a4dcd0f_b1b58ded","updated":"2015-09-15 15:20:53.000000000","message":"Done","commit_id":"07f31151fb2abef2291f2e813ae09a6546bf3e63"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"9cc69f8c1ccdb8547b20ccece90978377a1d697b","unresolved":false,"context_lines":[{"line_number":2643,"context_line":"    def test_list_domains_filtered_and_limited(self):"},{"line_number":2644,"context_line":"        self.domain_count \u003d 20"},{"line_number":2645,"context_line":"        self.setup_initial_domains()"},{"line_number":2646,"context_line":"        unfiltered_domains \u003d self._list_entities(\u0027domain\u0027)()"},{"line_number":2647,"context_line":""},{"line_number":2648,"context_line":"        # Should get back just 10 entities"},{"line_number":2649,"context_line":"        self.config_fixture.config(list_limit\u003d10)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a4dcd0f_b1b58ded","line":2646,"in_reply_to":"1a4dcd0f_b6f4a3f0","updated":"2015-08-07 16:28:30.000000000","message":"Why not just use self.assignment_api.list_domains()? I\u0027d like to get rid of that FilterTests mixin anyway.","commit_id":"07f31151fb2abef2291f2e813ae09a6546bf3e63"},{"author":{"_account_id":13478,"name":"Boris Bobrov","email":"b.bobrov@sap.com","username":"bbobrov"},"change_message_id":"9825b0edbbcf0b2bd77211b28057c864e1d1420a","unresolved":false,"context_lines":[{"line_number":2650,"context_line":"        hints \u003d driver_hints.Hints()"},{"line_number":2651,"context_line":"        hints.add_filter(\u0027name\u0027, \u0027domain\u0027, comparator\u003d\u0027startswith\u0027)"},{"line_number":2652,"context_line":"        entities \u003d self._list_entities(\u0027domain\u0027)(hints\u003dhints)"},{"line_number":2653,"context_line":"        self.assertEqual(hints.limit[\u0027limit\u0027], len(entities))"},{"line_number":2654,"context_line":"        self.assertTrue(hints.limit[\u0027truncated\u0027])"},{"line_number":2655,"context_line":"        self._match_with_list(entities, unfiltered_domains)"},{"line_number":2656,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"1a4dcd0f_563d1fc2","line":2653,"updated":"2015-08-07 16:00:06.000000000","message":"matchers.HasLength should be used","commit_id":"07f31151fb2abef2291f2e813ae09a6546bf3e63"},{"author":{"_account_id":14211,"name":"Konstantin Maksimov","email":"kmaksimov@ru.ibm.com","username":"konstantin-maximov"},"change_message_id":"63fff9845798387fac4e1aeaea9efa81c5f38fa1","unresolved":false,"context_lines":[{"line_number":2650,"context_line":"        hints \u003d driver_hints.Hints()"},{"line_number":2651,"context_line":"        hints.add_filter(\u0027name\u0027, \u0027domain\u0027, comparator\u003d\u0027startswith\u0027)"},{"line_number":2652,"context_line":"        entities \u003d self._list_entities(\u0027domain\u0027)(hints\u003dhints)"},{"line_number":2653,"context_line":"        self.assertEqual(hints.limit[\u0027limit\u0027], len(entities))"},{"line_number":2654,"context_line":"        self.assertTrue(hints.limit[\u0027truncated\u0027])"},{"line_number":2655,"context_line":"        self._match_with_list(entities, unfiltered_domains)"},{"line_number":2656,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"ba15a1d1_92c5978f","line":2653,"in_reply_to":"1a4dcd0f_563d1fc2","updated":"2015-09-15 15:20:53.000000000","message":"Done","commit_id":"07f31151fb2abef2291f2e813ae09a6546bf3e63"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"9cc69f8c1ccdb8547b20ccece90978377a1d697b","unresolved":false,"context_lines":[{"line_number":2652,"context_line":"        entities \u003d self._list_entities(\u0027domain\u0027)(hints\u003dhints)"},{"line_number":2653,"context_line":"        self.assertEqual(hints.limit[\u0027limit\u0027], len(entities))"},{"line_number":2654,"context_line":"        self.assertTrue(hints.limit[\u0027truncated\u0027])"},{"line_number":2655,"context_line":"        self._match_with_list(entities, unfiltered_domains)"},{"line_number":2656,"context_line":""},{"line_number":2657,"context_line":"        # Finally, let\u0027s pretend we want to get the full list of entities,"},{"line_number":2658,"context_line":"        # even with the limits set, as part of some internal calculation."}],"source_content_type":"text/x-python","patch_set":1,"id":"1a4dcd0f_f1cc7536","line":2655,"updated":"2015-08-07 16:28:30.000000000","message":"You want to check for a subset right? Do you care if they are contiguous in the unfiltered list?","commit_id":"07f31151fb2abef2291f2e813ae09a6546bf3e63"},{"author":{"_account_id":14211,"name":"Konstantin Maksimov","email":"kmaksimov@ru.ibm.com","username":"konstantin-maximov"},"change_message_id":"63fff9845798387fac4e1aeaea9efa81c5f38fa1","unresolved":false,"context_lines":[{"line_number":2652,"context_line":"        entities \u003d self._list_entities(\u0027domain\u0027)(hints\u003dhints)"},{"line_number":2653,"context_line":"        self.assertEqual(hints.limit[\u0027limit\u0027], len(entities))"},{"line_number":2654,"context_line":"        self.assertTrue(hints.limit[\u0027truncated\u0027])"},{"line_number":2655,"context_line":"        self._match_with_list(entities, unfiltered_domains)"},{"line_number":2656,"context_line":""},{"line_number":2657,"context_line":"        # Finally, let\u0027s pretend we want to get the full list of entities,"},{"line_number":2658,"context_line":"        # even with the limits set, as part of some internal calculation."}],"source_content_type":"text/x-python","patch_set":1,"id":"ba15a1d1_32a5abb4","line":2655,"in_reply_to":"1a4dcd0f_f1cc7536","updated":"2015-09-15 15:20:53.000000000","message":"Correct, we test if they are contiguous in the unfiltered list (the same method is used in the existing limit test method test_backend.LimitTests._test_list_entity_filtered_and_limited)","commit_id":"07f31151fb2abef2291f2e813ae09a6546bf3e63"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"0120264bea9113ad754f64193b5471f86f6e6a7b","unresolved":false,"context_lines":[{"line_number":2659,"context_line":"        # Calling the API without a hints list should achieve this, and"},{"line_number":2660,"context_line":"        # return at least the 20 entries we created (there may be other"},{"line_number":2661,"context_line":"        # entities lying around created by other tests/setup)."},{"line_number":2662,"context_line":"        entities \u003d self._list_entities(\u0027domain\u0027)()"},{"line_number":2663,"context_line":"        self.assertTrue(len(entities) \u003e\u003d 20)"},{"line_number":2664,"context_line":""},{"line_number":2665,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"1a4dcd0f_48ea7c75","line":2662,"updated":"2015-08-07 05:44:45.000000000","message":"remove the extra () at the end of this line","commit_id":"07f31151fb2abef2291f2e813ae09a6546bf3e63"},{"author":{"_account_id":14211,"name":"Konstantin Maksimov","email":"kmaksimov@ru.ibm.com","username":"konstantin-maximov"},"change_message_id":"41af451db18ec4042d0895827d81dbb40a92145d","unresolved":false,"context_lines":[{"line_number":2659,"context_line":"        # Calling the API without a hints list should achieve this, and"},{"line_number":2660,"context_line":"        # return at least the 20 entries we created (there may be other"},{"line_number":2661,"context_line":"        # entities lying around created by other tests/setup)."},{"line_number":2662,"context_line":"        entities \u003d self._list_entities(\u0027domain\u0027)()"},{"line_number":2663,"context_line":"        self.assertTrue(len(entities) \u003e\u003d 20)"},{"line_number":2664,"context_line":""},{"line_number":2665,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"1a4dcd0f_847b83bd","line":2662,"in_reply_to":"1a4dcd0f_48ea7c75","updated":"2015-08-07 11:47:11.000000000","message":"extra () are required here as well, see my previous comment","commit_id":"07f31151fb2abef2291f2e813ae09a6546bf3e63"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"9cc69f8c1ccdb8547b20ccece90978377a1d697b","unresolved":false,"context_lines":[{"line_number":2659,"context_line":"        # Calling the API without a hints list should achieve this, and"},{"line_number":2660,"context_line":"        # return at least the 20 entries we created (there may be other"},{"line_number":2661,"context_line":"        # entities lying around created by other tests/setup)."},{"line_number":2662,"context_line":"        entities \u003d self._list_entities(\u0027domain\u0027)()"},{"line_number":2663,"context_line":"        self.assertTrue(len(entities) \u003e\u003d 20)"},{"line_number":2664,"context_line":""},{"line_number":2665,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"1a4dcd0f_71d945f2","line":2662,"in_reply_to":"1a4dcd0f_847b83bd","updated":"2015-08-07 16:28:30.000000000","message":"Same as above","commit_id":"07f31151fb2abef2291f2e813ae09a6546bf3e63"},{"author":{"_account_id":13478,"name":"Boris Bobrov","email":"b.bobrov@sap.com","username":"bbobrov"},"change_message_id":"9825b0edbbcf0b2bd77211b28057c864e1d1420a","unresolved":false,"context_lines":[{"line_number":2660,"context_line":"        # return at least the 20 entries we created (there may be other"},{"line_number":2661,"context_line":"        # entities lying around created by other tests/setup)."},{"line_number":2662,"context_line":"        entities \u003d self._list_entities(\u0027domain\u0027)()"},{"line_number":2663,"context_line":"        self.assertTrue(len(entities) \u003e\u003d 20)"},{"line_number":2664,"context_line":""},{"line_number":2665,"context_line":""},{"line_number":2666,"context_line":"class MultiLDAPandSQLIdentityDomainConfigsInSQL(MultiLDAPandSQLIdentity):"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a4dcd0f_f679cb93","line":2663,"updated":"2015-08-07 16:00:06.000000000","message":"matchers.HasLength should be used","commit_id":"07f31151fb2abef2291f2e813ae09a6546bf3e63"},{"author":{"_account_id":14211,"name":"Konstantin Maksimov","email":"kmaksimov@ru.ibm.com","username":"konstantin-maximov"},"change_message_id":"63fff9845798387fac4e1aeaea9efa81c5f38fa1","unresolved":false,"context_lines":[{"line_number":2660,"context_line":"        # return at least the 20 entries we created (there may be other"},{"line_number":2661,"context_line":"        # entities lying around created by other tests/setup)."},{"line_number":2662,"context_line":"        entities \u003d self._list_entities(\u0027domain\u0027)()"},{"line_number":2663,"context_line":"        self.assertTrue(len(entities) \u003e\u003d 20)"},{"line_number":2664,"context_line":""},{"line_number":2665,"context_line":""},{"line_number":2666,"context_line":"class MultiLDAPandSQLIdentityDomainConfigsInSQL(MultiLDAPandSQLIdentity):"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba15a1d1_32936b51","line":2663,"in_reply_to":"1a4dcd0f_f679cb93","updated":"2015-09-15 15:20:53.000000000","message":"Done","commit_id":"07f31151fb2abef2291f2e813ae09a6546bf3e63"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"07881fda242ca36badf27a06bea515d94dc64925","unresolved":false,"context_lines":[{"line_number":2842,"context_line":"            test_list_role_assignment_by_user_with_domain_group_roles"},{"line_number":2843,"context_line":""},{"line_number":2844,"context_line":"    def test_list_domains_filtered_and_limited(self):"},{"line_number":2845,"context_line":"        super(BaseLDAPIdentity, self).test_list_domains_filtered_and_limited()"},{"line_number":2846,"context_line":""},{"line_number":2847,"context_line":""},{"line_number":2848,"context_line":"class MultiLDAPandSQLIdentityDomainConfigsInSQL(MultiLDAPandSQLIdentity):"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a8ffd7b_ff77fd9c","line":2845,"updated":"2015-11-25 15:04:21.000000000","message":"what is the point of having these tests?  Are they calling the above test differently?  When I put a break point in the  test \u0027BaseLDAPIdentity.test_list_domains_filtered_and_limited()\u0027 and remove this test it still runs.  Couldn\u0027t we just remove this?","commit_id":"cc11c31f067e6a98e7f03c06c74e359c3f9f11cc"},{"author":{"_account_id":14211,"name":"Konstantin Maksimov","email":"kmaksimov@ru.ibm.com","username":"konstantin-maximov"},"change_message_id":"a406a7f767e509894e982b42fcbccd23893233a9","unresolved":false,"context_lines":[{"line_number":2842,"context_line":"            test_list_role_assignment_by_user_with_domain_group_roles"},{"line_number":2843,"context_line":""},{"line_number":2844,"context_line":"    def test_list_domains_filtered_and_limited(self):"},{"line_number":2845,"context_line":"        super(BaseLDAPIdentity, self).test_list_domains_filtered_and_limited()"},{"line_number":2846,"context_line":""},{"line_number":2847,"context_line":""},{"line_number":2848,"context_line":"class MultiLDAPandSQLIdentityDomainConfigsInSQL(MultiLDAPandSQLIdentity):"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a8ffd7b_93834acc","line":2845,"in_reply_to":"9a8ffd7b_ff77fd9c","updated":"2015-11-25 15:54:35.000000000","message":"This is done on purpose: we need to run this test for multi-domain classes only (and not for derived classes, which are not multi-domain). If we remove this, then we will get errors for non multi-domain classes.","commit_id":"cc11c31f067e6a98e7f03c06c74e359c3f9f11cc"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"07881fda242ca36badf27a06bea515d94dc64925","unresolved":false,"context_lines":[{"line_number":3217,"context_line":"        base.test_list_role_assignments_filtered_by_role()"},{"line_number":3218,"context_line":""},{"line_number":3219,"context_line":"    def test_list_domains_filtered_and_limited(self):"},{"line_number":3220,"context_line":"        super(BaseLDAPIdentity, self).test_list_domains_filtered_and_limited()"},{"line_number":3221,"context_line":""},{"line_number":3222,"context_line":""},{"line_number":3223,"context_line":"class DomainSpecificSQLIdentity(DomainSpecificLDAPandSQLIdentity):"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a8ffd7b_df9b19c8","line":3220,"updated":"2015-11-25 15:04:21.000000000","message":"ditto","commit_id":"cc11c31f067e6a98e7f03c06c74e359c3f9f11cc"},{"author":{"_account_id":14211,"name":"Konstantin Maksimov","email":"kmaksimov@ru.ibm.com","username":"konstantin-maximov"},"change_message_id":"a406a7f767e509894e982b42fcbccd23893233a9","unresolved":false,"context_lines":[{"line_number":3217,"context_line":"        base.test_list_role_assignments_filtered_by_role()"},{"line_number":3218,"context_line":""},{"line_number":3219,"context_line":"    def test_list_domains_filtered_and_limited(self):"},{"line_number":3220,"context_line":"        super(BaseLDAPIdentity, self).test_list_domains_filtered_and_limited()"},{"line_number":3221,"context_line":""},{"line_number":3222,"context_line":""},{"line_number":3223,"context_line":"class DomainSpecificSQLIdentity(DomainSpecificLDAPandSQLIdentity):"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a8ffd7b_f363b63f","line":3220,"in_reply_to":"9a8ffd7b_df9b19c8","updated":"2015-11-25 15:54:35.000000000","message":"see above","commit_id":"cc11c31f067e6a98e7f03c06c74e359c3f9f11cc"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"a9f2c12a9debaca87d67ed06401fc2623041175e","unresolved":false,"context_lines":[{"line_number":2798,"context_line":"        super(BaseLDAPIdentity, self).\\"},{"line_number":2799,"context_line":"            test_list_role_assignment_by_user_with_domain_group_roles"},{"line_number":2800,"context_line":""},{"line_number":2801,"context_line":"    def test_list_domains_filtered_and_limited(self):"},{"line_number":2802,"context_line":"        super(BaseLDAPIdentity, self).test_list_domains_filtered_and_limited()"},{"line_number":2803,"context_line":""},{"line_number":2804,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"fa69d971_15d8daee","line":2801,"updated":"2016-01-08 00:26:28.000000000","message":"At first glance this is strange to me. Why isn\u0027t this being called automatically?","commit_id":"8e125e5b5bfd764ac746b52effec3bcdda6ca315"},{"author":{"_account_id":14211,"name":"Konstantin Maksimov","email":"kmaksimov@ru.ibm.com","username":"konstantin-maximov"},"change_message_id":"3872736c70708d4eca91f687b204a7e35b2fa6d8","unresolved":false,"context_lines":[{"line_number":2798,"context_line":"        super(BaseLDAPIdentity, self).\\"},{"line_number":2799,"context_line":"            test_list_role_assignment_by_user_with_domain_group_roles"},{"line_number":2800,"context_line":""},{"line_number":2801,"context_line":"    def test_list_domains_filtered_and_limited(self):"},{"line_number":2802,"context_line":"        super(BaseLDAPIdentity, self).test_list_domains_filtered_and_limited()"},{"line_number":2803,"context_line":""},{"line_number":2804,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"dae33548_d18a5e63","line":2801,"in_reply_to":"da6ed579_d9c11f30","updated":"2016-02-18 10:18:19.000000000","message":"This was used for running the test for multi-domain scenarios only (and fail with exception for non multi-domain). In patch set 10 I changed the main test in test_backend (added the check for multi-domain support), so now no changes are required to test_backend_ldap.","commit_id":"8e125e5b5bfd764ac746b52effec3bcdda6ca315"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"66e4816ad225917455ec97f78f8e0ea46e431a65","unresolved":false,"context_lines":[{"line_number":2798,"context_line":"        super(BaseLDAPIdentity, self).\\"},{"line_number":2799,"context_line":"            test_list_role_assignment_by_user_with_domain_group_roles"},{"line_number":2800,"context_line":""},{"line_number":2801,"context_line":"    def test_list_domains_filtered_and_limited(self):"},{"line_number":2802,"context_line":"        super(BaseLDAPIdentity, self).test_list_domains_filtered_and_limited()"},{"line_number":2803,"context_line":""},{"line_number":2804,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"da6ed579_d9c11f30","line":2801,"in_reply_to":"fa69d971_15d8daee","updated":"2016-01-12 13:41:42.000000000","message":"++","commit_id":"8e125e5b5bfd764ac746b52effec3bcdda6ca315"},{"author":{"_account_id":11428,"name":"Ajaya Agrawal","email":"ajku.agr@gmail.com","username":"ajayaa"},"change_message_id":"ce8cc080df6c66c228e60c077de4bb6b25a3cc61","unresolved":false,"context_lines":[{"line_number":2800,"context_line":""},{"line_number":2801,"context_line":"    def test_list_domains_filtered_and_limited(self):"},{"line_number":2802,"context_line":"        super(BaseLDAPIdentity, self).test_list_domains_filtered_and_limited()"},{"line_number":2803,"context_line":""},{"line_number":2804,"context_line":""},{"line_number":2805,"context_line":"class MultiLDAPandSQLIdentityDomainConfigsInSQL(MultiLDAPandSQLIdentity):"},{"line_number":2806,"context_line":"    \"\"\"Class to test the use of domain configs stored in the database."}],"source_content_type":"text/x-python","patch_set":9,"id":"fa69d971_9042183d","line":2803,"range":{"start_line":2803,"start_character":0,"end_line":2803,"end_character":0},"updated":"2016-01-11 12:32:08.000000000","message":"This should not be needed!","commit_id":"8e125e5b5bfd764ac746b52effec3bcdda6ca315"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"a9f2c12a9debaca87d67ed06401fc2623041175e","unresolved":false,"context_lines":[{"line_number":3173,"context_line":"        base \u003d super(BaseLDAPIdentity, self)"},{"line_number":3174,"context_line":"        base.test_list_role_assignments_filtered_by_role()"},{"line_number":3175,"context_line":""},{"line_number":3176,"context_line":"    def test_list_domains_filtered_and_limited(self):"},{"line_number":3177,"context_line":"        super(BaseLDAPIdentity, self).test_list_domains_filtered_and_limited()"},{"line_number":3178,"context_line":""},{"line_number":3179,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"fa69d971_d5e1e29b","line":3176,"updated":"2016-01-08 00:26:28.000000000","message":"Same here","commit_id":"8e125e5b5bfd764ac746b52effec3bcdda6ca315"}],"keystone/tests/unit/test_backend_sql.py":[{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"1d31b64c558b7833cbb54da364c7f37f8be28253","unresolved":false,"context_lines":[{"line_number":421,"context_line":""},{"line_number":422,"context_line":"    def test_list_domains_filtered_and_limited(self):"},{"line_number":423,"context_line":"        # The test is designed for multiple domains only."},{"line_number":424,"context_line":"        self.assertRaises(AttributeError,"},{"line_number":425,"context_line":"                          super(SqlIdentity, self)."},{"line_number":426,"context_line":"                          test_list_domains_filtered_and_limited)"},{"line_number":427,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"9a8ffd7b_efd2cbff","line":424,"updated":"2015-11-26 06:05:52.000000000","message":"the exception raised here is not because SQL backend or the  whatever related with SqlIdentity test module that doesn\u0027t support multiple domains but just because self.setup_initial_domains() method is not defined in this class.\n\n \u003e/opt/stack/keystone/keystone/tests/unit/test_backend.py(4296)test_list_domains_filtered_and_limited()\n -\u003e self.setup_initial_domains()\n (Pdb) s\n AttributeError: \"\u0027SqlIdentity\u0027 object has no attribute \u0027setup_initial_domains\u0027\"","commit_id":"cc11c31f067e6a98e7f03c06c74e359c3f9f11cc"},{"author":{"_account_id":14211,"name":"Konstantin Maksimov","email":"kmaksimov@ru.ibm.com","username":"konstantin-maximov"},"change_message_id":"b6203942fd0e6ccf62c4e1b79e2f1b3babf0dc1b","unresolved":false,"context_lines":[{"line_number":421,"context_line":""},{"line_number":422,"context_line":"    def test_list_domains_filtered_and_limited(self):"},{"line_number":423,"context_line":"        # The test is designed for multiple domains only."},{"line_number":424,"context_line":"        self.assertRaises(AttributeError,"},{"line_number":425,"context_line":"                          super(SqlIdentity, self)."},{"line_number":426,"context_line":"                          test_list_domains_filtered_and_limited)"},{"line_number":427,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"1a7b0d38_d0632cb0","line":424,"in_reply_to":"9a8ffd7b_efd2cbff","updated":"2015-12-23 17:34:56.000000000","message":"Added domains creation code to the test in test_backend.py, now the test will be run for SQL backend.","commit_id":"cc11c31f067e6a98e7f03c06c74e359c3f9f11cc"},{"author":{"_account_id":10046,"name":"Henrique Truta","email":"henrique@lsd.ufcg.edu.br","username":"henriquetruta"},"change_message_id":"ad3118aec5adad0dc714900aec755e12341492b4","unresolved":false,"context_lines":[{"line_number":421,"context_line":""},{"line_number":422,"context_line":"    def test_list_domains_filtered_and_limited(self):"},{"line_number":423,"context_line":"        # The test is designed for multiple domains only."},{"line_number":424,"context_line":"        self.assertRaises(AttributeError,"},{"line_number":425,"context_line":"                          super(SqlIdentity, self)."},{"line_number":426,"context_line":"                          test_list_domains_filtered_and_limited)"},{"line_number":427,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"9a8ffd7b_c97a3ef1","line":424,"in_reply_to":"9a8ffd7b_efd2cbff","updated":"2015-12-02 18:31:53.000000000","message":"I don\u0027t think we should have this test","commit_id":"cc11c31f067e6a98e7f03c06c74e359c3f9f11cc"}]}
