)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"aa6c4bd69ed57b219574d97f18a4a92b6bd355d9","unresolved":false,"context_lines":[{"line_number":10,"context_line":"by default."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I565d12395ca39a58ba90faf8641a9e02d986aeb9"},{"line_number":13,"context_line":"Closes-Bug: #1744195"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":21,"id":"3f79a3b5_37790b2e","line":13,"range":{"start_line":13,"start_character":0,"end_line":13,"end_character":20},"updated":"2018-09-07 21:27:32.000000000","message":"I usually don\u0027t push for release notes for developer specific bugs, but this is something that\u0027s been on our radar for a while and might mean something to downstream teams from a testing perspective.","commit_id":"3b1c65d378ee8802def812f9652ddeb12ef93665"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"33795199c7e37d04429bd8e7b1b5acc6315ef68b","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Enable foreign keys for unit test"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The unit test now uses sqlite for test which closes db foreign keys"},{"line_number":10,"context_line":"function by default. This patch enabled the sqlite foreign keys"},{"line_number":11,"context_line":"function for unit test by default."},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":25,"id":"3f79a3b5_0be7b111","line":9,"range":{"start_line":9,"start_character":14,"end_line":9,"end_character":17},"updated":"2018-10-08 20:59:58.000000000","message":"Technically, we\u0027ve used SQLite for testing for a long time.","commit_id":"a5ee33559fb11ebbc87529f967b19f9892aab1f4"}],"keystone/resource/core.py":[{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"f65d69c2773615c3a7d55cc902368d006102b0ce","unresolved":false,"context_lines":[{"line_number":103,"context_line":"        \"\"\""},{"line_number":104,"context_line":"        if (not PROVIDERS.identity_api.multiple_domains_supported and"},{"line_number":105,"context_line":"                project_ref[\u0027id\u0027] !\u003d CONF.identity.default_domain_id and"},{"line_number":106,"context_line":"                project_ref[\u0027id\u0027] !\u003d base.NULL_DOMAIN_ID):"},{"line_number":107,"context_line":"            raise exception.ValidationError("},{"line_number":108,"context_line":"                message\u003d_(\u0027Multiple domains are not supported\u0027))"},{"line_number":109,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"3f79a3b5_a81e8a5c","line":106,"updated":"2018-09-28 09:04:58.000000000","message":"This change is concerning, changing the tests should not require changing the functionality.","commit_id":"35f0097cdd384c5c7c8dbd66e088040d91b5e289"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"e215725f1a625e45a9749c9ebec14ebf3594be38","unresolved":false,"context_lines":[{"line_number":103,"context_line":"        \"\"\""},{"line_number":104,"context_line":"        if (not PROVIDERS.identity_api.multiple_domains_supported and"},{"line_number":105,"context_line":"                project_ref[\u0027id\u0027] !\u003d CONF.identity.default_domain_id and"},{"line_number":106,"context_line":"                project_ref[\u0027id\u0027] !\u003d base.NULL_DOMAIN_ID):"},{"line_number":107,"context_line":"            raise exception.ValidationError("},{"line_number":108,"context_line":"                message\u003d_(\u0027Multiple domains are not supported\u0027))"},{"line_number":109,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"3f79a3b5_c4a9b8de","line":106,"in_reply_to":"3f79a3b5_a81e8a5c","updated":"2018-10-08 09:07:42.000000000","message":"this change is for unit test only, since only unit test would create the root domain by hand. This change can be removed once we use db_sync for db schema initialization.","commit_id":"35f0097cdd384c5c7c8dbd66e088040d91b5e289"}],"keystone/tests/unit/base_classes.py":[{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"f65d69c2773615c3a7d55cc902368d006102b0ce","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        try:"},{"line_number":63,"context_line":"            PROVIDERS.resource_api.create_domain("},{"line_number":64,"context_line":"                default_fixtures.ROOT_DOMAIN[\u0027id\u0027],"},{"line_number":65,"context_line":"                default_fixtures.ROOT_DOMAIN)"},{"line_number":66,"context_line":"        except exception.Conflict:"},{"line_number":67,"context_line":"            pass"},{"line_number":68,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"3f79a3b5_28327af3","line":65,"updated":"2018-09-28 09:04:58.000000000","message":"Is this not already automatically created?","commit_id":"35f0097cdd384c5c7c8dbd66e088040d91b5e289"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"e215725f1a625e45a9749c9ebec14ebf3594be38","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        try:"},{"line_number":63,"context_line":"            PROVIDERS.resource_api.create_domain("},{"line_number":64,"context_line":"                default_fixtures.ROOT_DOMAIN[\u0027id\u0027],"},{"line_number":65,"context_line":"                default_fixtures.ROOT_DOMAIN)"},{"line_number":66,"context_line":"        except exception.Conflict:"},{"line_number":67,"context_line":"            pass"},{"line_number":68,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"3f79a3b5_a4fa7cb7","line":65,"in_reply_to":"3f79a3b5_28327af3","updated":"2018-10-08 09:07:42.000000000","message":"no, the base class \"BaseTestCase\" does nothing about root domain. We should add the root domain before run \"bootstrap\".","commit_id":"35f0097cdd384c5c7c8dbd66e088040d91b5e289"}],"keystone/tests/unit/resource/backends/test_sql.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"33795199c7e37d04429bd8e7b1b5acc6315ef68b","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from keystone.tests.unit.ksfixtures import database"},{"line_number":18,"context_line":"from keystone.tests.unit.resource import test_backends"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"PROVIDERS \u003d provider_api.ProviderAPIs"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"class TestSqlResourceDriver(unit.BaseTestCase,"}],"source_content_type":"text/x-python","patch_set":25,"id":"3f79a3b5_2b238d08","line":20,"updated":"2018-10-08 20:59:58.000000000","message":"This isn\u0027t used anywhere in the additive changes here. I checked this out locally, removed this line and line 13, and everything still passed.","commit_id":"a5ee33559fb11ebbc87529f967b19f9892aab1f4"}],"keystone/tests/unit/resource/test_backends.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"d6556048d65c2b2cd8ae504e810744328dca3abb","unresolved":false,"context_lines":[{"line_number":1732,"context_line":"            \u0027domain_id\u0027: uuid.uuid4().hex,"},{"line_number":1733,"context_line":"            \u0027description\u0027: uuid.uuid4().hex,"},{"line_number":1734,"context_line":"            \u0027enabled\u0027: True,"},{"line_number":1735,"context_line":"            \u0027parent_id\u0027: uuid.uuid4().hex,"},{"line_number":1736,"context_line":"            \u0027is_domain\u0027: True,"},{"line_number":1737,"context_line":"        }"},{"line_number":1738,"context_line":"        self.driver.create_project(project_id, project)"}],"source_content_type":"text/x-python","patch_set":17,"id":"3f79a3b5_3e8ce9d5","side":"PARENT","line":1735,"updated":"2018-08-22 16:09:20.000000000","message":"I think we can keep this but just add a call to create the parent project before we create this project, which should make this work with FKs enabled.","commit_id":"42bd2aadf6b0219a373d8bc7686894cca74a9e4c"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"3e596df57a42d55ea94c342cb429e19ea762e085","unresolved":false,"context_lines":[{"line_number":1732,"context_line":"            \u0027domain_id\u0027: uuid.uuid4().hex,"},{"line_number":1733,"context_line":"            \u0027description\u0027: uuid.uuid4().hex,"},{"line_number":1734,"context_line":"            \u0027enabled\u0027: True,"},{"line_number":1735,"context_line":"            \u0027parent_id\u0027: uuid.uuid4().hex,"},{"line_number":1736,"context_line":"            \u0027is_domain\u0027: True,"},{"line_number":1737,"context_line":"        }"},{"line_number":1738,"context_line":"        self.driver.create_project(project_id, project)"}],"source_content_type":"text/x-python","patch_set":17,"id":"3f79a3b5_4bff97aa","side":"PARENT","line":1735,"in_reply_to":"3f79a3b5_3e8ce9d5","updated":"2018-08-23 02:57:27.000000000","message":"Done","commit_id":"42bd2aadf6b0219a373d8bc7686894cca74a9e4c"}],"keystone/tests/unit/test_backend_ldap.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"d6556048d65c2b2cd8ae504e810744328dca3abb","unresolved":false,"context_lines":[{"line_number":741,"context_line":"        PROVIDERS.resource_api.create_domain(domain1[\u0027id\u0027], domain1)"},{"line_number":742,"context_line":"        PROVIDERS.resource_api.create_domain(domain2[\u0027id\u0027], domain2)"},{"line_number":743,"context_line":"        domains \u003d PROVIDERS.resource_api.list_domains()"},{"line_number":744,"context_line":"        self.assertEqual(9, len(domains))"},{"line_number":745,"context_line":"        domain_ids \u003d []"},{"line_number":746,"context_line":"        for domain in domains:"},{"line_number":747,"context_line":"            domain_ids.append(domain.get(\u0027id\u0027))"}],"source_content_type":"text/x-python","patch_set":17,"id":"3f79a3b5_99051713","line":744,"range":{"start_line":744,"start_character":25,"end_line":744,"end_character":26},"updated":"2018-08-22 16:09:20.000000000","message":"nit: I would be great to use a constant here.\n\n  expected_domain_count \u003d 9","commit_id":"610cc45dae5504268ce24984919c5f219a440e2b"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"3e596df57a42d55ea94c342cb429e19ea762e085","unresolved":false,"context_lines":[{"line_number":741,"context_line":"        PROVIDERS.resource_api.create_domain(domain1[\u0027id\u0027], domain1)"},{"line_number":742,"context_line":"        PROVIDERS.resource_api.create_domain(domain2[\u0027id\u0027], domain2)"},{"line_number":743,"context_line":"        domains \u003d PROVIDERS.resource_api.list_domains()"},{"line_number":744,"context_line":"        self.assertEqual(9, len(domains))"},{"line_number":745,"context_line":"        domain_ids \u003d []"},{"line_number":746,"context_line":"        for domain in domains:"},{"line_number":747,"context_line":"            domain_ids.append(domain.get(\u0027id\u0027))"}],"source_content_type":"text/x-python","patch_set":17,"id":"3f79a3b5_cb240763","line":744,"range":{"start_line":744,"start_character":25,"end_line":744,"end_character":26},"in_reply_to":"3f79a3b5_99051713","updated":"2018-08-23 02:57:27.000000000","message":"Done","commit_id":"610cc45dae5504268ce24984919c5f219a440e2b"}],"keystone/tests/unit/test_backend_ldap_pool.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"d6556048d65c2b2cd8ae504e810744328dca3abb","unresolved":false,"context_lines":[{"line_number":244,"context_line":"            PROVIDERS.federation_api.create_idp(new_idp[\u0027id\u0027], new_idp)"},{"line_number":245,"context_line":"            PROVIDERS.federation_api.create_protocol(new_idp[\u0027id\u0027],"},{"line_number":246,"context_line":"                                                     new_protocol[\u0027id\u0027],"},{"line_number":247,"context_line":"                                                     new_protocol)"},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"    def config_files(self):"},{"line_number":250,"context_line":"        config_files \u003d super(LDAPIdentity, self).config_files()"}],"source_content_type":"text/x-python","patch_set":17,"id":"3f79a3b5_59af7fe2","line":247,"updated":"2018-08-22 16:09:20.000000000","message":"This is a bit confusing since the test case appears to be testing LDAP, but we\u0027re adding a federated IDP. Is this used in a lot of tests? If not, can we just include it directly in the test that it\u0027s used in?","commit_id":"610cc45dae5504268ce24984919c5f219a440e2b"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"0551625600d9e17600027e8daa90c72c1c121e3c","unresolved":false,"context_lines":[{"line_number":244,"context_line":"            PROVIDERS.federation_api.create_idp(new_idp[\u0027id\u0027], new_idp)"},{"line_number":245,"context_line":"            PROVIDERS.federation_api.create_protocol(new_idp[\u0027id\u0027],"},{"line_number":246,"context_line":"                                                     new_protocol[\u0027id\u0027],"},{"line_number":247,"context_line":"                                                     new_protocol)"},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"    def config_files(self):"},{"line_number":250,"context_line":"        config_files \u003d super(LDAPIdentity, self).config_files()"}],"source_content_type":"text/x-python","patch_set":17,"id":"3f79a3b5_20425cac","line":247,"in_reply_to":"3f79a3b5_11c9c257","updated":"2018-08-24 01:43:11.000000000","message":"all the test which call \"PROVIDERS.shadow_users_api.create_federated_user\" will use this. e.g. https://github.com/openstack/keystone/blob/master/keystone/tests/unit/identity/test_backends.py#L485\n\nso the tests like:\ntest_list_users_with_name\ntest_list_users_with_unique_id\ntest_list_users_with_idp_id\ntest_list_users_with_protocol_id\ntest_list_users_with_unique_id_and_idp_id\ntest_list_users_with_unique_id_and_protocol_id\n....","commit_id":"610cc45dae5504268ce24984919c5f219a440e2b"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"3e596df57a42d55ea94c342cb429e19ea762e085","unresolved":false,"context_lines":[{"line_number":244,"context_line":"            PROVIDERS.federation_api.create_idp(new_idp[\u0027id\u0027], new_idp)"},{"line_number":245,"context_line":"            PROVIDERS.federation_api.create_protocol(new_idp[\u0027id\u0027],"},{"line_number":246,"context_line":"                                                     new_protocol[\u0027id\u0027],"},{"line_number":247,"context_line":"                                                     new_protocol)"},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"    def config_files(self):"},{"line_number":250,"context_line":"        config_files \u003d super(LDAPIdentity, self).config_files()"}],"source_content_type":"text/x-python","patch_set":17,"id":"3f79a3b5_eb36a351","line":247,"in_reply_to":"3f79a3b5_59af7fe2","updated":"2018-08-23 02:57:27.000000000","message":"yeah, the root base class is \"identity.test_backends.IdentityTests\" which contains not only one fed test.","commit_id":"610cc45dae5504268ce24984919c5f219a440e2b"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"b05ce3ce252210c81b70783ef14b0ff0fdafd376","unresolved":false,"context_lines":[{"line_number":244,"context_line":"            PROVIDERS.federation_api.create_idp(new_idp[\u0027id\u0027], new_idp)"},{"line_number":245,"context_line":"            PROVIDERS.federation_api.create_protocol(new_idp[\u0027id\u0027],"},{"line_number":246,"context_line":"                                                     new_protocol[\u0027id\u0027],"},{"line_number":247,"context_line":"                                                     new_protocol)"},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"    def config_files(self):"},{"line_number":250,"context_line":"        config_files \u003d super(LDAPIdentity, self).config_files()"}],"source_content_type":"text/x-python","patch_set":17,"id":"3f79a3b5_11c9c257","line":247,"in_reply_to":"3f79a3b5_eb36a351","updated":"2018-08-23 12:27:06.000000000","message":"So does a test use this?","commit_id":"610cc45dae5504268ce24984919c5f219a440e2b"}],"keystone/tests/unit/test_cli.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"d6556048d65c2b2cd8ae504e810744328dca3abb","unresolved":false,"context_lines":[{"line_number":341,"context_line":""},{"line_number":342,"context_line":"    def test_assignment_created_with_user_exists(self):"},{"line_number":343,"context_line":"        # test assignment can be created if user already exists."},{"line_number":344,"context_line":"        bootstrap \u003d cli.BootStrap()"},{"line_number":345,"context_line":"        PROVIDERS.resource_api.create_domain("},{"line_number":346,"context_line":"            default_fixtures.ROOT_DOMAIN[\u0027id\u0027], default_fixtures.ROOT_DOMAIN)"},{"line_number":347,"context_line":"        PROVIDERS.resource_api.create_domain(self.default_domain[\u0027id\u0027],"},{"line_number":348,"context_line":"                                             self.default_domain)"},{"line_number":349,"context_line":"        user_ref \u003d unit.new_user_ref(self.default_domain[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":17,"id":"3f79a3b5_19e34736","line":346,"range":{"start_line":344,"start_character":8,"end_line":346,"end_character":77},"updated":"2018-08-22 16:09:20.000000000","message":"Both of these could be pulled up into the test class setUp method which would reduce duplication across tests.","commit_id":"610cc45dae5504268ce24984919c5f219a440e2b"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"3e596df57a42d55ea94c342cb429e19ea762e085","unresolved":false,"context_lines":[{"line_number":341,"context_line":""},{"line_number":342,"context_line":"    def test_assignment_created_with_user_exists(self):"},{"line_number":343,"context_line":"        # test assignment can be created if user already exists."},{"line_number":344,"context_line":"        bootstrap \u003d cli.BootStrap()"},{"line_number":345,"context_line":"        PROVIDERS.resource_api.create_domain("},{"line_number":346,"context_line":"            default_fixtures.ROOT_DOMAIN[\u0027id\u0027], default_fixtures.ROOT_DOMAIN)"},{"line_number":347,"context_line":"        PROVIDERS.resource_api.create_domain(self.default_domain[\u0027id\u0027],"},{"line_number":348,"context_line":"                                             self.default_domain)"},{"line_number":349,"context_line":"        user_ref \u003d unit.new_user_ref(self.default_domain[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":17,"id":"3f79a3b5_2b69fbf7","line":346,"range":{"start_line":344,"start_character":8,"end_line":346,"end_character":77},"in_reply_to":"3f79a3b5_19e34736","updated":"2018-08-23 02:57:27.000000000","message":"Done","commit_id":"610cc45dae5504268ce24984919c5f219a440e2b"}]}
