)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"0ad750433da7d1c8f393a6fe0505f4b50e9b15ff","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add identity providers integration tests"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch adds a first set of tests in the keystone tempest plugin,"},{"line_number":10,"context_line":"this tests are for the Identity Provider API (part of the Federated"},{"line_number":11,"context_line":"Identity API)."},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"1a122d0e_c0e734aa","line":9,"updated":"2016-04-20 14:22:39.000000000","message":"(nit) s/,/./","commit_id":"61665dd27f595b43f0954064939c737e10965a78"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"fc1f5721bc1ae4a490952ab9a37a29166ab48495","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add identity providers integration tests"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch adds a first set of tests in the keystone tempest plugin,"},{"line_number":10,"context_line":"this tests are for the Identity Provider API (part of the Federated"},{"line_number":11,"context_line":"Identity API)."},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"1a122d0e_5e62dcd8","line":9,"in_reply_to":"1a122d0e_c0e734aa","updated":"2016-04-20 15:15:15.000000000","message":"Done","commit_id":"61665dd27f595b43f0954064939c737e10965a78"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"0ad750433da7d1c8f393a6fe0505f4b50e9b15ff","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Add identity providers integration tests"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch adds a first set of tests in the keystone tempest plugin,"},{"line_number":10,"context_line":"this tests are for the Identity Provider API (part of the Federated"},{"line_number":11,"context_line":"Identity API)."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"To run the tests install keystone and run (in tempest)::"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"1a122d0e_40fcc43d","line":10,"updated":"2016-04-20 14:22:39.000000000","message":"(nit) s/this/These/","commit_id":"61665dd27f595b43f0954064939c737e10965a78"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"fc1f5721bc1ae4a490952ab9a37a29166ab48495","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Add identity providers integration tests"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch adds a first set of tests in the keystone tempest plugin,"},{"line_number":10,"context_line":"this tests are for the Identity Provider API (part of the Federated"},{"line_number":11,"context_line":"Identity API)."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"To run the tests install keystone and run (in tempest)::"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"1a122d0e_3e5d6015","line":10,"in_reply_to":"1a122d0e_40fcc43d","updated":"2016-04-20 15:15:15.000000000","message":"Done","commit_id":"61665dd27f595b43f0954064939c737e10965a78"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b36991aab4b25486e49764f297f7ac8877aad367","unresolved":false,"context_lines":[{"line_number":10,"context_line":"These tests are for the Identity Provider API (part of the Federated"},{"line_number":11,"context_line":"Identity API)."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"To run the tests install keystone and run (in tempest)::"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"    $ tox -e all-plugin -- keystone"},{"line_number":16,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"1a122d0e_c199d020","line":13,"range":{"start_line":13,"start_character":54,"end_line":13,"end_character":56},"updated":"2016-04-29 15:57:58.000000000","message":"commit messages aren\u0027t rst format.","commit_id":"0a9e0fe5ab9d83b71f636e4541967c3f26549e9e"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"be26f69a705203187f60f9d2a55a6188538bfda9","unresolved":false,"context_lines":[{"line_number":10,"context_line":"These tests are for the Identity Provider API (part of the Federated"},{"line_number":11,"context_line":"Identity API)."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"To run the tests install keystone and run (in tempest)::"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"    $ tox -e all-plugin -- keystone"},{"line_number":16,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"1a122d0e_db009503","line":13,"range":{"start_line":13,"start_character":54,"end_line":13,"end_character":56},"in_reply_to":"1a122d0e_c199d020","updated":"2016-04-29 17:04:54.000000000","message":"Done","commit_id":"0a9e0fe5ab9d83b71f636e4541967c3f26549e9e"}],"keystone_tempest_plugin/clients.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"6939b573199581640c19e673746a972a1affa921","unresolved":false,"context_lines":[{"line_number":12,"context_line":"# License for the specific language governing permissions and limitations"},{"line_number":13,"context_line":"# under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"from keystone_tempest_plugin.services.identity.v3.json.\\"},{"line_number":16,"context_line":"    identity_providers_client import IdentityProvidersClient"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from tempest import clients"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a061dce_ec0c0eee","line":15,"updated":"2016-04-06 20:44:25.000000000","message":"there should be no need for a json package. Keystone only supports json so there isn\u0027t going to be another one.\n\nAlso, having long import lines is one of the reasons we shouldn\u0027t have keystone_ in the package name.","commit_id":"ac2391aac6abc6060bb10545f379e673f8224ccb"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"bfedefc41ca9833ddfb8b10cb2724512e8b09962","unresolved":false,"context_lines":[{"line_number":12,"context_line":"# License for the specific language governing permissions and limitations"},{"line_number":13,"context_line":"# under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"from keystone_tempest_plugin.services.identity.v3.json.\\"},{"line_number":16,"context_line":"    identity_providers_client import IdentityProvidersClient"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from tempest import clients"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a061dce_e57f0115","line":15,"in_reply_to":"9a061dce_ec0c0eee","updated":"2016-04-08 03:57:36.000000000","message":"the package name is used during plugin discovery. This means that having \"keystone_\" in the name makes possible for us to run the plugin test using \"tox -e all-plugin -- keystone\".\n\nif we rename to \"tempest_plugin\" we need to put it inside \"keystone/keystone\", otherwise the plugin discovery won\u0027t find it using the command above. (if we put in keystone/, the root is not included during plugin discovery)","commit_id":"ac2391aac6abc6060bb10545f379e673f8224ccb"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"6939b573199581640c19e673746a972a1affa921","unresolved":false,"context_lines":[{"line_number":13,"context_line":"# under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"from keystone_tempest_plugin.services.identity.v3.json.\\"},{"line_number":16,"context_line":"    identity_providers_client import IdentityProvidersClient"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from tempest import clients"},{"line_number":19,"context_line":"from tempest import config"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a061dce_4cc37a57","line":16,"updated":"2016-04-06 20:44:25.000000000","message":"OpenStack standard is to import modules and not symbols in modules.","commit_id":"ac2391aac6abc6060bb10545f379e673f8224ccb"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"bfedefc41ca9833ddfb8b10cb2724512e8b09962","unresolved":false,"context_lines":[{"line_number":13,"context_line":"# under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"from keystone_tempest_plugin.services.identity.v3.json.\\"},{"line_number":16,"context_line":"    identity_providers_client import IdentityProvidersClient"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from tempest import clients"},{"line_number":19,"context_line":"from tempest import config"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a061dce_45d6adf1","line":16,"in_reply_to":"9a061dce_4cc37a57","updated":"2016-04-08 03:57:36.000000000","message":"Done","commit_id":"ac2391aac6abc6060bb10545f379e673f8224ccb"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"6939b573199581640c19e673746a972a1affa921","unresolved":false,"context_lines":[{"line_number":19,"context_line":"from tempest import config"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"CONF \u003d config.CONF"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"class Manager(clients.Manager):"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a061dce_8c32b2a5","line":22,"updated":"2016-04-06 20:44:25.000000000","message":"CONF isn\u0027t used. remove it.","commit_id":"ac2391aac6abc6060bb10545f379e673f8224ccb"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"bfedefc41ca9833ddfb8b10cb2724512e8b09962","unresolved":false,"context_lines":[{"line_number":19,"context_line":"from tempest import config"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"CONF \u003d config.CONF"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"class Manager(clients.Manager):"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a061dce_053e7527","line":22,"in_reply_to":"9a061dce_8c32b2a5","updated":"2016-04-08 03:57:36.000000000","message":"Done","commit_id":"ac2391aac6abc6060bb10545f379e673f8224ccb"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"0ad750433da7d1c8f393a6fe0505f4b50e9b15ff","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"class KeystoneManager(clients.Manager):"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    def __init__(self, credentials\u003dNone, service\u003dNone):"},{"line_number":24,"context_line":"        super(KeystoneManager, self).__init__(credentials, service)"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"        self.identity_providers_client \u003d ("}],"source_content_type":"text/x-python","patch_set":9,"id":"1a122d0e_97f1ff6d","line":23,"updated":"2016-04-20 14:22:39.000000000","message":"This doesn\u0027t match the parent signature. Is it OK to have a None value for credentials? Just looking at the tempest code it looks like it would blow up with an attribute error.","commit_id":"61665dd27f595b43f0954064939c737e10965a78"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"c94d6aa37cd8de14cf836f93f25ebdbd2d4ec316","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"class KeystoneManager(clients.Manager):"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    def __init__(self, credentials\u003dNone, service\u003dNone):"},{"line_number":24,"context_line":"        super(KeystoneManager, self).__init__(credentials, service)"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"        self.identity_providers_client \u003d ("}],"source_content_type":"text/x-python","patch_set":9,"id":"1a122d0e_6bb26ae6","line":23,"in_reply_to":"1a122d0e_3e8ba069","updated":"2016-04-20 20:43:03.000000000","message":"Why not remove the default since it\u0027s not valid?","commit_id":"61665dd27f595b43f0954064939c737e10965a78"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"fdf070aad4497ed4da0aed43782a0f973998caba","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"class KeystoneManager(clients.Manager):"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    def __init__(self, credentials\u003dNone, service\u003dNone):"},{"line_number":24,"context_line":"        super(KeystoneManager, self).__init__(credentials, service)"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"        self.identity_providers_client \u003d ("}],"source_content_type":"text/x-python","patch_set":9,"id":"1a122d0e_2fe99db7","line":23,"in_reply_to":"1a122d0e_6bb26ae6","updated":"2016-04-20 21:11:32.000000000","message":"Done","commit_id":"61665dd27f595b43f0954064939c737e10965a78"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"fc1f5721bc1ae4a490952ab9a37a29166ab48495","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"class KeystoneManager(clients.Manager):"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    def __init__(self, credentials\u003dNone, service\u003dNone):"},{"line_number":24,"context_line":"        super(KeystoneManager, self).__init__(credentials, service)"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"        self.identity_providers_client \u003d ("}],"source_content_type":"text/x-python","patch_set":9,"id":"1a122d0e_3e8ba069","line":23,"in_reply_to":"1a122d0e_97f1ff6d","updated":"2016-04-20 15:15:15.000000000","message":"We create the credentials ourselves in the BaseIdentityTest class.\n\nAnother option is to pass some default value here.","commit_id":"61665dd27f595b43f0954064939c737e10965a78"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b36991aab4b25486e49764f297f7ac8877aad367","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from tempest import clients"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"class KeystoneManager(clients.Manager):"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    def __init__(self, credentials, service\u003dNone):"},{"line_number":24,"context_line":"        super(KeystoneManager, self).__init__(credentials, service)"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a122d0e_446f8e91","line":21,"updated":"2016-04-29 15:57:58.000000000","message":"This can just be Manager. We already know it\u0027s keystone since it\u0027s in the keystone project.","commit_id":"0a9e0fe5ab9d83b71f636e4541967c3f26549e9e"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"be26f69a705203187f60f9d2a55a6188538bfda9","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from tempest import clients"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"class KeystoneManager(clients.Manager):"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    def __init__(self, credentials, service\u003dNone):"},{"line_number":24,"context_line":"        super(KeystoneManager, self).__init__(credentials, service)"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a122d0e_3b6549e0","line":21,"in_reply_to":"1a122d0e_446f8e91","updated":"2016-04-29 17:04:54.000000000","message":"Done","commit_id":"0a9e0fe5ab9d83b71f636e4541967c3f26549e9e"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"b907e32239b7f8804612b2dce4aa074b9eecb186","unresolved":false,"context_lines":[{"line_number":13,"context_line":"# under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"from keystone_tempest_plugin.services.identity.v3 \\"},{"line_number":16,"context_line":"    import identity_providers_client"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from tempest import clients"},{"line_number":19,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"dab17558_43cfcb28","line":16,"updated":"2016-05-11 01:53:24.000000000","message":"Is it possible to wrap imports in () to avoid \\ line continuation?","commit_id":"edbe6eab3bd3ae68d3117859acf1179afc74456e"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"2b8a0cc85599552c7083d58091984142bfc8c5d9","unresolved":false,"context_lines":[{"line_number":13,"context_line":"# under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"from keystone_tempest_plugin.services.identity.v3 \\"},{"line_number":16,"context_line":"    import identity_providers_client"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from tempest import clients"},{"line_number":19,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"dab17558_07aadc18","line":16,"in_reply_to":"dab17558_43cfcb28","updated":"2016-05-11 11:28:21.000000000","message":"it is... but after \"import\", let me check if it works here","commit_id":"edbe6eab3bd3ae68d3117859acf1179afc74456e"}],"keystone_tempest_plugin/plugin.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b36991aab4b25486e49764f297f7ac8877aad367","unresolved":false,"context_lines":[{"line_number":26,"context_line":"    def load_tests(self):"},{"line_number":27,"context_line":"        base_path \u003d os.path.split(os.path.dirname("},{"line_number":28,"context_line":"            os.path.abspath(__file__)))[0]"},{"line_number":29,"context_line":"        test_dir \u003d \u0027keystone_tempest_plugin/tests\u0027"},{"line_number":30,"context_line":"        full_test_dir \u003d os.path.join(base_path, test_dir)"},{"line_number":31,"context_line":"        return full_test_dir, base_path"},{"line_number":32,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"1a122d0e_e4bdfa68","line":29,"updated":"2016-04-29 15:57:58.000000000","message":"revert this change. It\u0027s unrelated.","commit_id":"0a9e0fe5ab9d83b71f636e4541967c3f26549e9e"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"be26f69a705203187f60f9d2a55a6188538bfda9","unresolved":false,"context_lines":[{"line_number":26,"context_line":"    def load_tests(self):"},{"line_number":27,"context_line":"        base_path \u003d os.path.split(os.path.dirname("},{"line_number":28,"context_line":"            os.path.abspath(__file__)))[0]"},{"line_number":29,"context_line":"        test_dir \u003d \u0027keystone_tempest_plugin/tests\u0027"},{"line_number":30,"context_line":"        full_test_dir \u003d os.path.join(base_path, test_dir)"},{"line_number":31,"context_line":"        return full_test_dir, base_path"},{"line_number":32,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"1a122d0e_fb7c7172","line":29,"in_reply_to":"1a122d0e_e4bdfa68","updated":"2016-04-29 17:04:54.000000000","message":"Done","commit_id":"0a9e0fe5ab9d83b71f636e4541967c3f26549e9e"}],"keystone_tempest_plugin/services/identity/base_clients.py":[{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"0ad750433da7d1c8f393a6fe0505f4b50e9b15ff","unresolved":false,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":"from tempest import config"},{"line_number":16,"context_line":"from tempest.lib.common import rest_client"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"CONF \u003d config.CONF"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"# We only handle the identity catalog type"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a122d0e_6050e032","line":17,"updated":"2016-04-20 14:22:39.000000000","message":"(nit) needs newline","commit_id":"61665dd27f595b43f0954064939c737e10965a78"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"fc1f5721bc1ae4a490952ab9a37a29166ab48495","unresolved":false,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":"from tempest import config"},{"line_number":16,"context_line":"from tempest.lib.common import rest_client"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"CONF \u003d config.CONF"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"# We only handle the identity catalog type"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a122d0e_5e765c3e","line":17,"in_reply_to":"1a122d0e_6050e032","updated":"2016-04-20 15:15:15.000000000","message":"Done","commit_id":"61665dd27f595b43f0954064939c737e10965a78"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"0ad750433da7d1c8f393a6fe0505f4b50e9b15ff","unresolved":false,"context_lines":[{"line_number":27,"context_line":"    api_version \u003d \u0027v3\u0027"},{"line_number":28,"context_line":"    test_case \u003d None"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    def __init__(self, auth_provider):"},{"line_number":31,"context_line":"        super(IdentityClient, self).__init__("},{"line_number":32,"context_line":"            auth_provider,"},{"line_number":33,"context_line":"            CATALOG_TYPE,"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a122d0e_2d46dc4e","line":30,"updated":"2016-04-20 14:22:39.000000000","message":"Why not force the test_case here instead of the set_test_case method? That way this can be done in the base classes instead of every test class.","commit_id":"61665dd27f595b43f0954064939c737e10965a78"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"fc1f5721bc1ae4a490952ab9a37a29166ab48495","unresolved":false,"context_lines":[{"line_number":27,"context_line":"    api_version \u003d \u0027v3\u0027"},{"line_number":28,"context_line":"    test_case \u003d None"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    def __init__(self, auth_provider):"},{"line_number":31,"context_line":"        super(IdentityClient, self).__init__("},{"line_number":32,"context_line":"            auth_provider,"},{"line_number":33,"context_line":"            CATALOG_TYPE,"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a122d0e_fe7ac822","line":30,"in_reply_to":"1a122d0e_2d46dc4e","updated":"2016-04-20 15:15:15.000000000","message":"we have the egg/chicken problem here, that\u0027s why I\u0027ve used the set_test_case() method.\n\nusually, tempest tests have a data generator which creates/destroy the fixtures for some default data, like users and projects. For tests that don\u0027t use generic data, they create/deletes the entities as required (so we would need to remember to use the self.addCleanup() every time).\n\nI\u0027m ok with removing the \"set_test_case()\" method and doing the cleanUp every time we create an entity.","commit_id":"61665dd27f595b43f0954064939c737e10965a78"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"fdf070aad4497ed4da0aed43782a0f973998caba","unresolved":false,"context_lines":[{"line_number":27,"context_line":"    api_version \u003d \u0027v3\u0027"},{"line_number":28,"context_line":"    test_case \u003d None"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    def __init__(self, auth_provider):"},{"line_number":31,"context_line":"        super(IdentityClient, self).__init__("},{"line_number":32,"context_line":"            auth_provider,"},{"line_number":33,"context_line":"            CATALOG_TYPE,"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a122d0e_afdf6dd4","line":30,"in_reply_to":"1a122d0e_8be6e6e5","updated":"2016-04-20 21:11:32.000000000","message":"using the addCleanup when necessary.\n\n- example of general tests fixtures: https://github.com/openstack/tempest/blob/master/tempest/api/identity/base.py#L265-L284 (which we don\u0027t need yet)\n\n- example of specific tests fixtures: https://github.com/openstack/tempest/blob/master/tempest/api/identity/admin/v3/test_groups.py#L32-L35","commit_id":"61665dd27f595b43f0954064939c737e10965a78"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"c94d6aa37cd8de14cf836f93f25ebdbd2d4ec316","unresolved":false,"context_lines":[{"line_number":27,"context_line":"    api_version \u003d \u0027v3\u0027"},{"line_number":28,"context_line":"    test_case \u003d None"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    def __init__(self, auth_provider):"},{"line_number":31,"context_line":"        super(IdentityClient, self).__init__("},{"line_number":32,"context_line":"            auth_provider,"},{"line_number":33,"context_line":"            CATALOG_TYPE,"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a122d0e_8be6e6e5","line":30,"in_reply_to":"1a122d0e_fe7ac822","updated":"2016-04-20 20:43:03.000000000","message":"how does tempest handle this situation?","commit_id":"61665dd27f595b43f0954064939c737e10965a78"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b36991aab4b25486e49764f297f7ac8877aad367","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2016 Red Hat, Inc."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a122d0e_aabc6906","line":1,"updated":"2016-04-29 15:57:58.000000000","message":"Change the name to \"base_client.py\" ? or client.py? (base_ doesn\u0027t mean anything to me)","commit_id":"0a9e0fe5ab9d83b71f636e4541967c3f26549e9e"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"be26f69a705203187f60f9d2a55a6188538bfda9","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2016 Red Hat, Inc."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a122d0e_9b8e1d77","line":1,"in_reply_to":"1a122d0e_aabc6906","updated":"2016-04-29 17:04:54.000000000","message":"Done","commit_id":"0a9e0fe5ab9d83b71f636e4541967c3f26549e9e"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b36991aab4b25486e49764f297f7ac8877aad367","unresolved":false,"context_lines":[{"line_number":12,"context_line":"# License for the specific language governing permissions and limitations"},{"line_number":13,"context_line":"# under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"from tempest import config"},{"line_number":16,"context_line":"from tempest.lib.common import rest_client"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"1a122d0e_67cc4c6a","line":15,"updated":"2016-04-29 15:57:58.000000000","message":"can\u0027t we just import oslo_config?","commit_id":"0a9e0fe5ab9d83b71f636e4541967c3f26549e9e"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"be26f69a705203187f60f9d2a55a6188538bfda9","unresolved":false,"context_lines":[{"line_number":12,"context_line":"# License for the specific language governing permissions and limitations"},{"line_number":13,"context_line":"# under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"from tempest import config"},{"line_number":16,"context_line":"from tempest.lib.common import rest_client"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"1a122d0e_1b0dede7","line":15,"in_reply_to":"1a122d0e_67cc4c6a","updated":"2016-04-29 17:04:54.000000000","message":"this imports the configs given by the tempest package","commit_id":"0a9e0fe5ab9d83b71f636e4541967c3f26549e9e"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b36991aab4b25486e49764f297f7ac8877aad367","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"CONF \u003d config.CONF"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"# We only handle the identity catalog type"},{"line_number":22,"context_line":"CATALOG_TYPE \u003d \u0027identity\u0027"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"1a122d0e_24425268","line":21,"range":{"start_line":21,"start_character":10,"end_line":21,"end_character":16},"updated":"2016-04-29 15:57:58.000000000","message":"change \"handle\" to \"use\", since we\u0027re only using it.","commit_id":"0a9e0fe5ab9d83b71f636e4541967c3f26549e9e"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"be26f69a705203187f60f9d2a55a6188538bfda9","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"CONF \u003d config.CONF"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"# We only handle the identity catalog type"},{"line_number":22,"context_line":"CATALOG_TYPE \u003d \u0027identity\u0027"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"1a122d0e_5bfbe5c0","line":21,"range":{"start_line":21,"start_character":10,"end_line":21,"end_character":16},"in_reply_to":"1a122d0e_24425268","updated":"2016-04-29 17:04:54.000000000","message":"Done","commit_id":"0a9e0fe5ab9d83b71f636e4541967c3f26549e9e"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b36991aab4b25486e49764f297f7ac8877aad367","unresolved":false,"context_lines":[{"line_number":19,"context_line":"CONF \u003d config.CONF"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"# We only handle the identity catalog type"},{"line_number":22,"context_line":"CATALOG_TYPE \u003d \u0027identity\u0027"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"class IdentityClient(rest_client.RestClient):"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a122d0e_4765d0de","line":22,"updated":"2016-04-29 15:57:58.000000000","message":"This should be SERVICE to match the parameter","commit_id":"0a9e0fe5ab9d83b71f636e4541967c3f26549e9e"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"be26f69a705203187f60f9d2a55a6188538bfda9","unresolved":false,"context_lines":[{"line_number":19,"context_line":"CONF \u003d config.CONF"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"# We only handle the identity catalog type"},{"line_number":22,"context_line":"CATALOG_TYPE \u003d \u0027identity\u0027"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"class IdentityClient(rest_client.RestClient):"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a122d0e_3b1d490f","line":22,"in_reply_to":"1a122d0e_4765d0de","updated":"2016-04-29 17:04:54.000000000","message":"Done","commit_id":"0a9e0fe5ab9d83b71f636e4541967c3f26549e9e"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b36991aab4b25486e49764f297f7ac8877aad367","unresolved":false,"context_lines":[{"line_number":22,"context_line":"CATALOG_TYPE \u003d \u0027identity\u0027"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"class IdentityClient(rest_client.RestClient):"},{"line_number":26,"context_line":"    \"\"\"Tempest REST client for keystone.\"\"\""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    api_version \u003d \u0027v3\u0027"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a122d0e_8afc0db6","line":25,"updated":"2016-04-29 15:57:58.000000000","message":"No need to put \"Client\" in the name since the class is already in a package called \"client\"","commit_id":"0a9e0fe5ab9d83b71f636e4541967c3f26549e9e"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"be26f69a705203187f60f9d2a55a6188538bfda9","unresolved":false,"context_lines":[{"line_number":22,"context_line":"CATALOG_TYPE \u003d \u0027identity\u0027"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"class IdentityClient(rest_client.RestClient):"},{"line_number":26,"context_line":"    \"\"\"Tempest REST client for keystone.\"\"\""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    api_version \u003d \u0027v3\u0027"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a122d0e_1bb20d06","line":25,"in_reply_to":"1a122d0e_8afc0db6","updated":"2016-04-29 17:04:54.000000000","message":"Done","commit_id":"0a9e0fe5ab9d83b71f636e4541967c3f26549e9e"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b36991aab4b25486e49764f297f7ac8877aad367","unresolved":false,"context_lines":[{"line_number":26,"context_line":"    \"\"\"Tempest REST client for keystone.\"\"\""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    api_version \u003d \u0027v3\u0027"},{"line_number":29,"context_line":"    test_case \u003d None"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def __init__(self, auth_provider):"},{"line_number":32,"context_line":"        super(IdentityClient, self).__init__("}],"source_content_type":"text/x-python","patch_set":11,"id":"1a122d0e_8a440d47","line":29,"updated":"2016-04-29 15:57:58.000000000","message":"what is this? Add a comment.","commit_id":"0a9e0fe5ab9d83b71f636e4541967c3f26549e9e"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"be26f69a705203187f60f9d2a55a6188538bfda9","unresolved":false,"context_lines":[{"line_number":26,"context_line":"    \"\"\"Tempest REST client for keystone.\"\"\""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    api_version \u003d \u0027v3\u0027"},{"line_number":29,"context_line":"    test_case \u003d None"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def __init__(self, auth_provider):"},{"line_number":32,"context_line":"        super(IdentityClient, self).__init__("}],"source_content_type":"text/x-python","patch_set":11,"id":"1a122d0e_7bea21d9","line":29,"in_reply_to":"1a122d0e_8a440d47","updated":"2016-04-29 17:04:54.000000000","message":"removed, it is unused","commit_id":"0a9e0fe5ab9d83b71f636e4541967c3f26549e9e"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b36991aab4b25486e49764f297f7ac8877aad367","unresolved":false,"context_lines":[{"line_number":31,"context_line":"    def __init__(self, auth_provider):"},{"line_number":32,"context_line":"        super(IdentityClient, self).__init__("},{"line_number":33,"context_line":"            auth_provider,"},{"line_number":34,"context_line":"            CATALOG_TYPE,"},{"line_number":35,"context_line":"            CONF.identity.region,"},{"line_number":36,"context_line":"            endpoint_type\u003dCONF.identity.v3_endpoint_type)"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a122d0e_c79f20b2","line":34,"updated":"2016-04-29 15:57:58.000000000","message":"This should be SERVICE to match the parameter.","commit_id":"0a9e0fe5ab9d83b71f636e4541967c3f26549e9e"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"be26f69a705203187f60f9d2a55a6188538bfda9","unresolved":false,"context_lines":[{"line_number":31,"context_line":"    def __init__(self, auth_provider):"},{"line_number":32,"context_line":"        super(IdentityClient, self).__init__("},{"line_number":33,"context_line":"            auth_provider,"},{"line_number":34,"context_line":"            CATALOG_TYPE,"},{"line_number":35,"context_line":"            CONF.identity.region,"},{"line_number":36,"context_line":"            endpoint_type\u003dCONF.identity.v3_endpoint_type)"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a122d0e_1ba96d90","line":34,"in_reply_to":"1a122d0e_c79f20b2","updated":"2016-04-29 17:04:54.000000000","message":"Done","commit_id":"0a9e0fe5ab9d83b71f636e4541967c3f26549e9e"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b36991aab4b25486e49764f297f7ac8877aad367","unresolved":false,"context_lines":[{"line_number":33,"context_line":"            auth_provider,"},{"line_number":34,"context_line":"            CATALOG_TYPE,"},{"line_number":35,"context_line":"            CONF.identity.region,"},{"line_number":36,"context_line":"            endpoint_type\u003dCONF.identity.v3_endpoint_type)"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a122d0e_27f1b401","line":36,"updated":"2016-04-29 15:57:58.000000000","message":"Does this need to be configurable? I don\u0027t see why. The current tests are testing admin function. Let\u0027s add configurability when we need it.","commit_id":"0a9e0fe5ab9d83b71f636e4541967c3f26549e9e"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"be26f69a705203187f60f9d2a55a6188538bfda9","unresolved":false,"context_lines":[{"line_number":33,"context_line":"            auth_provider,"},{"line_number":34,"context_line":"            CATALOG_TYPE,"},{"line_number":35,"context_line":"            CONF.identity.region,"},{"line_number":36,"context_line":"            endpoint_type\u003dCONF.identity.v3_endpoint_type)"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a122d0e_1b816dc3","line":36,"in_reply_to":"1a122d0e_27f1b401","updated":"2016-04-29 17:04:54.000000000","message":"Done","commit_id":"0a9e0fe5ab9d83b71f636e4541967c3f26549e9e"}],"keystone_tempest_plugin/services/identity/clients.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"b907e32239b7f8804612b2dce4aa074b9eecb186","unresolved":false,"context_lines":[{"line_number":25,"context_line":"class Identity(rest_client.RestClient):"},{"line_number":26,"context_line":"    \"\"\"Tempest REST client for keystone.\"\"\""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    api_version \u003d \u0027v3\u0027"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    def __init__(self, auth_provider):"},{"line_number":31,"context_line":"        super(Identity, self).__init__("}],"source_content_type":"text/x-python","patch_set":14,"id":"dab17558_039783ec","line":28,"updated":"2016-05-11 01:53:24.000000000","message":"Is this used by something in tempest? It\u0027s not used in this module. If it is used by something in tempest and required here we should add a comment explaining the relationship.","commit_id":"edbe6eab3bd3ae68d3117859acf1179afc74456e"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"2b8a0cc85599552c7083d58091984142bfc8c5d9","unresolved":false,"context_lines":[{"line_number":25,"context_line":"class Identity(rest_client.RestClient):"},{"line_number":26,"context_line":"    \"\"\"Tempest REST client for keystone.\"\"\""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    api_version \u003d \u0027v3\u0027"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    def __init__(self, auth_provider):"},{"line_number":31,"context_line":"        super(Identity, self).__init__("}],"source_content_type":"text/x-python","patch_set":14,"id":"dab17558_e7523834","line":28,"in_reply_to":"dab17558_039783ec","updated":"2016-05-11 11:28:21.000000000","message":"yes, it is used by tempest, will add the comment.","commit_id":"edbe6eab3bd3ae68d3117859acf1179afc74456e"}],"keystone_tempest_plugin/services/identity/v3/identity_providers_client.py":[{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"0ad750433da7d1c8f393a6fe0505f4b50e9b15ff","unresolved":false,"context_lines":[{"line_number":15,"context_line":"from keystone_tempest_plugin.services.identity import base_clients"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from oslo_serialization import jsonutils"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from tempest.lib.common import rest_client"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"1a122d0e_ea94ca8b","line":18,"updated":"2016-04-20 14:22:39.000000000","message":"Why the newline here?","commit_id":"61665dd27f595b43f0954064939c737e10965a78"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"fc1f5721bc1ae4a490952ab9a37a29166ab48495","unresolved":false,"context_lines":[{"line_number":15,"context_line":"from keystone_tempest_plugin.services.identity import base_clients"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from oslo_serialization import jsonutils"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from tempest.lib.common import rest_client"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"1a122d0e_5edbfc1a","line":18,"in_reply_to":"1a122d0e_ea94ca8b","updated":"2016-04-20 15:15:15.000000000","message":"removed","commit_id":"61665dd27f595b43f0954064939c737e10965a78"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"0ad750433da7d1c8f393a6fe0505f4b50e9b15ff","unresolved":false,"context_lines":[{"line_number":28,"context_line":"        base_url \u003d \u0027%s/%s\u0027 % (self.url_prefix, self.api_name)"},{"line_number":29,"context_line":"        return \u0027%s/%s\u0027 % (base_url, idp_id) if idp_id else base_url"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def create_identity_provider(self, idp_id, **kwargs):"},{"line_number":32,"context_line":"        \"\"\"Create an identity provider.\"\"\""},{"line_number":33,"context_line":"        put_body \u003d jsonutils.dumps({\u0027identity_provider\u0027: kwargs})"},{"line_number":34,"context_line":"        url \u003d self._build_url(idp_id)"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a122d0e_974d7f9c","line":31,"updated":"2016-04-20 14:22:39.000000000","message":"Is the **kwargs a common pattern in tempest land? I\u0027m not a fan because I can\u0027t see what I need to pass in here. If we don\u0027t want to list out the args then we should at least provide the information in docstrings.","commit_id":"61665dd27f595b43f0954064939c737e10965a78"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"c94d6aa37cd8de14cf836f93f25ebdbd2d4ec316","unresolved":false,"context_lines":[{"line_number":28,"context_line":"        base_url \u003d \u0027%s/%s\u0027 % (self.url_prefix, self.api_name)"},{"line_number":29,"context_line":"        return \u0027%s/%s\u0027 % (base_url, idp_id) if idp_id else base_url"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def create_identity_provider(self, idp_id, **kwargs):"},{"line_number":32,"context_line":"        \"\"\"Create an identity provider.\"\"\""},{"line_number":33,"context_line":"        put_body \u003d jsonutils.dumps({\u0027identity_provider\u0027: kwargs})"},{"line_number":34,"context_line":"        url \u003d self._build_url(idp_id)"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a122d0e_abf6428c","line":31,"in_reply_to":"1a122d0e_5e777c01","updated":"2016-04-20 20:43:03.000000000","message":"Then I would vote for some docstrings.","commit_id":"61665dd27f595b43f0954064939c737e10965a78"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"fc1f5721bc1ae4a490952ab9a37a29166ab48495","unresolved":false,"context_lines":[{"line_number":28,"context_line":"        base_url \u003d \u0027%s/%s\u0027 % (self.url_prefix, self.api_name)"},{"line_number":29,"context_line":"        return \u0027%s/%s\u0027 % (base_url, idp_id) if idp_id else base_url"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def create_identity_provider(self, idp_id, **kwargs):"},{"line_number":32,"context_line":"        \"\"\"Create an identity provider.\"\"\""},{"line_number":33,"context_line":"        put_body \u003d jsonutils.dumps({\u0027identity_provider\u0027: kwargs})"},{"line_number":34,"context_line":"        url \u003d self._build_url(idp_id)"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a122d0e_5e777c01","line":31,"in_reply_to":"1a122d0e_974d7f9c","updated":"2016-04-20 15:15:15.000000000","message":"it is kind of, they always prefer to pass kwargs directly instead of manipulating the arguments - they want the clients to be as dumb as possible.","commit_id":"61665dd27f595b43f0954064939c737e10965a78"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"fdf070aad4497ed4da0aed43782a0f973998caba","unresolved":false,"context_lines":[{"line_number":28,"context_line":"        base_url \u003d \u0027%s/%s\u0027 % (self.url_prefix, self.api_name)"},{"line_number":29,"context_line":"        return \u0027%s/%s\u0027 % (base_url, idp_id) if idp_id else base_url"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def create_identity_provider(self, idp_id, **kwargs):"},{"line_number":32,"context_line":"        \"\"\"Create an identity provider.\"\"\""},{"line_number":33,"context_line":"        put_body \u003d jsonutils.dumps({\u0027identity_provider\u0027: kwargs})"},{"line_number":34,"context_line":"        url \u003d self._build_url(idp_id)"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a122d0e_4f34d948","line":31,"in_reply_to":"1a122d0e_abf6428c","updated":"2016-04-20 21:11:32.000000000","message":"Done","commit_id":"61665dd27f595b43f0954064939c737e10965a78"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b36991aab4b25486e49764f297f7ac8877aad367","unresolved":false,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":"from keystone_tempest_plugin.services.identity import base_clients"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from oslo_serialization import jsonutils"},{"line_number":18,"context_line":"from tempest.lib.common import rest_client"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"1a122d0e_aa18e91e","line":17,"updated":"2016-04-29 15:57:58.000000000","message":"is there some reason we can\u0027t just use import json ? I thought we only had this for python 2.6 or something.","commit_id":"0a9e0fe5ab9d83b71f636e4541967c3f26549e9e"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"be26f69a705203187f60f9d2a55a6188538bfda9","unresolved":false,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":"from keystone_tempest_plugin.services.identity import base_clients"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from oslo_serialization import jsonutils"},{"line_number":18,"context_line":"from tempest.lib.common import rest_client"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"1a122d0e_5bdda5de","line":17,"in_reply_to":"1a122d0e_aa18e91e","updated":"2016-04-29 17:04:54.000000000","message":"not really, will try with json","commit_id":"0a9e0fe5ab9d83b71f636e4541967c3f26549e9e"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b36991aab4b25486e49764f297f7ac8877aad367","unresolved":false,"context_lines":[{"line_number":21,"context_line":"class IdentityProvidersClient(base_clients.IdentityClient):"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    url_prefix \u003d \u0027OS-FEDERATION\u0027"},{"line_number":24,"context_line":"    api_name \u003d \u0027identity_providers\u0027"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    def _build_url(self, idp_id\u003dNone):"},{"line_number":27,"context_line":"        base_url \u003d \u0027%s/%s\u0027 % (self.url_prefix, self.api_name)"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a122d0e_aa4749ba","line":24,"updated":"2016-04-29 15:57:58.000000000","message":"this isn\u0027t an api name. I think these should both be in 1 variable subpath \u003d \u0027OS-FEDERATION/identity_providers\u0027","commit_id":"0a9e0fe5ab9d83b71f636e4541967c3f26549e9e"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"be26f69a705203187f60f9d2a55a6188538bfda9","unresolved":false,"context_lines":[{"line_number":21,"context_line":"class IdentityProvidersClient(base_clients.IdentityClient):"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    url_prefix \u003d \u0027OS-FEDERATION\u0027"},{"line_number":24,"context_line":"    api_name \u003d \u0027identity_providers\u0027"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    def _build_url(self, idp_id\u003dNone):"},{"line_number":27,"context_line":"        base_url \u003d \u0027%s/%s\u0027 % (self.url_prefix, self.api_name)"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a122d0e_3b86e9b8","line":24,"in_reply_to":"1a122d0e_aa4749ba","updated":"2016-04-29 17:04:54.000000000","message":"Done","commit_id":"0a9e0fe5ab9d83b71f636e4541967c3f26549e9e"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b36991aab4b25486e49764f297f7ac8877aad367","unresolved":false,"context_lines":[{"line_number":23,"context_line":"    url_prefix \u003d \u0027OS-FEDERATION\u0027"},{"line_number":24,"context_line":"    api_name \u003d \u0027identity_providers\u0027"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    def _build_url(self, idp_id\u003dNone):"},{"line_number":27,"context_line":"        base_url \u003d \u0027%s/%s\u0027 % (self.url_prefix, self.api_name)"},{"line_number":28,"context_line":"        return \u0027%s/%s\u0027 % (base_url, idp_id) if idp_id else base_url"},{"line_number":29,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"1a122d0e_5541f6a7","line":26,"updated":"2016-04-29 15:57:58.000000000","message":"this isn\u0027t buildint a url, it\u0027s building a path, so call it _build_path.","commit_id":"0a9e0fe5ab9d83b71f636e4541967c3f26549e9e"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b36991aab4b25486e49764f297f7ac8877aad367","unresolved":false,"context_lines":[{"line_number":27,"context_line":"        base_url \u003d \u0027%s/%s\u0027 % (self.url_prefix, self.api_name)"},{"line_number":28,"context_line":"        return \u0027%s/%s\u0027 % (base_url, idp_id) if idp_id else base_url"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    def create_identity_provider(self, idp_id, **kwargs):"},{"line_number":31,"context_line":"        \"\"\"Create an identity provider."},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"        :param str idp_id: The ID to be used to create the Identity Provider."}],"source_content_type":"text/x-python","patch_set":11,"id":"1a122d0e_1555bef8","line":30,"updated":"2016-04-29 15:57:58.000000000","message":"rather than accepting kwargs I\u0027d prefer only the allowed fields were accepted.","commit_id":"0a9e0fe5ab9d83b71f636e4541967c3f26549e9e"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"be26f69a705203187f60f9d2a55a6188538bfda9","unresolved":false,"context_lines":[{"line_number":27,"context_line":"        base_url \u003d \u0027%s/%s\u0027 % (self.url_prefix, self.api_name)"},{"line_number":28,"context_line":"        return \u0027%s/%s\u0027 % (base_url, idp_id) if idp_id else base_url"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    def create_identity_provider(self, idp_id, **kwargs):"},{"line_number":31,"context_line":"        \"\"\"Create an identity provider."},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"        :param str idp_id: The ID to be used to create the Identity Provider."}],"source_content_type":"text/x-python","patch_set":11,"id":"1a122d0e_566a9cb3","line":30,"in_reply_to":"1a122d0e_1555bef8","updated":"2016-04-29 17:04:54.000000000","message":"having kwargs here, we can test cases where we pass not accepted fields to the API.","commit_id":"0a9e0fe5ab9d83b71f636e4541967c3f26549e9e"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b36991aab4b25486e49764f297f7ac8877aad367","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"        :param str idp_id: The ID to be used to create the Identity Provider."},{"line_number":34,"context_line":"        :param kwargs: All optional attributes: description (str), enabled"},{"line_number":35,"context_line":"                       (boolean) and remote_ids (list)."},{"line_number":36,"context_line":"        \"\"\""},{"line_number":37,"context_line":"        put_body \u003d jsonutils.dumps({\u0027identity_provider\u0027: kwargs})"},{"line_number":38,"context_line":"        url \u003d self._build_url(idp_id)"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a122d0e_35655ae0","line":35,"updated":"2016-04-29 15:57:58.000000000","message":"according to the spec there is no remote_ids: http://specs.openstack.org/openstack/keystone-specs/api/identity-api-v3-os-federation-ext.html#register-an-identity-provider","commit_id":"0a9e0fe5ab9d83b71f636e4541967c3f26549e9e"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"be26f69a705203187f60f9d2a55a6188538bfda9","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"        :param str idp_id: The ID to be used to create the Identity Provider."},{"line_number":34,"context_line":"        :param kwargs: All optional attributes: description (str), enabled"},{"line_number":35,"context_line":"                       (boolean) and remote_ids (list)."},{"line_number":36,"context_line":"        \"\"\""},{"line_number":37,"context_line":"        put_body \u003d jsonutils.dumps({\u0027identity_provider\u0027: kwargs})"},{"line_number":38,"context_line":"        url \u003d self._build_url(idp_id)"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a122d0e_b6869062","line":35,"in_reply_to":"1a122d0e_35655ae0","updated":"2016-04-29 17:04:54.000000000","message":"this looks like an old doc: https://github.com/openstack/keystone-specs/blob/master/api/v3/identity-api-v3-os-federation-ext.rst#register-an-identity-provider","commit_id":"0a9e0fe5ab9d83b71f636e4541967c3f26549e9e"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b36991aab4b25486e49764f297f7ac8877aad367","unresolved":false,"context_lines":[{"line_number":36,"context_line":"        \"\"\""},{"line_number":37,"context_line":"        put_body \u003d jsonutils.dumps({\u0027identity_provider\u0027: kwargs})"},{"line_number":38,"context_line":"        url \u003d self._build_url(idp_id)"},{"line_number":39,"context_line":"        resp, body \u003d self.put(url, put_body)"},{"line_number":40,"context_line":"        self.expected_success(201, resp.status)"},{"line_number":41,"context_line":"        body \u003d jsonutils.loads(body)"},{"line_number":42,"context_line":"        idp \u003d rest_client.ResponseBody(resp, body)[\u0027identity_provider\u0027]"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a122d0e_d55fc6e2","line":39,"updated":"2016-04-29 15:57:58.000000000","message":"these tests would be cleaner if put, get, etc. was changed to handle the json translation.","commit_id":"0a9e0fe5ab9d83b71f636e4541967c3f26549e9e"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"be26f69a705203187f60f9d2a55a6188538bfda9","unresolved":false,"context_lines":[{"line_number":36,"context_line":"        \"\"\""},{"line_number":37,"context_line":"        put_body \u003d jsonutils.dumps({\u0027identity_provider\u0027: kwargs})"},{"line_number":38,"context_line":"        url \u003d self._build_url(idp_id)"},{"line_number":39,"context_line":"        resp, body \u003d self.put(url, put_body)"},{"line_number":40,"context_line":"        self.expected_success(201, resp.status)"},{"line_number":41,"context_line":"        body \u003d jsonutils.loads(body)"},{"line_number":42,"context_line":"        idp \u003d rest_client.ResponseBody(resp, body)[\u0027identity_provider\u0027]"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a122d0e_f6f3e806","line":39,"in_reply_to":"1a122d0e_d55fc6e2","updated":"2016-04-29 17:04:54.000000000","message":"doing that in a follow up patch, when another class is added.","commit_id":"0a9e0fe5ab9d83b71f636e4541967c3f26549e9e"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b36991aab4b25486e49764f297f7ac8877aad367","unresolved":false,"context_lines":[{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def list_identity_providers(self):"},{"line_number":46,"context_line":"        \"\"\"List the identity providers.\"\"\""},{"line_number":47,"context_line":"        url \u003d self._build_url()"},{"line_number":48,"context_line":"        resp, body \u003d self.get(url)"},{"line_number":49,"context_line":"        self.expected_success(200, resp.status)"},{"line_number":50,"context_line":"        body \u003d jsonutils.loads(body)"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a122d0e_d52d0647","line":47,"updated":"2016-04-29 15:57:58.000000000","message":"shouldn\u0027t have to do build_url if there\u0027s no argument. it\u0027s unnecessarily complicated.","commit_id":"0a9e0fe5ab9d83b71f636e4541967c3f26549e9e"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"be26f69a705203187f60f9d2a55a6188538bfda9","unresolved":false,"context_lines":[{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def list_identity_providers(self):"},{"line_number":46,"context_line":"        \"\"\"List the identity providers.\"\"\""},{"line_number":47,"context_line":"        url \u003d self._build_url()"},{"line_number":48,"context_line":"        resp, body \u003d self.get(url)"},{"line_number":49,"context_line":"        self.expected_success(200, resp.status)"},{"line_number":50,"context_line":"        body \u003d jsonutils.loads(body)"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a122d0e_b63b309b","line":47,"in_reply_to":"1a122d0e_d52d0647","updated":"2016-04-29 17:04:54.000000000","message":"we are just reusing what is already there","commit_id":"0a9e0fe5ab9d83b71f636e4541967c3f26549e9e"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b36991aab4b25486e49764f297f7ac8877aad367","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        resp, body \u003d self.get(url)"},{"line_number":49,"context_line":"        self.expected_success(200, resp.status)"},{"line_number":50,"context_line":"        body \u003d jsonutils.loads(body)"},{"line_number":51,"context_line":"        return rest_client.ResponseBody(resp, body)[\u0027identity_providers\u0027]"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    def show_identity_provider(self, idp_id):"},{"line_number":54,"context_line":"        \"\"\"Get an identity provider.\"\"\""}],"source_content_type":"text/x-python","patch_set":11,"id":"1a122d0e_75707208","line":51,"updated":"2016-04-29 15:57:58.000000000","message":"by only returning the \u0027identity_providers\u0027 then tests can\u0027t verify the links.","commit_id":"0a9e0fe5ab9d83b71f636e4541967c3f26549e9e"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"be26f69a705203187f60f9d2a55a6188538bfda9","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        resp, body \u003d self.get(url)"},{"line_number":49,"context_line":"        self.expected_success(200, resp.status)"},{"line_number":50,"context_line":"        body \u003d jsonutils.loads(body)"},{"line_number":51,"context_line":"        return rest_client.ResponseBody(resp, body)[\u0027identity_providers\u0027]"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    def show_identity_provider(self, idp_id):"},{"line_number":54,"context_line":"        \"\"\"Get an identity provider.\"\"\""}],"source_content_type":"text/x-python","patch_set":11,"id":"1a122d0e_564d7c3c","line":51,"in_reply_to":"1a122d0e_75707208","updated":"2016-04-29 17:04:54.000000000","message":"Done","commit_id":"0a9e0fe5ab9d83b71f636e4541967c3f26549e9e"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b36991aab4b25486e49764f297f7ac8877aad367","unresolved":false,"context_lines":[{"line_number":70,"context_line":""},{"line_number":71,"context_line":"        :param str idp_id: The ID from the Identity Provider to be updated."},{"line_number":72,"context_line":"        :param kwargs: All optional attributes to update: description (str),"},{"line_number":73,"context_line":"                       enabled (boolean) and remote_ids (list)."},{"line_number":74,"context_line":"        \"\"\""},{"line_number":75,"context_line":"        patch_body \u003d jsonutils.dumps({\u0027identity_provider\u0027: kwargs})"},{"line_number":76,"context_line":"        url \u003d self._build_url(idp_id)"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a122d0e_f5e8027d","line":73,"updated":"2016-04-29 15:57:58.000000000","message":"There\u0027s no remote_ids according to the spec.","commit_id":"0a9e0fe5ab9d83b71f636e4541967c3f26549e9e"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"be26f69a705203187f60f9d2a55a6188538bfda9","unresolved":false,"context_lines":[{"line_number":70,"context_line":""},{"line_number":71,"context_line":"        :param str idp_id: The ID from the Identity Provider to be updated."},{"line_number":72,"context_line":"        :param kwargs: All optional attributes to update: description (str),"},{"line_number":73,"context_line":"                       enabled (boolean) and remote_ids (list)."},{"line_number":74,"context_line":"        \"\"\""},{"line_number":75,"context_line":"        patch_body \u003d jsonutils.dumps({\u0027identity_provider\u0027: kwargs})"},{"line_number":76,"context_line":"        url \u003d self._build_url(idp_id)"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a122d0e_163f8487","line":73,"in_reply_to":"1a122d0e_f5e8027d","updated":"2016-04-29 17:04:54.000000000","message":"see the reply above","commit_id":"0a9e0fe5ab9d83b71f636e4541967c3f26549e9e"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"b907e32239b7f8804612b2dce4aa074b9eecb186","unresolved":false,"context_lines":[{"line_number":12,"context_line":"# License for the specific language governing permissions and limitations"},{"line_number":13,"context_line":"# under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"import json"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from keystone_tempest_plugin.services.identity import clients"},{"line_number":18,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"dab17558_439d0b09","line":15,"updated":"2016-05-11 01:53:24.000000000","message":"I thought we used the jsonutils from oslo to be able to read json when running with python3?","commit_id":"edbe6eab3bd3ae68d3117859acf1179afc74456e"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"2b8a0cc85599552c7083d58091984142bfc8c5d9","unresolved":false,"context_lines":[{"line_number":12,"context_line":"# License for the specific language governing permissions and limitations"},{"line_number":13,"context_line":"# under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"import json"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from keystone_tempest_plugin.services.identity import clients"},{"line_number":18,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"dab17558_471b4481","line":15,"in_reply_to":"dab17558_439d0b09","updated":"2016-05-11 11:28:21.000000000","message":"think it is related only to Python 2.6 (as per Brant\u0027s comment in patchset 11)","commit_id":"edbe6eab3bd3ae68d3117859acf1179afc74456e"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"b907e32239b7f8804612b2dce4aa074b9eecb186","unresolved":false,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":"import json"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from keystone_tempest_plugin.services.identity import clients"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from tempest.lib.common import rest_client"},{"line_number":20,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"dab17558_a38e77cd","line":17,"updated":"2016-05-11 01:53:24.000000000","message":"This is a project specific import so it should be under the tempest import, which is a third party import.","commit_id":"edbe6eab3bd3ae68d3117859acf1179afc74456e"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"2b8a0cc85599552c7083d58091984142bfc8c5d9","unresolved":false,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":"import json"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from keystone_tempest_plugin.services.identity import clients"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from tempest.lib.common import rest_client"},{"line_number":20,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"dab17558_e7007804","line":17,"in_reply_to":"dab17558_a38e77cd","updated":"2016-05-11 11:28:21.000000000","message":"think pep8 complains about it?","commit_id":"edbe6eab3bd3ae68d3117859acf1179afc74456e"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"b907e32239b7f8804612b2dce4aa074b9eecb186","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"        :param str idp_id: The ID to be used to create the Identity Provider."},{"line_number":33,"context_line":"        :param kwargs: All optional attributes: description (str), enabled"},{"line_number":34,"context_line":"                       (boolean) and remote_ids (list)."},{"line_number":35,"context_line":"        \"\"\""},{"line_number":36,"context_line":"        put_body \u003d json.dumps({\u0027identity_provider\u0027: kwargs})"},{"line_number":37,"context_line":"        url \u003d self._build_path(idp_id)"}],"source_content_type":"text/x-python","patch_set":14,"id":"dab17558_23472778","line":34,"updated":"2016-05-11 01:53:24.000000000","message":"Would it make sense to have all the kwargs listed here be optional arguments? \n\n    def create_identity_provider(self, idp_id, description\u003dNone,\n        enabled\u003dTrue, remote_ids\u003dNone):","commit_id":"edbe6eab3bd3ae68d3117859acf1179afc74456e"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"2b8a0cc85599552c7083d58091984142bfc8c5d9","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"        :param str idp_id: The ID to be used to create the Identity Provider."},{"line_number":33,"context_line":"        :param kwargs: All optional attributes: description (str), enabled"},{"line_number":34,"context_line":"                       (boolean) and remote_ids (list)."},{"line_number":35,"context_line":"        \"\"\""},{"line_number":36,"context_line":"        put_body \u003d json.dumps({\u0027identity_provider\u0027: kwargs})"},{"line_number":37,"context_line":"        url \u003d self._build_path(idp_id)"}],"source_content_type":"text/x-python","patch_set":14,"id":"dab17558_ea45dd42","line":34,"in_reply_to":"dab17558_23472778","updated":"2016-05-11 11:28:21.000000000","message":"this seems to be a constant request, will do like that.","commit_id":"edbe6eab3bd3ae68d3117859acf1179afc74456e"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"369a43a914ed1211c493c81179f1b0a722f434f1","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"        :param str idp_id: The ID to be used to create the Identity Provider."},{"line_number":33,"context_line":"        :param kwargs: All optional attributes: description (str), enabled"},{"line_number":34,"context_line":"                       (boolean) and remote_ids (list)."},{"line_number":35,"context_line":"        \"\"\""},{"line_number":36,"context_line":"        put_body \u003d json.dumps({\u0027identity_provider\u0027: kwargs})"},{"line_number":37,"context_line":"        url \u003d self._build_path(idp_id)"}],"source_content_type":"text/x-python","patch_set":14,"id":"dab17558_663481fb","line":34,"in_reply_to":"dab17558_ea45dd42","updated":"2016-05-11 14:01:45.000000000","message":"actually, the client is intended to be as \"dumb\" as possible. We might want for example to test passing extra data.","commit_id":"edbe6eab3bd3ae68d3117859acf1179afc74456e"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"b907e32239b7f8804612b2dce4aa074b9eecb186","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        resp, body \u003d self.put(url, put_body)"},{"line_number":39,"context_line":"        self.expected_success(201, resp.status)"},{"line_number":40,"context_line":"        body \u003d json.loads(body)"},{"line_number":41,"context_line":"        idp \u003d rest_client.ResponseBody(resp, body)"},{"line_number":42,"context_line":"        return idp"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def list_identity_providers(self):"}],"source_content_type":"text/x-python","patch_set":14,"id":"dab17558_c32d7ba9","line":41,"updated":"2016-05-11 01:53:24.000000000","message":"nit: for the sake of consistency with the rest of the identity provider CRUD:\n\n    return rest_client.ResponseBody(resp, body)\n\nAlso, the idp variable isn\u0027t used anywhere.","commit_id":"edbe6eab3bd3ae68d3117859acf1179afc74456e"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"2b8a0cc85599552c7083d58091984142bfc8c5d9","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        resp, body \u003d self.put(url, put_body)"},{"line_number":39,"context_line":"        self.expected_success(201, resp.status)"},{"line_number":40,"context_line":"        body \u003d json.loads(body)"},{"line_number":41,"context_line":"        idp \u003d rest_client.ResponseBody(resp, body)"},{"line_number":42,"context_line":"        return idp"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def list_identity_providers(self):"}],"source_content_type":"text/x-python","patch_set":14,"id":"dab17558_ca3d79c5","line":41,"in_reply_to":"dab17558_c32d7ba9","updated":"2016-05-11 11:28:21.000000000","message":"Done","commit_id":"edbe6eab3bd3ae68d3117859acf1179afc74456e"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"b907e32239b7f8804612b2dce4aa074b9eecb186","unresolved":false,"context_lines":[{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        :param str idp_id: The ID from the Identity Provider to be updated."},{"line_number":71,"context_line":"        :param kwargs: All optional attributes to update: description (str),"},{"line_number":72,"context_line":"                       enabled (boolean) and remote_ids (list)."},{"line_number":73,"context_line":"        \"\"\""},{"line_number":74,"context_line":"        patch_body \u003d json.dumps({\u0027identity_provider\u0027: kwargs})"},{"line_number":75,"context_line":"        url \u003d self._build_path(idp_id)"}],"source_content_type":"text/x-python","patch_set":14,"id":"dab17558_23156748","line":72,"updated":"2016-05-11 01:53:24.000000000","message":"same comment here as above.","commit_id":"edbe6eab3bd3ae68d3117859acf1179afc74456e"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"2b8a0cc85599552c7083d58091984142bfc8c5d9","unresolved":false,"context_lines":[{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        :param str idp_id: The ID from the Identity Provider to be updated."},{"line_number":71,"context_line":"        :param kwargs: All optional attributes to update: description (str),"},{"line_number":72,"context_line":"                       enabled (boolean) and remote_ids (list)."},{"line_number":73,"context_line":"        \"\"\""},{"line_number":74,"context_line":"        patch_body \u003d json.dumps({\u0027identity_provider\u0027: kwargs})"},{"line_number":75,"context_line":"        url \u003d self._build_path(idp_id)"}],"source_content_type":"text/x-python","patch_set":14,"id":"dab17558_4a77c99f","line":72,"in_reply_to":"dab17558_23156748","updated":"2016-05-11 11:28:21.000000000","message":"Done","commit_id":"edbe6eab3bd3ae68d3117859acf1179afc74456e"}],"keystone_tempest_plugin/services/identity/v3/json/identity_providers_client.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"6939b573199581640c19e673746a972a1affa921","unresolved":false,"context_lines":[{"line_number":12,"context_line":"# License for the specific language governing permissions and limitations"},{"line_number":13,"context_line":"# under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"from oslo_serialization import jsonutils as json"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from tempest.lib.common import rest_client"},{"line_number":18,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9a061dce_4ced3ab6","line":15,"updated":"2016-04-06 20:44:25.000000000","message":"is there a reason to do this over import json?","commit_id":"ac2391aac6abc6060bb10545f379e673f8224ccb"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"bfedefc41ca9833ddfb8b10cb2724512e8b09962","unresolved":false,"context_lines":[{"line_number":12,"context_line":"# License for the specific language governing permissions and limitations"},{"line_number":13,"context_line":"# under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"from oslo_serialization import jsonutils as json"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from tempest.lib.common import rest_client"},{"line_number":18,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9a061dce_256f392c","line":15,"in_reply_to":"9a061dce_4ced3ab6","updated":"2016-04-08 03:57:36.000000000","message":"Done","commit_id":"ac2391aac6abc6060bb10545f379e673f8224ccb"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"6939b573199581640c19e673746a972a1affa921","unresolved":false,"context_lines":[{"line_number":21,"context_line":"    api_version \u003d \u0027v3\u0027"},{"line_number":22,"context_line":"    url_prefix \u003d \u0027OS-FEDERATION\u0027"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    def create_identity_provider(self, idp_id, **kwargs):"},{"line_number":25,"context_line":"        \"\"\"Creates an identity provider.\"\"\""},{"line_number":26,"context_line":"        put_body \u003d json.dumps({\u0027identity_provider\u0027: kwargs})"},{"line_number":27,"context_line":"        resp, body \u003d self.put(\u0027%s/%s/%s\u0027 % ("}],"source_content_type":"text/x-python","patch_set":1,"id":"9a061dce_af5fa8e3","line":24,"updated":"2016-04-06 20:44:25.000000000","message":"my opinion is that all these should be named like put_identity_provider so that it\u0027s obvious what the function is going to do so that we can tell what operation is being tested more easily.","commit_id":"ac2391aac6abc6060bb10545f379e673f8224ccb"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"bfedefc41ca9833ddfb8b10cb2724512e8b09962","unresolved":false,"context_lines":[{"line_number":21,"context_line":"    api_version \u003d \u0027v3\u0027"},{"line_number":22,"context_line":"    url_prefix \u003d \u0027OS-FEDERATION\u0027"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    def create_identity_provider(self, idp_id, **kwargs):"},{"line_number":25,"context_line":"        \"\"\"Creates an identity provider.\"\"\""},{"line_number":26,"context_line":"        put_body \u003d json.dumps({\u0027identity_provider\u0027: kwargs})"},{"line_number":27,"context_line":"        resp, body \u003d self.put(\u0027%s/%s/%s\u0027 % ("}],"source_content_type":"text/x-python","patch_set":1,"id":"9a061dce_a5efc985","line":24,"in_reply_to":"9a061dce_af5fa8e3","updated":"2016-04-08 03:57:36.000000000","message":"I think is clearer to have the action in the method name instead of the HTTP method called to perform it, just matter of opinion though.","commit_id":"ac2391aac6abc6060bb10545f379e673f8224ccb"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"6939b573199581640c19e673746a972a1affa921","unresolved":false,"context_lines":[{"line_number":26,"context_line":"        put_body \u003d json.dumps({\u0027identity_provider\u0027: kwargs})"},{"line_number":27,"context_line":"        resp, body \u003d self.put(\u0027%s/%s/%s\u0027 % ("},{"line_number":28,"context_line":"            self.url_prefix, \u0027identity_providers\u0027, idp_id),"},{"line_number":29,"context_line":"            put_body)"},{"line_number":30,"context_line":"        self.expected_success(201, resp.status)"},{"line_number":31,"context_line":"        body \u003d json.loads(body)"},{"line_number":32,"context_line":"        return rest_client.ResponseBody(resp, body)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a061dce_0cd062f5","line":29,"updated":"2016-04-06 20:44:25.000000000","message":"to remove duplication, could create a self.put in this class that sticks /v3/OS-FEDERATION on the URL.\n\nAlso, it could be enhanced to do the JSON conversion.","commit_id":"ac2391aac6abc6060bb10545f379e673f8224ccb"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"bfedefc41ca9833ddfb8b10cb2724512e8b09962","unresolved":false,"context_lines":[{"line_number":26,"context_line":"        put_body \u003d json.dumps({\u0027identity_provider\u0027: kwargs})"},{"line_number":27,"context_line":"        resp, body \u003d self.put(\u0027%s/%s/%s\u0027 % ("},{"line_number":28,"context_line":"            self.url_prefix, \u0027identity_providers\u0027, idp_id),"},{"line_number":29,"context_line":"            put_body)"},{"line_number":30,"context_line":"        self.expected_success(201, resp.status)"},{"line_number":31,"context_line":"        body \u003d json.loads(body)"},{"line_number":32,"context_line":"        return rest_client.ResponseBody(resp, body)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a061dce_d184f65e","line":29,"in_reply_to":"9a061dce_0cd062f5","updated":"2016-04-08 03:57:36.000000000","message":"created a build_url to be used by different methods","commit_id":"ac2391aac6abc6060bb10545f379e673f8224ccb"}],"keystone_tempest_plugin/tests/api/identity/admin/v3/test_identity_providers.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"6939b573199581640c19e673746a972a1affa921","unresolved":false,"context_lines":[{"line_number":12,"context_line":"# License for the specific language governing permissions and limitations"},{"line_number":13,"context_line":"# under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"from keystone_tempest_plugin.tests.api.identity import base"},{"line_number":16,"context_line":"from tempest.common.utils import data_utils"},{"line_number":17,"context_line":"from tempest import test"},{"line_number":18,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9a061dce_2cdd66e0","line":15,"updated":"2016-04-06 20:44:25.000000000","message":"this should be in a separate section since it\u0027s a local package import.\n\nThis applies to the other parts, too.","commit_id":"ac2391aac6abc6060bb10545f379e673f8224ccb"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"bfedefc41ca9833ddfb8b10cb2724512e8b09962","unresolved":false,"context_lines":[{"line_number":12,"context_line":"# License for the specific language governing permissions and limitations"},{"line_number":13,"context_line":"# under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"from keystone_tempest_plugin.tests.api.identity import base"},{"line_number":16,"context_line":"from tempest.common.utils import data_utils"},{"line_number":17,"context_line":"from tempest import test"},{"line_number":18,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9a061dce_2560d900","line":15,"in_reply_to":"9a061dce_2cdd66e0","updated":"2016-04-08 03:57:36.000000000","message":"Done","commit_id":"ac2391aac6abc6060bb10545f379e673f8224ccb"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"6939b573199581640c19e673746a972a1affa921","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        self.addCleanup("},{"line_number":36,"context_line":"            self.identity_providers_client.delete_identity_provider, idp_id)"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"        self._check_identity_provider(idp)"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"        # The identity provider is disabled by default"},{"line_number":41,"context_line":"        self.assertFalse(idp[\u0027enabled\u0027])"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a061dce_cc14aa4e","line":38,"updated":"2016-04-06 20:44:25.000000000","message":"this should be checking the value of the fields of the returned identity provider, not just that the fields are present.","commit_id":"ac2391aac6abc6060bb10545f379e673f8224ccb"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"bfedefc41ca9833ddfb8b10cb2724512e8b09962","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        self.addCleanup("},{"line_number":36,"context_line":"            self.identity_providers_client.delete_identity_provider, idp_id)"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"        self._check_identity_provider(idp)"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"        # The identity provider is disabled by default"},{"line_number":41,"context_line":"        self.assertFalse(idp[\u0027enabled\u0027])"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a061dce_8a3a69e5","line":38,"in_reply_to":"9a061dce_cc14aa4e","updated":"2016-04-08 03:57:36.000000000","message":"Done","commit_id":"ac2391aac6abc6060bb10545f379e673f8224ccb"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"6939b573199581640c19e673746a972a1affa921","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        idp \u003d self.identity_providers_client.create_identity_provider("},{"line_number":47,"context_line":"            idp_id, enabled\u003dTrue)[\u0027identity_provider\u0027]"},{"line_number":48,"context_line":"        self.addCleanup("},{"line_number":49,"context_line":"            self.identity_providers_client.delete_identity_provider, idp_id)"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"        self._check_identity_provider(idp)"},{"line_number":52,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9a061dce_ef5400ff","line":49,"updated":"2016-04-06 20:44:25.000000000","message":"if identity_providers_client had a reference to the TestCase it could do this automatically in create_identity_provider and the test writer wouldn\u0027t have to remember to do it.","commit_id":"ac2391aac6abc6060bb10545f379e673f8224ccb"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"bfedefc41ca9833ddfb8b10cb2724512e8b09962","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        idp \u003d self.identity_providers_client.create_identity_provider("},{"line_number":47,"context_line":"            idp_id, enabled\u003dTrue)[\u0027identity_provider\u0027]"},{"line_number":48,"context_line":"        self.addCleanup("},{"line_number":49,"context_line":"            self.identity_providers_client.delete_identity_provider, idp_id)"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"        self._check_identity_provider(idp)"},{"line_number":52,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9a061dce_d5452243","line":49,"in_reply_to":"9a061dce_ef5400ff","updated":"2016-04-08 03:57:36.000000000","message":"the clients are setup before the test case itself is created, will try to add a fixtures class to handle the general testcases","commit_id":"ac2391aac6abc6060bb10545f379e673f8224ccb"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"6939b573199581640c19e673746a972a1affa921","unresolved":false,"context_lines":[{"line_number":64,"context_line":""},{"line_number":65,"context_line":"        self._check_identity_provider(idp)"},{"line_number":66,"context_line":"        for remote_id in remote_ids:"},{"line_number":67,"context_line":"            self.assertIn(remote_id, idp[\u0027remote_ids\u0027])"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    @test.idempotent_id(\u00278a7817ad-27f8-436b-9cbe-46aa20989beb\u0027)"},{"line_number":70,"context_line":"    def test_identity_provider_get(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a061dce_eff080ff","line":67,"updated":"2016-04-06 20:44:25.000000000","message":"rather than loop do assertItemsEqual(). This applies where other loops and assertIn is used.","commit_id":"ac2391aac6abc6060bb10545f379e673f8224ccb"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"5de777ed978fe24fd3e004336b931362004bc624","unresolved":false,"context_lines":[{"line_number":64,"context_line":""},{"line_number":65,"context_line":"        self._check_identity_provider(idp)"},{"line_number":66,"context_line":"        for remote_id in remote_ids:"},{"line_number":67,"context_line":"            self.assertIn(remote_id, idp[\u0027remote_ids\u0027])"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    @test.idempotent_id(\u00278a7817ad-27f8-436b-9cbe-46aa20989beb\u0027)"},{"line_number":70,"context_line":"    def test_identity_provider_get(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a061dce_7caf8c7d","line":67,"in_reply_to":"9a061dce_eff080ff","updated":"2016-04-08 18:44:33.000000000","message":"the thing here is that we might run this tests in an env that already has other identity providers (not just in a brand new devstack deployment)","commit_id":"ac2391aac6abc6060bb10545f379e673f8224ccb"}],"keystone_tempest_plugin/tests/api/identity/admin/v3/test_identity_providers_negative.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"6939b573199581640c19e673746a972a1affa921","unresolved":false,"context_lines":[{"line_number":19,"context_line":"from tempest import test"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"class IndentityProvidersNegativeTestJSON(base.BaseIdentityV3AdminTest):"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    @test.attr(type\u003d[\u0027negative\u0027])"},{"line_number":25,"context_line":"    @test.idempotent_id(\u0027fb16231b-7bc6-4303-a51f-0fae2d759b07\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a061dce_6f9d9065","line":22,"updated":"2016-04-06 20:44:25.000000000","message":"I\u0027m not a fan of separating these out since it\u0027s harder to see what\u0027s tested and what\u0027s not.\n\nAlso, I\u0027m not sure that we should even have these tests. Seems excessive to have tempest tests when we can test these cases in unit tests adequately.","commit_id":"ac2391aac6abc6060bb10545f379e673f8224ccb"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"bfedefc41ca9833ddfb8b10cb2724512e8b09962","unresolved":false,"context_lines":[{"line_number":19,"context_line":"from tempest import test"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"class IndentityProvidersNegativeTestJSON(base.BaseIdentityV3AdminTest):"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    @test.attr(type\u003d[\u0027negative\u0027])"},{"line_number":25,"context_line":"    @test.idempotent_id(\u0027fb16231b-7bc6-4303-a51f-0fae2d759b07\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a061dce_60ec7ff3","line":22,"in_reply_to":"9a061dce_6f9d9065","updated":"2016-04-08 03:57:36.000000000","message":"yeah... I guess all the tests here are \"duplicates\" from already existent unit tests, this one for example: https://review.openstack.org/#/c/294201/\n\nif I don\u0027t come up with a new corner case test for the API only, will remove this file. Regarding having a different file for negative tests, is the \"pattern\" in tempest, not sure why :)","commit_id":"ac2391aac6abc6060bb10545f379e673f8224ccb"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"6939b573199581640c19e673746a972a1affa921","unresolved":false,"context_lines":[{"line_number":30,"context_line":"        self.identity_providers_client.create_identity_provider("},{"line_number":31,"context_line":"            idp_id1, enabled\u003dTrue, remote_ids\u003dremote_ids)[\u0027identity_provider\u0027]"},{"line_number":32,"context_line":"        self.addCleanup("},{"line_number":33,"context_line":"            self.identity_providers_client.delete_identity_provider, idp_id1)"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"        # We can not create another identity provider reusing a remote_id"},{"line_number":36,"context_line":"        idp_id2 \u003d data_utils.rand_uuid_hex()"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a061dce_0fa21499","line":33,"updated":"2016-04-06 20:44:25.000000000","message":"we should have a fixture so that the tests can be clearer.","commit_id":"ac2391aac6abc6060bb10545f379e673f8224ccb"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"6939b573199581640c19e673746a972a1affa921","unresolved":false,"context_lines":[{"line_number":40,"context_line":"            self.identity_providers_client.create_identity_provider,"},{"line_number":41,"context_line":"            idp_id2, enabled\u003dTrue, remote_ids\u003d[remote_id])"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    @decorators.skip_because(bug\u003d\u00271558670\u0027)"},{"line_number":44,"context_line":"    @test.attr(type\u003d[\u0027negative\u0027])"},{"line_number":45,"context_line":"    @test.idempotent_id(\u002798238a1b-7c9f-4b61-9ad1-ea208ba3baa8\u0027)"},{"line_number":46,"context_line":"    def test_identity_provider_update_with_already_used_remote_id(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a061dce_6f6ab082","line":43,"updated":"2016-04-06 20:44:25.000000000","message":"really? This could use more info since we\u0027re just adding the test now.","commit_id":"ac2391aac6abc6060bb10545f379e673f8224ccb"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"bfedefc41ca9833ddfb8b10cb2724512e8b09962","unresolved":false,"context_lines":[{"line_number":40,"context_line":"            self.identity_providers_client.create_identity_provider,"},{"line_number":41,"context_line":"            idp_id2, enabled\u003dTrue, remote_ids\u003d[remote_id])"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    @decorators.skip_because(bug\u003d\u00271558670\u0027)"},{"line_number":44,"context_line":"    @test.attr(type\u003d[\u0027negative\u0027])"},{"line_number":45,"context_line":"    @test.idempotent_id(\u002798238a1b-7c9f-4b61-9ad1-ea208ba3baa8\u0027)"},{"line_number":46,"context_line":"    def test_identity_provider_update_with_already_used_remote_id(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a061dce_8049d362","line":43,"in_reply_to":"9a061dce_6f6ab082","updated":"2016-04-08 03:57:36.000000000","message":"let me check if we can add more info here","commit_id":"ac2391aac6abc6060bb10545f379e673f8224ccb"}],"keystone_tempest_plugin/tests/api/identity/base.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"6939b573199581640c19e673746a972a1affa921","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    @classmethod"},{"line_number":27,"context_line":"    def setup_clients(cls):"},{"line_number":28,"context_line":"        super(BaseIdentityV3Test, cls).setup_clients()"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    @classmethod"},{"line_number":31,"context_line":"    def resource_cleanup(cls):"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a061dce_cfe93cb9","line":28,"updated":"2016-04-06 20:44:25.000000000","message":"isn\u0027t this the default? why have this?","commit_id":"ac2391aac6abc6060bb10545f379e673f8224ccb"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"6939b573199581640c19e673746a972a1affa921","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        super(BaseIdentityV3Test, cls).resource_cleanup()"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"class BaseIdentityV3AdminTest(BaseIdentityV3Test):"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    credentials \u003d [\u0027primary\u0027, \u0027admin\u0027]"},{"line_number":38,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9a061dce_ef32405d","line":35,"updated":"2016-04-06 20:44:25.000000000","message":"Do we really need admin and non-admin test suites? Let\u0027s just have 1 test suite and let the test say that it needs admin or non-admin.\n\n99% of the tests should be admin and there will only be a handful on non-admin tests anyways.","commit_id":"ac2391aac6abc6060bb10545f379e673f8224ccb"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"bfedefc41ca9833ddfb8b10cb2724512e8b09962","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        super(BaseIdentityV3Test, cls).resource_cleanup()"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"class BaseIdentityV3AdminTest(BaseIdentityV3Test):"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    credentials \u003d [\u0027primary\u0027, \u0027admin\u0027]"},{"line_number":38,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9a061dce_c0c8eb24","line":35,"in_reply_to":"9a061dce_ef32405d","updated":"2016-04-08 03:57:36.000000000","message":"will leave just the admin v3 for now, if we come up with non-admin tests we can split this again","commit_id":"ac2391aac6abc6060bb10545f379e673f8224ccb"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"0ad750433da7d1c8f393a6fe0505f4b50e9b15ff","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        cls.keystone_manager \u003d clients.KeystoneManager(credentials\u003dcredentials)"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    @classmethod"},{"line_number":35,"context_line":"    def resource_setup(cls):"},{"line_number":36,"context_line":"        super(BaseIdentityTest, cls).resource_setup()"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a122d0e_f4add1e9","line":35,"updated":"2016-04-20 14:22:39.000000000","message":"Why do we need this if we are just calling through to the parent\u0027s method?","commit_id":"61665dd27f595b43f0954064939c737e10965a78"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"fc1f5721bc1ae4a490952ab9a37a29166ab48495","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        cls.keystone_manager \u003d clients.KeystoneManager(credentials\u003dcredentials)"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    @classmethod"},{"line_number":35,"context_line":"    def resource_setup(cls):"},{"line_number":36,"context_line":"        super(BaseIdentityTest, cls).resource_setup()"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a122d0e_9ef1146e","line":35,"in_reply_to":"1a122d0e_f4add1e9","updated":"2016-04-20 15:15:15.000000000","message":"removed","commit_id":"61665dd27f595b43f0954064939c737e10965a78"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"0ad750433da7d1c8f393a6fe0505f4b50e9b15ff","unresolved":false,"context_lines":[{"line_number":36,"context_line":"        super(BaseIdentityTest, cls).resource_setup()"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    @classmethod"},{"line_number":39,"context_line":"    def resource_cleanup(cls):"},{"line_number":40,"context_line":"        super(BaseIdentityTest, cls).resource_cleanup()"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"1a122d0e_74a1c1f7","line":39,"updated":"2016-04-20 14:22:39.000000000","message":"Why do we need this if we are just calling through to the parent\u0027s method?","commit_id":"61665dd27f595b43f0954064939c737e10965a78"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"fc1f5721bc1ae4a490952ab9a37a29166ab48495","unresolved":false,"context_lines":[{"line_number":36,"context_line":"        super(BaseIdentityTest, cls).resource_setup()"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    @classmethod"},{"line_number":39,"context_line":"    def resource_cleanup(cls):"},{"line_number":40,"context_line":"        super(BaseIdentityTest, cls).resource_cleanup()"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"1a122d0e_7ef4f859","line":39,"in_reply_to":"1a122d0e_74a1c1f7","updated":"2016-04-20 15:15:15.000000000","message":"removed","commit_id":"61665dd27f595b43f0954064939c737e10965a78"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b36991aab4b25486e49764f297f7ac8877aad367","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"class BaseIdentityTest(tempest.test.BaseTestCase):"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    identity_version \u003d None"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    @classmethod"},{"line_number":26,"context_line":"    def setup_clients(cls):"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a122d0e_d54b4685","line":23,"updated":"2016-04-29 15:57:58.000000000","message":"this needs a comment","commit_id":"0a9e0fe5ab9d83b71f636e4541967c3f26549e9e"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"be26f69a705203187f60f9d2a55a6188538bfda9","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"class BaseIdentityTest(tempest.test.BaseTestCase):"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    identity_version \u003d None"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    @classmethod"},{"line_number":26,"context_line":"    def setup_clients(cls):"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a122d0e_766fd85f","line":23,"in_reply_to":"1a122d0e_d54b4685","updated":"2016-04-29 17:04:54.000000000","message":"Done","commit_id":"0a9e0fe5ab9d83b71f636e4541967c3f26549e9e"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b36991aab4b25486e49764f297f7ac8877aad367","unresolved":false,"context_lines":[{"line_number":28,"context_line":"        # NOTE(rodrigods): for now, all tests are in the admin scope, if"},{"line_number":29,"context_line":"        # necessary, another class can be created to handle non-admin tests."},{"line_number":30,"context_line":"        credentials \u003d common_creds.get_configured_credentials("},{"line_number":31,"context_line":"            \u0027identity_admin\u0027, identity_version\u003dcls.identity_version)"},{"line_number":32,"context_line":"        cls.keystone_manager \u003d clients.KeystoneManager(credentials\u003dcredentials)"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"1a122d0e_757a32bb","line":31,"updated":"2016-04-29 15:57:58.000000000","message":"give a name to the \"identity_admin\" magic value so that readers know what it\u0027s for.","commit_id":"0a9e0fe5ab9d83b71f636e4541967c3f26549e9e"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"be26f69a705203187f60f9d2a55a6188538bfda9","unresolved":false,"context_lines":[{"line_number":28,"context_line":"        # NOTE(rodrigods): for now, all tests are in the admin scope, if"},{"line_number":29,"context_line":"        # necessary, another class can be created to handle non-admin tests."},{"line_number":30,"context_line":"        credentials \u003d common_creds.get_configured_credentials("},{"line_number":31,"context_line":"            \u0027identity_admin\u0027, identity_version\u003dcls.identity_version)"},{"line_number":32,"context_line":"        cls.keystone_manager \u003d clients.KeystoneManager(credentials\u003dcredentials)"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"1a122d0e_d6bb4ce3","line":31,"in_reply_to":"1a122d0e_757a32bb","updated":"2016-04-29 17:04:54.000000000","message":"Done","commit_id":"0a9e0fe5ab9d83b71f636e4541967c3f26549e9e"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b36991aab4b25486e49764f297f7ac8877aad367","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        cls.keystone_manager \u003d clients.KeystoneManager(credentials\u003dcredentials)"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"class BaseIdentityV3Test(BaseIdentityTest):"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    identity_version \u003d \u0027v3\u0027"},{"line_number":38,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"1a122d0e_35743acd","line":35,"updated":"2016-04-29 15:57:58.000000000","message":"Since we only have v3 tests, let\u0027s just have BaseIdentityTest and only add this when we actually need it.","commit_id":"0a9e0fe5ab9d83b71f636e4541967c3f26549e9e"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"be26f69a705203187f60f9d2a55a6188538bfda9","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        cls.keystone_manager \u003d clients.KeystoneManager(credentials\u003dcredentials)"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"class BaseIdentityV3Test(BaseIdentityTest):"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    identity_version \u003d \u0027v3\u0027"},{"line_number":38,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"1a122d0e_76ea38d9","line":35,"in_reply_to":"1a122d0e_35743acd","updated":"2016-04-29 17:04:54.000000000","message":"Done","commit_id":"0a9e0fe5ab9d83b71f636e4541967c3f26549e9e"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b36991aab4b25486e49764f297f7ac8877aad367","unresolved":false,"context_lines":[{"line_number":40,"context_line":"    def setup_clients(cls):"},{"line_number":41,"context_line":"        super(BaseIdentityV3Test, cls).setup_clients()"},{"line_number":42,"context_line":"        cls.identity_providers_client \u003d ("},{"line_number":43,"context_line":"            cls.keystone_manager.identity_providers_client)"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a122d0e_106cacce","line":43,"updated":"2016-04-29 15:57:58.000000000","message":"I don\u0027t understand what\u0027s going on here. A comment would help.","commit_id":"0a9e0fe5ab9d83b71f636e4541967c3f26549e9e"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"be26f69a705203187f60f9d2a55a6188538bfda9","unresolved":false,"context_lines":[{"line_number":40,"context_line":"    def setup_clients(cls):"},{"line_number":41,"context_line":"        super(BaseIdentityV3Test, cls).setup_clients()"},{"line_number":42,"context_line":"        cls.identity_providers_client \u003d ("},{"line_number":43,"context_line":"            cls.keystone_manager.identity_providers_client)"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a122d0e_56e9fce4","line":43,"in_reply_to":"1a122d0e_106cacce","updated":"2016-04-29 17:04:54.000000000","message":"it is a kind of \"alias\" to reduce a bit the size of the lines we are calling:\n\n\n    self.keystone_manager.identity_provider_client.create_identity_provider(...)","commit_id":"0a9e0fe5ab9d83b71f636e4541967c3f26549e9e"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"b907e32239b7f8804612b2dce4aa074b9eecb186","unresolved":false,"context_lines":[{"line_number":12,"context_line":"# License for the specific language governing permissions and limitations"},{"line_number":13,"context_line":"# under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"from keystone_tempest_plugin import clients"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from tempest.common import credentials_factory as common_creds"},{"line_number":18,"context_line":"import tempest.test"}],"source_content_type":"text/x-python","patch_set":14,"id":"dab17558_fe001603","line":15,"updated":"2016-05-11 01:53:24.000000000","message":"Since this is considered a local import, it should be after the tempest imports below since those are considered third party imports.","commit_id":"edbe6eab3bd3ae68d3117859acf1179afc74456e"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"b907e32239b7f8804612b2dce4aa074b9eecb186","unresolved":false,"context_lines":[{"line_number":15,"context_line":"from keystone_tempest_plugin import clients"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from tempest.common import credentials_factory as common_creds"},{"line_number":18,"context_line":"import tempest.test"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"class BaseIdentityTest(tempest.test.BaseTestCase):"}],"source_content_type":"text/x-python","patch_set":14,"id":"dab17558_5e120258","line":18,"updated":"2016-05-11 01:53:24.000000000","message":"any reason to not use?\n\n    from tempest import test","commit_id":"edbe6eab3bd3ae68d3117859acf1179afc74456e"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"2b8a0cc85599552c7083d58091984142bfc8c5d9","unresolved":false,"context_lines":[{"line_number":15,"context_line":"from keystone_tempest_plugin import clients"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from tempest.common import credentials_factory as common_creds"},{"line_number":18,"context_line":"import tempest.test"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"class BaseIdentityTest(tempest.test.BaseTestCase):"}],"source_content_type":"text/x-python","patch_set":14,"id":"dab17558_4a9ea9b9","line":18,"in_reply_to":"dab17558_5e120258","updated":"2016-05-11 11:28:21.000000000","message":"Done","commit_id":"edbe6eab3bd3ae68d3117859acf1179afc74456e"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"b907e32239b7f8804612b2dce4aa074b9eecb186","unresolved":false,"context_lines":[{"line_number":24,"context_line":"    identity_version \u003d \u0027v3\u0027"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    # NOTE(rodrigods): for now, all tests are in the admin scope, if"},{"line_number":27,"context_line":"    # necessary, another class can be created to handle non-admin tests."},{"line_number":28,"context_line":"    credential_type \u003d \u0027identity_admin\u0027"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":14,"id":"dab17558_1e0cfa39","line":27,"updated":"2016-05-11 01:53:24.000000000","message":"++","commit_id":"edbe6eab3bd3ae68d3117859acf1179afc74456e"}],"keystone_tempest_plugin/tests/api/identity/v3/fixtures.py":[{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"0ad750433da7d1c8f393a6fe0505f4b50e9b15ff","unresolved":false,"context_lines":[{"line_number":19,"context_line":"    ref \u003d {"},{"line_number":20,"context_line":"        \u0027description\u0027: data_utils.rand_uuid_hex(),"},{"line_number":21,"context_line":"    }"},{"line_number":22,"context_line":"    if enabled:"},{"line_number":23,"context_line":"        ref[\u0027enabled\u0027] \u003d enabled"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    if remote_ids:"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a122d0e_144fad37","line":22,"updated":"2016-04-20 14:22:39.000000000","message":"`enabled` should be compared against None so that False values work correctly.","commit_id":"61665dd27f595b43f0954064939c737e10965a78"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"fc1f5721bc1ae4a490952ab9a37a29166ab48495","unresolved":false,"context_lines":[{"line_number":19,"context_line":"    ref \u003d {"},{"line_number":20,"context_line":"        \u0027description\u0027: data_utils.rand_uuid_hex(),"},{"line_number":21,"context_line":"    }"},{"line_number":22,"context_line":"    if enabled:"},{"line_number":23,"context_line":"        ref[\u0027enabled\u0027] \u003d enabled"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    if remote_ids:"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a122d0e_feae482c","line":22,"in_reply_to":"1a122d0e_144fad37","updated":"2016-04-20 15:15:15.000000000","message":"Done","commit_id":"61665dd27f595b43f0954064939c737e10965a78"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b36991aab4b25486e49764f297f7ac8877aad367","unresolved":false,"context_lines":[{"line_number":23,"context_line":"        ref[\u0027enabled\u0027] \u003d enabled"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    if remote_ids:"},{"line_number":26,"context_line":"        ref[\u0027remote_ids\u0027] \u003d remote_ids"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    return ref"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a122d0e_30c1e880","line":26,"updated":"2016-04-29 15:57:58.000000000","message":"remote_ids isn\u0027t in the spec.\n\nThis applies everywhere that remote_ids is used.","commit_id":"0a9e0fe5ab9d83b71f636e4541967c3f26549e9e"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"be26f69a705203187f60f9d2a55a6188538bfda9","unresolved":false,"context_lines":[{"line_number":23,"context_line":"        ref[\u0027enabled\u0027] \u003d enabled"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    if remote_ids:"},{"line_number":26,"context_line":"        ref[\u0027remote_ids\u0027] \u003d remote_ids"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    return ref"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a122d0e_6a652cad","line":26,"in_reply_to":"1a122d0e_30c1e880","updated":"2016-04-29 17:04:54.000000000","message":"https://github.com/openstack/keystone-specs/blob/master/api/v3/identity-api-v3-os-federation-ext.rst#register-an-identity-provider","commit_id":"0a9e0fe5ab9d83b71f636e4541967c3f26549e9e"}],"keystone_tempest_plugin/tests/api/identity/v3/test_identity_providers.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b36991aab4b25486e49764f297f7ac8877aad367","unresolved":false,"context_lines":[{"line_number":34,"context_line":"            self.assertEqual(idp_ref[\u0027description\u0027], idp[\u0027description\u0027])"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"            if \u0027enabled\u0027 in idp_ref:"},{"line_number":37,"context_line":"                self.assertEqual(idp_ref[\u0027enabled\u0027], idp[\u0027enabled\u0027])"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"            if \u0027remote_ids\u0027 in idp_ref:"},{"line_number":40,"context_line":"                self.assertItemsEqual(idp_ref[\u0027remote_ids\u0027], idp[\u0027remote_ids\u0027])"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a122d0e_70eb60a4","line":37,"updated":"2016-04-29 15:57:58.000000000","message":"This should use assertIs since it\u0027s comparing singletons.","commit_id":"0a9e0fe5ab9d83b71f636e4541967c3f26549e9e"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"be26f69a705203187f60f9d2a55a6188538bfda9","unresolved":false,"context_lines":[{"line_number":34,"context_line":"            self.assertEqual(idp_ref[\u0027description\u0027], idp[\u0027description\u0027])"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"            if \u0027enabled\u0027 in idp_ref:"},{"line_number":37,"context_line":"                self.assertEqual(idp_ref[\u0027enabled\u0027], idp[\u0027enabled\u0027])"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"            if \u0027remote_ids\u0027 in idp_ref:"},{"line_number":40,"context_line":"                self.assertItemsEqual(idp_ref[\u0027remote_ids\u0027], idp[\u0027remote_ids\u0027])"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a122d0e_ca0600cd","line":37,"in_reply_to":"1a122d0e_70eb60a4","updated":"2016-04-29 17:04:54.000000000","message":"Done","commit_id":"0a9e0fe5ab9d83b71f636e4541967c3f26549e9e"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b36991aab4b25486e49764f297f7ac8877aad367","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        idp_ref \u003d fixtures.idp_ref()"},{"line_number":50,"context_line":"        idp \u003d self.identity_providers_client.create_identity_provider("},{"line_number":51,"context_line":"            idp_id, **idp_ref)"},{"line_number":52,"context_line":"        self._add_cleanup(idp_id)"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"        # The identity provider is disabled by default"},{"line_number":55,"context_line":"        idp_ref[\u0027enabled\u0027] \u003d False"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a122d0e_90c6fc65","line":52,"updated":"2016-04-29 15:57:58.000000000","message":"since create_identity_provider is always going to be matched with a self._add_cleanup of it, these should both be in a function, or use a fixture instead.","commit_id":"0a9e0fe5ab9d83b71f636e4541967c3f26549e9e"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"be26f69a705203187f60f9d2a55a6188538bfda9","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        idp_ref \u003d fixtures.idp_ref()"},{"line_number":50,"context_line":"        idp \u003d self.identity_providers_client.create_identity_provider("},{"line_number":51,"context_line":"            idp_id, **idp_ref)"},{"line_number":52,"context_line":"        self._add_cleanup(idp_id)"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"        # The identity provider is disabled by default"},{"line_number":55,"context_line":"        idp_ref[\u0027enabled\u0027] \u003d False"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a122d0e_4a6f902a","line":52,"in_reply_to":"1a122d0e_90c6fc65","updated":"2016-04-29 17:04:54.000000000","message":"Done","commit_id":"0a9e0fe5ab9d83b71f636e4541967c3f26549e9e"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"b907e32239b7f8804612b2dce4aa074b9eecb186","unresolved":false,"context_lines":[{"line_number":13,"context_line":"# under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"from keystone_tempest_plugin.tests.api.identity import base"},{"line_number":16,"context_line":"from keystone_tempest_plugin.tests.api.identity.v3 import fixtures"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from tempest.lib.common.utils import data_utils"},{"line_number":19,"context_line":"from tempest import test"}],"source_content_type":"text/x-python","patch_set":14,"id":"dab17558_9e18ea76","line":16,"updated":"2016-05-11 01:53:24.000000000","message":"Same comment here as previous.","commit_id":"edbe6eab3bd3ae68d3117859acf1179afc74456e"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"b907e32239b7f8804612b2dce4aa074b9eecb186","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"class IndentityProvidersTest(base.BaseIdentityTest):"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    def _assert_identity_provider_attributes(self, idp, idp_id, idp_ref\u003dNone):"},{"line_number":25,"context_line":"        self.assertIn(\u0027id\u0027, idp)"},{"line_number":26,"context_line":"        self.assertEqual(idp_id, idp[\u0027id\u0027])"},{"line_number":27,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"dab17558_3e1e1e5f","line":24,"updated":"2016-05-11 01:53:24.000000000","message":"nit: we usually use camelCase for assertions in keystone testing, do we want to apply that same convention for tempest test plugins?","commit_id":"edbe6eab3bd3ae68d3117859acf1179afc74456e"}]}
