)]}'
{"tempest/api/volume/admin/test_volume_quotas.py":[{"author":{"_account_id":7139,"name":"Zhi Kun Liu","username":"zhikunliu","inactive":true},"change_message_id":"f46e650a9fe10c44078c1a7c1dd573bbf57f7935","unresolved":false,"context_lines":[{"line_number":15,"context_line":"#    under the License."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from tempest.api.volume import base"},{"line_number":18,"context_line":"from tempest.test import attr"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"class VolumeQuotasAdminTestsJSON(base.BaseVolumeV1AdminTest):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUX%2F%2FGB8%3D","line":18,"updated":"2014-02-17 07:33:31.000000000","message":"It\u0027s better to import module.\n\nfrom tempest.test import attr -\u003e from tempest import test","commit_id":"3cdf39bf8d39be2e5411feb8e6844808b17bc541"},{"author":{"_account_id":7139,"name":"Zhi Kun Liu","username":"zhikunliu","inactive":true},"change_message_id":"f46e650a9fe10c44078c1a7c1dd573bbf57f7935","unresolved":false,"context_lines":[{"line_number":25,"context_line":"    def setUpClass(cls):"},{"line_number":26,"context_line":"        super(VolumeQuotasAdminTestsJSON, cls).setUpClass()"},{"line_number":27,"context_line":"        cls.client \u003d cls.os.quotas_client"},{"line_number":28,"context_line":"        cls.adm_client \u003d cls.os_adm.quotas_client"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"        cls.demo_tenant_id \u003d cls.isolated_creds.get_primary_user().get("},{"line_number":31,"context_line":"            \u0027tenantId\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUX%2F%2FF2Y%3D","line":28,"updated":"2014-02-17 07:33:31.000000000","message":"cls.client and cls.adm_client are not used.","commit_id":"3cdf39bf8d39be2e5411feb8e6844808b17bc541"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"99e2530e0475c760f9a8b879d5d1653dca6c490f","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        # Admin can update all the resource quota limits for a tenant"},{"line_number":51,"context_line":"        resp, default_quota_set \u003d self.quotas_client.get_default_quota_set("},{"line_number":52,"context_line":"            self.demo_tenant_id)"},{"line_number":53,"context_line":"        new_quota_set \u003d {\u0027gigabytes\u0027: 1000,"},{"line_number":54,"context_line":"                         \u0027volumes\u0027: 10,"},{"line_number":55,"context_line":"                         \u0027snapshots\u0027: 10}"},{"line_number":56,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAUX%2F%2B2Zg%3D","line":53,"updated":"2014-02-18 16:24:12.000000000","message":"I believe these are also the default quota (as hardcoded in cinder source code quota.py). So you don\u0027t really change the quota here.\n\nThis make the last assert \u0027self.assertEqual(new_quota_set, quota_set)\u0027 not meaningful since whether the update succeeded or not, the assertion will be true.\n\nI suggest you change the values to \u0027gigabytes\u0027: 1042, volumes\u0027: 11 etc.","commit_id":"767655a0f6d174d6caeab98eee650a5063942db0"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"8ba1a67a7027d722a3cb104fc59a915b5b7f4a36","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from tempest import test"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"class VolumeQuotasAdminTestsJSON(base.BaseVolumeV1AdminTest):"},{"line_number":22,"context_line":"    _interface \u003d \"json\""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUX%2F%2BlRs%3D","line":21,"updated":"2014-02-20 11:49:46.000000000","message":"nit: s/Tests/Test/ for fitting to the other test class names.","commit_id":"3d8d48ba357d365d85aa82aab2fd718403f6e1ea"},{"author":{"_account_id":8994,"name":"Sylvain Baubeau","email":"sbaubeau@redhat.com","username":"lebauce"},"change_message_id":"af82f6928dd04ea93b1a9fc1336a26dae5585646","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from tempest import test"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"class VolumeQuotasAdminTestsJSON(base.BaseVolumeV1AdminTest):"},{"line_number":22,"context_line":"    _interface \u003d \"json\""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUX%2F%2BkpI%3D","line":21,"in_reply_to":"AAAAUX%2F%2BlRs%3D","updated":"2014-02-20 17:43:44.000000000","message":"Done","commit_id":"3d8d48ba357d365d85aa82aab2fd718403f6e1ea"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"082fde13d4a60f1593509a07b6a311f0c281c0df","unresolved":false,"context_lines":[{"line_number":26,"context_line":"        super(VolumeQuotasAdminTestsJSON, cls).setUpClass()"},{"line_number":27,"context_line":"        cls.demo_tenant_id \u003d cls.isolated_creds.get_primary_user().get("},{"line_number":28,"context_line":"            \u0027tenantId\u0027)"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    @test.attr(type\u003d\u0027gate\u0027)"},{"line_number":31,"context_line":"    def test_list_quotas(self):"},{"line_number":32,"context_line":"        resp, quotas \u003d self.quotas_client.get_quota_set(self.demo_tenant_id)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUX%2F%2Bk90%3D","line":29,"updated":"2014-02-20 12:24:38.000000000","message":"Absent removing of created isolated creds, for example:\n\n@classmethod\ndef tearDownClass(cls):\n    super(VolumeQuotasAdminTestsJSON, cls).tearDownClass()\n     cls.isolated_creds.clear_isolated_creds()","commit_id":"3d8d48ba357d365d85aa82aab2fd718403f6e1ea"},{"author":{"_account_id":8994,"name":"Sylvain Baubeau","email":"sbaubeau@redhat.com","username":"lebauce"},"change_message_id":"af82f6928dd04ea93b1a9fc1336a26dae5585646","unresolved":false,"context_lines":[{"line_number":26,"context_line":"        super(VolumeQuotasAdminTestsJSON, cls).setUpClass()"},{"line_number":27,"context_line":"        cls.demo_tenant_id \u003d cls.isolated_creds.get_primary_user().get("},{"line_number":28,"context_line":"            \u0027tenantId\u0027)"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    @test.attr(type\u003d\u0027gate\u0027)"},{"line_number":31,"context_line":"    def test_list_quotas(self):"},{"line_number":32,"context_line":"        resp, quotas \u003d self.quotas_client.get_quota_set(self.demo_tenant_id)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUX%2F%2BkmA%3D","line":29,"in_reply_to":"AAAAUX%2F%2Bk90%3D","updated":"2014-02-20 17:43:44.000000000","message":"As this is done in the base class \u0027BaseVolumeTest\u0027 (tempest/api/volume/base.py), I thought it was not required","commit_id":"3d8d48ba357d365d85aa82aab2fd718403f6e1ea"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"8ba1a67a7027d722a3cb104fc59a915b5b7f4a36","unresolved":false,"context_lines":[{"line_number":31,"context_line":"    def test_list_quotas(self):"},{"line_number":32,"context_line":"        resp, quotas \u003d self.quotas_client.get_quota_set(self.demo_tenant_id)"},{"line_number":33,"context_line":"        self.assertEqual(200, resp.status)"},{"line_number":34,"context_line":"        self.assertTrue(quotas[\u0027volumes\u0027] \u003e\u003d 10, \"Volume quota is \u003c 10,\""},{"line_number":35,"context_line":"                        \"response of volume quota is: % s\" % quotas[\u0027volumes\u0027])"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    @test.attr(type\u003d\u0027gate\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUX%2F%2BlSY%3D","line":34,"updated":"2014-02-20 11:49:46.000000000","message":"one space seems necessary after \"10,\" for log readability.","commit_id":"3d8d48ba357d365d85aa82aab2fd718403f6e1ea"},{"author":{"_account_id":8994,"name":"Sylvain Baubeau","email":"sbaubeau@redhat.com","username":"lebauce"},"change_message_id":"af82f6928dd04ea93b1a9fc1336a26dae5585646","unresolved":false,"context_lines":[{"line_number":31,"context_line":"    def test_list_quotas(self):"},{"line_number":32,"context_line":"        resp, quotas \u003d self.quotas_client.get_quota_set(self.demo_tenant_id)"},{"line_number":33,"context_line":"        self.assertEqual(200, resp.status)"},{"line_number":34,"context_line":"        self.assertTrue(quotas[\u0027volumes\u0027] \u003e\u003d 10, \"Volume quota is \u003c 10,\""},{"line_number":35,"context_line":"                        \"response of volume quota is: % s\" % quotas[\u0027volumes\u0027])"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    @test.attr(type\u003d\u0027gate\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUX%2F%2Bkl0%3D","line":34,"in_reply_to":"AAAAUX%2F%2BlSY%3D","updated":"2014-02-20 17:43:44.000000000","message":"Done","commit_id":"3d8d48ba357d365d85aa82aab2fd718403f6e1ea"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"8ba1a67a7027d722a3cb104fc59a915b5b7f4a36","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        resp, quotas \u003d self.quotas_client.get_quota_set(self.demo_tenant_id)"},{"line_number":33,"context_line":"        self.assertEqual(200, resp.status)"},{"line_number":34,"context_line":"        self.assertTrue(quotas[\u0027volumes\u0027] \u003e\u003d 10, \"Volume quota is \u003c 10,\""},{"line_number":35,"context_line":"                        \"response of volume quota is: % s\" % quotas[\u0027volumes\u0027])"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    @test.attr(type\u003d\u0027gate\u0027)"},{"line_number":38,"context_line":"    def test_list_default_quotas(self):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUX%2F%2BlPk%3D","line":35,"updated":"2014-02-20 11:49:46.000000000","message":"Is this check right?\n\nquotas seems configurable, and the test will fail if quota of primary_user is changed.","commit_id":"3d8d48ba357d365d85aa82aab2fd718403f6e1ea"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"082fde13d4a60f1593509a07b6a311f0c281c0df","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        resp, quotas \u003d self.quotas_client.get_quota_set(self.demo_tenant_id)"},{"line_number":33,"context_line":"        self.assertEqual(200, resp.status)"},{"line_number":34,"context_line":"        self.assertTrue(quotas[\u0027volumes\u0027] \u003e\u003d 10, \"Volume quota is \u003c 10,\""},{"line_number":35,"context_line":"                        \"response of volume quota is: % s\" % quotas[\u0027volumes\u0027])"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    @test.attr(type\u003d\u0027gate\u0027)"},{"line_number":38,"context_line":"    def test_list_default_quotas(self):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUX%2F%2Bk9I%3D","line":35,"in_reply_to":"AAAAUX%2F%2BlPk%3D","updated":"2014-02-20 12:24:38.000000000","message":"+1\nNeed set it explicitly before assertions.","commit_id":"3d8d48ba357d365d85aa82aab2fd718403f6e1ea"},{"author":{"_account_id":8994,"name":"Sylvain Baubeau","email":"sbaubeau@redhat.com","username":"lebauce"},"change_message_id":"af82f6928dd04ea93b1a9fc1336a26dae5585646","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        resp, quotas \u003d self.quotas_client.get_quota_set(self.demo_tenant_id)"},{"line_number":33,"context_line":"        self.assertEqual(200, resp.status)"},{"line_number":34,"context_line":"        self.assertTrue(quotas[\u0027volumes\u0027] \u003e\u003d 10, \"Volume quota is \u003c 10,\""},{"line_number":35,"context_line":"                        \"response of volume quota is: % s\" % quotas[\u0027volumes\u0027])"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    @test.attr(type\u003d\u0027gate\u0027)"},{"line_number":38,"context_line":"    def test_list_default_quotas(self):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUX%2F%2Bklg%3D","line":35,"in_reply_to":"AAAAUX%2F%2BlPk%3D","updated":"2014-02-20 17:43:44.000000000","message":"Done","commit_id":"3d8d48ba357d365d85aa82aab2fd718403f6e1ea"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"8ba1a67a7027d722a3cb104fc59a915b5b7f4a36","unresolved":false,"context_lines":[{"line_number":40,"context_line":"            self.demo_tenant_id)"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"        self.assertEqual(200, resp.status)"},{"line_number":43,"context_line":"        self.assertTrue(quotas[\u0027volumes\u0027] \u003e\u003d 10,"},{"line_number":44,"context_line":"                        \"Default volume quota is \u003c 10,\""},{"line_number":45,"context_line":"                        \"response of default volume quota is: % s\" %"},{"line_number":46,"context_line":"                        quotas[\u0027volumes\u0027])"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUX%2F%2BlPc%3D","line":43,"updated":"2014-02-20 11:49:46.000000000","message":"ditto","commit_id":"3d8d48ba357d365d85aa82aab2fd718403f6e1ea"},{"author":{"_account_id":8994,"name":"Sylvain Baubeau","email":"sbaubeau@redhat.com","username":"lebauce"},"change_message_id":"af82f6928dd04ea93b1a9fc1336a26dae5585646","unresolved":false,"context_lines":[{"line_number":40,"context_line":"            self.demo_tenant_id)"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"        self.assertEqual(200, resp.status)"},{"line_number":43,"context_line":"        self.assertTrue(quotas[\u0027volumes\u0027] \u003e\u003d 10,"},{"line_number":44,"context_line":"                        \"Default volume quota is \u003c 10,\""},{"line_number":45,"context_line":"                        \"response of default volume quota is: % s\" %"},{"line_number":46,"context_line":"                        quotas[\u0027volumes\u0027])"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUX%2F%2Bke4%3D","line":43,"in_reply_to":"AAAAUX%2F%2BlPc%3D","updated":"2014-02-20 17:43:44.000000000","message":"Done","commit_id":"3d8d48ba357d365d85aa82aab2fd718403f6e1ea"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"8ba1a67a7027d722a3cb104fc59a915b5b7f4a36","unresolved":false,"context_lines":[{"line_number":69,"context_line":"    def test_show_quota_usage(self):"},{"line_number":70,"context_line":"        resp, quota_usage \u003d self.quotas_client.get_quota_usage(self.adm_tenant)"},{"line_number":71,"context_line":"        self.assertEqual(200, resp.status)"},{"line_number":72,"context_line":"        self.assertTrue(quota_usage[\u0027volumes\u0027][\u0027in_use\u0027] \u003d\u003d 0,"},{"line_number":73,"context_line":"                        \"Volume quota usage is !\u003d 0,\""},{"line_number":74,"context_line":"                        \"response of volume quota usage is: % s\" %"},{"line_number":75,"context_line":"                        quota_usage[\u0027volumes\u0027][\u0027in_use\u0027])"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUX%2F%2BlOU%3D","line":72,"updated":"2014-02-20 11:49:46.000000000","message":"ditto: I don\u0027t think this check is necessary.","commit_id":"3d8d48ba357d365d85aa82aab2fd718403f6e1ea"},{"author":{"_account_id":8994,"name":"Sylvain Baubeau","email":"sbaubeau@redhat.com","username":"lebauce"},"change_message_id":"af82f6928dd04ea93b1a9fc1336a26dae5585646","unresolved":false,"context_lines":[{"line_number":69,"context_line":"    def test_show_quota_usage(self):"},{"line_number":70,"context_line":"        resp, quota_usage \u003d self.quotas_client.get_quota_usage(self.adm_tenant)"},{"line_number":71,"context_line":"        self.assertEqual(200, resp.status)"},{"line_number":72,"context_line":"        self.assertTrue(quota_usage[\u0027volumes\u0027][\u0027in_use\u0027] \u003d\u003d 0,"},{"line_number":73,"context_line":"                        \"Volume quota usage is !\u003d 0,\""},{"line_number":74,"context_line":"                        \"response of volume quota usage is: % s\" %"},{"line_number":75,"context_line":"                        quota_usage[\u0027volumes\u0027][\u0027in_use\u0027])"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUX%2F%2BklE%3D","line":72,"in_reply_to":"AAAAUX%2F%2BlOU%3D","updated":"2014-02-20 17:43:44.000000000","message":"Done","commit_id":"3d8d48ba357d365d85aa82aab2fd718403f6e1ea"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"8ba1a67a7027d722a3cb104fc59a915b5b7f4a36","unresolved":false,"context_lines":[{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        self.assertEqual(200, resp.status)"},{"line_number":88,"context_line":"        self.assertEqual(quota_usage[\u0027volumes\u0027][\u0027in_use\u0027] + 1,"},{"line_number":89,"context_line":"                         new_quota_usage[\u0027volumes\u0027][\u0027in_use\u0027])"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"        self.assertEqual(quota_usage[\u0027gigabytes\u0027][\u0027in_use\u0027] + 1,"},{"line_number":92,"context_line":"                         new_quota_usage[\u0027gigabytes\u0027][\u0027in_use\u0027])"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUX%2F%2BlN0%3D","line":89,"updated":"2014-02-20 11:49:46.000000000","message":"ditto: I don\u0027t think this check is necessary.","commit_id":"3d8d48ba357d365d85aa82aab2fd718403f6e1ea"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"57329fcb2be421fca73c882b1ddd01a1fb44ffe0","unresolved":false,"context_lines":[{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        self.assertEqual(200, resp.status)"},{"line_number":88,"context_line":"        self.assertEqual(quota_usage[\u0027volumes\u0027][\u0027in_use\u0027] + 1,"},{"line_number":89,"context_line":"                         new_quota_usage[\u0027volumes\u0027][\u0027in_use\u0027])"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"        self.assertEqual(quota_usage[\u0027gigabytes\u0027][\u0027in_use\u0027] + 1,"},{"line_number":92,"context_line":"                         new_quota_usage[\u0027gigabytes\u0027][\u0027in_use\u0027])"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAVX%2F%2F%2FhI%3D","line":89,"in_reply_to":"AAAAU3%2F%2Fk94%3D","updated":"2014-02-26 23:36:06.000000000","message":"@Matthew\n\nThanks very much, I am happy by your comment:-)","commit_id":"3d8d48ba357d365d85aa82aab2fd718403f6e1ea"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"b4766c8acb8d03fa0963e721e8afbbf802b5edc0","unresolved":false,"context_lines":[{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        self.assertEqual(200, resp.status)"},{"line_number":88,"context_line":"        self.assertEqual(quota_usage[\u0027volumes\u0027][\u0027in_use\u0027] + 1,"},{"line_number":89,"context_line":"                         new_quota_usage[\u0027volumes\u0027][\u0027in_use\u0027])"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"        self.assertEqual(quota_usage[\u0027gigabytes\u0027][\u0027in_use\u0027] + 1,"},{"line_number":92,"context_line":"                         new_quota_usage[\u0027gigabytes\u0027][\u0027in_use\u0027])"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAU3%2F%2Fk94%3D","line":89,"in_reply_to":"AAAAU3%2F%2Fo7g%3D","updated":"2014-02-26 15:57:06.000000000","message":"Yeah this should be fine because tenant isolation protects against the potential race between tests because the quotas are set at the tenant level. There would be a potential race inside of the test class, but we parallelize at the test class level so that won\u0027t happen either.","commit_id":"3d8d48ba357d365d85aa82aab2fd718403f6e1ea"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"deba209dcc9503981aa8e37e129d0befc3581f4b","unresolved":false,"context_lines":[{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        self.assertEqual(200, resp.status)"},{"line_number":88,"context_line":"        self.assertEqual(quota_usage[\u0027volumes\u0027][\u0027in_use\u0027] + 1,"},{"line_number":89,"context_line":"                         new_quota_usage[\u0027volumes\u0027][\u0027in_use\u0027])"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"        self.assertEqual(quota_usage[\u0027gigabytes\u0027][\u0027in_use\u0027] + 1,"},{"line_number":92,"context_line":"                         new_quota_usage[\u0027gigabytes\u0027][\u0027in_use\u0027])"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAU3%2F%2Fo7g%3D","line":89,"in_reply_to":"AAAAUX%2F%2Bkf0%3D","updated":"2014-02-25 14:26:28.000000000","message":"@Matthew\n\nIs the above thought OK for the gate test?\nI think the gate test runs with tenant-isolation for each test class, so I guess the above thought seems OK.\nbut I\u0027d like to confirm this from you because now is close to Icehouse-3 and I\u0027d like to avoid another gate failure.\n\nThanks in advance","commit_id":"3d8d48ba357d365d85aa82aab2fd718403f6e1ea"},{"author":{"_account_id":8994,"name":"Sylvain Baubeau","email":"sbaubeau@redhat.com","username":"lebauce"},"change_message_id":"af82f6928dd04ea93b1a9fc1336a26dae5585646","unresolved":false,"context_lines":[{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        self.assertEqual(200, resp.status)"},{"line_number":88,"context_line":"        self.assertEqual(quota_usage[\u0027volumes\u0027][\u0027in_use\u0027] + 1,"},{"line_number":89,"context_line":"                         new_quota_usage[\u0027volumes\u0027][\u0027in_use\u0027])"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"        self.assertEqual(quota_usage[\u0027gigabytes\u0027][\u0027in_use\u0027] + 1,"},{"line_number":92,"context_line":"                         new_quota_usage[\u0027gigabytes\u0027][\u0027in_use\u0027])"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUX%2F%2Bkf0%3D","line":89,"in_reply_to":"AAAAUX%2F%2BlN0%3D","updated":"2014-02-20 17:43:44.000000000","message":"I\u0027m testing the fact that, if a user creates a volume :\n- it properly increments it the \u0027in_use\u0027 counter of its quota\n- and that the counter of its available volumes is decremented.\n\nI thought it was legitimate as I don\u0027t think it\u0027s tested elsewhere, but I can remove it if you want.","commit_id":"3d8d48ba357d365d85aa82aab2fd718403f6e1ea"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"8ba1a67a7027d722a3cb104fc59a915b5b7f4a36","unresolved":false,"context_lines":[{"line_number":88,"context_line":"        self.assertEqual(quota_usage[\u0027volumes\u0027][\u0027in_use\u0027] + 1,"},{"line_number":89,"context_line":"                         new_quota_usage[\u0027volumes\u0027][\u0027in_use\u0027])"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"        self.assertEqual(quota_usage[\u0027gigabytes\u0027][\u0027in_use\u0027] + 1,"},{"line_number":92,"context_line":"                         new_quota_usage[\u0027gigabytes\u0027][\u0027in_use\u0027])"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUX%2F%2BlNw%3D","line":91,"updated":"2014-02-20 11:49:46.000000000","message":"ditto: I don\u0027t think this check is necessary.","commit_id":"3d8d48ba357d365d85aa82aab2fd718403f6e1ea"},{"author":{"_account_id":8994,"name":"Sylvain Baubeau","email":"sbaubeau@redhat.com","username":"lebauce"},"change_message_id":"af82f6928dd04ea93b1a9fc1336a26dae5585646","unresolved":false,"context_lines":[{"line_number":88,"context_line":"        self.assertEqual(quota_usage[\u0027volumes\u0027][\u0027in_use\u0027] + 1,"},{"line_number":89,"context_line":"                         new_quota_usage[\u0027volumes\u0027][\u0027in_use\u0027])"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"        self.assertEqual(quota_usage[\u0027gigabytes\u0027][\u0027in_use\u0027] + 1,"},{"line_number":92,"context_line":"                         new_quota_usage[\u0027gigabytes\u0027][\u0027in_use\u0027])"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUX%2F%2BkfQ%3D","line":91,"in_reply_to":"AAAAUX%2F%2BlNw%3D","updated":"2014-02-20 17:43:44.000000000","message":"Please look at my previous comment","commit_id":"3d8d48ba357d365d85aa82aab2fd718403f6e1ea"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"8ba1a67a7027d722a3cb104fc59a915b5b7f4a36","unresolved":false,"context_lines":[{"line_number":92,"context_line":"                         new_quota_usage[\u0027gigabytes\u0027][\u0027in_use\u0027])"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"class VolumeQuotasAdminTestsXML(VolumeQuotasAdminTestsJSON):"},{"line_number":96,"context_line":"    _interface \u003d \"xml\""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUX%2F%2BlRo%3D","line":95,"updated":"2014-02-20 11:49:46.000000000","message":"ditto: s/Tests/Test/","commit_id":"3d8d48ba357d365d85aa82aab2fd718403f6e1ea"},{"author":{"_account_id":8994,"name":"Sylvain Baubeau","email":"sbaubeau@redhat.com","username":"lebauce"},"change_message_id":"af82f6928dd04ea93b1a9fc1336a26dae5585646","unresolved":false,"context_lines":[{"line_number":92,"context_line":"                         new_quota_usage[\u0027gigabytes\u0027][\u0027in_use\u0027])"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"class VolumeQuotasAdminTestsXML(VolumeQuotasAdminTestsJSON):"},{"line_number":96,"context_line":"    _interface \u003d \"xml\""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUX%2F%2BkkQ%3D","line":95,"in_reply_to":"AAAAUX%2F%2BlRo%3D","updated":"2014-02-20 17:43:44.000000000","message":"Done","commit_id":"3d8d48ba357d365d85aa82aab2fd718403f6e1ea"},{"author":{"_account_id":7139,"name":"Zhi Kun Liu","username":"zhikunliu","inactive":true},"change_message_id":"431819316a6ec045bd9aeb3b9191840866c969ff","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    @test.attr(type\u003d\u0027gate\u0027)"},{"line_number":31,"context_line":"    def test_list_quotas(self):"},{"line_number":32,"context_line":"        resp, quotas \u003d self.quotas_client.get_quota_set(self.demo_tenant_id)"},{"line_number":33,"context_line":"        self.assertEqual(200, resp.status)"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    @test.attr(type\u003d\u0027gate\u0027)"},{"line_number":36,"context_line":"    def test_list_default_quotas(self):"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAVX%2F%2F0ac%3D","line":33,"updated":"2014-02-28 03:16:55.000000000","message":"only check status seems not enough. we don\u0027t need check the property\u0027s value, however we should make sure the relevant property is in quotas. for example:\n\n for p in [\u0027gigabytes\u0027, \u0027snapshots\u0027, \u0027volumes\u0027]:\n     self.assertIn(p, quotas)","commit_id":"613ef50d8eb420840246dd2221036629fa207d0b"},{"author":{"_account_id":8994,"name":"Sylvain Baubeau","email":"sbaubeau@redhat.com","username":"lebauce"},"change_message_id":"2971ea936a781111382be37a30ca129e0f1971a5","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    @test.attr(type\u003d\u0027gate\u0027)"},{"line_number":31,"context_line":"    def test_list_quotas(self):"},{"line_number":32,"context_line":"        resp, quotas \u003d self.quotas_client.get_quota_set(self.demo_tenant_id)"},{"line_number":33,"context_line":"        self.assertEqual(200, resp.status)"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    @test.attr(type\u003d\u0027gate\u0027)"},{"line_number":36,"context_line":"    def test_list_default_quotas(self):"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAVn%2F%2F7zY%3D","line":33,"in_reply_to":"AAAAVX%2F%2F0ac%3D","updated":"2014-03-03 10:19:43.000000000","message":"Done","commit_id":"613ef50d8eb420840246dd2221036629fa207d0b"},{"author":{"_account_id":7139,"name":"Zhi Kun Liu","username":"zhikunliu","inactive":true},"change_message_id":"431819316a6ec045bd9aeb3b9191840866c969ff","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    def test_list_default_quotas(self):"},{"line_number":37,"context_line":"        resp, quotas \u003d self.quotas_client.get_default_quota_set("},{"line_number":38,"context_line":"            self.demo_tenant_id)"},{"line_number":39,"context_line":"        self.assertEqual(200, resp.status)"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    @test.attr(type\u003d\u0027gate\u0027)"},{"line_number":42,"context_line":"    def test_update_all_quota_resources_for_tenant(self):"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAVX%2F%2F0aE%3D","line":39,"updated":"2014-02-28 03:16:55.000000000","message":"ditto","commit_id":"613ef50d8eb420840246dd2221036629fa207d0b"},{"author":{"_account_id":8994,"name":"Sylvain Baubeau","email":"sbaubeau@redhat.com","username":"lebauce"},"change_message_id":"2971ea936a781111382be37a30ca129e0f1971a5","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    def test_list_default_quotas(self):"},{"line_number":37,"context_line":"        resp, quotas \u003d self.quotas_client.get_default_quota_set("},{"line_number":38,"context_line":"            self.demo_tenant_id)"},{"line_number":39,"context_line":"        self.assertEqual(200, resp.status)"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    @test.attr(type\u003d\u0027gate\u0027)"},{"line_number":42,"context_line":"    def test_update_all_quota_resources_for_tenant(self):"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAVn%2F%2F7zU%3D","line":39,"in_reply_to":"AAAAVX%2F%2F0aE%3D","updated":"2014-03-03 10:19:43.000000000","message":"Done","commit_id":"613ef50d8eb420840246dd2221036629fa207d0b"},{"author":{"_account_id":7139,"name":"Zhi Kun Liu","username":"zhikunliu","inactive":true},"change_message_id":"431819316a6ec045bd9aeb3b9191840866c969ff","unresolved":false,"context_lines":[{"line_number":61,"context_line":"    @test.attr(type\u003d\u0027gate\u0027)"},{"line_number":62,"context_line":"    def test_show_quota_usage(self):"},{"line_number":63,"context_line":"        resp, quota_usage \u003d self.quotas_client.get_quota_usage(self.adm_tenant)"},{"line_number":64,"context_line":"        self.assertEqual(200, resp.status)"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    @test.attr(type\u003d\u0027gate\u0027)"},{"line_number":67,"context_line":"    def test_quota_usage(self):"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAVX%2F%2F0Z8%3D","line":64,"updated":"2014-02-28 03:16:55.000000000","message":"ditto","commit_id":"613ef50d8eb420840246dd2221036629fa207d0b"},{"author":{"_account_id":8994,"name":"Sylvain Baubeau","email":"sbaubeau@redhat.com","username":"lebauce"},"change_message_id":"2971ea936a781111382be37a30ca129e0f1971a5","unresolved":false,"context_lines":[{"line_number":61,"context_line":"    @test.attr(type\u003d\u0027gate\u0027)"},{"line_number":62,"context_line":"    def test_show_quota_usage(self):"},{"line_number":63,"context_line":"        resp, quota_usage \u003d self.quotas_client.get_quota_usage(self.adm_tenant)"},{"line_number":64,"context_line":"        self.assertEqual(200, resp.status)"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    @test.attr(type\u003d\u0027gate\u0027)"},{"line_number":67,"context_line":"    def test_quota_usage(self):"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAVn%2F%2F7zQ%3D","line":64,"in_reply_to":"AAAAVX%2F%2F0Z8%3D","updated":"2014-03-03 10:19:43.000000000","message":"Done","commit_id":"613ef50d8eb420840246dd2221036629fa207d0b"},{"author":{"_account_id":8651,"name":"Chen Xiao","email":"chenxiao@cn.ibm.com","username":"chenxiao"},"change_message_id":"c54850c74b2767bc79d577848fc097e5891c96f0","unresolved":false,"context_lines":[{"line_number":79,"context_line":"        resp, quota_usage \u003d self.quotas_client.get_quota_usage("},{"line_number":80,"context_line":"            self.demo_tenant_id)"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"        self.create_volume(size\u003d1)"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"        resp, new_quota_usage \u003d self.quotas_client.get_quota_usage("},{"line_number":85,"context_line":"            self.demo_tenant_id)"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAVn%2F%2F6BI%3D","line":82,"updated":"2014-03-03 14:16:38.000000000","message":"I think you can use addCleanup function to remove the volume after test.","commit_id":"150dc33824d5d161bca2240ac9ae0a82db67c7b7"},{"author":{"_account_id":8994,"name":"Sylvain Baubeau","email":"sbaubeau@redhat.com","username":"lebauce"},"change_message_id":"c78a2f766708ab23375a77624b05d5942a4fbd93","unresolved":false,"context_lines":[{"line_number":79,"context_line":"        resp, quota_usage \u003d self.quotas_client.get_quota_usage("},{"line_number":80,"context_line":"            self.demo_tenant_id)"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"        self.create_volume(size\u003d1)"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"        resp, new_quota_usage \u003d self.quotas_client.get_quota_usage("},{"line_number":85,"context_line":"            self.demo_tenant_id)"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAVn%2F%2F5hM%3D","line":82,"in_reply_to":"AAAAVn%2F%2F6BI%3D","updated":"2014-03-03 15:05:36.000000000","message":"Done","commit_id":"150dc33824d5d161bca2240ac9ae0a82db67c7b7"}],"tempest/services/volume/json/admin/volume_quotas_client.py":[{"author":{"_account_id":7450,"name":"Yassine Lamgarchal","email":"yassine.lamgarchal@redhat.com","username":"yassine.lamgarchal"},"change_message_id":"ff1d0e9d18698a7fd5750227a1d6a312a26cc350","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"import json"},{"line_number":17,"context_line":"import urllib"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from tempest.common.rest_client import RestClient"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAUX%2F%2FQBE%3D","line":16,"updated":"2014-02-14 14:48:13.000000000","message":"Please use from openstack.common import jsonutils","commit_id":"9042cd46c555f6ac9b8aefa02dac2336c5470541"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"0e7ae16520bbf9697707d955fc890f5cf4428254","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from tempest.openstack.common import jsonutils"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from tempest.common.rest_client import RestClient"},{"line_number":22,"context_line":"from tempest import config"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"CONF \u003d config.CONF"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUX%2F%2B4KU%3D","line":21,"updated":"2014-02-18 13:31:13.000000000","message":"This should be \nfrom tempest.common import rest_client\n\nTempest now tries to import module and not class anymore.","commit_id":"5925977b637797bf97c3596e3d0d92ffe8bdb735"},{"author":{"_account_id":8994,"name":"Sylvain Baubeau","email":"sbaubeau@redhat.com","username":"lebauce"},"change_message_id":"6c28410af780750aa1df1bcc7746d65addd65fad","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from tempest.openstack.common import jsonutils"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from tempest.common.rest_client import RestClient"},{"line_number":22,"context_line":"from tempest import config"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"CONF \u003d config.CONF"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUX%2F%2B3LE%3D","line":21,"in_reply_to":"AAAAUX%2F%2B4KU%3D","updated":"2014-02-18 15:02:14.000000000","message":"Done","commit_id":"5925977b637797bf97c3596e3d0d92ffe8bdb735"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"0e7ae16520bbf9697707d955fc890f5cf4428254","unresolved":false,"context_lines":[{"line_number":75,"context_line":"            post_body[\u0027snapshots\u0027] \u003d snapshots"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"        post_body \u003d jsonutils.dumps({\u0027quota_set\u0027: post_body})"},{"line_number":78,"context_line":"        resp, body \u003d self.put(\u0027os-quota-sets/%s\u0027 % str(tenant_id), post_body,"},{"line_number":79,"context_line":"                              self.headers)"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"        body \u003d jsonutils.loads(body)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUX%2F%2B4Hs%3D","line":78,"updated":"2014-02-18 13:31:13.000000000","message":"As per Ie43d10affc981d3446b1296cf05ef595154276a9 and I28981738a9e7f39343cf530c2642315f0a5b22f2 I believe self.header is useless now.","commit_id":"5925977b637797bf97c3596e3d0d92ffe8bdb735"},{"author":{"_account_id":8994,"name":"Sylvain Baubeau","email":"sbaubeau@redhat.com","username":"lebauce"},"change_message_id":"6c28410af780750aa1df1bcc7746d65addd65fad","unresolved":false,"context_lines":[{"line_number":75,"context_line":"            post_body[\u0027snapshots\u0027] \u003d snapshots"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"        post_body \u003d jsonutils.dumps({\u0027quota_set\u0027: post_body})"},{"line_number":78,"context_line":"        resp, body \u003d self.put(\u0027os-quota-sets/%s\u0027 % str(tenant_id), post_body,"},{"line_number":79,"context_line":"                              self.headers)"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"        body \u003d jsonutils.loads(body)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUX%2F%2B3K4%3D","line":78,"in_reply_to":"AAAAUX%2F%2B4Hs%3D","updated":"2014-02-18 15:02:14.000000000","message":"Done","commit_id":"5925977b637797bf97c3596e3d0d92ffe8bdb735"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"082fde13d4a60f1593509a07b6a311f0c281c0df","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from tempest import config"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"CONF \u003d config.CONF"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"class VolumeQuotasClientJSON(rest_client.RestClient):"},{"line_number":28,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUX%2F%2BlA4%3D","line":25,"updated":"2014-02-20 12:24:38.000000000","message":"For content: there are quotas not only for tenant, but for users too.","commit_id":"3d8d48ba357d365d85aa82aab2fd718403f6e1ea"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"082fde13d4a60f1593509a07b6a311f0c281c0df","unresolved":false,"context_lines":[{"line_number":39,"context_line":"    def get_default_quota_set(self, tenant_id):"},{"line_number":40,"context_line":"        \"\"\"List the default volume quota set for a tenant.\"\"\""},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"        url \u003d \u0027os-quota-sets/%s/defaults\u0027 % str(tenant_id)"},{"line_number":43,"context_line":"        resp, body \u003d self.get(url)"},{"line_number":44,"context_line":"        body \u003d jsonutils.loads(body)"},{"line_number":45,"context_line":"        return resp, body[\u0027quota_set\u0027]"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUX%2F%2BlDg%3D","line":42,"updated":"2014-02-20 12:24:38.000000000","message":"Is there any reason to use type conversion to str?","commit_id":"3d8d48ba357d365d85aa82aab2fd718403f6e1ea"},{"author":{"_account_id":8994,"name":"Sylvain Baubeau","email":"sbaubeau@redhat.com","username":"lebauce"},"change_message_id":"af82f6928dd04ea93b1a9fc1336a26dae5585646","unresolved":false,"context_lines":[{"line_number":39,"context_line":"    def get_default_quota_set(self, tenant_id):"},{"line_number":40,"context_line":"        \"\"\"List the default volume quota set for a tenant.\"\"\""},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"        url \u003d \u0027os-quota-sets/%s/defaults\u0027 % str(tenant_id)"},{"line_number":43,"context_line":"        resp, body \u003d self.get(url)"},{"line_number":44,"context_line":"        body \u003d jsonutils.loads(body)"},{"line_number":45,"context_line":"        return resp, body[\u0027quota_set\u0027]"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUX%2F%2Bh2s%3D","line":42,"in_reply_to":"AAAAUX%2F%2BlDg%3D","updated":"2014-02-20 17:43:44.000000000","message":"No good reason, no.","commit_id":"3d8d48ba357d365d85aa82aab2fd718403f6e1ea"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"8ba1a67a7027d722a3cb104fc59a915b5b7f4a36","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        url \u003d \u0027os-quota-sets/%s/defaults\u0027 % str(tenant_id)"},{"line_number":43,"context_line":"        resp, body \u003d self.get(url)"},{"line_number":44,"context_line":"        body \u003d jsonutils.loads(body)"},{"line_number":45,"context_line":"        return resp, body[\u0027quota_set\u0027]"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def get_quota_set(self, tenant_id, params\u003dNone):"},{"line_number":48,"context_line":"        \"\"\"List the quota set for a tenant.\"\"\""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUX%2F%2BlJs%3D","line":45,"updated":"2014-02-20 11:49:46.000000000","message":"line44-45 can be merged to\n\n return resp, self._parse_resp(body)","commit_id":"3d8d48ba357d365d85aa82aab2fd718403f6e1ea"},{"author":{"_account_id":8994,"name":"Sylvain Baubeau","email":"sbaubeau@redhat.com","username":"lebauce"},"change_message_id":"af82f6928dd04ea93b1a9fc1336a26dae5585646","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        url \u003d \u0027os-quota-sets/%s/defaults\u0027 % str(tenant_id)"},{"line_number":43,"context_line":"        resp, body \u003d self.get(url)"},{"line_number":44,"context_line":"        body \u003d jsonutils.loads(body)"},{"line_number":45,"context_line":"        return resp, body[\u0027quota_set\u0027]"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def get_quota_set(self, tenant_id, params\u003dNone):"},{"line_number":48,"context_line":"        \"\"\"List the quota set for a tenant.\"\"\""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUX%2F%2Bh1Q%3D","line":45,"in_reply_to":"AAAAUX%2F%2BlDc%3D","updated":"2014-02-20 17:43:44.000000000","message":"Done","commit_id":"3d8d48ba357d365d85aa82aab2fd718403f6e1ea"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"082fde13d4a60f1593509a07b6a311f0c281c0df","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        url \u003d \u0027os-quota-sets/%s/defaults\u0027 % str(tenant_id)"},{"line_number":43,"context_line":"        resp, body \u003d self.get(url)"},{"line_number":44,"context_line":"        body \u003d jsonutils.loads(body)"},{"line_number":45,"context_line":"        return resp, body[\u0027quota_set\u0027]"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def get_quota_set(self, tenant_id, params\u003dNone):"},{"line_number":48,"context_line":"        \"\"\"List the quota set for a tenant.\"\"\""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUX%2F%2BlDc%3D","line":45,"in_reply_to":"AAAAUX%2F%2BlJs%3D","updated":"2014-02-20 12:24:38.000000000","message":"+1\n\nExample: https://github.com/openstack/tempest/blob/master/tempest/services/identity/xml/identity_client.py","commit_id":"3d8d48ba357d365d85aa82aab2fd718403f6e1ea"},{"author":{"_account_id":8994,"name":"Sylvain Baubeau","email":"sbaubeau@redhat.com","username":"lebauce"},"change_message_id":"af82f6928dd04ea93b1a9fc1336a26dae5585646","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        url \u003d \u0027os-quota-sets/%s/defaults\u0027 % str(tenant_id)"},{"line_number":43,"context_line":"        resp, body \u003d self.get(url)"},{"line_number":44,"context_line":"        body \u003d jsonutils.loads(body)"},{"line_number":45,"context_line":"        return resp, body[\u0027quota_set\u0027]"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def get_quota_set(self, tenant_id, params\u003dNone):"},{"line_number":48,"context_line":"        \"\"\"List the quota set for a tenant.\"\"\""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUX%2F%2Bh2c%3D","line":45,"in_reply_to":"AAAAUX%2F%2BlJs%3D","updated":"2014-02-20 17:43:44.000000000","message":"Done","commit_id":"3d8d48ba357d365d85aa82aab2fd718403f6e1ea"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"082fde13d4a60f1593509a07b6a311f0c281c0df","unresolved":false,"context_lines":[{"line_number":47,"context_line":"    def get_quota_set(self, tenant_id, params\u003dNone):"},{"line_number":48,"context_line":"        \"\"\"List the quota set for a tenant.\"\"\""},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"        url \u003d \u0027os-quota-sets/%s\u0027 % str(tenant_id)"},{"line_number":51,"context_line":"        if params:"},{"line_number":52,"context_line":"            url +\u003d \u0027?%s\u0027 % urllib.urlencode(params)"},{"line_number":53,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUX%2F%2BlCw%3D","line":50,"updated":"2014-02-20 12:24:38.000000000","message":"ditto","commit_id":"3d8d48ba357d365d85aa82aab2fd718403f6e1ea"},{"author":{"_account_id":8994,"name":"Sylvain Baubeau","email":"sbaubeau@redhat.com","username":"lebauce"},"change_message_id":"af82f6928dd04ea93b1a9fc1336a26dae5585646","unresolved":false,"context_lines":[{"line_number":47,"context_line":"    def get_quota_set(self, tenant_id, params\u003dNone):"},{"line_number":48,"context_line":"        \"\"\"List the quota set for a tenant.\"\"\""},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"        url \u003d \u0027os-quota-sets/%s\u0027 % str(tenant_id)"},{"line_number":51,"context_line":"        if params:"},{"line_number":52,"context_line":"            url +\u003d \u0027?%s\u0027 % urllib.urlencode(params)"},{"line_number":53,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUX%2F%2Bh1A%3D","line":50,"in_reply_to":"AAAAUX%2F%2BlCw%3D","updated":"2014-02-20 17:43:44.000000000","message":"Done","commit_id":"3d8d48ba357d365d85aa82aab2fd718403f6e1ea"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"8ba1a67a7027d722a3cb104fc59a915b5b7f4a36","unresolved":false,"context_lines":[{"line_number":53,"context_line":""},{"line_number":54,"context_line":"        resp, body \u003d self.get(url)"},{"line_number":55,"context_line":"        body \u003d jsonutils.loads(body)"},{"line_number":56,"context_line":"        return resp, body[\u0027quota_set\u0027]"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    def get_quota_usage(self, tenant_id):"},{"line_number":59,"context_line":"        \"\"\"List the quota set for a tenant.\"\"\""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUX%2F%2BlJY%3D","line":56,"updated":"2014-02-20 11:49:46.000000000","message":"ditto","commit_id":"3d8d48ba357d365d85aa82aab2fd718403f6e1ea"},{"author":{"_account_id":8994,"name":"Sylvain Baubeau","email":"sbaubeau@redhat.com","username":"lebauce"},"change_message_id":"af82f6928dd04ea93b1a9fc1336a26dae5585646","unresolved":false,"context_lines":[{"line_number":53,"context_line":""},{"line_number":54,"context_line":"        resp, body \u003d self.get(url)"},{"line_number":55,"context_line":"        body \u003d jsonutils.loads(body)"},{"line_number":56,"context_line":"        return resp, body[\u0027quota_set\u0027]"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    def get_quota_usage(self, tenant_id):"},{"line_number":59,"context_line":"        \"\"\"List the quota set for a tenant.\"\"\""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUX%2F%2Bh0k%3D","line":56,"in_reply_to":"AAAAUX%2F%2BlJY%3D","updated":"2014-02-20 17:43:44.000000000","message":"Done","commit_id":"3d8d48ba357d365d85aa82aab2fd718403f6e1ea"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"082fde13d4a60f1593509a07b6a311f0c281c0df","unresolved":false,"context_lines":[{"line_number":75,"context_line":"            post_body[\u0027snapshots\u0027] \u003d snapshots"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"        post_body \u003d jsonutils.dumps({\u0027quota_set\u0027: post_body})"},{"line_number":78,"context_line":"        resp, body \u003d self.put(\u0027os-quota-sets/%s\u0027 % str(tenant_id), post_body)"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"        body \u003d jsonutils.loads(body)"},{"line_number":81,"context_line":"        return resp, body[\u0027quota_set\u0027]"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUX%2F%2BlCc%3D","line":78,"updated":"2014-02-20 12:24:38.000000000","message":"ditto","commit_id":"3d8d48ba357d365d85aa82aab2fd718403f6e1ea"},{"author":{"_account_id":8994,"name":"Sylvain Baubeau","email":"sbaubeau@redhat.com","username":"lebauce"},"change_message_id":"af82f6928dd04ea93b1a9fc1336a26dae5585646","unresolved":false,"context_lines":[{"line_number":75,"context_line":"            post_body[\u0027snapshots\u0027] \u003d snapshots"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"        post_body \u003d jsonutils.dumps({\u0027quota_set\u0027: post_body})"},{"line_number":78,"context_line":"        resp, body \u003d self.put(\u0027os-quota-sets/%s\u0027 % str(tenant_id), post_body)"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"        body \u003d jsonutils.loads(body)"},{"line_number":81,"context_line":"        return resp, body[\u0027quota_set\u0027]"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUX%2F%2Bhx0%3D","line":78,"in_reply_to":"AAAAUX%2F%2BlCc%3D","updated":"2014-02-20 17:43:44.000000000","message":"Done","commit_id":"3d8d48ba357d365d85aa82aab2fd718403f6e1ea"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"8ba1a67a7027d722a3cb104fc59a915b5b7f4a36","unresolved":false,"context_lines":[{"line_number":78,"context_line":"        resp, body \u003d self.put(\u0027os-quota-sets/%s\u0027 % str(tenant_id), post_body)"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"        body \u003d jsonutils.loads(body)"},{"line_number":81,"context_line":"        return resp, body[\u0027quota_set\u0027]"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUX%2F%2BlJQ%3D","line":81,"updated":"2014-02-20 11:49:46.000000000","message":"ditto","commit_id":"3d8d48ba357d365d85aa82aab2fd718403f6e1ea"},{"author":{"_account_id":8994,"name":"Sylvain Baubeau","email":"sbaubeau@redhat.com","username":"lebauce"},"change_message_id":"af82f6928dd04ea93b1a9fc1336a26dae5585646","unresolved":false,"context_lines":[{"line_number":78,"context_line":"        resp, body \u003d self.put(\u0027os-quota-sets/%s\u0027 % str(tenant_id), post_body)"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"        body \u003d jsonutils.loads(body)"},{"line_number":81,"context_line":"        return resp, body[\u0027quota_set\u0027]"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUX%2F%2Bhx8%3D","line":81,"in_reply_to":"AAAAUX%2F%2BlJQ%3D","updated":"2014-02-20 17:43:44.000000000","message":"Done","commit_id":"3d8d48ba357d365d85aa82aab2fd718403f6e1ea"}],"tempest/services/volume/xml/admin/volume_quotas_client.py":[{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"082fde13d4a60f1593509a07b6a311f0c281c0df","unresolved":false,"context_lines":[{"line_number":26,"context_line":"CONF \u003d config.CONF"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"class VolumeQuotasClientXML(rest_client.RestClientXML):"},{"line_number":30,"context_line":"    \"\"\""},{"line_number":31,"context_line":"    Client class to send CRUD Volume Quotas API requests to a Cinder endpoint"},{"line_number":32,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUX%2F%2BlEc%3D","line":29,"updated":"2014-02-20 12:24:38.000000000","message":"Here can be inherited:\n\nfrom tempest.services.volume.json.admin import volume_quotas_client\n\nclass VolumeQuotasClientXML(volume_quotas_client.VolumeQuotasClientJSON):\n    TYPE \u003d \"xml\"\n\nAnd here should be left only method with sending data - update_quota_set.\n\nPlease look, can be used here \"dict_tags\" from rest client for \"_parse_resp\" method. - instead of \"_format_quota\".\n\nor, if _format_quota can not be replaced as mentioned above, maybe better to make it for json client too, and use it in json client for main methods.\n\nSo, here could be only two methods in that way - \"_format_quota\" and \"update_quota_set\".","commit_id":"3d8d48ba357d365d85aa82aab2fd718403f6e1ea"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"78a87278ebd3798f6f04ab8da1882e3600d67e5d","unresolved":false,"context_lines":[{"line_number":26,"context_line":"CONF \u003d config.CONF"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"class VolumeQuotasClientXML(rest_client.RestClientXML):"},{"line_number":30,"context_line":"    \"\"\""},{"line_number":31,"context_line":"    Client class to send CRUD Volume Quotas API requests to a Cinder endpoint"},{"line_number":32,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUX%2F%2BhT8%3D","line":29,"in_reply_to":"AAAAUX%2F%2Bh44%3D","updated":"2014-02-20 18:30:19.000000000","message":"I have reproduced it.\n\nThing you mentioned is the real bug. Because request:\n\ncurl -i http://127.0.0.1:8776/v2/120b02ae6fd34f4cb40ce209f49f97f5/os-quota-sets/120b02ae6fd34f4cb40ce209f49f97f5?usage\u003dTrue -X GET -H \"X-Auth-Project-Id: demo\" -H \"Accept: application/xml\" -H \"X-Auth-Token: 9c8304808eb24cafa8db8997c5d560b6\"\n\nReturns \n\n\u003c?xml version\u003d\u00271.0\u0027 encoding\u003d\u0027UTF-8\u0027?\u003e\n\u003cquota_set id\u003d\"120b02ae6fd34f4cb40ce209f49f97f5\"\u003e\u003cgigabytes\u003e{\u0027reserved\u0027: 0L, \u0027limit\u0027: 1000L, \u0027in_use\u0027: 1L}\u003c/gigabytes\u003e\u003csnapshots\u003e{\u0027reserved\u0027: 0L, \u0027limit\u0027: 10L, \u0027in_use\u0027: 0L}\u003c/snapshots\u003e\u003cvolumes\u003e{\u0027reserved\u0027: 0L, \u0027limit\u0027: 10L, \u0027in_use\u0027: 1L}\u003c/volumes\u003e\u003c/quota_set\u003e","commit_id":"3d8d48ba357d365d85aa82aab2fd718403f6e1ea"},{"author":{"_account_id":8994,"name":"Sylvain Baubeau","email":"sbaubeau@redhat.com","username":"lebauce"},"change_message_id":"af82f6928dd04ea93b1a9fc1336a26dae5585646","unresolved":false,"context_lines":[{"line_number":26,"context_line":"CONF \u003d config.CONF"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"class VolumeQuotasClientXML(rest_client.RestClientXML):"},{"line_number":30,"context_line":"    \"\"\""},{"line_number":31,"context_line":"    Client class to send CRUD Volume Quotas API requests to a Cinder endpoint"},{"line_number":32,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUX%2F%2Bh44%3D","line":29,"in_reply_to":"AAAAUX%2F%2BlEc%3D","updated":"2014-02-20 17:43:44.000000000","message":"With your suggestion (and code), I have been able to reduce the number of methods, thanks.\n\nI tried the \"dict_tags\" attribute, but unfortunately the returned XML contains a serialized JSON, so I couldn\u0027t get rid of the \"_format_quota\" method, and the \"get_quota_usage\" that makes use of it.","commit_id":"3d8d48ba357d365d85aa82aab2fd718403f6e1ea"}]}
