)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"9b225de665166685e1759d4e64fefc716aa5640c","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add parent_id to create_project"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Now keystone supports the creation of projects"},{"line_number":10,"context_line":"hierarchies, this patch adds the parent_id field"},{"line_number":11,"context_line":"in the project client and adds a simple test to"},{"line_number":12,"context_line":"check it."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"5aef4532_12a15946","line":9,"range":{"start_line":9,"start_character":0,"end_line":9,"end_character":4},"updated":"2016-03-10 17:40:23.000000000","message":"Heh, since kilo at least, so it\u0027s easy not to break stable branch testing.","commit_id":"21b2d951236865f168bf5e324030de74324a3f51"}],"tempest/api/identity/admin/v3/test_projects.py":[{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"9b225de665166685e1759d4e64fefc716aa5640c","unresolved":false,"context_lines":[{"line_number":60,"context_line":"            root_project_name)[\u0027project\u0027]"},{"line_number":61,"context_line":"        self.data.projects.append(root_project)"},{"line_number":62,"context_line":"        root_project_id \u003d root_project[\u0027id\u0027]"},{"line_number":63,"context_line":"        parent_id \u003d root_project[\u0027parent_id\u0027]"},{"line_number":64,"context_line":"        self.assertEqual(root_project_name, root_project[\u0027name\u0027])"},{"line_number":65,"context_line":"        self.assertIsNone(parent_id)"},{"line_number":66,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"5aef4532_72d1bd22","line":63,"updated":"2016-03-10 17:40:23.000000000","message":"The fact that this passes CI implies that now parent_id will always be returned, and that it\u0027s value is None if it\u0027s not set.\nThis works only because we only support kilo and liberty, and parent_id was already returned there, only we never tested for it.","commit_id":"21b2d951236865f168bf5e324030de74324a3f51"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"ca9a88a1185d8f7a5bead1096b69ebf8a93d20e4","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        root_project_name \u003d data_utils.rand_name(\u0027root_project\u0027)"},{"line_number":69,"context_line":"        root_project \u003d self.projects_client.create_project("},{"line_number":70,"context_line":"            root_project_name, domain_id\u003ddomain_id)[\u0027project\u0027]"},{"line_number":71,"context_line":"        self.data.projects.append(root_project)"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"        root_project_id \u003d root_project[\u0027id\u0027]"},{"line_number":74,"context_line":"        parent_id \u003d root_project[\u0027parent_id\u0027]"}],"source_content_type":"text/x-python","patch_set":11,"id":"3aaa91ec_a7d5a343","line":71,"range":{"start_line":71,"start_character":0,"end_line":71,"end_character":47},"updated":"2016-06-27 10:20:23.000000000","message":"NIT: a addCleanup would work nicely here. Most identity tests tend to stack up resources in a test class and clean them all at the end, which is something I\u0027d like to fix eventually, but not in this patch.","commit_id":"6dd8a89bc2c21a6545bcd54163723965e5ce491a"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"221f63196fbd4aef339a983812761e354a112354","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        root_project_name \u003d data_utils.rand_name(\u0027root_project\u0027)"},{"line_number":69,"context_line":"        root_project \u003d self.projects_client.create_project("},{"line_number":70,"context_line":"            root_project_name, domain_id\u003ddomain_id)[\u0027project\u0027]"},{"line_number":71,"context_line":"        self.data.projects.append(root_project)"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"        root_project_id \u003d root_project[\u0027id\u0027]"},{"line_number":74,"context_line":"        parent_id \u003d root_project[\u0027parent_id\u0027]"}],"source_content_type":"text/x-python","patch_set":11,"id":"3aaa91ec_b248388c","line":71,"range":{"start_line":71,"start_character":0,"end_line":71,"end_character":47},"in_reply_to":"3aaa91ec_a7d5a343","updated":"2016-06-27 12:55:52.000000000","message":"Done","commit_id":"6dd8a89bc2c21a6545bcd54163723965e5ce491a"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"ca9a88a1185d8f7a5bead1096b69ebf8a93d20e4","unresolved":false,"context_lines":[{"line_number":75,"context_line":"        self.assertEqual(root_project_name, root_project[\u0027name\u0027])"},{"line_number":76,"context_line":"        # If not provided, the parent_id must point to the top level"},{"line_number":77,"context_line":"        # project in the hierarchy, i.e. its domain"},{"line_number":78,"context_line":"        self.assertEqual(parent_id, domain_id)"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"        body \u003d self.projects_client.show_project("},{"line_number":81,"context_line":"            root_project_id)[\u0027project\u0027]"}],"source_content_type":"text/x-python","patch_set":11,"id":"3aaa91ec_27f6d38e","line":78,"range":{"start_line":78,"start_character":8,"end_line":78,"end_character":46},"updated":"2016-06-27 10:20:23.000000000","message":"domain_id is the expected value, and parent_id what you\u0027re observing, so it should be the other way around self.assertEqual(domain_id, parent_id)","commit_id":"6dd8a89bc2c21a6545bcd54163723965e5ce491a"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"221f63196fbd4aef339a983812761e354a112354","unresolved":false,"context_lines":[{"line_number":75,"context_line":"        self.assertEqual(root_project_name, root_project[\u0027name\u0027])"},{"line_number":76,"context_line":"        # If not provided, the parent_id must point to the top level"},{"line_number":77,"context_line":"        # project in the hierarchy, i.e. its domain"},{"line_number":78,"context_line":"        self.assertEqual(parent_id, domain_id)"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"        body \u003d self.projects_client.show_project("},{"line_number":81,"context_line":"            root_project_id)[\u0027project\u0027]"}],"source_content_type":"text/x-python","patch_set":11,"id":"3aaa91ec_924d3c9c","line":78,"range":{"start_line":78,"start_character":8,"end_line":78,"end_character":46},"in_reply_to":"3aaa91ec_27f6d38e","updated":"2016-06-27 12:55:52.000000000","message":"Done","commit_id":"6dd8a89bc2c21a6545bcd54163723965e5ce491a"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"ca9a88a1185d8f7a5bead1096b69ebf8a93d20e4","unresolved":false,"context_lines":[{"line_number":77,"context_line":"        # project in the hierarchy, i.e. its domain"},{"line_number":78,"context_line":"        self.assertEqual(parent_id, domain_id)"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"        body \u003d self.projects_client.show_project("},{"line_number":81,"context_line":"            root_project_id)[\u0027project\u0027]"},{"line_number":82,"context_line":"        self.assertEqual(root_project_name, body[\u0027name\u0027])"},{"line_number":83,"context_line":"        self.assertEqual(domain_id, body[\u0027parent_id\u0027])"},{"line_number":84,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"3aaa91ec_273d332b","line":81,"range":{"start_line":80,"start_character":8,"end_line":81,"end_character":39},"updated":"2016-06-27 10:20:23.000000000","message":"NIT: I think a comment would be nice to explain that your verifying both what the create api returned as well as what you get from a show.","commit_id":"6dd8a89bc2c21a6545bcd54163723965e5ce491a"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"221f63196fbd4aef339a983812761e354a112354","unresolved":false,"context_lines":[{"line_number":77,"context_line":"        # project in the hierarchy, i.e. its domain"},{"line_number":78,"context_line":"        self.assertEqual(parent_id, domain_id)"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"        body \u003d self.projects_client.show_project("},{"line_number":81,"context_line":"            root_project_id)[\u0027project\u0027]"},{"line_number":82,"context_line":"        self.assertEqual(root_project_name, body[\u0027name\u0027])"},{"line_number":83,"context_line":"        self.assertEqual(domain_id, body[\u0027parent_id\u0027])"},{"line_number":84,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"3aaa91ec_522bd494","line":81,"range":{"start_line":80,"start_character":8,"end_line":81,"end_character":39},"in_reply_to":"3aaa91ec_273d332b","updated":"2016-06-27 12:55:52.000000000","message":"Actually, I don\u0027t think this is much needed since we already verifying the fields above (was copying the steps from the other tests)","commit_id":"6dd8a89bc2c21a6545bcd54163723965e5ce491a"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"ca9a88a1185d8f7a5bead1096b69ebf8a93d20e4","unresolved":false,"context_lines":[{"line_number":91,"context_line":"        project_id \u003d project[\u0027id\u0027]"},{"line_number":92,"context_line":"        parent_id \u003d project[\u0027parent_id\u0027]"},{"line_number":93,"context_line":"        self.assertEqual(project_name, project[\u0027name\u0027])"},{"line_number":94,"context_line":"        self.assertEqual(parent_id, root_project_id)"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"        body \u003d self.projects_client.show_project(project_id)[\u0027project\u0027]"},{"line_number":97,"context_line":"        self.assertEqual(project_name, body[\u0027name\u0027])"}],"source_content_type":"text/x-python","patch_set":11,"id":"3aaa91ec_070bd77d","line":94,"updated":"2016-06-27 10:20:23.000000000","message":"ditto, reversed order","commit_id":"6dd8a89bc2c21a6545bcd54163723965e5ce491a"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"221f63196fbd4aef339a983812761e354a112354","unresolved":false,"context_lines":[{"line_number":91,"context_line":"        project_id \u003d project[\u0027id\u0027]"},{"line_number":92,"context_line":"        parent_id \u003d project[\u0027parent_id\u0027]"},{"line_number":93,"context_line":"        self.assertEqual(project_name, project[\u0027name\u0027])"},{"line_number":94,"context_line":"        self.assertEqual(parent_id, root_project_id)"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"        body \u003d self.projects_client.show_project(project_id)[\u0027project\u0027]"},{"line_number":97,"context_line":"        self.assertEqual(project_name, body[\u0027name\u0027])"}],"source_content_type":"text/x-python","patch_set":11,"id":"3aaa91ec_921b7c80","line":94,"in_reply_to":"3aaa91ec_070bd77d","updated":"2016-06-27 12:55:52.000000000","message":"Done","commit_id":"6dd8a89bc2c21a6545bcd54163723965e5ce491a"}],"tempest/config.py":[{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"550601fd76754e020e1352d3f914f7e27337a13b","unresolved":false,"context_lines":[{"line_number":188,"context_line":"                     \"entry all which indicates every extension is enabled. \""},{"line_number":189,"context_line":"                     \"Empty list indicates all extensions are disabled. \""},{"line_number":190,"context_line":"                     \"To get the list of extensions run: \u0027keystone discover\u0027\"),"},{"line_number":191,"context_line":"    # TODO(rodrigods): Remove the reseller flag when Kilo and Liberty is end"},{"line_number":192,"context_line":"    # of life."},{"line_number":193,"context_line":"    cfg.BoolOpt(\u0027reseller\u0027,"},{"line_number":194,"context_line":"                default\u003dFalse,"},{"line_number":195,"context_line":"                help\u003d\u0027Does the environment support reseller?\u0027)"}],"source_content_type":"text/x-python","patch_set":11,"id":"3aaa91ec_4367ece8","line":192,"range":{"start_line":191,"start_character":0,"end_line":192,"end_character":14},"updated":"2016-06-24 02:43:51.000000000","message":"How about changing the default value to True after EOF of Kilo/Liberty instead of removing?\nWe will be able to provide options for users.","commit_id":"6dd8a89bc2c21a6545bcd54163723965e5ce491a"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"ca9a88a1185d8f7a5bead1096b69ebf8a93d20e4","unresolved":false,"context_lines":[{"line_number":188,"context_line":"                     \"entry all which indicates every extension is enabled. \""},{"line_number":189,"context_line":"                     \"Empty list indicates all extensions are disabled. \""},{"line_number":190,"context_line":"                     \"To get the list of extensions run: \u0027keystone discover\u0027\"),"},{"line_number":191,"context_line":"    # TODO(rodrigods): Remove the reseller flag when Kilo and Liberty is end"},{"line_number":192,"context_line":"    # of life."},{"line_number":193,"context_line":"    cfg.BoolOpt(\u0027reseller\u0027,"},{"line_number":194,"context_line":"                default\u003dFalse,"},{"line_number":195,"context_line":"                help\u003d\u0027Does the environment support reseller?\u0027)"}],"source_content_type":"text/x-python","patch_set":11,"id":"3aaa91ec_d997f9e9","line":192,"range":{"start_line":191,"start_character":0,"end_line":192,"end_character":14},"in_reply_to":"3aaa91ec_4367ece8","updated":"2016-06-27 10:20:23.000000000","message":"I think we usually remove feature flags once they stop being valid for supported releases, since we don\u0027t use them anymore anywhere in the gate.","commit_id":"6dd8a89bc2c21a6545bcd54163723965e5ce491a"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"221f63196fbd4aef339a983812761e354a112354","unresolved":false,"context_lines":[{"line_number":188,"context_line":"                     \"entry all which indicates every extension is enabled. \""},{"line_number":189,"context_line":"                     \"Empty list indicates all extensions are disabled. \""},{"line_number":190,"context_line":"                     \"To get the list of extensions run: \u0027keystone discover\u0027\"),"},{"line_number":191,"context_line":"    # TODO(rodrigods): Remove the reseller flag when Kilo and Liberty is end"},{"line_number":192,"context_line":"    # of life."},{"line_number":193,"context_line":"    cfg.BoolOpt(\u0027reseller\u0027,"},{"line_number":194,"context_line":"                default\u003dFalse,"},{"line_number":195,"context_line":"                help\u003d\u0027Does the environment support reseller?\u0027)"}],"source_content_type":"text/x-python","patch_set":11,"id":"3aaa91ec_55b57e2f","line":192,"range":{"start_line":191,"start_character":0,"end_line":192,"end_character":14},"in_reply_to":"3aaa91ec_d997f9e9","updated":"2016-06-27 12:55:52.000000000","message":"+1 to remove the flag","commit_id":"6dd8a89bc2c21a6545bcd54163723965e5ce491a"}],"tempest/services/identity/v3/json/projects_client.py":[{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"f3457f6c568011722c3b9637ba8e67f602ac3e16","unresolved":false,"context_lines":[{"line_number":33,"context_line":"            \u0027domain_id\u0027: domain_id,"},{"line_number":34,"context_line":"            \u0027enabled\u0027: en,"},{"line_number":35,"context_line":"            \u0027name\u0027: name,"},{"line_number":36,"context_line":"            \u0027parent_id\u0027: parent_id"},{"line_number":37,"context_line":"        }"},{"line_number":38,"context_line":"        post_body \u003d json.dumps({\u0027project\u0027: post_body})"},{"line_number":39,"context_line":"        resp, body \u003d self.post(\u0027projects\u0027, post_body)"}],"source_content_type":"text/x-python","patch_set":3,"id":"9aed3d3a_7bebad13","line":36,"updated":"2016-02-29 12:26:47.000000000","message":"It\u0027s kinda ugly to duplicate everything from **kwargs and put that into post_body. We should pass almost directly `kwargs` to `json.dumps`.","commit_id":"21b2d951236865f168bf5e324030de74324a3f51"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"e62bac513a0e43125097c27ba351655dce90bbe7","unresolved":false,"context_lines":[{"line_number":33,"context_line":"            \u0027domain_id\u0027: domain_id,"},{"line_number":34,"context_line":"            \u0027enabled\u0027: en,"},{"line_number":35,"context_line":"            \u0027name\u0027: name,"},{"line_number":36,"context_line":"            \u0027parent_id\u0027: parent_id"},{"line_number":37,"context_line":"        }"},{"line_number":38,"context_line":"        post_body \u003d json.dumps({\u0027project\u0027: post_body})"},{"line_number":39,"context_line":"        resp, body \u003d self.post(\u0027projects\u0027, post_body)"}],"source_content_type":"text/x-python","patch_set":3,"id":"5aef4532_d54fdb8f","line":36,"in_reply_to":"5aef4532_326d75cc","updated":"2016-03-10 17:55:41.000000000","message":"Done","commit_id":"21b2d951236865f168bf5e324030de74324a3f51"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"9b225de665166685e1759d4e64fefc716aa5640c","unresolved":false,"context_lines":[{"line_number":33,"context_line":"            \u0027domain_id\u0027: domain_id,"},{"line_number":34,"context_line":"            \u0027enabled\u0027: en,"},{"line_number":35,"context_line":"            \u0027name\u0027: name,"},{"line_number":36,"context_line":"            \u0027parent_id\u0027: parent_id"},{"line_number":37,"context_line":"        }"},{"line_number":38,"context_line":"        post_body \u003d json.dumps({\u0027project\u0027: post_body})"},{"line_number":39,"context_line":"        resp, body \u003d self.post(\u0027projects\u0027, post_body)"}],"source_content_type":"text/x-python","patch_set":3,"id":"5aef4532_326d75cc","line":36,"in_reply_to":"9aed3d3a_63b8232b","updated":"2016-03-10 17:40:23.000000000","message":"Is it intentional to always pass the parent_id here? \nI believe we should only have parent_id in the dict if parent_id is defined in charges, else we lose the ability to test without parent_id.\nElse we would be changing the behaviour of existing tests against stable branches as well.\nIt seems that keystone doesn\u0027t mind being sent some extra param it doesn\u0027t know about in the body (as CI is green), however I\u0027d still prefer if we sent only what we need to.","commit_id":"21b2d951236865f168bf5e324030de74324a3f51"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"6010c126d86f2e88a1966b6ef1eeda57ced7eb71","unresolved":false,"context_lines":[{"line_number":33,"context_line":"            \u0027domain_id\u0027: domain_id,"},{"line_number":34,"context_line":"            \u0027enabled\u0027: en,"},{"line_number":35,"context_line":"            \u0027name\u0027: name,"},{"line_number":36,"context_line":"            \u0027parent_id\u0027: parent_id"},{"line_number":37,"context_line":"        }"},{"line_number":38,"context_line":"        post_body \u003d json.dumps({\u0027project\u0027: post_body})"},{"line_number":39,"context_line":"        resp, body \u003d self.post(\u0027projects\u0027, post_body)"}],"source_content_type":"text/x-python","patch_set":3,"id":"9aed3d3a_63b8232b","line":36,"in_reply_to":"9aed3d3a_7bebad13","updated":"2016-02-29 13:38:26.000000000","message":"this is just to make the get of the default value explicit, but yeah... I get your point","commit_id":"21b2d951236865f168bf5e324030de74324a3f51"}]}
