)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"dcfed5a83438c08aa7b7f67e768cf65190211925","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Andrew Kerr \u003candrew.kerr@netapp.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-04-01 16:04:11 -0400"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add tests for Cinder user messages API"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This commit adds basic tests for the list/show/delete APIs"},{"line_number":10,"context_line":"for Cinder\u0027s new user messages."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"9a061dce_5e928f58","line":7,"updated":"2016-04-04 14:50:00.000000000","message":"If this is just for /v3 endpoints, the commit message should change to reflect that.","commit_id":"504b1e36011ff6e22f527fa3d8a000fd17ac5e4e"}],"tempest/api/volume/api_microversion_fixture.py":[{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"1ee4b5bc243d98069ac637300b37eb9df718476e","unresolved":false,"context_lines":[{"line_number":13,"context_line":""},{"line_number":14,"context_line":"import fixtures"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from tempest.services.volume.v3.json import messages_client"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"class APIMicroversionFixture(fixtures.Fixture):"}],"source_content_type":"text/x-python","patch_set":22,"id":"7aa08908_492e378d","line":16,"updated":"2016-06-16 15:30:27.000000000","message":"The microversion being used isn\u0027t resource specific. This should be part of a base class, the fixture defined in this file is for setting the microversion across all resources not just the messages_client. (although we only have microversions on the messages client to start)\n\nMake a base v3 client that does the microversion setup only. Nothing messages client specific. The issue with the previous rev\u0027s class structure was that you just had a base messaging client that had all the real logic for everything and the then the actual messages client was just a subclass with a version. We need to build this in a way which makes adding new microversions easier.\n\nWe should look at the nova class structure for an example of what we should be doing here. They already have multiple microversion tests and split things across the right boundaries","commit_id":"2e2c6a232acdef885813255b8033534defb56299"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"1ee4b5bc243d98069ac637300b37eb9df718476e","unresolved":false,"context_lines":[{"line_number":27,"context_line":"        self.addCleanup(self._reset_volume_microversion)"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    def _reset_volume_microversion(self):"},{"line_number":30,"context_line":"        messages_client.VOLUME_MICROVIRSION \u003d None"}],"source_content_type":"text/x-python","patch_set":22,"id":"7aa08908_29c92b5b","line":30,"updated":"2016-06-16 15:30:27.000000000","message":"Typo, this should be \"MICROVERSION\"","commit_id":"2e2c6a232acdef885813255b8033534defb56299"}],"tempest/api/volume/base.py":[{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"e205d163224536c9698eae0927d07270dcc259e4","unresolved":false,"context_lines":[{"line_number":192,"context_line":"            cls.admin_snapshots_client \u003d cls.os_adm.snapshots_client"},{"line_number":193,"context_line":"            cls.admin_backups_client \u003d cls.os_adm.backups_client"},{"line_number":194,"context_line":"            cls.admin_quotas_client \u003d cls.os_adm.volume_quotas_client"},{"line_number":195,"context_line":"        else:"},{"line_number":196,"context_line":"            cls.admin_volume_qos_client \u003d cls.os_adm.volume_qos_v2_client"},{"line_number":197,"context_line":"            cls.admin_volume_services_client \u003d \\"},{"line_number":198,"context_line":"                cls.os_adm.volume_services_v2_client"}],"source_content_type":"text/x-python","patch_set":21,"id":"7aa08908_3c935a02","line":195,"updated":"2016-06-15 20:05:15.000000000","message":"Why is v3 a major version if it\u0027s the same as v2? That just makes everything more difficult for users for no reason. (it also makes maint from the cinder side duplicated)","commit_id":"74a873c1ddeedee9975fa5eeb7cca4d2eed298c6"},{"author":{"_account_id":9366,"name":"Andrew Kerr","email":"andrew.kerr@netapp.com","username":"andrew-kerr"},"change_message_id":"cbcb80ae7aa38c2747ac1ca6662de6813ec21ff8","unresolved":false,"context_lines":[{"line_number":192,"context_line":"            cls.admin_snapshots_client \u003d cls.os_adm.snapshots_client"},{"line_number":193,"context_line":"            cls.admin_backups_client \u003d cls.os_adm.backups_client"},{"line_number":194,"context_line":"            cls.admin_quotas_client \u003d cls.os_adm.volume_quotas_client"},{"line_number":195,"context_line":"        else:"},{"line_number":196,"context_line":"            cls.admin_volume_qos_client \u003d cls.os_adm.volume_qos_v2_client"},{"line_number":197,"context_line":"            cls.admin_volume_services_client \u003d \\"},{"line_number":198,"context_line":"                cls.os_adm.volume_services_v2_client"}],"source_content_type":"text/x-python","patch_set":21,"id":"7aa08908_1d3bd1c9","line":195,"in_reply_to":"7aa08908_3c935a02","updated":"2016-06-16 14:22:10.000000000","message":"v3 has started the same as v2, but supports microversions, so will eventually diverge.  I\u0027m not sure the test patch is the appropriate place to discuss if it was a smart move or not, and I wasn\u0027t heavily involved in the decision.","commit_id":"74a873c1ddeedee9975fa5eeb7cca4d2eed298c6"}],"tempest/api/volume/v3/admin/test_user_messages.py":[{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"dcfed5a83438c08aa7b7f67e768cf65190211925","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from tempest import test"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"class UserMessagesTest(base.VolumesV3AdminTest):"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    def _delete_volume(self, volume_id):"},{"line_number":24,"context_line":"        self.volumes_client.delete_volume(volume_id)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a061dce_5ea0cf90","line":21,"updated":"2016-04-04 14:50:00.000000000","message":"This entire file should be removed if this is just to test /v3 endpoints, and added in a separate patch for Tempest tests of new User Messages.","commit_id":"504b1e36011ff6e22f527fa3d8a000fd17ac5e4e"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"e205d163224536c9698eae0927d07270dcc259e4","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2016 Andrew Kerr"},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":21,"id":"7aa08908_7c9de209","line":1,"updated":"2016-06-15 20:05:15.000000000","message":"Heh, netapp doesn\u0027t assert ownership of your work? How unusual for a tech company in the US.","commit_id":"74a873c1ddeedee9975fa5eeb7cca4d2eed298c6"},{"author":{"_account_id":9366,"name":"Andrew Kerr","email":"andrew.kerr@netapp.com","username":"andrew-kerr"},"change_message_id":"cbcb80ae7aa38c2747ac1ca6662de6813ec21ff8","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2016 Andrew Kerr"},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":21,"id":"7aa08908_1d90f195","line":1,"in_reply_to":"7aa08908_7c9de209","updated":"2016-06-16 14:22:10.000000000","message":"Ya, there\u0027s a long story behind this with our lawyers, but NetApp specifically does NOT want to own our opensource work and asks us to claim personal copyright.","commit_id":"74a873c1ddeedee9975fa5eeb7cca4d2eed298c6"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"e205d163224536c9698eae0927d07270dcc259e4","unresolved":false,"context_lines":[{"line_number":31,"context_line":"    def _create_user_message(self):"},{"line_number":32,"context_line":"        \"\"\"Trigger a \u0027no valid host\u0027 situation to generate a message.\"\"\""},{"line_number":33,"context_line":"        extra_specs \u003d {\u0027storage_protocol\u0027: \u0027foo\u0027,"},{"line_number":34,"context_line":"                       \u0027vendor_name\u0027: \u0027bar\u0027}"},{"line_number":35,"context_line":"        vol_type_name \u003d data_utils.rand_name(\"volume-type\")"},{"line_number":36,"context_line":"        bogus_type \u003d self.volume_types_client.create_volume_type("},{"line_number":37,"context_line":"            name\u003dvol_type_name,"}],"source_content_type":"text/x-python","patch_set":21,"id":"7aa08908_5ca2a64c","line":34,"updated":"2016-06-15 20:05:15.000000000","message":"These seem weird to me, this won\u0027t create an issue when running against a real cloud? Why not use:\n\nhttps://github.com/openstack/tempest/blob/master/tempest/config.py#L673-L678\n\nThis seems like something you\u0027d use in a unit test, not something you\u0027d use against a running cloud","commit_id":"74a873c1ddeedee9975fa5eeb7cca4d2eed298c6"},{"author":{"_account_id":9366,"name":"Andrew Kerr","email":"andrew.kerr@netapp.com","username":"andrew-kerr"},"change_message_id":"cbcb80ae7aa38c2747ac1ca6662de6813ec21ff8","unresolved":false,"context_lines":[{"line_number":31,"context_line":"    def _create_user_message(self):"},{"line_number":32,"context_line":"        \"\"\"Trigger a \u0027no valid host\u0027 situation to generate a message.\"\"\""},{"line_number":33,"context_line":"        extra_specs \u003d {\u0027storage_protocol\u0027: \u0027foo\u0027,"},{"line_number":34,"context_line":"                       \u0027vendor_name\u0027: \u0027bar\u0027}"},{"line_number":35,"context_line":"        vol_type_name \u003d data_utils.rand_name(\"volume-type\")"},{"line_number":36,"context_line":"        bogus_type \u003d self.volume_types_client.create_volume_type("},{"line_number":37,"context_line":"            name\u003dvol_type_name,"}],"source_content_type":"text/x-python","patch_set":21,"id":"7aa08908_7d75b530","line":34,"in_reply_to":"7aa08908_5ca2a64c","updated":"2016-06-16 14:22:10.000000000","message":"I don\u0027t want to use the tempest.conf settings because I\u0027m trying to create an error condition here so that a user message will be generated.  I don\u0027t see how this would cause a problem in a running cloud since there is no vender \"bar\" or protocol \"foo.\"  The end goal here is a failure to schedule a volume.","commit_id":"74a873c1ddeedee9975fa5eeb7cca4d2eed298c6"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"e205d163224536c9698eae0927d07270dcc259e4","unresolved":false,"context_lines":[{"line_number":60,"context_line":"    @test.idempotent_id(\u002750f29e6e-f363-42e1-8ad1-f67ae7fd4d5a\u0027)"},{"line_number":61,"context_line":"    def test_list_messages(self):"},{"line_number":62,"context_line":"        body \u003d self.messages_client.list_messages()[\u0027messages\u0027]"},{"line_number":63,"context_line":"        self.assertIsInstance(body, list)"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    @test.idempotent_id(\u002755a4a61e-c7b2-4ba0-a05d-b914bdef3070\u0027)"},{"line_number":66,"context_line":"    def test_show_message(self):"}],"source_content_type":"text/x-python","patch_set":21,"id":"7aa08908_bc874ab5","line":63,"updated":"2016-06-15 20:05:15.000000000","message":"So while this is fine, you don\u0027t want to create a message to see that it\u0027s in the list and that the expected properties are included as part of the response. You can always add that as a separate test and rename this test_empty_list_messages()","commit_id":"74a873c1ddeedee9975fa5eeb7cca4d2eed298c6"},{"author":{"_account_id":9366,"name":"Andrew Kerr","email":"andrew.kerr@netapp.com","username":"andrew-kerr"},"change_message_id":"cbcb80ae7aa38c2747ac1ca6662de6813ec21ff8","unresolved":false,"context_lines":[{"line_number":60,"context_line":"    @test.idempotent_id(\u002750f29e6e-f363-42e1-8ad1-f67ae7fd4d5a\u0027)"},{"line_number":61,"context_line":"    def test_list_messages(self):"},{"line_number":62,"context_line":"        body \u003d self.messages_client.list_messages()[\u0027messages\u0027]"},{"line_number":63,"context_line":"        self.assertIsInstance(body, list)"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    @test.idempotent_id(\u002755a4a61e-c7b2-4ba0-a05d-b914bdef3070\u0027)"},{"line_number":66,"context_line":"    def test_show_message(self):"}],"source_content_type":"text/x-python","patch_set":21,"id":"7aa08908_1dcbd14b","line":63,"in_reply_to":"7aa08908_bc874ab5","updated":"2016-06-16 14:22:10.000000000","message":"will do","commit_id":"74a873c1ddeedee9975fa5eeb7cca4d2eed298c6"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"1ee4b5bc243d98069ac637300b37eb9df718476e","unresolved":false,"context_lines":[{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def _create_user_message(self):"},{"line_number":44,"context_line":"        \"\"\"Trigger a \u0027no valid host\u0027 situation to generate a message.\"\"\""},{"line_number":45,"context_line":"        extra_specs \u003d {\u0027storage_protocol\u0027: \u0027foo\u0027,"},{"line_number":46,"context_line":"                       \u0027vendor_name\u0027: \u0027bar\u0027}"},{"line_number":47,"context_line":"        vol_type_name \u003d data_utils.rand_name(\"volume-type\")"},{"line_number":48,"context_line":"        bogus_type \u003d self.admin_volume_types_client.create_volume_type("}],"source_content_type":"text/x-python","patch_set":22,"id":"7aa08908_5baefee7","line":45,"updated":"2016-06-16 15:30:27.000000000","message":"Based on your previous comment, I\u0027m wondering if this should be a call to random name instead of foo bar.","commit_id":"2e2c6a232acdef885813255b8033534defb56299"}],"tempest/api/volume/v3/base.py":[{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"a541dc4d702db5a7747a20375062f0c7eb6dc098","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    @classmethod"},{"line_number":36,"context_line":"    def setup_clients(cls):"},{"line_number":37,"context_line":"        super(VolumesV3AdminTest, cls).setup_clients()"},{"line_number":38,"context_line":"        cls.volume_qos_client \u003d cls.os_adm.volume_qos_v2_client"},{"line_number":39,"context_line":"        cls.admin_volume_services_client \u003d cls.os_adm.volume_services_v2_client"},{"line_number":40,"context_line":"        cls.volume_types_client \u003d cls.os_adm.volume_types_v2_client"}],"source_content_type":"text/x-python","patch_set":14,"id":"dab17558_0863c91b","line":37,"updated":"2016-05-06 09:02:52.000000000","message":"Please only add the clients you really need here. Otherwise you have namespace pollution and it make the code look more complicated than it should be.","commit_id":"2196705da26988b87af2488f3ae56c3fcb79a16d"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"3f4e375adf1ca9b109c01a13b76d112b0df5b6cc","unresolved":false,"context_lines":[{"line_number":52,"context_line":"            self.request_microversion))"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"class VolumesV3AdminTest(base.BaseVolumeAdminTest, VolumesV3Test):"},{"line_number":56,"context_line":"    \"\"\"Base test case class for all v3 Volume Admin API tests.\"\"\""},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":19,"id":"dab17558_de9d2d67","line":55,"updated":"2016-05-17 14:28:51.000000000","message":"Do we usually use multiheritance in Tempest ? Could you do without ? (I am not going to -1 because of this, just a thought)","commit_id":"9c24b9a51284398c2be8c274a7f92d42f74c44bc"},{"author":{"_account_id":9366,"name":"Andrew Kerr","email":"andrew.kerr@netapp.com","username":"andrew-kerr"},"change_message_id":"100c8bbdbf87a443f23a7659781f0b02feb9163e","unresolved":false,"context_lines":[{"line_number":52,"context_line":"            self.request_microversion))"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"class VolumesV3AdminTest(base.BaseVolumeAdminTest, VolumesV3Test):"},{"line_number":56,"context_line":"    \"\"\"Base test case class for all v3 Volume Admin API tests.\"\"\""},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":19,"id":"dab17558_0ce81db2","line":55,"in_reply_to":"dab17558_de9d2d67","updated":"2016-05-17 19:22:24.000000000","message":"I originally had it without (see previous patchset) but it resulted in a lot of duplicated code.  I thought this was the cleaner approach and since it\u0027s already needed to do the microversion stuff I thought that set the precedent :)","commit_id":"9c24b9a51284398c2be8c274a7f92d42f74c44bc"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"e205d163224536c9698eae0927d07270dcc259e4","unresolved":false,"context_lines":[{"line_number":52,"context_line":"            self.request_microversion))"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"class VolumesV3AdminTest(base.BaseVolumeAdminTest, VolumesV3Test):"},{"line_number":56,"context_line":"    \"\"\"Base test case class for all v3 Volume Admin API tests.\"\"\""},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":21,"id":"7aa08908_dcf7b657","line":55,"updated":"2016-06-15 20:05:15.000000000","message":"Normally we\u0027d do this as a single inheritance off of VolumesV3Test and add the additional admin credentials setup individually here. The problem with doing multiple inheritance like this is tracing through the code on failure (which is what tests do) you don\u0027t know where something is coming from and makes it harder to debug things.","commit_id":"74a873c1ddeedee9975fa5eeb7cca4d2eed298c6"}],"tempest/clients.py":[{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"dcfed5a83438c08aa7b7f67e768cf65190211925","unresolved":false,"context_lines":[{"line_number":178,"context_line":"    SnapshotsClient as SnapshotsV2Client"},{"line_number":179,"context_line":"from tempest.services.volume.v2.json.volumes_client import \\"},{"line_number":180,"context_line":"    VolumesClient as VolumesV2Client"},{"line_number":181,"context_line":"from tempest.services.volume.v3.json.messages_client import MessagesClient"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"CONF \u003d config.CONF"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a061dce_3e351b46","line":181,"updated":"2016-04-04 14:50:00.000000000","message":"This is specific to testing User Messages?","commit_id":"504b1e36011ff6e22f527fa3d8a000fd17ac5e4e"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"dcfed5a83438c08aa7b7f67e768cf65190211925","unresolved":false,"context_lines":[{"line_number":583,"context_line":"        self.volumes_v2_client \u003d VolumesV2Client("},{"line_number":584,"context_line":"            self.auth_provider, default_volume_size\u003dCONF.volume.volume_size,"},{"line_number":585,"context_line":"            **params)"},{"line_number":586,"context_line":"        self.volume_messages_client \u003d MessagesClient(self.auth_provider,"},{"line_number":587,"context_line":"                                                     **params)"},{"line_number":588,"context_line":"        self.volume_types_client \u003d VolumeTypesClient(self.auth_provider,"},{"line_number":589,"context_line":"                                                     **params)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a061dce_5e3c4f2f","line":586,"updated":"2016-04-04 14:50:00.000000000","message":"Specific to User Messages?","commit_id":"504b1e36011ff6e22f527fa3d8a000fd17ac5e4e"}],"tempest/services/volume/base/base_messages_client.py":[{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"dcfed5a83438c08aa7b7f67e768cf65190211925","unresolved":false,"context_lines":[{"line_number":19,"context_line":"from tempest.lib import exceptions as lib_exc"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"class BaseMessagesClient(rest_client.RestClient):"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    create_resp \u003d 200"},{"line_number":25,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9a061dce_7e267317","line":22,"updated":"2016-04-04 14:50:00.000000000","message":"This is only for User Messages?","commit_id":"504b1e36011ff6e22f527fa3d8a000fd17ac5e4e"}],"tempest/services/volume/v3/json/messages_client.py":[{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"e205d163224536c9698eae0927d07270dcc259e4","unresolved":false,"context_lines":[{"line_number":16,"context_line":"from tempest.services.volume.base import base_messages_client"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"class MessagesClient(base_messages_client.BaseMessagesClient):"},{"line_number":20,"context_line":"    \"\"\"Client class to send user messages V3 API requests.\"\"\""},{"line_number":21,"context_line":"    api_version \u003d \u0027v3\u0027"}],"source_content_type":"text/x-python","patch_set":21,"id":"7aa08908_1c981e1b","line":19,"updated":"2016-06-15 20:05:15.000000000","message":"Why is this a subclass? There is only ever going to be one v3 messages client. If we add microversions we can make that a subclass. A microversion will only ever change a single aspect of the api though so they\u0027ll be minimal changes.","commit_id":"74a873c1ddeedee9975fa5eeb7cca4d2eed298c6"},{"author":{"_account_id":9366,"name":"Andrew Kerr","email":"andrew.kerr@netapp.com","username":"andrew-kerr"},"change_message_id":"cbcb80ae7aa38c2747ac1ca6662de6813ec21ff8","unresolved":false,"context_lines":[{"line_number":16,"context_line":"from tempest.services.volume.base import base_messages_client"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"class MessagesClient(base_messages_client.BaseMessagesClient):"},{"line_number":20,"context_line":"    \"\"\"Client class to send user messages V3 API requests.\"\"\""},{"line_number":21,"context_line":"    api_version \u003d \u0027v3\u0027"}],"source_content_type":"text/x-python","patch_set":21,"id":"7aa08908_bdc55d0b","line":19,"in_reply_to":"7aa08908_1c981e1b","updated":"2016-06-16 14:22:10.000000000","message":"I was just following the established pattern. I will squash them into a single class","commit_id":"74a873c1ddeedee9975fa5eeb7cca4d2eed298c6"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"1ee4b5bc243d98069ac637300b37eb9df718476e","unresolved":false,"context_lines":[{"line_number":21,"context_line":"VOLUME_MICROVERSION \u003d None"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class MessagesClient(rest_client.RestClient):"},{"line_number":25,"context_line":"    \"\"\"Client class to send user messages V3 API requests.\"\"\""},{"line_number":26,"context_line":"    api_version \u003d \u0027v3\u0027"},{"line_number":27,"context_line":"    api_microversion_header_name \u003d \u0027Openstack-Api-Version\u0027"}],"source_content_type":"text/x-python","patch_set":22,"id":"7aa08908_89965fed","line":24,"updated":"2016-06-16 15:30:27.000000000","message":"We should have a base v3 client that does the basic microversion setup and sets the appropriate versions. Something like:\n\nhttps://github.com/openstack/tempest/blob/master/tempest/lib/services/compute/base_compute_client.py\n\nignore the schema stuff at the bottom for now. But extract the common microversion operations to a parent class that all microversioned clients can use. You got the class split looking good for the test class structure, we should have something similar on the client side too.","commit_id":"2e2c6a232acdef885813255b8033534defb56299"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"9d37a7ab0780ed0ed68ad86b6ff9f01695599a94","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"class MessagesClient(base_v3_client.BaseV3Client):"},{"line_number":24,"context_line":"    \"\"\"Client class to send user messages API requests.\"\"\""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    def show_message(self, message_id):"},{"line_number":27,"context_line":"        \"\"\"Show details for a single message.\"\"\""}],"source_content_type":"text/x-python","patch_set":23,"id":"7aa08908_561de80d","line":24,"range":{"start_line":24,"start_character":4,"end_line":24,"end_character":58},"updated":"2016-06-17 21:34:58.000000000","message":"It would be nice to have a link somewhere to the API implemented by this service client.","commit_id":"fcb0b68e7b9a42636faa5b7698f95d8e4d6a003b"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"9d37a7ab0780ed0ed68ad86b6ff9f01695599a94","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        self.expected_success(204, resp.status)"},{"line_number":47,"context_line":"        return rest_client.ResponseBody(resp, body)"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    def is_resource_deleted(self, id):"},{"line_number":50,"context_line":"        try:"},{"line_number":51,"context_line":"            self.show_message(id)"},{"line_number":52,"context_line":"        except lib_exc.NotFound:"},{"line_number":53,"context_line":"            return True"},{"line_number":54,"context_line":"        return False"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    @property"},{"line_number":57,"context_line":"    def resource_type(self):"}],"source_content_type":"text/x-python","patch_set":23,"id":"7aa08908_56920858","line":54,"range":{"start_line":49,"start_character":0,"end_line":54,"end_character":20},"updated":"2016-06-17 21:34:58.000000000","message":"This could be done via the global is_resource_delete.\nOr there is also now a global helper call_and_ignore_notfound_exc in test_utils that can be called to safely delete a resource,","commit_id":"fcb0b68e7b9a42636faa5b7698f95d8e4d6a003b"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"9d37a7ab0780ed0ed68ad86b6ff9f01695599a94","unresolved":false,"context_lines":[{"line_number":53,"context_line":"            return True"},{"line_number":54,"context_line":"        return False"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    @property"},{"line_number":57,"context_line":"    def resource_type(self):"},{"line_number":58,"context_line":"        \"\"\"Returns the primary type of resource this client works with.\"\"\""},{"line_number":59,"context_line":"        return \u0027message\u0027"}],"source_content_type":"text/x-python","patch_set":23,"id":"7aa08908_f604d4c6","line":59,"range":{"start_line":56,"start_character":0,"end_line":59,"end_character":24},"updated":"2016-06-17 21:34:58.000000000","message":"I\u0027m not too sure what this is for. It is defined in some of the volume clients, but used only for few of cases for a is_resource_delete which takes the resource name.","commit_id":"fcb0b68e7b9a42636faa5b7698f95d8e4d6a003b"}]}
