)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"0515a2ffea27ca0d0b6f89364ed2ef016ce7245a","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Adds the clients and tests for CINDER QoS V1 \u0026 V2 APIs"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch adds the JSON clients and tests for following"},{"line_number":10,"context_line":"CINDER QoS-specs V1 \u0026 V2 APIs :"},{"line_number":11,"context_line":"1. qos-create"},{"line_number":12,"context_line":"2. qos-delete"},{"line_number":13,"context_line":"3. qos-list"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":22,"id":"baada198_0b1a9b17","line":10,"updated":"2014-08-11 07:12:24.000000000","message":"are these new features? is so, please add reference to blueprint","commit_id":"8a16a26baf6668f5056afbd5c2c2eba95bb35912"}],"tempest/api/volume/admin/test_qos.py":[{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"1ee35a49a2b31653b4940972df9d0cf67861561a","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    @classmethod"},{"line_number":26,"context_line":"    #@test.safe_setup"},{"line_number":27,"context_line":"    def setUpClass(cls):"},{"line_number":28,"context_line":"        super(QosSpecsTestJSON, cls).setUpClass()"},{"line_number":29,"context_line":"        # Create admin qos client"},{"line_number":30,"context_line":"        cls.qos_specs \u003d []"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAXX%2F%2FwaY%3D","line":27,"updated":"2014-04-28 08:00:13.000000000","message":"I think you can uncomment this.","commit_id":"c8870ff835a1de00f6f7401864238ee5209a93dd"},{"author":{"_account_id":10966,"name":"Abhijeet Jain","email":"abhijeetjpjain@gmail.com","username":"Abhijeet.Jain"},"change_message_id":"8a88053973d4eaf6b0932be0eb07b3537cee49fc","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    @classmethod"},{"line_number":26,"context_line":"    #@test.safe_setup"},{"line_number":27,"context_line":"    def setUpClass(cls):"},{"line_number":28,"context_line":"        super(QosSpecsTestJSON, cls).setUpClass()"},{"line_number":29,"context_line":"        # Create admin qos client"},{"line_number":30,"context_line":"        cls.qos_specs \u003d []"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAXX%2F%2FwTA%3D","line":27,"in_reply_to":"AAAAXX%2F%2FwaY%3D","updated":"2014-04-28 08:18:23.000000000","message":"Done","commit_id":"c8870ff835a1de00f6f7401864238ee5209a93dd"},{"author":{"_account_id":8824,"name":"Sergey Murashov","email":"smurashov@mirantis.com","username":"SergeyMurashov"},"change_message_id":"3f8137118065fadad1348f8528dbce21d420d205","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        cls.qos_name \u003d utils.rand_name(cls.__name__ + \u0027-QoS\u0027)"},{"line_number":36,"context_line":"        cls.qos_consumer \u003d \u0027front-end\u0027"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"        resp, cls.created_qos \u003d cls.qos_client.create_qos(cls.qos_name,"},{"line_number":39,"context_line":"                                                          cls.qos_consumer,"},{"line_number":40,"context_line":"                                                          a\u003d\u00273\u0027)"},{"line_number":41,"context_line":"        cls.qos_specs.append(cls.created_qos[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":2,"id":"bad4c104_743bb0eb","line":38,"updated":"2014-04-29 06:57:55.000000000","message":"unused variable \"resp\"","commit_id":"46c173a663ca6b1abc2ff03b2a1098231bee7f57"},{"author":{"_account_id":10966,"name":"Abhijeet Jain","email":"abhijeetjpjain@gmail.com","username":"Abhijeet.Jain"},"change_message_id":"dcee3bcba65be99777864d11c97c9a12a98f889a","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        cls.qos_name \u003d utils.rand_name(cls.__name__ + \u0027-QoS\u0027)"},{"line_number":36,"context_line":"        cls.qos_consumer \u003d \u0027front-end\u0027"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"        resp, cls.created_qos \u003d cls.qos_client.create_qos(cls.qos_name,"},{"line_number":39,"context_line":"                                                          cls.qos_consumer,"},{"line_number":40,"context_line":"                                                          a\u003d\u00273\u0027)"},{"line_number":41,"context_line":"        cls.qos_specs.append(cls.created_qos[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":2,"id":"9ad9bd40_59e263d6","line":38,"in_reply_to":"bad4c104_743bb0eb","updated":"2014-04-30 04:54:51.000000000","message":"Done","commit_id":"46c173a663ca6b1abc2ff03b2a1098231bee7f57"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"63137c8015a9347cb280f6d0e487f3f766937a3a","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        self.assertEqual(consumer, body[\u0027consumer\u0027])"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"        resp, _ \u003d self.qos_client.delete_qos(body[\u0027id\u0027])"},{"line_number":62,"context_line":"        self.assertEqual(202, resp.status)"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    @test.attr(type\u003d\u0027gate\u0027)"},{"line_number":65,"context_line":"    def test_create_delete_qos_with_front_end_consumer(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAXX%2F%2FwIk%3D","line":62,"updated":"2014-04-28 08:40:14.000000000","message":"I do not like when we leave the wait \u0026 verification of deletion as its response code is 202 :).\nUse base class (rest_client)-\u003ewait_for_resource_deletion() and override the is_resource_deleted() method in qos_client.py (on the same line as volume_client does.)","commit_id":"46c173a663ca6b1abc2ff03b2a1098231bee7f57"},{"author":{"_account_id":10966,"name":"Abhijeet Jain","email":"abhijeetjpjain@gmail.com","username":"Abhijeet.Jain"},"change_message_id":"4ffe725daf1d444297cf1230575f95abc85dc811","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        self.assertEqual(consumer, body[\u0027consumer\u0027])"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"        resp, _ \u003d self.qos_client.delete_qos(body[\u0027id\u0027])"},{"line_number":62,"context_line":"        self.assertEqual(202, resp.status)"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    @test.attr(type\u003d\u0027gate\u0027)"},{"line_number":65,"context_line":"    def test_create_delete_qos_with_front_end_consumer(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAXX%2F%2Fvbg%3D","line":62,"in_reply_to":"AAAAXX%2F%2FwIk%3D","updated":"2014-04-28 10:29:51.000000000","message":"Yup..That seems good. I will put that.","commit_id":"46c173a663ca6b1abc2ff03b2a1098231bee7f57"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"63137c8015a9347cb280f6d0e487f3f766937a3a","unresolved":false,"context_lines":[{"line_number":114,"context_line":"        # test the deletion of a specs key from qos-specs"},{"line_number":115,"context_line":"        keys \u003d [\u0027iops_bytes\u0027]"},{"line_number":116,"context_line":"        resp, _ \u003d self.qos_client.unset_qos_key(self.created_qos[\u0027id\u0027], keys)"},{"line_number":117,"context_line":"        self.assertEqual(202, resp.status)"},{"line_number":118,"context_line":"        resp, body \u003d self.qos_client.get_qos(self.created_qos[\u0027id\u0027])"},{"line_number":119,"context_line":"        self.assertEqual(200, resp.status)"},{"line_number":120,"context_line":"        self.assertNotIn(args, body[\u0027specs\u0027])"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAXX%2F%2FwIg%3D","line":117,"updated":"2014-04-28 08:40:14.000000000","message":"same as above","commit_id":"46c173a663ca6b1abc2ff03b2a1098231bee7f57"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"7743cc2b10e38bba9b45e846bca536f6a9966687","unresolved":false,"context_lines":[{"line_number":114,"context_line":"        # test the deletion of a specs key from qos-specs"},{"line_number":115,"context_line":"        keys \u003d [\u0027iops_bytes\u0027]"},{"line_number":116,"context_line":"        resp, _ \u003d self.qos_client.unset_qos_key(self.created_qos[\u0027id\u0027], keys)"},{"line_number":117,"context_line":"        self.assertEqual(202, resp.status)"},{"line_number":118,"context_line":"        resp, body \u003d self.qos_client.get_qos(self.created_qos[\u0027id\u0027])"},{"line_number":119,"context_line":"        self.assertEqual(200, resp.status)"},{"line_number":120,"context_line":"        self.assertNotIn(args, body[\u0027specs\u0027])"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAXX%2F%2Fu%2FI%3D","line":117,"in_reply_to":"AAAAXX%2F%2Fvbk%3D","updated":"2014-04-28 11:34:23.000000000","message":"resource deletion is not needed here. Verification part looks fine but wait is needed here as response code is 202.","commit_id":"46c173a663ca6b1abc2ff03b2a1098231bee7f57"},{"author":{"_account_id":10966,"name":"Abhijeet Jain","email":"abhijeetjpjain@gmail.com","username":"Abhijeet.Jain"},"change_message_id":"4ffe725daf1d444297cf1230575f95abc85dc811","unresolved":false,"context_lines":[{"line_number":114,"context_line":"        # test the deletion of a specs key from qos-specs"},{"line_number":115,"context_line":"        keys \u003d [\u0027iops_bytes\u0027]"},{"line_number":116,"context_line":"        resp, _ \u003d self.qos_client.unset_qos_key(self.created_qos[\u0027id\u0027], keys)"},{"line_number":117,"context_line":"        self.assertEqual(202, resp.status)"},{"line_number":118,"context_line":"        resp, body \u003d self.qos_client.get_qos(self.created_qos[\u0027id\u0027])"},{"line_number":119,"context_line":"        self.assertEqual(200, resp.status)"},{"line_number":120,"context_line":"        self.assertNotIn(args, body[\u0027specs\u0027])"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAXX%2F%2Fvbk%3D","line":117,"in_reply_to":"AAAAXX%2F%2FwIg%3D","updated":"2014-04-28 10:29:51.000000000","message":"it is used to unset some key value from qos-specs.\nDo u really think , i need to wait and check for resource deletion.?","commit_id":"46c173a663ca6b1abc2ff03b2a1098231bee7f57"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"63137c8015a9347cb280f6d0e487f3f766937a3a","unresolved":false,"context_lines":[{"line_number":136,"context_line":"    def _test_get_association_qos(self):"},{"line_number":137,"context_line":"        resp, body \u003d self.qos_client.get_association_qos("},{"line_number":138,"context_line":"            self.created_qos[\u0027id\u0027])"},{"line_number":139,"context_line":"        self.assertEqual(200, resp.status)"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"        associations \u003d []"},{"line_number":142,"context_line":"        for association in body:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAXX%2F%2FwHY%3D","line":139,"updated":"2014-04-28 08:40:14.000000000","message":"as you are using this function in dissociate test also, so response code can be 404 as expected.","commit_id":"46c173a663ca6b1abc2ff03b2a1098231bee7f57"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"7743cc2b10e38bba9b45e846bca536f6a9966687","unresolved":false,"context_lines":[{"line_number":136,"context_line":"    def _test_get_association_qos(self):"},{"line_number":137,"context_line":"        resp, body \u003d self.qos_client.get_association_qos("},{"line_number":138,"context_line":"            self.created_qos[\u0027id\u0027])"},{"line_number":139,"context_line":"        self.assertEqual(200, resp.status)"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"        associations \u003d []"},{"line_number":142,"context_line":"        for association in body:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAXX%2F%2FvAQ%3D","line":139,"in_reply_to":"AAAAXX%2F%2Fvjc%3D","updated":"2014-04-28 11:34:23.000000000","message":"Ok. got it.","commit_id":"46c173a663ca6b1abc2ff03b2a1098231bee7f57"},{"author":{"_account_id":10966,"name":"Abhijeet Jain","email":"abhijeetjpjain@gmail.com","username":"Abhijeet.Jain"},"change_message_id":"4ffe725daf1d444297cf1230575f95abc85dc811","unresolved":false,"context_lines":[{"line_number":136,"context_line":"    def _test_get_association_qos(self):"},{"line_number":137,"context_line":"        resp, body \u003d self.qos_client.get_association_qos("},{"line_number":138,"context_line":"            self.created_qos[\u0027id\u0027])"},{"line_number":139,"context_line":"        self.assertEqual(200, resp.status)"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"        associations \u003d []"},{"line_number":142,"context_line":"        for association in body:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAXX%2F%2Fvjc%3D","line":139,"in_reply_to":"AAAAXX%2F%2FwHY%3D","updated":"2014-04-28 10:29:51.000000000","message":"It doesn\u0027t return 404 NotFound.\nThis function returns list of all associations of the specified qos.\nSo, as long QoS exist, it will never return 404 NotFound.","commit_id":"46c173a663ca6b1abc2ff03b2a1098231bee7f57"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"63137c8015a9347cb280f6d0e487f3f766937a3a","unresolved":false,"context_lines":[{"line_number":173,"context_line":"        # disassociate a volume-type with qos-specs"},{"line_number":174,"context_line":"        resp, _ \u003d self.qos_client.disassociate_qos(self.created_qos[\u0027id\u0027],"},{"line_number":175,"context_line":"                                                   vol_type1[\u0027id\u0027])"},{"line_number":176,"context_line":"        self.assertEqual(202, resp.status)"},{"line_number":177,"context_line":"        associations \u003d self._test_get_association_qos()"},{"line_number":178,"context_line":"        self.assertNotIn(vol_type1[\u0027id\u0027], associations)"},{"line_number":179,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAXX%2F%2FwIQ%3D","line":176,"updated":"2014-04-28 08:40:14.000000000","message":"wait in needed here as mentioned above. here get can return not found also as expected.","commit_id":"46c173a663ca6b1abc2ff03b2a1098231bee7f57"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"7743cc2b10e38bba9b45e846bca536f6a9966687","unresolved":false,"context_lines":[{"line_number":173,"context_line":"        # disassociate a volume-type with qos-specs"},{"line_number":174,"context_line":"        resp, _ \u003d self.qos_client.disassociate_qos(self.created_qos[\u0027id\u0027],"},{"line_number":175,"context_line":"                                                   vol_type1[\u0027id\u0027])"},{"line_number":176,"context_line":"        self.assertEqual(202, resp.status)"},{"line_number":177,"context_line":"        associations \u003d self._test_get_association_qos()"},{"line_number":178,"context_line":"        self.assertNotIn(vol_type1[\u0027id\u0027], associations)"},{"line_number":179,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAXX%2F%2Fu%2F8%3D","line":176,"in_reply_to":"AAAAXX%2F%2FvjA%3D","updated":"2014-04-28 11:34:23.000000000","message":"But i think wait is needed here as response code is 202. Verification part looks fine.","commit_id":"46c173a663ca6b1abc2ff03b2a1098231bee7f57"},{"author":{"_account_id":10966,"name":"Abhijeet Jain","email":"abhijeetjpjain@gmail.com","username":"Abhijeet.Jain"},"change_message_id":"4ffe725daf1d444297cf1230575f95abc85dc811","unresolved":false,"context_lines":[{"line_number":173,"context_line":"        # disassociate a volume-type with qos-specs"},{"line_number":174,"context_line":"        resp, _ \u003d self.qos_client.disassociate_qos(self.created_qos[\u0027id\u0027],"},{"line_number":175,"context_line":"                                                   vol_type1[\u0027id\u0027])"},{"line_number":176,"context_line":"        self.assertEqual(202, resp.status)"},{"line_number":177,"context_line":"        associations \u003d self._test_get_association_qos()"},{"line_number":178,"context_line":"        self.assertNotIn(vol_type1[\u0027id\u0027], associations)"},{"line_number":179,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAXX%2F%2FvjA%3D","line":176,"in_reply_to":"AAAAXX%2F%2FwIQ%3D","updated":"2014-04-28 10:29:51.000000000","message":"as stated above, get association will never return 404 NotFound as its not a one to one mapping between qos-spec and volume-type.\nfor verification, i am checking that disassociated volume-type no longer associated in next line.","commit_id":"46c173a663ca6b1abc2ff03b2a1098231bee7f57"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"63137c8015a9347cb280f6d0e487f3f766937a3a","unresolved":false,"context_lines":[{"line_number":180,"context_line":"        # disassociate all volume-types from qos-specs"},{"line_number":181,"context_line":"        resp, _ \u003d self.qos_client.disassociate_all_qos(self.created_qos[\u0027id\u0027])"},{"line_number":182,"context_line":"        self.assertEqual(202, resp.status)"},{"line_number":183,"context_line":"        associations \u003d self._test_get_association_qos()"},{"line_number":184,"context_line":"        self.assertEmpty(associations)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAXX%2F%2FwH8%3D","line":183,"updated":"2014-04-28 08:40:14.000000000","message":"same here. get should be not found here?","commit_id":"46c173a663ca6b1abc2ff03b2a1098231bee7f57"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"7743cc2b10e38bba9b45e846bca536f6a9966687","unresolved":false,"context_lines":[{"line_number":180,"context_line":"        # disassociate all volume-types from qos-specs"},{"line_number":181,"context_line":"        resp, _ \u003d self.qos_client.disassociate_all_qos(self.created_qos[\u0027id\u0027])"},{"line_number":182,"context_line":"        self.assertEqual(202, resp.status)"},{"line_number":183,"context_line":"        associations \u003d self._test_get_association_qos()"},{"line_number":184,"context_line":"        self.assertEmpty(associations)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAXX%2F%2Fu%2F4%3D","line":183,"in_reply_to":"AAAAXX%2F%2Fvi4%3D","updated":"2014-04-28 11:34:23.000000000","message":"same as above","commit_id":"46c173a663ca6b1abc2ff03b2a1098231bee7f57"},{"author":{"_account_id":10966,"name":"Abhijeet Jain","email":"abhijeetjpjain@gmail.com","username":"Abhijeet.Jain"},"change_message_id":"4ffe725daf1d444297cf1230575f95abc85dc811","unresolved":false,"context_lines":[{"line_number":180,"context_line":"        # disassociate all volume-types from qos-specs"},{"line_number":181,"context_line":"        resp, _ \u003d self.qos_client.disassociate_all_qos(self.created_qos[\u0027id\u0027])"},{"line_number":182,"context_line":"        self.assertEqual(202, resp.status)"},{"line_number":183,"context_line":"        associations \u003d self._test_get_association_qos()"},{"line_number":184,"context_line":"        self.assertEmpty(associations)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAXX%2F%2Fvi4%3D","line":183,"in_reply_to":"AAAAXX%2F%2FwH8%3D","updated":"2014-04-28 10:29:51.000000000","message":"same as above.","commit_id":"46c173a663ca6b1abc2ff03b2a1098231bee7f57"},{"author":{"_account_id":7139,"name":"Zhi Kun Liu","username":"zhikunliu","inactive":true},"change_message_id":"65578e144ba17db5f1eab4c96303df4f1c6cb223","unresolved":false,"context_lines":[{"line_number":38,"context_line":"                                                       a\u003d\u00273\u0027)"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    @classmethod"},{"line_number":41,"context_line":"    def tearDownClass(cls):"},{"line_number":42,"context_line":"        super(QosSpecsTestJSON, cls).tearDownClass()"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def _create_delete_test_qos_with_given_consumer(self, consumer):"}],"source_content_type":"text/x-python","patch_set":5,"id":"9ad9bd40_eb7db3e8","line":41,"updated":"2014-05-05 07:53:23.000000000","message":"we could get rid of tearDownClass if it only calls super tearDownClass.","commit_id":"8c11b41364e4ed6aacef963108957e793fcdc48a"},{"author":{"_account_id":10966,"name":"Abhijeet Jain","email":"abhijeetjpjain@gmail.com","username":"Abhijeet.Jain"},"change_message_id":"a32f6b0a72c227374ecb7d2ccbc2d301354400be","unresolved":false,"context_lines":[{"line_number":38,"context_line":"                                                       a\u003d\u00273\u0027)"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    @classmethod"},{"line_number":41,"context_line":"    def tearDownClass(cls):"},{"line_number":42,"context_line":"        super(QosSpecsTestJSON, cls).tearDownClass()"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def _create_delete_test_qos_with_given_consumer(self, consumer):"}],"source_content_type":"text/x-python","patch_set":5,"id":"9ad9bd40_75a23e9a","line":41,"in_reply_to":"9ad9bd40_eb7db3e8","updated":"2014-05-06 07:18:11.000000000","message":"Done","commit_id":"8c11b41364e4ed6aacef963108957e793fcdc48a"},{"author":{"_account_id":7428,"name":"Yaroslav Lobankov","email":"lobankovyv@gmail.com","username":"ylobankov"},"change_message_id":"9e34375d1d2dadbb7c698249eb2798eb4081f5e9","unresolved":false,"context_lines":[{"line_number":27,"context_line":"        super(QosSpecsTestJSON, cls).setUpClass()"},{"line_number":28,"context_line":"        # Create admin qos client"},{"line_number":29,"context_line":"        cls.volume_types_client \u003d cls.client"},{"line_number":30,"context_line":"        cls.qos_client \u003d cls.os_adm.qos_client"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"        # Create a test shared qos-specs for tests"},{"line_number":33,"context_line":"        cls.qos_name \u003d utils.rand_name(cls.__name__ + \u0027-QoS\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"7adec928_981db476","line":30,"updated":"2014-05-08 11:35:46.000000000","message":"You can remove this line because you defined cls.qos_client variable in line 175 in base.py.","commit_id":"583f659717532ac0715a58c410e7d4a061fdfd15"},{"author":{"_account_id":10966,"name":"Abhijeet Jain","email":"abhijeetjpjain@gmail.com","username":"Abhijeet.Jain"},"change_message_id":"f289623e6987ce481d2f7c90dd15f35e07b361d7","unresolved":false,"context_lines":[{"line_number":27,"context_line":"        super(QosSpecsTestJSON, cls).setUpClass()"},{"line_number":28,"context_line":"        # Create admin qos client"},{"line_number":29,"context_line":"        cls.volume_types_client \u003d cls.client"},{"line_number":30,"context_line":"        cls.qos_client \u003d cls.os_adm.qos_client"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"        # Create a test shared qos-specs for tests"},{"line_number":33,"context_line":"        cls.qos_name \u003d utils.rand_name(cls.__name__ + \u0027-QoS\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"7adec928_ff4da973","line":30,"in_reply_to":"7adec928_981db476","updated":"2014-05-09 04:39:35.000000000","message":"Done","commit_id":"583f659717532ac0715a58c410e7d4a061fdfd15"},{"author":{"_account_id":7428,"name":"Yaroslav Lobankov","email":"lobankovyv@gmail.com","username":"ylobankov"},"change_message_id":"9e34375d1d2dadbb7c698249eb2798eb4081f5e9","unresolved":false,"context_lines":[{"line_number":40,"context_line":"    def _create_delete_test_qos_with_given_consumer(self, consumer):"},{"line_number":41,"context_line":"        name \u003d utils.rand_name(\u0027qos\u0027)"},{"line_number":42,"context_line":"        qos \u003d {\u0027name\u0027: name, \u0027consumer\u0027: consumer}"},{"line_number":43,"context_line":"        resp, body \u003d self.qos_client.create_qos(name, consumer)"},{"line_number":44,"context_line":"        self.qos_specs.append(body[\u0027id\u0027])"},{"line_number":45,"context_line":"        self.assertEqual(200, resp.status)"},{"line_number":46,"context_line":"        for key in [\u0027name\u0027, \u0027consumer\u0027]:"}],"source_content_type":"text/x-python","patch_set":7,"id":"7adec928_18ffe435","line":43,"updated":"2014-05-08 11:35:46.000000000","message":"You can use the method \"create_test_qos_specs\" from base.py. So you can remove lines 44 and 45.","commit_id":"583f659717532ac0715a58c410e7d4a061fdfd15"},{"author":{"_account_id":10966,"name":"Abhijeet Jain","email":"abhijeetjpjain@gmail.com","username":"Abhijeet.Jain"},"change_message_id":"f289623e6987ce481d2f7c90dd15f35e07b361d7","unresolved":false,"context_lines":[{"line_number":40,"context_line":"    def _create_delete_test_qos_with_given_consumer(self, consumer):"},{"line_number":41,"context_line":"        name \u003d utils.rand_name(\u0027qos\u0027)"},{"line_number":42,"context_line":"        qos \u003d {\u0027name\u0027: name, \u0027consumer\u0027: consumer}"},{"line_number":43,"context_line":"        resp, body \u003d self.qos_client.create_qos(name, consumer)"},{"line_number":44,"context_line":"        self.qos_specs.append(body[\u0027id\u0027])"},{"line_number":45,"context_line":"        self.assertEqual(200, resp.status)"},{"line_number":46,"context_line":"        for key in [\u0027name\u0027, \u0027consumer\u0027]:"}],"source_content_type":"text/x-python","patch_set":7,"id":"7adec928_1f533518","line":43,"in_reply_to":"7adec928_18ffe435","updated":"2014-05-09 04:39:35.000000000","message":"Done","commit_id":"583f659717532ac0715a58c410e7d4a061fdfd15"},{"author":{"_account_id":7139,"name":"Zhi Kun Liu","username":"zhikunliu","inactive":true},"change_message_id":"abd7f4e2b9f336c94d7095f8c7a58cf799764e99","unresolved":false,"context_lines":[{"line_number":39,"context_line":"        name \u003d utils.rand_name(\u0027qos\u0027)"},{"line_number":40,"context_line":"        qos \u003d {\u0027name\u0027: name, \u0027consumer\u0027: consumer}"},{"line_number":41,"context_line":"        resp, body \u003d self.create_test_qos_specs(name, consumer)"},{"line_number":42,"context_line":"        self.qos_specs.append(body[\u0027id\u0027])"},{"line_number":43,"context_line":"        self.assertEqual(200, resp.status)"},{"line_number":44,"context_line":"        for key in [\u0027name\u0027, \u0027consumer\u0027]:"},{"line_number":45,"context_line":"            self.assertEqual(qos[key], body[key])"}],"source_content_type":"text/x-python","patch_set":8,"id":"7adec928_4343f813","line":42,"updated":"2014-05-13 08:37:23.000000000","message":"This line should be deleted as self.create_test_qos_specs already appends the id.","commit_id":"e478425591ca30bd1bab266ddab7708cac51fe82"},{"author":{"_account_id":10966,"name":"Abhijeet Jain","email":"abhijeetjpjain@gmail.com","username":"Abhijeet.Jain"},"change_message_id":"17f996e76e74d9d15462a133aa0be73b997c30bb","unresolved":false,"context_lines":[{"line_number":39,"context_line":"        name \u003d utils.rand_name(\u0027qos\u0027)"},{"line_number":40,"context_line":"        qos \u003d {\u0027name\u0027: name, \u0027consumer\u0027: consumer}"},{"line_number":41,"context_line":"        resp, body \u003d self.create_test_qos_specs(name, consumer)"},{"line_number":42,"context_line":"        self.qos_specs.append(body[\u0027id\u0027])"},{"line_number":43,"context_line":"        self.assertEqual(200, resp.status)"},{"line_number":44,"context_line":"        for key in [\u0027name\u0027, \u0027consumer\u0027]:"},{"line_number":45,"context_line":"            self.assertEqual(qos[key], body[key])"}],"source_content_type":"text/x-python","patch_set":8,"id":"7adec928_63d634c7","line":42,"in_reply_to":"7adec928_4343f813","updated":"2014-05-13 08:59:29.000000000","message":"Thanks. Will update that","commit_id":"e478425591ca30bd1bab266ddab7708cac51fe82"},{"author":{"_account_id":7139,"name":"Zhi Kun Liu","username":"zhikunliu","inactive":true},"change_message_id":"abd7f4e2b9f336c94d7095f8c7a58cf799764e99","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        # validate the deletion"},{"line_number":52,"context_line":"        resp, list_qos \u003d self.qos_client.list_qos()"},{"line_number":53,"context_line":"        self.assertEqual(200, resp.status)"},{"line_number":54,"context_line":"        self.assertNotIn(body[\u0027id\u0027], list_qos)"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    @test.attr(type\u003d\u0027gate\u0027)"},{"line_number":57,"context_line":"    def test_create_delete_qos_with_front_end_consumer(self):"}],"source_content_type":"text/x-python","patch_set":8,"id":"7adec928_c3bf08fa","line":54,"updated":"2014-05-13 08:37:23.000000000","message":"self.assertNotIn(body[\u0027id\u0027], list_qos) -\u003e self.assertNotIn(body, list_qos)\n\nOtherwise, here should get qos ids list first if you assert the id.\n\n  qos_ids \u003d [ qos[\u0027id\u0027] for qos in list_qos ]\n  self.assertNotIn(body[\u0027id\u0027], qos_ids)","commit_id":"e478425591ca30bd1bab266ddab7708cac51fe82"},{"author":{"_account_id":10966,"name":"Abhijeet Jain","email":"abhijeetjpjain@gmail.com","username":"Abhijeet.Jain"},"change_message_id":"17f996e76e74d9d15462a133aa0be73b997c30bb","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        # validate the deletion"},{"line_number":52,"context_line":"        resp, list_qos \u003d self.qos_client.list_qos()"},{"line_number":53,"context_line":"        self.assertEqual(200, resp.status)"},{"line_number":54,"context_line":"        self.assertNotIn(body[\u0027id\u0027], list_qos)"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    @test.attr(type\u003d\u0027gate\u0027)"},{"line_number":57,"context_line":"    def test_create_delete_qos_with_front_end_consumer(self):"}],"source_content_type":"text/x-python","patch_set":8,"id":"7adec928_838a60bd","line":54,"in_reply_to":"7adec928_c3bf08fa","updated":"2014-05-13 08:59:29.000000000","message":"Thanks. Will update that","commit_id":"e478425591ca30bd1bab266ddab7708cac51fe82"},{"author":{"_account_id":7139,"name":"Zhi Kun Liu","username":"zhikunliu","inactive":true},"change_message_id":"abd7f4e2b9f336c94d7095f8c7a58cf799764e99","unresolved":false,"context_lines":[{"line_number":102,"context_line":"        self.assertEqual(args, body)"},{"line_number":103,"context_line":"        resp, body \u003d self.qos_client.get_qos(self.created_qos[\u0027id\u0027])"},{"line_number":104,"context_line":"        self.assertEqual(200, resp.status)"},{"line_number":105,"context_line":"        self.assertIn(args[\u0027iops_bytes\u0027], body[\u0027specs\u0027][\u0027iops_bytes\u0027])"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"        # test the deletion of a specs key from qos-specs"},{"line_number":108,"context_line":"        keys \u003d [\u0027iops_bytes\u0027]"}],"source_content_type":"text/x-python","patch_set":8,"id":"7adec928_a073d2e5","line":105,"updated":"2014-05-13 08:37:23.000000000","message":"assertEqual is more accurate for two strings.","commit_id":"e478425591ca30bd1bab266ddab7708cac51fe82"},{"author":{"_account_id":10966,"name":"Abhijeet Jain","email":"abhijeetjpjain@gmail.com","username":"Abhijeet.Jain"},"change_message_id":"17f996e76e74d9d15462a133aa0be73b997c30bb","unresolved":false,"context_lines":[{"line_number":102,"context_line":"        self.assertEqual(args, body)"},{"line_number":103,"context_line":"        resp, body \u003d self.qos_client.get_qos(self.created_qos[\u0027id\u0027])"},{"line_number":104,"context_line":"        self.assertEqual(200, resp.status)"},{"line_number":105,"context_line":"        self.assertIn(args[\u0027iops_bytes\u0027], body[\u0027specs\u0027][\u0027iops_bytes\u0027])"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"        # test the deletion of a specs key from qos-specs"},{"line_number":108,"context_line":"        keys \u003d [\u0027iops_bytes\u0027]"}],"source_content_type":"text/x-python","patch_set":8,"id":"7adec928_6340f456","line":105,"in_reply_to":"7adec928_a073d2e5","updated":"2014-05-13 08:59:29.000000000","message":"Oh Yes","commit_id":"e478425591ca30bd1bab266ddab7708cac51fe82"},{"author":{"_account_id":7139,"name":"Zhi Kun Liu","username":"zhikunliu","inactive":true},"change_message_id":"abd7f4e2b9f336c94d7095f8c7a58cf799764e99","unresolved":false,"context_lines":[{"line_number":114,"context_line":"                                                keys)"},{"line_number":115,"context_line":"        resp, body \u003d self.qos_client.get_qos(self.created_qos[\u0027id\u0027])"},{"line_number":116,"context_line":"        self.assertEqual(200, resp.status)"},{"line_number":117,"context_line":"        self.assertNotIn(args, body[\u0027specs\u0027])"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    def _create_test_volume_type(self):"},{"line_number":120,"context_line":"        vol_type_name \u003d utils.rand_name(\"volume-type\")"}],"source_content_type":"text/x-python","patch_set":8,"id":"7adec928_83dee06b","line":117,"updated":"2014-05-13 08:37:23.000000000","message":"Here should assert key \u0027iops_bytes\u0027  not in body[\u0027specs\u0027] as args is a dict {\u0027iops_bytes\u0027: \u0027500\u0027},  body[\u0027specs\u0027] is a dict like {\u0027a\u0027: \u00273\u0027, \u0027iops_bytes\u0027: \u0027500\u0027}.  \u0027dict\u0027 in \u0027dict\u0027 does not work.\n\nself.assertNotIn(keys[0], body[\u0027specs\u0027])","commit_id":"e478425591ca30bd1bab266ddab7708cac51fe82"},{"author":{"_account_id":10966,"name":"Abhijeet Jain","email":"abhijeetjpjain@gmail.com","username":"Abhijeet.Jain"},"change_message_id":"17f996e76e74d9d15462a133aa0be73b997c30bb","unresolved":false,"context_lines":[{"line_number":114,"context_line":"                                                keys)"},{"line_number":115,"context_line":"        resp, body \u003d self.qos_client.get_qos(self.created_qos[\u0027id\u0027])"},{"line_number":116,"context_line":"        self.assertEqual(200, resp.status)"},{"line_number":117,"context_line":"        self.assertNotIn(args, body[\u0027specs\u0027])"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    def _create_test_volume_type(self):"},{"line_number":120,"context_line":"        vol_type_name \u003d utils.rand_name(\"volume-type\")"}],"source_content_type":"text/x-python","patch_set":8,"id":"7adec928_2336ec03","line":117,"in_reply_to":"7adec928_83dee06b","updated":"2014-05-13 08:59:29.000000000","message":"Thanks. I will update that","commit_id":"e478425591ca30bd1bab266ddab7708cac51fe82"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"ccb246691e8b8871114c20e05b5e125d252387a5","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"class QosSpecsTestJSON(base.BaseVolumeV1AdminTest):"},{"line_number":22,"context_line":"    _interface \u003d \"json\""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    @classmethod"},{"line_number":25,"context_line":"    @test.safe_setup"}],"source_content_type":"text/x-python","patch_set":10,"id":"1ae5cdf2_e377949d","line":22,"updated":"2014-06-10 21:28:35.000000000","message":"Cloud you include in here the documentation from the commit message? It would be good to have a link to the spec of the API under test as well - as discussed during the summit in Atlanta","commit_id":"a669bf4fa8a5f53b70b1df9f935beabf7b14ff46"},{"author":{"_account_id":10966,"name":"Abhijeet Jain","email":"abhijeetjpjain@gmail.com","username":"Abhijeet.Jain"},"change_message_id":"dfed4326bf9c5837953d1cbc9f945e3e49050672","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"class QosSpecsTestJSON(base.BaseVolumeV1AdminTest):"},{"line_number":22,"context_line":"    _interface \u003d \"json\""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    @classmethod"},{"line_number":25,"context_line":"    @test.safe_setup"}],"source_content_type":"text/x-python","patch_set":10,"id":"1ae5cdf2_4baa1572","line":22,"in_reply_to":"1ae5cdf2_e377949d","updated":"2014-06-11 03:32:14.000000000","message":"Okie...I will add a bit introduction. Thanks","commit_id":"a669bf4fa8a5f53b70b1df9f935beabf7b14ff46"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"ccb246691e8b8871114c20e05b5e125d252387a5","unresolved":false,"context_lines":[{"line_number":26,"context_line":"    def setUpClass(cls):"},{"line_number":27,"context_line":"        super(QosSpecsTestJSON, cls).setUpClass()"},{"line_number":28,"context_line":"        # Create admin qos client"},{"line_number":29,"context_line":"        cls.volume_types_client \u003d cls.client"},{"line_number":30,"context_line":"        # Create a test shared qos-specs for tests"},{"line_number":31,"context_line":"        cls.qos_name \u003d utils.rand_name(cls.__name__ + \u0027-QoS\u0027)"},{"line_number":32,"context_line":"        cls.qos_consumer \u003d \u0027front-end\u0027"}],"source_content_type":"text/x-python","patch_set":10,"id":"1ae5cdf2_0359e0fd","line":29,"updated":"2014-06-10 21:28:35.000000000","message":"This is a bit confusing.\nWhat about \n\ncls.volume_types_client \u003d cls.os_adm.volume_types_client","commit_id":"a669bf4fa8a5f53b70b1df9f935beabf7b14ff46"},{"author":{"_account_id":10966,"name":"Abhijeet Jain","email":"abhijeetjpjain@gmail.com","username":"Abhijeet.Jain"},"change_message_id":"dfed4326bf9c5837953d1cbc9f945e3e49050672","unresolved":false,"context_lines":[{"line_number":26,"context_line":"    def setUpClass(cls):"},{"line_number":27,"context_line":"        super(QosSpecsTestJSON, cls).setUpClass()"},{"line_number":28,"context_line":"        # Create admin qos client"},{"line_number":29,"context_line":"        cls.volume_types_client \u003d cls.client"},{"line_number":30,"context_line":"        # Create a test shared qos-specs for tests"},{"line_number":31,"context_line":"        cls.qos_name \u003d utils.rand_name(cls.__name__ + \u0027-QoS\u0027)"},{"line_number":32,"context_line":"        cls.qos_consumer \u003d \u0027front-end\u0027"}],"source_content_type":"text/x-python","patch_set":10,"id":"1ae5cdf2_0bcbad53","line":29,"in_reply_to":"1ae5cdf2_0359e0fd","updated":"2014-06-11 03:32:14.000000000","message":"In Base class, the volume_types client is defined as \"client\" not \"volume_types_client\"","commit_id":"a669bf4fa8a5f53b70b1df9f935beabf7b14ff46"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"39e91d20e8070a44c09c2412ecbb0f1dfe605b11","unresolved":false,"context_lines":[{"line_number":26,"context_line":"    def setUpClass(cls):"},{"line_number":27,"context_line":"        super(QosSpecsTestJSON, cls).setUpClass()"},{"line_number":28,"context_line":"        # Create admin qos client"},{"line_number":29,"context_line":"        cls.volume_types_client \u003d cls.client"},{"line_number":30,"context_line":"        # Create a test shared qos-specs for tests"},{"line_number":31,"context_line":"        cls.qos_name \u003d utils.rand_name(cls.__name__ + \u0027-QoS\u0027)"},{"line_number":32,"context_line":"        cls.qos_consumer \u003d \u0027front-end\u0027"}],"source_content_type":"text/x-python","patch_set":10,"id":"1ae5cdf2_bae3ddd7","line":29,"in_reply_to":"1ae5cdf2_0bcbad53","updated":"2014-06-11 07:50:26.000000000","message":"Right my suggestion is to take the client from the client manager directly cls.os_adm.volume_types_client - creating an alias from the default client of the base class makes the code less readable.\nAnyways it\u0027s just a nit.","commit_id":"a669bf4fa8a5f53b70b1df9f935beabf7b14ff46"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"ccb246691e8b8871114c20e05b5e125d252387a5","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        self.assertEqual(200, resp.status)"},{"line_number":53,"context_line":"        self.assertNotIn(body, list_qos)"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    @test.attr(type\u003d\u0027gate\u0027)"},{"line_number":56,"context_line":"    def test_create_delete_qos_with_front_end_consumer(self):"},{"line_number":57,"context_line":"        \"\"\""},{"line_number":58,"context_line":"        tests the creation and deletion of QoS specs"}],"source_content_type":"text/x-python","patch_set":10,"id":"1ae5cdf2_030ac020","line":55,"updated":"2014-06-10 21:28:35.000000000","message":"The gate tag is vestigial, please do not use it.","commit_id":"a669bf4fa8a5f53b70b1df9f935beabf7b14ff46"},{"author":{"_account_id":10966,"name":"Abhijeet Jain","email":"abhijeetjpjain@gmail.com","username":"Abhijeet.Jain"},"change_message_id":"dfed4326bf9c5837953d1cbc9f945e3e49050672","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        self.assertEqual(200, resp.status)"},{"line_number":53,"context_line":"        self.assertNotIn(body, list_qos)"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    @test.attr(type\u003d\u0027gate\u0027)"},{"line_number":56,"context_line":"    def test_create_delete_qos_with_front_end_consumer(self):"},{"line_number":57,"context_line":"        \"\"\""},{"line_number":58,"context_line":"        tests the creation and deletion of QoS specs"}],"source_content_type":"text/x-python","patch_set":10,"id":"1ae5cdf2_ebe921b8","line":55,"in_reply_to":"1ae5cdf2_030ac020","updated":"2014-06-11 03:32:14.000000000","message":"Should i remove it from all tests ?","commit_id":"a669bf4fa8a5f53b70b1df9f935beabf7b14ff46"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"7899f4b5bd257806fbecffbb06b0eb3e182ea5ef","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        self.assertEqual(200, resp.status)"},{"line_number":53,"context_line":"        self.assertNotIn(body, list_qos)"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    @test.attr(type\u003d\u0027gate\u0027)"},{"line_number":56,"context_line":"    def test_create_delete_qos_with_front_end_consumer(self):"},{"line_number":57,"context_line":"        \"\"\""},{"line_number":58,"context_line":"        tests the creation and deletion of QoS specs"}],"source_content_type":"text/x-python","patch_set":10,"id":"1ae5cdf2_c51e0e70","line":55,"in_reply_to":"1ae5cdf2_1ad21100","updated":"2014-06-11 08:29:01.000000000","message":"Andrea, Please elaborate more about \"The gate tag is vestigial\". does not it being used in gate job?","commit_id":"a669bf4fa8a5f53b70b1df9f935beabf7b14ff46"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"579de56a7928de22b25bae1378a3f5f3e42b01da","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        self.assertEqual(200, resp.status)"},{"line_number":53,"context_line":"        self.assertNotIn(body, list_qos)"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    @test.attr(type\u003d\u0027gate\u0027)"},{"line_number":56,"context_line":"    def test_create_delete_qos_with_front_end_consumer(self):"},{"line_number":57,"context_line":"        \"\"\""},{"line_number":58,"context_line":"        tests the creation and deletion of QoS specs"}],"source_content_type":"text/x-python","patch_set":10,"id":"1ae5cdf2_e0577858","line":55,"in_reply_to":"1ae5cdf2_608d287c","updated":"2014-06-11 08:47:37.000000000","message":"ohk Got it. Thanks Andrea for information.","commit_id":"a669bf4fa8a5f53b70b1df9f935beabf7b14ff46"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"002c94c174acbc6ca9f3a92883104df485ed43a0","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        self.assertEqual(200, resp.status)"},{"line_number":53,"context_line":"        self.assertNotIn(body, list_qos)"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    @test.attr(type\u003d\u0027gate\u0027)"},{"line_number":56,"context_line":"    def test_create_delete_qos_with_front_end_consumer(self):"},{"line_number":57,"context_line":"        \"\"\""},{"line_number":58,"context_line":"        tests the creation and deletion of QoS specs"}],"source_content_type":"text/x-python","patch_set":10,"id":"1ae5cdf2_608d287c","line":55,"in_reply_to":"1ae5cdf2_c51e0e70","updated":"2014-06-11 08:33:13.000000000","message":"In former times when we did not run all tests \"gate\" meant this test shall be executed rather than not.\nNowadays all tests matching the configuration options are executed, the only exception being the smoke job which is still used in same cases like Neutron where the full run is not stable.\nI think we lack some documentation on this topic, I\u0027ll see if I can improve this.","commit_id":"a669bf4fa8a5f53b70b1df9f935beabf7b14ff46"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"39e91d20e8070a44c09c2412ecbb0f1dfe605b11","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        self.assertEqual(200, resp.status)"},{"line_number":53,"context_line":"        self.assertNotIn(body, list_qos)"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    @test.attr(type\u003d\u0027gate\u0027)"},{"line_number":56,"context_line":"    def test_create_delete_qos_with_front_end_consumer(self):"},{"line_number":57,"context_line":"        \"\"\""},{"line_number":58,"context_line":"        tests the creation and deletion of QoS specs"}],"source_content_type":"text/x-python","patch_set":10,"id":"1ae5cdf2_1ad21100","line":55,"in_reply_to":"1ae5cdf2_ebe921b8","updated":"2014-06-11 07:50:26.000000000","message":"Yes please","commit_id":"a669bf4fa8a5f53b70b1df9f935beabf7b14ff46"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"20ee0c0fb06e0bdd4fe52f9046433ff44cee49a5","unresolved":false,"context_lines":[{"line_number":37,"context_line":""},{"line_number":38,"context_line":"        _, cls.created_qos \u003d cls.create_test_qos_specs(cls.qos_name,"},{"line_number":39,"context_line":"                                                       cls.qos_consumer,"},{"line_number":40,"context_line":"                                                       a\u003d\u00273\u0027)"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def _create_delete_test_qos_with_given_consumer(self, consumer):"},{"line_number":43,"context_line":"        name \u003d utils.rand_name(\u0027qos\u0027)"}],"source_content_type":"text/x-python","patch_set":12,"id":"1ae5cdf2_eaff0564","line":40,"updated":"2014-06-13 09:05:25.000000000","message":"Could you rename the variable \u0027a\u0027 to a more meaninful stuff ? What does the value \u00273\u0027 indicates ?","commit_id":"49f848b1437963c20f799887152dff6b61608b0f"}],"tempest/api/volume/base.py":[{"author":{"_account_id":7428,"name":"Yaroslav Lobankov","email":"lobankovyv@gmail.com","username":"ylobankov"},"change_message_id":"6aacaf5c74f262ad21bc5611e468b6091b6f63a9","unresolved":false,"context_lines":[{"line_number":71,"context_line":"    @classmethod"},{"line_number":72,"context_line":"    def create_test_qos_specs(cls, name\u003dNone, consumer\u003dNone, **kwargs):"},{"line_number":73,"context_line":"        \"\"\"create a test Qos-Specs.\"\"\""},{"line_number":74,"context_line":"        if name is None:"},{"line_number":75,"context_line":"            name \u003d data_utils.rand_name(cls.__name__ + \u0027-QoS\u0027)"},{"line_number":76,"context_line":"        if consumer is None:"},{"line_number":77,"context_line":"            consumer \u003d \u0027front-end\u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"9ad9bd40_57e0be95","line":74,"updated":"2014-05-07 09:26:49.000000000","message":"I think this \"if\" condition should be like this\n\n    if not name:\n        ...\n\nIf I call this method with parameter name\u003d\u0027\u0027, \"if\" condition is not performed.","commit_id":"f0ec39d6418391ee3560f286d6e5d7042317a114"},{"author":{"_account_id":10966,"name":"Abhijeet Jain","email":"abhijeetjpjain@gmail.com","username":"Abhijeet.Jain"},"change_message_id":"195b06d958b16d4bca7aed053545bca568f06ccc","unresolved":false,"context_lines":[{"line_number":71,"context_line":"    @classmethod"},{"line_number":72,"context_line":"    def create_test_qos_specs(cls, name\u003dNone, consumer\u003dNone, **kwargs):"},{"line_number":73,"context_line":"        \"\"\"create a test Qos-Specs.\"\"\""},{"line_number":74,"context_line":"        if name is None:"},{"line_number":75,"context_line":"            name \u003d data_utils.rand_name(cls.__name__ + \u0027-QoS\u0027)"},{"line_number":76,"context_line":"        if consumer is None:"},{"line_number":77,"context_line":"            consumer \u003d \u0027front-end\u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"7adec928_13ca6d4f","line":74,"in_reply_to":"9ad9bd40_57e0be95","updated":"2014-05-08 05:36:28.000000000","message":"Done","commit_id":"f0ec39d6418391ee3560f286d6e5d7042317a114"},{"author":{"_account_id":8824,"name":"Sergey Murashov","email":"smurashov@mirantis.com","username":"SergeyMurashov"},"change_message_id":"c076e0599921a87acad1534bf5f276e8fc36ef3b","unresolved":false,"context_lines":[{"line_number":76,"context_line":"        if consumer is None:"},{"line_number":77,"context_line":"            consumer \u003d \u0027front-end\u0027"},{"line_number":78,"context_line":"        resp, qos_specs \u003d cls.qos_client.create_qos(name, consumer, **kwargs)"},{"line_number":79,"context_line":"        assert 200 \u003d\u003d resp.status"},{"line_number":80,"context_line":"        cls.qos_specs.append(qos_specs[\u0027id\u0027])"},{"line_number":81,"context_line":"        return resp, qos_specs"},{"line_number":82,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9ad9bd40_7b94ed42","line":79,"updated":"2014-05-06 08:39:26.000000000","message":"please use self.assertEqual","commit_id":"f0ec39d6418391ee3560f286d6e5d7042317a114"},{"author":{"_account_id":10966,"name":"Abhijeet Jain","email":"abhijeetjpjain@gmail.com","username":"Abhijeet.Jain"},"change_message_id":"195b06d958b16d4bca7aed053545bca568f06ccc","unresolved":false,"context_lines":[{"line_number":76,"context_line":"        if consumer is None:"},{"line_number":77,"context_line":"            consumer \u003d \u0027front-end\u0027"},{"line_number":78,"context_line":"        resp, qos_specs \u003d cls.qos_client.create_qos(name, consumer, **kwargs)"},{"line_number":79,"context_line":"        assert 200 \u003d\u003d resp.status"},{"line_number":80,"context_line":"        cls.qos_specs.append(qos_specs[\u0027id\u0027])"},{"line_number":81,"context_line":"        return resp, qos_specs"},{"line_number":82,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"7adec928_33c76947","line":79,"in_reply_to":"9ad9bd40_7b94ed42","updated":"2014-05-08 05:36:28.000000000","message":"Done","commit_id":"f0ec39d6418391ee3560f286d6e5d7042317a114"},{"author":{"_account_id":7428,"name":"Yaroslav Lobankov","email":"lobankovyv@gmail.com","username":"ylobankov"},"change_message_id":"beaa73bf9834cb7ecabf35e86848849bcfcbe53f","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        return snapshot"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    @classmethod"},{"line_number":72,"context_line":"    def create_test_qos_specs(cls, name\u003d\"\", consumer\u003d\"\", **kwargs):"},{"line_number":73,"context_line":"        \"\"\"create a test Qos-Specs.\"\"\""},{"line_number":74,"context_line":"        if not name:"},{"line_number":75,"context_line":"            name \u003d data_utils.rand_name(cls.__name__ + \u0027-QoS\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"7adec928_8eb1a791","line":72,"updated":"2014-05-13 10:32:39.000000000","message":"It would be better to use None instead of \u0027\u0027\u0027\u0027 as default parameter.","commit_id":"ae54a84e6cc9584cde42448773bc147a18d7b703"},{"author":{"_account_id":7428,"name":"Yaroslav Lobankov","email":"lobankovyv@gmail.com","username":"ylobankov"},"change_message_id":"acc3f6436626eb777468dbc5f21ee349ac70edcb","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        return snapshot"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    @classmethod"},{"line_number":72,"context_line":"    def create_test_qos_specs(cls, name\u003d\"\", consumer\u003d\"\", **kwargs):"},{"line_number":73,"context_line":"        \"\"\"create a test Qos-Specs.\"\"\""},{"line_number":74,"context_line":"        if not name:"},{"line_number":75,"context_line":"            name \u003d data_utils.rand_name(cls.__name__ + \u0027-QoS\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"7adec928_fcde573e","line":72,"in_reply_to":"7adec928_89de016c","updated":"2014-05-14 08:54:15.000000000","message":"If you use \"None\" as default parameter, you will not need to check 2 conditions. Blank line (as well as empty list [], empty dictionary {}) in \"if\" condition is interpreted as False.","commit_id":"ae54a84e6cc9584cde42448773bc147a18d7b703"},{"author":{"_account_id":10966,"name":"Abhijeet Jain","email":"abhijeetjpjain@gmail.com","username":"Abhijeet.Jain"},"change_message_id":"7bcfca2e51a54ed5c76d833f7289e7397c12654c","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        return snapshot"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    @classmethod"},{"line_number":72,"context_line":"    def create_test_qos_specs(cls, name\u003d\"\", consumer\u003d\"\", **kwargs):"},{"line_number":73,"context_line":"        \"\"\"create a test Qos-Specs.\"\"\""},{"line_number":74,"context_line":"        if not name:"},{"line_number":75,"context_line":"            name \u003d data_utils.rand_name(cls.__name__ + \u0027-QoS\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"7adec928_89de016c","line":72,"in_reply_to":"7adec928_8eb1a791","updated":"2014-05-13 10:44:36.000000000","message":"if I use None as default parameter then, I will need to check 2 conditions in if block :\n1 for not None\nand\n2 for not \"\" (as current)\n\nTo prevent check for 2 conditions, I have used \"\" in place of None.","commit_id":"ae54a84e6cc9584cde42448773bc147a18d7b703"},{"author":{"_account_id":10966,"name":"Abhijeet Jain","email":"abhijeetjpjain@gmail.com","username":"Abhijeet.Jain"},"change_message_id":"21458b7f5efd60e8f1f7dec89ff98739254b1c2c","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        return snapshot"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    @classmethod"},{"line_number":72,"context_line":"    def create_test_qos_specs(cls, name\u003d\"\", consumer\u003d\"\", **kwargs):"},{"line_number":73,"context_line":"        \"\"\"create a test Qos-Specs.\"\"\""},{"line_number":74,"context_line":"        if not name:"},{"line_number":75,"context_line":"            name \u003d data_utils.rand_name(cls.__name__ + \u0027-QoS\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"7adec928_9c72b347","line":72,"in_reply_to":"7adec928_fcde573e","updated":"2014-05-14 08:58:41.000000000","message":"Oh yes, I checked it. Thanks","commit_id":"ae54a84e6cc9584cde42448773bc147a18d7b703"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"ccb246691e8b8871114c20e05b5e125d252387a5","unresolved":false,"context_lines":[{"line_number":115,"context_line":"    def clear_qos_specs(cls):"},{"line_number":116,"context_line":"        for qos_id in cls.qos_specs:"},{"line_number":117,"context_line":"            try:"},{"line_number":118,"context_line":"                cls.qos_client.delete_qos(qos_id)"},{"line_number":119,"context_line":"                cls.qos_client.wait_for_resource_deletion(qos_id)"},{"line_number":120,"context_line":"            except exceptions.NotFound:"},{"line_number":121,"context_line":"                # The qos_specs may have already been deleted which is OK."}],"source_content_type":"text/x-python","patch_set":10,"id":"1ae5cdf2_b84a1781","line":118,"updated":"2014-06-10 21:28:35.000000000","message":"I guess QoS definitions may be quick to delete, but still it may be more efficient to first delete all resources, and then wait for deletion, in a separate loop.","commit_id":"a669bf4fa8a5f53b70b1df9f935beabf7b14ff46"},{"author":{"_account_id":10966,"name":"Abhijeet Jain","email":"abhijeetjpjain@gmail.com","username":"Abhijeet.Jain"},"change_message_id":"dfed4326bf9c5837953d1cbc9f945e3e49050672","unresolved":false,"context_lines":[{"line_number":115,"context_line":"    def clear_qos_specs(cls):"},{"line_number":116,"context_line":"        for qos_id in cls.qos_specs:"},{"line_number":117,"context_line":"            try:"},{"line_number":118,"context_line":"                cls.qos_client.delete_qos(qos_id)"},{"line_number":119,"context_line":"                cls.qos_client.wait_for_resource_deletion(qos_id)"},{"line_number":120,"context_line":"            except exceptions.NotFound:"},{"line_number":121,"context_line":"                # The qos_specs may have already been deleted which is OK."}],"source_content_type":"text/x-python","patch_set":10,"id":"1ae5cdf2_2bcf8957","line":118,"in_reply_to":"1ae5cdf2_b84a1781","updated":"2014-06-11 03:32:14.000000000","message":"Thanks for ur suggestion...Will do that","commit_id":"a669bf4fa8a5f53b70b1df9f935beabf7b14ff46"},{"author":{"_account_id":7227,"name":"Timur Nurlygayanov","email":"tnurlygayanov@mirantis.com","username":"tnurlygayanov"},"change_message_id":"6b3adff5ff78d7847323f32da4e398494e157395","unresolved":false,"context_lines":[{"line_number":128,"context_line":"            consumer \u003d \u0027front-end\u0027"},{"line_number":129,"context_line":"        resp, qos_specs \u003d cls.volume_qos_client.create_qos(name, consumer,"},{"line_number":130,"context_line":"                                                           **kwargs)"},{"line_number":131,"context_line":"        assert 200 \u003d\u003d resp.status"},{"line_number":132,"context_line":"        cls.qos_specs.append(qos_specs[\u0027id\u0027])"},{"line_number":133,"context_line":"        return resp, qos_specs"},{"line_number":134,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"baada198_22a09290","line":131,"updated":"2014-08-08 11:47:14.000000000","message":"Could you please use \u0027expected_success\u0027 method instead of \u0027assert\u0027. For example:\n\nhttps://github.com/openstack/tempest/blob/master/tempest/services/data_processing/v1_1/client.py#L35","commit_id":"8a7a002012f2d35096cc056b6ec8b541c1bd4073"},{"author":{"_account_id":11105,"name":"Swapnil Kulkarni","email":"coolsvap@gmail.com","username":"coolsvap"},"change_message_id":"f66ee3f9a6b7701b3918a9d621d5298220cc5dac","unresolved":false,"context_lines":[{"line_number":128,"context_line":"            consumer \u003d \u0027front-end\u0027"},{"line_number":129,"context_line":"        resp, qos_specs \u003d cls.volume_qos_client.create_qos(name, consumer,"},{"line_number":130,"context_line":"                                                           **kwargs)"},{"line_number":131,"context_line":"        assert 200 \u003d\u003d resp.status"},{"line_number":132,"context_line":"        cls.qos_specs.append(qos_specs[\u0027id\u0027])"},{"line_number":133,"context_line":"        return resp, qos_specs"},{"line_number":134,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"baada198_7da30b9b","line":131,"in_reply_to":"baada198_22a09290","updated":"2014-08-08 12:15:30.000000000","message":"I think this is required but should be one in another patch where we update everything at one place.","commit_id":"8a7a002012f2d35096cc056b6ec8b541c1bd4073"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"0515a2ffea27ca0d0b6f89364ed2ef016ce7245a","unresolved":false,"context_lines":[{"line_number":84,"context_line":"            raise exceptions.InvalidConfiguration(message\u003dmsg)"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"    @classmethod"},{"line_number":87,"context_line":"    def tearDownClass(cls):"},{"line_number":88,"context_line":"        cls.clear_snapshots()"},{"line_number":89,"context_line":"        cls.clear_volumes()"},{"line_number":90,"context_line":"        cls.clear_isolated_creds()"}],"source_content_type":"text/x-python","patch_set":22,"id":"baada198_abad2fa6","line":87,"updated":"2014-08-11 07:12:24.000000000","message":"are all of these needed? can\u0027t you use addCleanup instead?","commit_id":"8a16a26baf6668f5056afbd5c2c2eba95bb35912"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"0515a2ffea27ca0d0b6f89364ed2ef016ce7245a","unresolved":false,"context_lines":[{"line_number":121,"context_line":"    @classmethod"},{"line_number":122,"context_line":"    def create_test_qos_specs(cls, name\u003dNone, consumer\u003dNone, **kwargs):"},{"line_number":123,"context_line":"        \"\"\"create a test Qos-Specs.\"\"\""},{"line_number":124,"context_line":"        if not name:"},{"line_number":125,"context_line":"            name \u003d data_utils.rand_name(cls.__name__ + \u0027-QoS\u0027)"},{"line_number":126,"context_line":"        if not consumer:"},{"line_number":127,"context_line":"            consumer \u003d \u0027front-end\u0027"}],"source_content_type":"text/x-python","patch_set":22,"id":"baada198_0b1ffb70","line":124,"updated":"2014-08-11 07:12:24.000000000","message":"nit: name \u003d name or data_utils.rand_name(cls.__name__ + \u0027-QoS\u0027)","commit_id":"8a16a26baf6668f5056afbd5c2c2eba95bb35912"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"0515a2ffea27ca0d0b6f89364ed2ef016ce7245a","unresolved":false,"context_lines":[{"line_number":123,"context_line":"        \"\"\"create a test Qos-Specs.\"\"\""},{"line_number":124,"context_line":"        if not name:"},{"line_number":125,"context_line":"            name \u003d data_utils.rand_name(cls.__name__ + \u0027-QoS\u0027)"},{"line_number":126,"context_line":"        if not consumer:"},{"line_number":127,"context_line":"            consumer \u003d \u0027front-end\u0027"},{"line_number":128,"context_line":"        resp, qos_specs \u003d cls.volume_qos_client.create_qos(name, consumer,"},{"line_number":129,"context_line":"                                                           **kwargs)"}],"source_content_type":"text/x-python","patch_set":22,"id":"baada198_4b2573bd","line":126,"updated":"2014-08-11 07:12:24.000000000","message":"same here","commit_id":"8a16a26baf6668f5056afbd5c2c2eba95bb35912"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"0515a2ffea27ca0d0b6f89364ed2ef016ce7245a","unresolved":false,"context_lines":[{"line_number":127,"context_line":"            consumer \u003d \u0027front-end\u0027"},{"line_number":128,"context_line":"        resp, qos_specs \u003d cls.volume_qos_client.create_qos(name, consumer,"},{"line_number":129,"context_line":"                                                           **kwargs)"},{"line_number":130,"context_line":"        assert 200 \u003d\u003d resp.status"},{"line_number":131,"context_line":"        cls.qos_specs.append(qos_specs[\u0027id\u0027])"},{"line_number":132,"context_line":"        return resp, qos_specs"},{"line_number":133,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"baada198_4b4e5391","line":130,"updated":"2014-08-11 07:12:24.000000000","message":"Response should not be evaluated in test https://blueprints.launchpad.net/tempest/+spec/client-checks-success\n\nIf you are working on this, please amend volume_qos_client (possibly in a preceding patch). I know that the code already exists in other parts of this module, but, AFAIK, it\u0027s new policy to not accept new code that goes against that bp","commit_id":"8a16a26baf6668f5056afbd5c2c2eba95bb35912"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"0515a2ffea27ca0d0b6f89364ed2ef016ce7245a","unresolved":false,"context_lines":[{"line_number":129,"context_line":"                                                           **kwargs)"},{"line_number":130,"context_line":"        assert 200 \u003d\u003d resp.status"},{"line_number":131,"context_line":"        cls.qos_specs.append(qos_specs[\u0027id\u0027])"},{"line_number":132,"context_line":"        return resp, qos_specs"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"    # NOTE(afazekas): these create_* and clean_* could be defined"},{"line_number":135,"context_line":"    # only in a single location in the source, and could be more general."}],"source_content_type":"text/x-python","patch_set":22,"id":"baada198_0b061b21","line":132,"updated":"2014-08-11 07:12:24.000000000","message":"why do you need to return resp? once it\u0027s been evaluated, other methods don\u0027t need need it","commit_id":"8a16a26baf6668f5056afbd5c2c2eba95bb35912"},{"author":{"_account_id":5803,"name":"Attila Fazekas","email":"afazekas@redhat.com","username":"afazekas"},"change_message_id":"46813a0d1127a3d9d676fce18c9b5c3925e8e86e","unresolved":false,"context_lines":[{"line_number":201,"context_line":"    _api_version \u003d 1"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"class BaseVolumeV1AdminTest(BaseVolumeV1Test):"},{"line_number":205,"context_line":"    \"\"\"Base test case class for all Volume Admin API tests.\"\"\""},{"line_number":206,"context_line":"    @classmethod"},{"line_number":207,"context_line":"    def setUpClass(cls):"}],"source_content_type":"text/x-python","patch_set":28,"id":"1abeadc6_eb3175a3","line":204,"updated":"2014-08-18 15:26:03.000000000","message":"Why did you created the BaseVolumeAdminTest class , instead of using this, or making some relation between them ?","commit_id":"3d7626b26b54bdb14791611f05887bf95426f8bf"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"7d3fb78ca74205310e85a38cd161b3905619a1db","unresolved":false,"context_lines":[{"line_number":202,"context_line":"        cls.quotas_client \u003d cls.os_adm.volume_quotas_client"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"class BaseVolumeAdminTest(BaseVolumeV1AdminTest):"},{"line_number":206,"context_line":"    \"\"\"Base test case class for all Volume Admin API tests.\"\"\""},{"line_number":207,"context_line":"    _api_version \u003d 2"},{"line_number":208,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"1abeadc6_52ed718a","line":205,"updated":"2014-08-20 01:51:14.000000000","message":"Admin tests class should be merged like BaseVolumeTest.\nlike below-\n\nclass BaseVolumeAdminTest(BaseVolumeTest):\n\n// merge code from BaseVolumeV1AdminTest class as per api_version var.\n\nYou can keep BaseVolumeV1AdminTest class drived from  BaseVolumeAdminTest with  api_version as 1.\n\nOnce all admin tests are derived from BaseVolumeAdminTest, BaseVolumeV1AdminTest can be removed.","commit_id":"22bcc3a246615cc68618b77324123aaed6c0f199"},{"author":{"_account_id":11105,"name":"Swapnil Kulkarni","email":"coolsvap@gmail.com","username":"coolsvap"},"change_message_id":"1cacba1656135bfb840d7cc5acd31ec5841f3b81","unresolved":false,"context_lines":[{"line_number":202,"context_line":"        cls.quotas_client \u003d cls.os_adm.volume_quotas_client"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"class BaseVolumeAdminTest(BaseVolumeV1AdminTest):"},{"line_number":206,"context_line":"    \"\"\"Base test case class for all Volume Admin API tests.\"\"\""},{"line_number":207,"context_line":"    _api_version \u003d 2"},{"line_number":208,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"1abeadc6_1accebbb","line":205,"in_reply_to":"1abeadc6_52ed718a","updated":"2014-08-20 05:56:50.000000000","message":"Done","commit_id":"22bcc3a246615cc68618b77324123aaed6c0f199"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"7d461c75533eef0b6badf133f7df5268047ab9a6","unresolved":false,"context_lines":[{"line_number":196,"context_line":"        cls.volume_qos_client \u003d cls.os_adm.volume_qos_v2_client"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"class BaseVolumeV1AdminTest(BaseVolumeAdminTest):"},{"line_number":200,"context_line":"    \"\"\"Base test case class for all Volume Admin API tests.\"\"\""},{"line_number":201,"context_line":"    _api_version \u003d 1"},{"line_number":202,"context_line":""}],"source_content_type":"text/x-python","patch_set":32,"id":"1abeadc6_a6c0422b","line":199,"updated":"2014-08-20 08:43:55.000000000","message":"you need to put all in one BaseVolumeAdminTest class only with if else condition of _api_version.\n\nHave a look into BaseVolumeTest. on same line you can implement for admin tests","commit_id":"da3e1449d51ef5533cb707efb4c9c252a32d5c60"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"e0692babcc5d9fe51d3f2e9938073bbcd82b2dbe","unresolved":false,"context_lines":[{"line_number":176,"context_line":""},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"class BaseVolumeAdminTest(BaseVolumeTest):"},{"line_number":179,"context_line":"    \"\"\"Base test case class for all Volume Admin API tests.\"\"\""},{"line_number":180,"context_line":"    @classmethod"},{"line_number":181,"context_line":"    def setUpClass(cls):"},{"line_number":182,"context_line":"        super(BaseVolumeAdminTest, cls).setUpClass()"}],"source_content_type":"text/x-python","patch_set":33,"id":"1abeadc6_bdc84c23","line":179,"updated":"2014-08-20 09:53:46.000000000","message":"Please do it like below.\nSample code-\n\nclass BaseVolumeAdminTest(BaseVolumeV1Test):\n    \"\"\"Base test case class for all Volume Admin API tests.\"\"\"\n    @classmethod\n    def setUpClass(cls):\n        super(BaseVolumeAdminTest, cls).setUpClass()\n        cls.adm_user \u003d CONF.identity.admin_username\n        cls.adm_pass \u003d CONF.identity.admin_password\n        cls.adm_tenant \u003d CONF.identity.admin_tenant_name\n        if not all((cls.adm_user, cls.adm_pass, cls.adm_tenant)):\n            msg \u003d (\"Missing Volume Admin API credentials \"\n                   \"in configuration.\")\n            raise cls.skipException(msg)\n        if CONF.compute.allow_tenant_isolation:\n            cls.os_adm \u003d clients.Manager(cls.isolated_creds.get_admin_creds(),\n                                         interface\u003dcls._interface)\n        else:\n            cls.os_adm \u003d clients.AdminManager(interface\u003dcls._interface)\n        cls.client \u003d cls.os_adm.volume_types_client\n        cls.hosts_client \u003d cls.os_adm.volume_hosts_client\n        cls.quotas_client \u003d cls.os_adm.volume_quotas_client\n        cls.volume_types_client \u003d cls.os_adm.volume_types_client\n        if cls._api_version \u003d\u003d 1:\n            if not CONF.volume_feature_enabled.api_v1:\n                msg \u003d \"Volume API v1 is disabled\"\n                raise cls.skipException(msg)\n            cls.volume_qos_client \u003d cls.os_adm.volume_qos_client\n        elif cls._api_version \u003d\u003d 2:\n            if not CONF.volume_feature_enabled.api_v2:\n                msg \u003d \"Volume API v2 is disabled\"\n                raise cls.skipException(msg)\n             cls.volume_qos_client \u003d cls.os_adm.volume_qos_v2_client\n             \nclass BaseVolumeV1AdminTest(BaseVolumeAdminTest):\n    _api_version \u003d 1","commit_id":"a39772b24b6115c498d53dce9e2baacf8b362d76"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"6a63b11b298e1648f350d42c17476d206d060163","unresolved":false,"context_lines":[{"line_number":199,"context_line":"        cls.quotas_client \u003d cls.os_adm.volume_quotas_client"},{"line_number":200,"context_line":"        cls.volume_types_client \u003d cls.os_adm.volume_types_client"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"        if cls._api_version \u003d\u003d 1 and cls._interface \u003d\u003d \u0027json\u0027:"},{"line_number":203,"context_line":"            if not CONF.volume_feature_enabled.api_v1:"},{"line_number":204,"context_line":"                msg \u003d \"Volume API v1 is disabled\""},{"line_number":205,"context_line":"                raise cls.skipException(msg)"}],"source_content_type":"text/x-python","patch_set":35,"id":"1abeadc6_533ba937","line":202,"updated":"2014-08-20 11:01:47.000000000","message":"this is not right place to have json check in case not having xml client.\nYou can remove cls._interface \u003d\u003d \u0027json\u0027 check from both condition.\n\nThis will not work in case V1, V2 xml client is implemented. You need to handle this in clients.py (inline comment given)","commit_id":"b0a4dfa1a94b09f632f80ed624071214b554fd07"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"aaad68b386457a93509f376fb725b8fdbd137107","unresolved":false,"context_lines":[{"line_number":199,"context_line":"        cls.quotas_client \u003d cls.os_adm.volume_quotas_client"},{"line_number":200,"context_line":"        cls.volume_types_client \u003d cls.os_adm.volume_types_client"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"        if cls._api_version \u003d\u003d 1:"},{"line_number":203,"context_line":"            if not CONF.volume_feature_enabled.api_v1:"},{"line_number":204,"context_line":"                msg \u003d \"Volume API v1 is disabled\""},{"line_number":205,"context_line":"                raise cls.skipException(msg)"}],"source_content_type":"text/x-python","patch_set":38,"id":"1abeadc6_1929d089","line":202,"updated":"2014-08-24 09:09:49.000000000","message":"this attribute is defined by class type. so instead of \"if\", please move put each block in the relevant class","commit_id":"9b84ac4200dde86601d25933712fd244623de78c"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"c2623abeb72feae322ea32ffdb49144ae0798175","unresolved":false,"context_lines":[{"line_number":199,"context_line":"        cls.quotas_client \u003d cls.os_adm.volume_quotas_client"},{"line_number":200,"context_line":"        cls.volume_types_client \u003d cls.os_adm.volume_types_client"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"        if cls._api_version \u003d\u003d 1:"},{"line_number":203,"context_line":"            if not CONF.volume_feature_enabled.api_v1:"},{"line_number":204,"context_line":"                msg \u003d \"Volume API v1 is disabled\""},{"line_number":205,"context_line":"                raise cls.skipException(msg)"}],"source_content_type":"text/x-python","patch_set":38,"id":"1abeadc6_b959b75d","line":202,"in_reply_to":"1abeadc6_1929d089","updated":"2014-08-24 23:56:34.000000000","message":"@Fried, Actually we are going to have just one base class for both version of API to share the test code among them. V2 API tests will be derived from this base and V1 from V2 tests case class. BaseVolumeV1AdminTest will be removed once all admin tests class follow that design.","commit_id":"9b84ac4200dde86601d25933712fd244623de78c"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"25fed1dd14551f59ab9cb2760e281b67037b3c9e","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        cls.build_timeout \u003d CONF.volume.build_timeout"},{"line_number":50,"context_line":"        cls.snapshots \u003d []"},{"line_number":51,"context_line":"        cls.volumes \u003d []"},{"line_number":52,"context_line":"        cls.qos_specs \u003d []"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"        if cls._api_version \u003d\u003d 1:"},{"line_number":55,"context_line":"            if not CONF.volume_feature_enabled.api_v1:"}],"source_content_type":"text/x-python","patch_set":43,"id":"fa98f980_51f72e8b","line":52,"updated":"2014-09-03 01:47:09.000000000","message":"ditto","commit_id":"e95f58cb011f4461aad79054b231cb362ba675a3"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"25fed1dd14551f59ab9cb2760e281b67037b3c9e","unresolved":false,"context_lines":[{"line_number":113,"context_line":"                                                      \u0027available\u0027)"},{"line_number":114,"context_line":"        return snapshot"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"    @classmethod"},{"line_number":117,"context_line":"    def create_test_qos_specs(cls, name\u003dNone, consumer\u003dNone, **kwargs):"},{"line_number":118,"context_line":"        \"\"\"create a test Qos-Specs.\"\"\""},{"line_number":119,"context_line":"        name \u003d name or data_utils.rand_name(cls.__name__ + \u0027-QoS\u0027)"}],"source_content_type":"text/x-python","patch_set":43,"id":"fa98f980_1102066f","line":116,"updated":"2014-09-03 01:47:09.000000000","message":"Sorry, I realized now.\nActually function \u0026 variable for qos spec should go in  BaseVolumeAdminTest.\nThey defintly not belong to BaseVolumeTest as qos spec clients are initialized in BaseVolumeAdminTest only.","commit_id":"e95f58cb011f4461aad79054b231cb362ba675a3"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"25fed1dd14551f59ab9cb2760e281b67037b3c9e","unresolved":false,"context_lines":[{"line_number":154,"context_line":"            except Exception:"},{"line_number":155,"context_line":"                pass"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"    @classmethod"},{"line_number":158,"context_line":"    def clear_qos_specs(cls):"},{"line_number":159,"context_line":"        for qos_id in cls.qos_specs:"},{"line_number":160,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":43,"id":"fa98f980_71f0b291","line":157,"updated":"2014-09-03 01:47:09.000000000","message":"ditto","commit_id":"e95f58cb011f4461aad79054b231cb362ba675a3"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"25fed1dd14551f59ab9cb2760e281b67037b3c9e","unresolved":false,"context_lines":[{"line_number":212,"context_line":""},{"line_number":213,"context_line":"    @classmethod"},{"line_number":214,"context_line":"    def tearDownClass(cls):"},{"line_number":215,"context_line":"        cls.clear_qos_specs()"},{"line_number":216,"context_line":"        super(BaseVolumeAdminTest, cls).tearDownClass()"},{"line_number":217,"context_line":""},{"line_number":218,"context_line":""}],"source_content_type":"text/x-python","patch_set":43,"id":"fa98f980_111046a7","line":215,"updated":"2014-09-03 01:47:09.000000000","message":"yes, it should be clear here as clients belong to this class only.","commit_id":"e95f58cb011f4461aad79054b231cb362ba675a3"}],"tempest/api/volume/test_qos.py":[{"author":{"_account_id":7227,"name":"Timur Nurlygayanov","email":"tnurlygayanov@mirantis.com","username":"tnurlygayanov"},"change_message_id":"6b3adff5ff78d7847323f32da4e398494e157395","unresolved":false,"context_lines":[{"line_number":21,"context_line":"    _interface \u003d \"json\""},{"line_number":22,"context_line":"    \"\"\""},{"line_number":23,"context_line":"    Test the Cinder QoS-specs create, list, delete, show, associate,"},{"line_number":24,"context_line":"    disassociate, set/unset key V2 APIs."},{"line_number":25,"context_line":"    \"\"\""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":17,"id":"baada198_a2dae21a","line":24,"updated":"2014-08-08 11:47:14.000000000","message":"Let\u0027s use common OpenStack doc-strings pattern:\n\nhttp://docs.openstack.org/developer/hacking/#docstrings","commit_id":"8a7a002012f2d35096cc056b6ec8b541c1bd4073"},{"author":{"_account_id":11105,"name":"Swapnil Kulkarni","email":"coolsvap@gmail.com","username":"coolsvap"},"change_message_id":"f66ee3f9a6b7701b3918a9d621d5298220cc5dac","unresolved":false,"context_lines":[{"line_number":21,"context_line":"    _interface \u003d \"json\""},{"line_number":22,"context_line":"    \"\"\""},{"line_number":23,"context_line":"    Test the Cinder QoS-specs create, list, delete, show, associate,"},{"line_number":24,"context_line":"    disassociate, set/unset key V2 APIs."},{"line_number":25,"context_line":"    \"\"\""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":17,"id":"baada198_5dbd67b1","line":24,"in_reply_to":"baada198_a2dae21a","updated":"2014-08-08 12:15:30.000000000","message":"Done","commit_id":"8a7a002012f2d35096cc056b6ec8b541c1bd4073"},{"author":{"_account_id":7227,"name":"Timur Nurlygayanov","email":"tnurlygayanov@mirantis.com","username":"tnurlygayanov"},"change_message_id":"6b3adff5ff78d7847323f32da4e398494e157395","unresolved":false,"context_lines":[{"line_number":57,"context_line":"    def test_create_delete_qos_with_front_end_consumer(self):"},{"line_number":58,"context_line":"        \"\"\""},{"line_number":59,"context_line":"        tests the creation and deletion of QoS specs"},{"line_number":60,"context_line":"        with consumer as front-end"},{"line_number":61,"context_line":"        \"\"\""},{"line_number":62,"context_line":"        self._create_delete_test_qos_with_given_consumer(\u0027front-end\u0027)"},{"line_number":63,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"baada198_a201026f","line":60,"updated":"2014-08-08 11:47:14.000000000","message":"Let\u0027s use common OpenStack doc-strings pattern:\n\nhttp://docs.openstack.org/developer/hacking/#docstrings","commit_id":"8a7a002012f2d35096cc056b6ec8b541c1bd4073"},{"author":{"_account_id":11105,"name":"Swapnil Kulkarni","email":"coolsvap@gmail.com","username":"coolsvap"},"change_message_id":"f66ee3f9a6b7701b3918a9d621d5298220cc5dac","unresolved":false,"context_lines":[{"line_number":57,"context_line":"    def test_create_delete_qos_with_front_end_consumer(self):"},{"line_number":58,"context_line":"        \"\"\""},{"line_number":59,"context_line":"        tests the creation and deletion of QoS specs"},{"line_number":60,"context_line":"        with consumer as front-end"},{"line_number":61,"context_line":"        \"\"\""},{"line_number":62,"context_line":"        self._create_delete_test_qos_with_given_consumer(\u0027front-end\u0027)"},{"line_number":63,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"baada198_7dba2bbb","line":60,"in_reply_to":"baada198_a201026f","updated":"2014-08-08 12:15:30.000000000","message":"Done","commit_id":"8a7a002012f2d35096cc056b6ec8b541c1bd4073"},{"author":{"_account_id":7227,"name":"Timur Nurlygayanov","email":"tnurlygayanov@mirantis.com","username":"tnurlygayanov"},"change_message_id":"6b3adff5ff78d7847323f32da4e398494e157395","unresolved":false,"context_lines":[{"line_number":64,"context_line":"    def test_create_delete_qos_with_back_end_consumer(self):"},{"line_number":65,"context_line":"        \"\"\""},{"line_number":66,"context_line":"        tests the creation and deletion of QoS specs"},{"line_number":67,"context_line":"        with consumer as back-end"},{"line_number":68,"context_line":"        \"\"\""},{"line_number":69,"context_line":"        self._create_delete_test_qos_with_given_consumer(\u0027back-end\u0027)"},{"line_number":70,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"baada198_22f5f283","line":67,"updated":"2014-08-08 11:47:14.000000000","message":"the same for this doc-string.","commit_id":"8a7a002012f2d35096cc056b6ec8b541c1bd4073"},{"author":{"_account_id":11105,"name":"Swapnil Kulkarni","email":"coolsvap@gmail.com","username":"coolsvap"},"change_message_id":"f66ee3f9a6b7701b3918a9d621d5298220cc5dac","unresolved":false,"context_lines":[{"line_number":64,"context_line":"    def test_create_delete_qos_with_back_end_consumer(self):"},{"line_number":65,"context_line":"        \"\"\""},{"line_number":66,"context_line":"        tests the creation and deletion of QoS specs"},{"line_number":67,"context_line":"        with consumer as back-end"},{"line_number":68,"context_line":"        \"\"\""},{"line_number":69,"context_line":"        self._create_delete_test_qos_with_given_consumer(\u0027back-end\u0027)"},{"line_number":70,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"baada198_9dda9f1b","line":67,"in_reply_to":"baada198_22f5f283","updated":"2014-08-08 12:15:30.000000000","message":"Done","commit_id":"8a7a002012f2d35096cc056b6ec8b541c1bd4073"},{"author":{"_account_id":7227,"name":"Timur Nurlygayanov","email":"tnurlygayanov@mirantis.com","username":"tnurlygayanov"},"change_message_id":"6b3adff5ff78d7847323f32da4e398494e157395","unresolved":false,"context_lines":[{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    def test_create_delete_qos_with_both_consumer(self):"},{"line_number":72,"context_line":"        \"\"\""},{"line_number":73,"context_line":"        tests the creation and deletion of QoS specs"},{"line_number":74,"context_line":"        with consumer as both"},{"line_number":75,"context_line":"        \"\"\""},{"line_number":76,"context_line":"        self._create_delete_test_qos_with_given_consumer(\u0027both\u0027)"}],"source_content_type":"text/x-python","patch_set":17,"id":"baada198_42f2e69b","line":73,"updated":"2014-08-08 11:47:14.000000000","message":"the same for this doc-string.","commit_id":"8a7a002012f2d35096cc056b6ec8b541c1bd4073"},{"author":{"_account_id":11105,"name":"Swapnil Kulkarni","email":"coolsvap@gmail.com","username":"coolsvap"},"change_message_id":"f66ee3f9a6b7701b3918a9d621d5298220cc5dac","unresolved":false,"context_lines":[{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    def test_create_delete_qos_with_both_consumer(self):"},{"line_number":72,"context_line":"        \"\"\""},{"line_number":73,"context_line":"        tests the creation and deletion of QoS specs"},{"line_number":74,"context_line":"        with consumer as both"},{"line_number":75,"context_line":"        \"\"\""},{"line_number":76,"context_line":"        self._create_delete_test_qos_with_given_consumer(\u0027both\u0027)"}],"source_content_type":"text/x-python","patch_set":17,"id":"baada198_bddf630b","line":73,"in_reply_to":"baada198_42f2e69b","updated":"2014-08-08 12:15:30.000000000","message":"Done","commit_id":"8a7a002012f2d35096cc056b6ec8b541c1bd4073"},{"author":{"_account_id":7227,"name":"Timur Nurlygayanov","email":"tnurlygayanov@mirantis.com","username":"tnurlygayanov"},"change_message_id":"6b3adff5ff78d7847323f32da4e398494e157395","unresolved":false,"context_lines":[{"line_number":143,"context_line":"        1. associate_qos"},{"line_number":144,"context_line":"        2. get_association_qos"},{"line_number":145,"context_line":"        3. disassociate_qos"},{"line_number":146,"context_line":"        4. disassociate_all_qos"},{"line_number":147,"context_line":"        \"\"\""},{"line_number":148,"context_line":"        # create a test volume-type"},{"line_number":149,"context_line":"        vol_type \u003d []"}],"source_content_type":"text/x-python","patch_set":17,"id":"baada198_e22e9af8","line":146,"updated":"2014-08-08 11:47:14.000000000","message":"the same for this doc-string.","commit_id":"8a7a002012f2d35096cc056b6ec8b541c1bd4073"},{"author":{"_account_id":11105,"name":"Swapnil Kulkarni","email":"coolsvap@gmail.com","username":"coolsvap"},"change_message_id":"f66ee3f9a6b7701b3918a9d621d5298220cc5dac","unresolved":false,"context_lines":[{"line_number":143,"context_line":"        1. associate_qos"},{"line_number":144,"context_line":"        2. get_association_qos"},{"line_number":145,"context_line":"        3. disassociate_qos"},{"line_number":146,"context_line":"        4. disassociate_all_qos"},{"line_number":147,"context_line":"        \"\"\""},{"line_number":148,"context_line":"        # create a test volume-type"},{"line_number":149,"context_line":"        vol_type \u003d []"}],"source_content_type":"text/x-python","patch_set":17,"id":"baada198_dde097cd","line":146,"in_reply_to":"baada198_e22e9af8","updated":"2014-08-08 12:15:30.000000000","message":"Done","commit_id":"8a7a002012f2d35096cc056b6ec8b541c1bd4073"},{"author":{"_account_id":7227,"name":"Timur Nurlygayanov","email":"tnurlygayanov@mirantis.com","username":"tnurlygayanov"},"change_message_id":"22385f579ed27e17bb76bdd349410bac9ddf9597","unresolved":false,"context_lines":[{"line_number":20,"context_line":"class QosSpecsV2TestJSON(base.BaseVolumeAdminTest):"},{"line_number":21,"context_line":"    _interface \u003d \"json\""},{"line_number":22,"context_line":"    \"\"\""},{"line_number":23,"context_line":"    Test the Cinder QoS-specs."},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    Tests for  create, list, delete, show, associate,"},{"line_number":26,"context_line":"    disassociate, set/unset key V2 APIs."}],"source_content_type":"text/x-python","patch_set":20,"id":"baada198_4f45ae13","line":23,"updated":"2014-08-08 12:42:23.000000000","message":"Let\u0027s use common pattern for all doc-strings, as described here: http://docs.openstack.org/developer/hacking/#docstrings\n\nfor example, we need to write this doc-string like:\n\n\"\"\"Test the Cinder QoS-specs.\n\nTests for create, list, delete, show, associate,\ndisassociate, set/unset key V2 APIs.\n\n\"\"\"\n\nand the same for other multi-line doc-strings in this file.","commit_id":"a6a5da384ce2270ec69ce86677b23417e261735d"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"f8ddac3f6a07083498467e4dfc87b527a43bb025","unresolved":false,"context_lines":[{"line_number":95,"context_line":""},{"line_number":96,"context_line":"        # test the deletion of a specs key from qos-specs"},{"line_number":97,"context_line":"        keys \u003d [\u0027iops_bytes\u0027]"},{"line_number":98,"context_line":"        _, _ \u003d self.volume_qos_client.unset_qos_key(self.created_qos[\u0027id\u0027],"},{"line_number":99,"context_line":"                                                    keys)"},{"line_number":100,"context_line":"        operation \u003d \u0027qos-key-unset\u0027"},{"line_number":101,"context_line":"        self.volume_qos_client.wait_for_qos_operations(self.created_qos[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":26,"id":"7ac7a964_df171e50","line":98,"updated":"2014-08-14 12:01:13.000000000","message":"if you don\u0027t care about output - don\u0027t assign it at all. I don\u0027t even think doing _,_ \u003d foo() is valid in python.\njust call foo() without assigning its output","commit_id":"20db00e2245af8f1df388dff53bfa8c929f3c634"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"f8ddac3f6a07083498467e4dfc87b527a43bb025","unresolved":false,"context_lines":[{"line_number":112,"context_line":"        return vol_type"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"    def _test_associate_qos(self, vol_type_id):"},{"line_number":115,"context_line":"        _, _ \u003d self.volume_qos_client.associate_qos(self.created_qos[\u0027id\u0027],"},{"line_number":116,"context_line":"                                                    vol_type_id)"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    def _test_get_association_qos(self):"}],"source_content_type":"text/x-python","patch_set":26,"id":"7ac7a964_ff0bfa28","line":115,"updated":"2014-08-14 12:01:13.000000000","message":"same here","commit_id":"20db00e2245af8f1df388dff53bfa8c929f3c634"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"f8ddac3f6a07083498467e4dfc87b527a43bb025","unresolved":false,"context_lines":[{"line_number":150,"context_line":"            self.assertIn(vol_type[i][\u0027id\u0027], associations)"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"        # disassociate a volume-type with qos-specs"},{"line_number":153,"context_line":"        _, _ \u003d self.volume_qos_client.disassociate_qos("},{"line_number":154,"context_line":"            self.created_qos[\u0027id\u0027], vol_type[0][\u0027id\u0027])"},{"line_number":155,"context_line":"        operation \u003d \u0027disassociate\u0027"},{"line_number":156,"context_line":"        self.volume_qos_client.wait_for_qos_operations(self.created_qos[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":26,"id":"7ac7a964_5f030e0f","line":153,"updated":"2014-08-14 12:01:13.000000000","message":"and here","commit_id":"20db00e2245af8f1df388dff53bfa8c929f3c634"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"f8ddac3f6a07083498467e4dfc87b527a43bb025","unresolved":false,"context_lines":[{"line_number":160,"context_line":"        self.assertNotIn(vol_type[0][\u0027id\u0027], associations)"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"        # disassociate all volume-types from qos-specs"},{"line_number":163,"context_line":"        _, _ \u003d self.volume_qos_client.disassociate_all_qos("},{"line_number":164,"context_line":"            self.created_qos[\u0027id\u0027])"},{"line_number":165,"context_line":"        operation \u003d \u0027disassociate-all\u0027"},{"line_number":166,"context_line":"        self.volume_qos_client.wait_for_qos_operations(self.created_qos[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":26,"id":"7ac7a964_7afff801","line":163,"updated":"2014-08-14 12:01:13.000000000","message":"and here","commit_id":"20db00e2245af8f1df388dff53bfa8c929f3c634"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"7d3fb78ca74205310e85a38cd161b3905619a1db","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"class QosSpecsV2TestJSON(base.BaseVolumeAdminTest):"},{"line_number":21,"context_line":"    _interface \u003d \"json\""},{"line_number":22,"context_line":"    \"\"\"Test the Cinder QoS-specs."},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    Tests for  create, list, delete, show, associate,"}],"source_content_type":"text/x-python","patch_set":30,"id":"1abeadc6_12bbf9c4","line":21,"updated":"2014-08-20 01:51:14.000000000","message":"we can avoid setting _interface to json as it is default one.","commit_id":"22bcc3a246615cc68618b77324123aaed6c0f199"},{"author":{"_account_id":11105,"name":"Swapnil Kulkarni","email":"coolsvap@gmail.com","username":"coolsvap"},"change_message_id":"1cacba1656135bfb840d7cc5acd31ec5841f3b81","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"class QosSpecsV2TestJSON(base.BaseVolumeAdminTest):"},{"line_number":21,"context_line":"    _interface \u003d \"json\""},{"line_number":22,"context_line":"    \"\"\"Test the Cinder QoS-specs."},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    Tests for  create, list, delete, show, associate,"}],"source_content_type":"text/x-python","patch_set":30,"id":"1abeadc6_fad48f48","line":21,"in_reply_to":"1abeadc6_12bbf9c4","updated":"2014-08-20 05:56:50.000000000","message":"IMHO there is nothing wrong in being explicit :)","commit_id":"22bcc3a246615cc68618b77324123aaed6c0f199"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"6a63b11b298e1648f350d42c17476d206d060163","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"class QosSpecsV2TestJSON(base.BaseVolumeAdminTest):"},{"line_number":21,"context_line":"    _interface \u003d \"json\""},{"line_number":22,"context_line":"    \"\"\"Test the Cinder QoS-specs."},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    Tests for  create, list, delete, show, associate,"}],"source_content_type":"text/x-python","patch_set":35,"id":"1abeadc6_93546122","line":21,"updated":"2014-08-20 11:01:47.000000000","message":"we do not need this.","commit_id":"b0a4dfa1a94b09f632f80ed624071214b554fd07"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"128fc5cbbbcd5ff32b17c5e7d46abd8c17c9987c","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from tempest import test"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"class QosSpecsV2TestJSON(base.BaseVolumeAdminTest):"},{"line_number":21,"context_line":"    \"\"\"Test the Cinder QoS-specs."},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    Tests for  create, list, delete, show, associate,"}],"source_content_type":"text/x-python","patch_set":39,"id":"1abeadc6_211f9b6d","line":20,"updated":"2014-08-28 10:53:44.000000000","message":"Please group all test methods together (usually done at the bottom) and flag each with appropriate decorators","commit_id":"180354dcb6fe75db9999cfc8bd78407c2256ed46"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"128fc5cbbbcd5ff32b17c5e7d46abd8c17c9987c","unresolved":false,"context_lines":[{"line_number":123,"context_line":""},{"line_number":124,"context_line":"        return associations"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    def test_associate_disassociate_qos(self):"},{"line_number":127,"context_line":"        \"\"\"Test the following operations :"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"        1. associate_qos"}],"source_content_type":"text/x-python","patch_set":39,"id":"1abeadc6_01337f14","line":126,"updated":"2014-08-28 10:53:44.000000000","message":"test methods should have appropriate decorator (gate, smoke) to flag them","commit_id":"180354dcb6fe75db9999cfc8bd78407c2256ed46"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"e6b95f762a4b6623551a2bba66d8b50d233af84e","unresolved":false,"context_lines":[{"line_number":123,"context_line":""},{"line_number":124,"context_line":"        return associations"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    def test_associate_disassociate_qos(self):"},{"line_number":127,"context_line":"        \"\"\"Test the following operations :"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"        1. associate_qos"}],"source_content_type":"text/x-python","patch_set":39,"id":"1abeadc6_8da17e96","line":126,"in_reply_to":"1abeadc6_01337f14","updated":"2014-08-28 11:06:43.000000000","message":"\"gate\" tag is legacy tag which is not in use in gate. \n\nbelow tests set can be tagged as smoke-\n\ntest_create_delete_qos_with_both_consumer\ntest_get_qos(self)\ntest_list_qos(self)\ntest_set_unset_qos_key\ntest_associate_disassociate_qos","commit_id":"180354dcb6fe75db9999cfc8bd78407c2256ed46"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"4b721d8b36c378b2d0f76109a17628056c88446f","unresolved":false,"context_lines":[{"line_number":30,"context_line":"        super(QosSpecsV2TestJSON, cls).setUpClass()"},{"line_number":31,"context_line":"        # Create admin qos client"},{"line_number":32,"context_line":"        # Create a test shared qos-specs for tests"},{"line_number":33,"context_line":"        cls.qos_name \u003d utils.rand_name(cls.__name__ + \u0027-QoS\u0027)"},{"line_number":34,"context_line":"        cls.qos_consumer \u003d \u0027front-end\u0027"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"        cls.created_qos \u003d cls.create_test_qos_specs(cls.qos_name,"}],"source_content_type":"text/x-python","patch_set":44,"id":"fa98f980_99af7c94","line":33,"updated":"2014-09-07 10:45:20.000000000","message":"nit: \"%s-QoS\" % cls.__name__","commit_id":"7dba3e67dd5f5a971e93d2a7d3e5ca58e22d35d4"}],"tempest/clients.py":[{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"1ee35a49a2b31653b4940972df9d0cf67861561a","unresolved":false,"context_lines":[{"line_number":385,"context_line":"        self.data_processing_client \u003d DataProcessingClient("},{"line_number":386,"context_line":"            self.auth_provider)"},{"line_number":387,"context_line":"        self.migrations_client \u003d MigrationsClientJSON(self.auth_provider)"},{"line_number":388,"context_line":"        self.qos_client \u003d QosSpecsClientJSON(self.auth_provider)"},{"line_number":389,"context_line":""},{"line_number":390,"context_line":""},{"line_number":391,"context_line":"class AltManager(Manager):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAXX%2F%2FwZQ%3D","line":388,"updated":"2014-04-28 08:00:13.000000000","message":"Please make a Note/TODO here that \"As XML client is not yet implemented so setting the \u0027qos_client\u0027 here. Once XML client is implemented then, \u0027qos_client\u0027 needs to be initialized in respective if else condition according to JSON and XML.\"","commit_id":"c8870ff835a1de00f6f7401864238ee5209a93dd"},{"author":{"_account_id":10966,"name":"Abhijeet Jain","email":"abhijeetjpjain@gmail.com","username":"Abhijeet.Jain"},"change_message_id":"8a88053973d4eaf6b0932be0eb07b3537cee49fc","unresolved":false,"context_lines":[{"line_number":385,"context_line":"        self.data_processing_client \u003d DataProcessingClient("},{"line_number":386,"context_line":"            self.auth_provider)"},{"line_number":387,"context_line":"        self.migrations_client \u003d MigrationsClientJSON(self.auth_provider)"},{"line_number":388,"context_line":"        self.qos_client \u003d QosSpecsClientJSON(self.auth_provider)"},{"line_number":389,"context_line":""},{"line_number":390,"context_line":""},{"line_number":391,"context_line":"class AltManager(Manager):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAXX%2F%2FwTE%3D","line":388,"in_reply_to":"AAAAXX%2F%2FwZQ%3D","updated":"2014-04-28 08:18:23.000000000","message":"Done","commit_id":"c8870ff835a1de00f6f7401864238ee5209a93dd"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"ccb246691e8b8871114c20e05b5e125d252387a5","unresolved":false,"context_lines":[{"line_number":392,"context_line":"        #        So, setting the qos_client here. Once client are implemented,"},{"line_number":393,"context_line":"        #        qos_client would be moved to its respective if/else."},{"line_number":394,"context_line":"        # Bug : 1312553"},{"line_number":395,"context_line":"        self.qos_client \u003d QosSpecsClientJSON(self.auth_provider)"},{"line_number":396,"context_line":""},{"line_number":397,"context_line":""},{"line_number":398,"context_line":"class AltManager(Manager):"}],"source_content_type":"text/x-python","patch_set":10,"id":"1ae5cdf2_584f53be","line":395,"updated":"2014-06-10 21:28:35.000000000","message":"qos_client doesn\u0027t sound specific enough.\n\nPerhaps volume_qos_client?","commit_id":"a669bf4fa8a5f53b70b1df9f935beabf7b14ff46"},{"author":{"_account_id":10966,"name":"Abhijeet Jain","email":"abhijeetjpjain@gmail.com","username":"Abhijeet.Jain"},"change_message_id":"dfed4326bf9c5837953d1cbc9f945e3e49050672","unresolved":false,"context_lines":[{"line_number":392,"context_line":"        #        So, setting the qos_client here. Once client are implemented,"},{"line_number":393,"context_line":"        #        qos_client would be moved to its respective if/else."},{"line_number":394,"context_line":"        # Bug : 1312553"},{"line_number":395,"context_line":"        self.qos_client \u003d QosSpecsClientJSON(self.auth_provider)"},{"line_number":396,"context_line":""},{"line_number":397,"context_line":""},{"line_number":398,"context_line":"class AltManager(Manager):"}],"source_content_type":"text/x-python","patch_set":10,"id":"1ae5cdf2_6bd511e4","line":395,"in_reply_to":"1ae5cdf2_584f53be","updated":"2014-06-11 03:32:14.000000000","message":"It doesn\u0027t seem necessary to lengthen the variable name as its already unique.","commit_id":"a669bf4fa8a5f53b70b1df9f935beabf7b14ff46"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"7899f4b5bd257806fbecffbb06b0eb3e182ea5ef","unresolved":false,"context_lines":[{"line_number":392,"context_line":"        #        So, setting the qos_client here. Once client are implemented,"},{"line_number":393,"context_line":"        #        qos_client would be moved to its respective if/else."},{"line_number":394,"context_line":"        # Bug : 1312553"},{"line_number":395,"context_line":"        self.qos_client \u003d QosSpecsClientJSON(self.auth_provider)"},{"line_number":396,"context_line":""},{"line_number":397,"context_line":""},{"line_number":398,"context_line":"class AltManager(Manager):"}],"source_content_type":"text/x-python","patch_set":10,"id":"1ae5cdf2_c5c28ee8","line":395,"in_reply_to":"1ae5cdf2_6bd511e4","updated":"2014-06-11 08:29:01.000000000","message":"Agree with Andrea, volume_qos_client gives more readability about what client it is. Please change.","commit_id":"a669bf4fa8a5f53b70b1df9f935beabf7b14ff46"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"6a63b11b298e1648f350d42c17476d206d060163","unresolved":false,"context_lines":[{"line_number":377,"context_line":"                self.auth_provider)"},{"line_number":378,"context_line":"            self.volumes_extension_client \u003d VolumeExtensionClientJSON("},{"line_number":379,"context_line":"                self.auth_provider)"},{"line_number":380,"context_line":"            self.volume_qos_client \u003d QosSpecsClientJSON(self.auth_provider)"},{"line_number":381,"context_line":"            self.volumes_v2_extension_client \u003d VolumeV2ExtensionClientJSON("},{"line_number":382,"context_line":"                self.auth_provider)"},{"line_number":383,"context_line":"            self.volume_qos_v2_client \u003d QosSpecsV2ClientJSON("}],"source_content_type":"text/x-python","patch_set":35,"id":"1abeadc6_f3a03545","line":380,"updated":"2014-08-20 11:01:47.000000000","message":"these both client needs to be moved out of if else condition so that it can work for xml tests also.\n\nSo remove both from here and ad those @L435","commit_id":"b0a4dfa1a94b09f632f80ed624071214b554fd07"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"6a63b11b298e1648f350d42c17476d206d060163","unresolved":false,"context_lines":[{"line_number":432,"context_line":"        self.migrations_client \u003d MigrationsClientJSON(self.auth_provider)"},{"line_number":433,"context_line":"        self.security_group_default_rules_client \u003d ("},{"line_number":434,"context_line":"            SecurityGroupDefaultRulesClientJSON(self.auth_provider))"},{"line_number":435,"context_line":"        self.networks_client \u003d NetworksClientJSON(self.auth_provider)"},{"line_number":436,"context_line":""},{"line_number":437,"context_line":""},{"line_number":438,"context_line":"class AltManager(Manager):"}],"source_content_type":"text/x-python","patch_set":35,"id":"1abeadc6_535ac950","line":435,"updated":"2014-08-20 11:01:47.000000000","message":"Add clients here with Note-\n\n# NOTE : As XML clients are not implemented for Qos-specs. \n#So, setting the qos_client here. Once client are implemented, \t\n#qos_client would be moved to its respective if/else. \n# Bug : 1312553 \nself.volume_qos_client \u003d QosSpecsClientJSON(self.auth_provider)\nself.volume_qos_v2_client \u003d QosSpecsV2ClientJSON(\t\n                self.auth_provider)","commit_id":"b0a4dfa1a94b09f632f80ed624071214b554fd07"}],"tempest/services/volume/json/admin/qos_client.py":[{"author":{"_account_id":8824,"name":"Sergey Murashov","email":"smurashov@mirantis.com","username":"SergeyMurashov"},"change_message_id":"c076e0599921a87acad1534bf5f276e8fc36ef3b","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        while True:"},{"line_number":55,"context_line":"            if operation \u003d\u003d \u0027qos-key-unset\u0027:"},{"line_number":56,"context_line":"                resp, body \u003d self.get_qos(qos_id)"},{"line_number":57,"context_line":"                assert 200 \u003d\u003d resp.status"},{"line_number":58,"context_line":"                if not any(key in body[\u0027specs\u0027] for key in args):"},{"line_number":59,"context_line":"                    return"},{"line_number":60,"context_line":"            elif operation \u003d\u003d \u0027disassociate\u0027:"}],"source_content_type":"text/x-python","patch_set":6,"id":"9ad9bd40_db8a591a","line":57,"updated":"2014-05-06 08:39:26.000000000","message":"please use self.assertEqual","commit_id":"f0ec39d6418391ee3560f286d6e5d7042317a114"},{"author":{"_account_id":10966,"name":"Abhijeet Jain","email":"abhijeetjpjain@gmail.com","username":"Abhijeet.Jain"},"change_message_id":"195b06d958b16d4bca7aed053545bca568f06ccc","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        while True:"},{"line_number":55,"context_line":"            if operation \u003d\u003d \u0027qos-key-unset\u0027:"},{"line_number":56,"context_line":"                resp, body \u003d self.get_qos(qos_id)"},{"line_number":57,"context_line":"                assert 200 \u003d\u003d resp.status"},{"line_number":58,"context_line":"                if not any(key in body[\u0027specs\u0027] for key in args):"},{"line_number":59,"context_line":"                    return"},{"line_number":60,"context_line":"            elif operation \u003d\u003d \u0027disassociate\u0027:"}],"source_content_type":"text/x-python","patch_set":6,"id":"7adec928_f3b981ea","line":57,"in_reply_to":"9ad9bd40_db8a591a","updated":"2014-05-08 05:36:28.000000000","message":"Done","commit_id":"f0ec39d6418391ee3560f286d6e5d7042317a114"},{"author":{"_account_id":7428,"name":"Yaroslav Lobankov","email":"lobankovyv@gmail.com","username":"ylobankov"},"change_message_id":"beaa73bf9834cb7ecabf35e86848849bcfcbe53f","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        args \u003d volume-type-id disassociated when operation \u003d \u0027disassociate\u0027"},{"line_number":51,"context_line":"        args \u003d None when operation \u003d \u0027disassociate-all\u0027"},{"line_number":52,"context_line":"        \"\"\""},{"line_number":53,"context_line":"        start_time \u003d int(time.time())"},{"line_number":54,"context_line":"        while True:"},{"line_number":55,"context_line":"            if operation \u003d\u003d \u0027qos-key-unset\u0027:"},{"line_number":56,"context_line":"                resp, body \u003d self.get_qos(qos_id)"}],"source_content_type":"text/x-python","patch_set":9,"id":"7adec928_e9478549","line":53,"updated":"2014-05-13 10:32:39.000000000","message":"I would suggest to write something like this. If you don\u0027t like this way, then leave your way :)\n\n        from tempest.openstack.common import timeutils\n\n        ...\n\n        start_time \u003d timeutils.utcnow()\n        while timeutils.delta_seconds(\n                start_time, timeutils.utcnow()) \u003c self.build_timeout:\n            if operation \u003d\u003d \u0027qos-key-unset\u0027:\n                resp, body \u003d self.get_qos(qos_id)\n                assert 200 \u003d\u003d resp.status\n                if not any(key in body[\u0027specs\u0027] for key in args):\n                    return\n            elif operation \u003d\u003d \u0027disassociate\u0027:\n                resp, body \u003d self.get_association_qos(qos_id)\n                assert 200 \u003d\u003d resp.status\n                if not any(args in body[i][\u0027id\u0027] for i in range(0, len(body))):\n                    return\n            elif operation \u003d\u003d \u0027disassociate-all\u0027:\n                resp, body \u003d self.get_association_qos(qos_id)\n                assert 200 \u003d\u003d resp.status\n                if not body:\n                    return\n            else:\n                msg \u003d (\" operation value is either not defined or incorrect.\")\n                raise exceptions.UnprocessableEntity(msg)\n            \n            time.sleep(self.build_interval)\n\n        raise exceptions.TimeoutException","commit_id":"ae54a84e6cc9584cde42448773bc147a18d7b703"},{"author":{"_account_id":10966,"name":"Abhijeet Jain","email":"abhijeetjpjain@gmail.com","username":"Abhijeet.Jain"},"change_message_id":"21458b7f5efd60e8f1f7dec89ff98739254b1c2c","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        args \u003d volume-type-id disassociated when operation \u003d \u0027disassociate\u0027"},{"line_number":51,"context_line":"        args \u003d None when operation \u003d \u0027disassociate-all\u0027"},{"line_number":52,"context_line":"        \"\"\""},{"line_number":53,"context_line":"        start_time \u003d int(time.time())"},{"line_number":54,"context_line":"        while True:"},{"line_number":55,"context_line":"            if operation \u003d\u003d \u0027qos-key-unset\u0027:"},{"line_number":56,"context_line":"                resp, body \u003d self.get_qos(qos_id)"}],"source_content_type":"text/x-python","patch_set":9,"id":"7adec928_3c7d1f1d","line":53,"in_reply_to":"7adec928_5c92eb9f","updated":"2014-05-14 08:58:41.000000000","message":"Okie...I just thought to let it be the way it has been followed in other modules. :)","commit_id":"ae54a84e6cc9584cde42448773bc147a18d7b703"},{"author":{"_account_id":7428,"name":"Yaroslav Lobankov","email":"lobankovyv@gmail.com","username":"ylobankov"},"change_message_id":"acc3f6436626eb777468dbc5f21ee349ac70edcb","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        args \u003d volume-type-id disassociated when operation \u003d \u0027disassociate\u0027"},{"line_number":51,"context_line":"        args \u003d None when operation \u003d \u0027disassociate-all\u0027"},{"line_number":52,"context_line":"        \"\"\""},{"line_number":53,"context_line":"        start_time \u003d int(time.time())"},{"line_number":54,"context_line":"        while True:"},{"line_number":55,"context_line":"            if operation \u003d\u003d \u0027qos-key-unset\u0027:"},{"line_number":56,"context_line":"                resp, body \u003d self.get_qos(qos_id)"}],"source_content_type":"text/x-python","patch_set":9,"id":"7adec928_5c92eb9f","line":53,"in_reply_to":"7adec928_c9bf29fa","updated":"2014-05-14 08:54:15.000000000","message":"OK. My way looks more readable to me. Anyway I don\u0027t mind against your way.","commit_id":"ae54a84e6cc9584cde42448773bc147a18d7b703"},{"author":{"_account_id":10966,"name":"Abhijeet Jain","email":"abhijeetjpjain@gmail.com","username":"Abhijeet.Jain"},"change_message_id":"7bcfca2e51a54ed5c76d833f7289e7397c12654c","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        args \u003d volume-type-id disassociated when operation \u003d \u0027disassociate\u0027"},{"line_number":51,"context_line":"        args \u003d None when operation \u003d \u0027disassociate-all\u0027"},{"line_number":52,"context_line":"        \"\"\""},{"line_number":53,"context_line":"        start_time \u003d int(time.time())"},{"line_number":54,"context_line":"        while True:"},{"line_number":55,"context_line":"            if operation \u003d\u003d \u0027qos-key-unset\u0027:"},{"line_number":56,"context_line":"                resp, body \u003d self.get_qos(qos_id)"}],"source_content_type":"text/x-python","patch_set":9,"id":"7adec928_c9bf29fa","line":53,"in_reply_to":"7adec928_e9478549","updated":"2014-05-13 10:44:36.000000000","message":"Sorry, but I don\u0027t think It will make much difference.\nIs it ?","commit_id":"ae54a84e6cc9584cde42448773bc147a18d7b703"}],"tempest/services/volume/json/qos_client.py":[{"author":{"_account_id":7227,"name":"Timur Nurlygayanov","email":"tnurlygayanov@mirantis.com","username":"tnurlygayanov"},"change_message_id":"6b3adff5ff78d7847323f32da4e398494e157395","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"class BaseQosSpecsClientJSON(rest_client.RestClient):"},{"line_number":26,"context_line":"    \"\"\""},{"line_number":27,"context_line":"    Client class to send CRUD QoS API requests to a Cinder endpoint"},{"line_number":28,"context_line":"    \"\"\""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    def __init__(self, auth_provider):"}],"source_content_type":"text/x-python","patch_set":17,"id":"baada198_823f9e21","line":27,"updated":"2014-08-08 11:47:14.000000000","message":"Let\u0027s use common OpenStack doc-strings pattern:\n\nhttp://docs.openstack.org/developer/hacking/#docstrings","commit_id":"8a7a002012f2d35096cc056b6ec8b541c1bd4073"},{"author":{"_account_id":11105,"name":"Swapnil Kulkarni","email":"coolsvap@gmail.com","username":"coolsvap"},"change_message_id":"f66ee3f9a6b7701b3918a9d621d5298220cc5dac","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"class BaseQosSpecsClientJSON(rest_client.RestClient):"},{"line_number":26,"context_line":"    \"\"\""},{"line_number":27,"context_line":"    Client class to send CRUD QoS API requests to a Cinder endpoint"},{"line_number":28,"context_line":"    \"\"\""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    def __init__(self, auth_provider):"}],"source_content_type":"text/x-python","patch_set":17,"id":"baada198_3dcb534b","line":27,"in_reply_to":"baada198_823f9e21","updated":"2014-08-08 12:15:30.000000000","message":"Done","commit_id":"8a7a002012f2d35096cc056b6ec8b541c1bd4073"},{"author":{"_account_id":7227,"name":"Timur Nurlygayanov","email":"tnurlygayanov@mirantis.com","username":"tnurlygayanov"},"change_message_id":"6b3adff5ff78d7847323f32da4e398494e157395","unresolved":false,"context_lines":[{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def wait_for_qos_operations(self, qos_id, operation, args\u003dNone):"},{"line_number":44,"context_line":"        \"\"\""},{"line_number":45,"context_line":"        Waits for a qos operations to be completed."},{"line_number":46,"context_line":"        NOTE : operation value is required for  wait_for_qos_operations()"},{"line_number":47,"context_line":"        operation \u003d \u0027qos-key\u0027 / \u0027disassociate\u0027 / \u0027disassociate-all\u0027"},{"line_number":48,"context_line":"        args \u003d keys[] when operation \u003d \u0027qos-key\u0027"}],"source_content_type":"text/x-python","patch_set":17,"id":"baada198_a20f428a","line":45,"updated":"2014-08-08 11:47:14.000000000","message":"the same for this doc-string.","commit_id":"8a7a002012f2d35096cc056b6ec8b541c1bd4073"},{"author":{"_account_id":11105,"name":"Swapnil Kulkarni","email":"coolsvap@gmail.com","username":"coolsvap"},"change_message_id":"f66ee3f9a6b7701b3918a9d621d5298220cc5dac","unresolved":false,"context_lines":[{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def wait_for_qos_operations(self, qos_id, operation, args\u003dNone):"},{"line_number":44,"context_line":"        \"\"\""},{"line_number":45,"context_line":"        Waits for a qos operations to be completed."},{"line_number":46,"context_line":"        NOTE : operation value is required for  wait_for_qos_operations()"},{"line_number":47,"context_line":"        operation \u003d \u0027qos-key\u0027 / \u0027disassociate\u0027 / \u0027disassociate-all\u0027"},{"line_number":48,"context_line":"        args \u003d keys[] when operation \u003d \u0027qos-key\u0027"}],"source_content_type":"text/x-python","patch_set":17,"id":"baada198_5dd487e9","line":45,"in_reply_to":"baada198_a20f428a","updated":"2014-08-08 12:15:30.000000000","message":"Done","commit_id":"8a7a002012f2d35096cc056b6ec8b541c1bd4073"},{"author":{"_account_id":7227,"name":"Timur Nurlygayanov","email":"tnurlygayanov@mirantis.com","username":"tnurlygayanov"},"change_message_id":"6b3adff5ff78d7847323f32da4e398494e157395","unresolved":false,"context_lines":[{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    def create_qos(self, name, consumer, **kwargs):"},{"line_number":78,"context_line":"        \"\"\""},{"line_number":79,"context_line":"        Create a QoS Specification."},{"line_number":80,"context_line":"        name : name of the QoS specifications"},{"line_number":81,"context_line":"        consumer : conumer of Qos ( front-end / back-end / both )"},{"line_number":82,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":17,"id":"baada198_e205ba68","line":79,"updated":"2014-08-08 11:47:14.000000000","message":"the same for this doc-string.","commit_id":"8a7a002012f2d35096cc056b6ec8b541c1bd4073"},{"author":{"_account_id":11105,"name":"Swapnil Kulkarni","email":"coolsvap@gmail.com","username":"coolsvap"},"change_message_id":"f66ee3f9a6b7701b3918a9d621d5298220cc5dac","unresolved":false,"context_lines":[{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    def create_qos(self, name, consumer, **kwargs):"},{"line_number":78,"context_line":"        \"\"\""},{"line_number":79,"context_line":"        Create a QoS Specification."},{"line_number":80,"context_line":"        name : name of the QoS specifications"},{"line_number":81,"context_line":"        consumer : conumer of Qos ( front-end / back-end / both )"},{"line_number":82,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":17,"id":"baada198_7dd14bf7","line":79,"in_reply_to":"baada198_e205ba68","updated":"2014-08-08 12:15:30.000000000","message":"Done","commit_id":"8a7a002012f2d35096cc056b6ec8b541c1bd4073"},{"author":{"_account_id":7227,"name":"Timur Nurlygayanov","email":"tnurlygayanov@mirantis.com","username":"tnurlygayanov"},"change_message_id":"6b3adff5ff78d7847323f32da4e398494e157395","unresolved":false,"context_lines":[{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    def set_qos_key(self, qos_id, **kwargs):"},{"line_number":109,"context_line":"        \"\"\""},{"line_number":110,"context_line":"        Set the specified keys/values of QoS specification."},{"line_number":111,"context_line":"        kwargs : it is the dictionary of the key\u003dvalue pairs to set"},{"line_number":112,"context_line":"        \"\"\""},{"line_number":113,"context_line":"        put_body \u003d json.dumps({\"qos_specs\": kwargs})"}],"source_content_type":"text/x-python","patch_set":17,"id":"baada198_6219aad1","line":110,"updated":"2014-08-08 11:47:14.000000000","message":"the same for this doc-string.","commit_id":"8a7a002012f2d35096cc056b6ec8b541c1bd4073"},{"author":{"_account_id":11105,"name":"Swapnil Kulkarni","email":"coolsvap@gmail.com","username":"coolsvap"},"change_message_id":"f66ee3f9a6b7701b3918a9d621d5298220cc5dac","unresolved":false,"context_lines":[{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    def set_qos_key(self, qos_id, **kwargs):"},{"line_number":109,"context_line":"        \"\"\""},{"line_number":110,"context_line":"        Set the specified keys/values of QoS specification."},{"line_number":111,"context_line":"        kwargs : it is the dictionary of the key\u003dvalue pairs to set"},{"line_number":112,"context_line":"        \"\"\""},{"line_number":113,"context_line":"        put_body \u003d json.dumps({\"qos_specs\": kwargs})"}],"source_content_type":"text/x-python","patch_set":17,"id":"baada198_fdfc7b73","line":110,"in_reply_to":"baada198_6219aad1","updated":"2014-08-08 12:15:30.000000000","message":"Done","commit_id":"8a7a002012f2d35096cc056b6ec8b541c1bd4073"},{"author":{"_account_id":7227,"name":"Timur Nurlygayanov","email":"tnurlygayanov@mirantis.com","username":"tnurlygayanov"},"change_message_id":"6b3adff5ff78d7847323f32da4e398494e157395","unresolved":false,"context_lines":[{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    def unset_qos_key(self, qos_id, keys):"},{"line_number":119,"context_line":"        \"\"\""},{"line_number":120,"context_line":"        Unset the specified keys of QoS specification."},{"line_number":121,"context_line":"        keys : it is the array of the keys to unset"},{"line_number":122,"context_line":"        \"\"\""},{"line_number":123,"context_line":"        put_body \u003d json.dumps({\u0027keys\u0027: keys})"}],"source_content_type":"text/x-python","patch_set":17,"id":"baada198_a276620a","line":120,"updated":"2014-08-08 11:47:14.000000000","message":"the same for this doc-string.","commit_id":"8a7a002012f2d35096cc056b6ec8b541c1bd4073"},{"author":{"_account_id":11105,"name":"Swapnil Kulkarni","email":"coolsvap@gmail.com","username":"coolsvap"},"change_message_id":"f66ee3f9a6b7701b3918a9d621d5298220cc5dac","unresolved":false,"context_lines":[{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    def unset_qos_key(self, qos_id, keys):"},{"line_number":119,"context_line":"        \"\"\""},{"line_number":120,"context_line":"        Unset the specified keys of QoS specification."},{"line_number":121,"context_line":"        keys : it is the array of the keys to unset"},{"line_number":122,"context_line":"        \"\"\""},{"line_number":123,"context_line":"        put_body \u003d json.dumps({\u0027keys\u0027: keys})"}],"source_content_type":"text/x-python","patch_set":17,"id":"baada198_1df5af83","line":120,"in_reply_to":"baada198_a276620a","updated":"2014-08-08 12:15:30.000000000","message":"Done","commit_id":"8a7a002012f2d35096cc056b6ec8b541c1bd4073"},{"author":{"_account_id":7227,"name":"Timur Nurlygayanov","email":"tnurlygayanov@mirantis.com","username":"tnurlygayanov"},"change_message_id":"6b3adff5ff78d7847323f32da4e398494e157395","unresolved":false,"context_lines":[{"line_number":150,"context_line":""},{"line_number":151,"context_line":"class QosSpecsClientJSON(BaseQosSpecsClientJSON):"},{"line_number":152,"context_line":"    \"\"\""},{"line_number":153,"context_line":"    Volume V1 QoS client."},{"line_number":154,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":17,"id":"baada198_c27b56f2","line":153,"updated":"2014-08-08 11:47:14.000000000","message":"the same for this doc-string.","commit_id":"8a7a002012f2d35096cc056b6ec8b541c1bd4073"},{"author":{"_account_id":11105,"name":"Swapnil Kulkarni","email":"coolsvap@gmail.com","username":"coolsvap"},"change_message_id":"f66ee3f9a6b7701b3918a9d621d5298220cc5dac","unresolved":false,"context_lines":[{"line_number":150,"context_line":""},{"line_number":151,"context_line":"class QosSpecsClientJSON(BaseQosSpecsClientJSON):"},{"line_number":152,"context_line":"    \"\"\""},{"line_number":153,"context_line":"    Volume V1 QoS client."},{"line_number":154,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":17,"id":"baada198_3df2739b","line":153,"in_reply_to":"baada198_c27b56f2","updated":"2014-08-08 12:15:30.000000000","message":"Done","commit_id":"8a7a002012f2d35096cc056b6ec8b541c1bd4073"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"f8ddac3f6a07083498467e4dfc87b527a43bb025","unresolved":false,"context_lines":[{"line_number":82,"context_line":"        post_body.update(kwargs)"},{"line_number":83,"context_line":"        post_body \u003d json.dumps({\u0027qos_specs\u0027: post_body})"},{"line_number":84,"context_line":"        resp, body \u003d self.post(\u0027qos-specs\u0027, post_body)"},{"line_number":85,"context_line":"        self.expected_success(200, resp.status)"},{"line_number":86,"context_line":"        body \u003d json.loads(body)"},{"line_number":87,"context_line":"        return resp, body[\u0027qos_specs\u0027]"},{"line_number":88,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"7ac7a964_fa406837","line":85,"updated":"2014-08-14 12:01:13.000000000","message":"I\u0027m afraid this is not he right way to evaluate output. please take a look at bp: client-checks-success","commit_id":"20db00e2245af8f1df388dff53bfa8c929f3c634"},{"author":{"_account_id":1192,"name":"David Kranz","email":"dkranz@redhat.com","username":"david-kranz"},"change_message_id":"e6da3949edefc3373b8b65a0f954cba1b3203020","unresolved":false,"context_lines":[{"line_number":125,"context_line":"        keys : it is the array of the keys to unset"},{"line_number":126,"context_line":"        \"\"\""},{"line_number":127,"context_line":"        put_body \u003d json.dumps({\u0027keys\u0027: keys})"},{"line_number":128,"context_line":"        return self.put(\u0027qos-specs/%s/delete_keys\u0027 % qos_id, put_body)"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"    def associate_qos(self, qos_id, vol_type_id):"},{"line_number":131,"context_line":"        \"\"\"Associate the specified QoS with specified volume-type.\"\"\""}],"source_content_type":"text/x-python","patch_set":37,"id":"1abeadc6_10154348","line":128,"updated":"2014-08-22 16:30:35.000000000","message":"Missing expected success check.","commit_id":"2a4f51051d554751cfa3867fd96337a3c7f784fb"},{"author":{"_account_id":1192,"name":"David Kranz","email":"dkranz@redhat.com","username":"david-kranz"},"change_message_id":"e6da3949edefc3373b8b65a0f954cba1b3203020","unresolved":false,"context_lines":[{"line_number":131,"context_line":"        \"\"\"Associate the specified QoS with specified volume-type.\"\"\""},{"line_number":132,"context_line":"        url \u003d \"qos-specs/%s/associate\" % str(qos_id)"},{"line_number":133,"context_line":"        url +\u003d \"?vol_type_id\u003d%s\" % vol_type_id"},{"line_number":134,"context_line":"        return self.get(url)"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"    def get_association_qos(self, qos_id):"},{"line_number":137,"context_line":"        \"\"\"Get the association of the specified QoS specification.\"\"\""}],"source_content_type":"text/x-python","patch_set":37,"id":"1abeadc6_9029539d","line":134,"updated":"2014-08-22 16:30:35.000000000","message":"Ditto.","commit_id":"2a4f51051d554751cfa3867fd96337a3c7f784fb"},{"author":{"_account_id":1192,"name":"David Kranz","email":"dkranz@redhat.com","username":"david-kranz"},"change_message_id":"e6da3949edefc3373b8b65a0f954cba1b3203020","unresolved":false,"context_lines":[{"line_number":144,"context_line":"    def disassociate_qos(self, qos_id, vol_type_id):"},{"line_number":145,"context_line":"        \"\"\"Disassociate the specified QoS with specified volume-type.\"\"\""},{"line_number":146,"context_line":"        url \u003d \"qos-specs/%s/disassociate\" % str(qos_id)"},{"line_number":147,"context_line":"        url +\u003d \"?vol_type_id\u003d%s\" % vol_type_id"},{"line_number":148,"context_line":"        return self.get(url)"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"    def disassociate_all_qos(self, qos_id):"}],"source_content_type":"text/x-python","patch_set":37,"id":"1abeadc6_500a5b26","line":147,"updated":"2014-08-22 16:30:35.000000000","message":"Ditto.","commit_id":"2a4f51051d554751cfa3867fd96337a3c7f784fb"},{"author":{"_account_id":1192,"name":"David Kranz","email":"dkranz@redhat.com","username":"david-kranz"},"change_message_id":"e6da3949edefc3373b8b65a0f954cba1b3203020","unresolved":false,"context_lines":[{"line_number":150,"context_line":"    def disassociate_all_qos(self, qos_id):"},{"line_number":151,"context_line":"        \"\"\"Disassociate the specified QoS with all associations.\"\"\""},{"line_number":152,"context_line":"        url \u003d \"qos-specs/%s/disassociate_all\" % str(qos_id)"},{"line_number":153,"context_line":"        return self.get(url)"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"class QosSpecsClientJSON(BaseQosSpecsClientJSON):"}],"source_content_type":"text/x-python","patch_set":37,"id":"1abeadc6_70059712","line":153,"updated":"2014-08-22 16:30:35.000000000","message":"Ditto.","commit_id":"2a4f51051d554751cfa3867fd96337a3c7f784fb"}]}
