)]}'
{"tempest/tests/services/compute/test_images_client.py":[{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"a3b6b75e0f93d3b241584f5a757374e7447f4551","unresolved":false,"context_lines":[{"line_number":121,"context_line":"            params \u003d {\"image_id\": self.FAKE_IMAGE_ID}"},{"line_number":122,"context_line":"            expected_op \u003d False"},{"line_number":123,"context_line":"            self.RESPONSE_CODE \u003d 204"},{"line_number":124,"context_line":"        else:"},{"line_number":125,"context_line":"            function \u003d self.client.create_image"},{"line_number":126,"context_line":"            mock_operation \u003d \u0027tempest.common.service_client.ServiceClient.post\u0027"},{"line_number":127,"context_line":"            params \u003d {\"server_id\": \"_dummy_id_\"}"}],"source_content_type":"text/x-python","patch_set":3,"id":"da20952f_d13f9185","line":124,"updated":"2015-09-10 03:31:24.000000000","message":"Create does not return any response, so it is not a part of the current Unit test.\n\ntempest.tests.services.compute.test_images_client.TestImagesClient.test_create_image_with_str_body\n--------------------------------------------------------------------------------------------------\n\nCaptured traceback:\n~~~~~~~~~~~~~~~~~~~\n    Traceback (most recent call last):\n      File \"tempest/tests/services/compute/test_images_client.py\", line 223, in test_create_image_with_str_body\n        self._test_image_operation()\n      File \"tempest/tests/services/compute/test_images_client.py\", line 139, in _test_image_operation\n        self.assertEqual(expected_op, function(**params))\n      File \"tempest/services/compute/json/images_client.py\", line 33, in create_image\n        self.validate_response(schema.create_image, resp, body)\n      File \"/opt/stack/tempest/.tox/py27/local/lib/python2.7/site-packages/tempest_lib/common/rest_client.py\", line 835, in validate_response\n        raise exceptions.InvalidHTTPResponseBody(msg)\n    tempest_lib.exceptions.InvalidHTTPResponseBody: HTTP response body is invalid json or xml\n    Details: HTTP response body should not exist ({})","commit_id":"a144439477ef91f40cf5bc60475a06993d34ca25"},{"author":{"_account_id":17104,"name":"Kenji Yasui","email":"k-yasui@ti.jp.nec.com","username":"yasui"},"change_message_id":"53721e8fc84a0f4bbd0b22105c111dbb4b0d620d","unresolved":false,"context_lines":[{"line_number":112,"context_line":"    def _test_image_operation(self, operation\u003d\"delete\", bytes_body\u003dFalse):"},{"line_number":113,"context_line":"        mock_operation \u003d self.func2mock[\u0027get\u0027]"},{"line_number":114,"context_line":"        expected_op \u003d self.FAKE_IMAGE_DATA[operation]"},{"line_number":115,"context_line":"        params \u003d {\"image_id\": self.FAKE_IMAGE_ID}"},{"line_number":116,"context_line":"        if operation \u003d\u003d \u0027list\u0027:"},{"line_number":117,"context_line":"            function \u003d self.client.list_images"},{"line_number":118,"context_line":"        elif operation \u003d\u003d \u0027show\u0027:"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba15a1d1_dc4904d2","line":115,"updated":"2015-09-15 03:04:15.000000000","message":"It seems to lack the test for the following:\n\n def create_image(self, server_id, **kwargs):","commit_id":"aaeda0ecab337d2b28f32359d36f845f66536320"},{"author":{"_account_id":17104,"name":"Kenji Yasui","email":"k-yasui@ti.jp.nec.com","username":"yasui"},"change_message_id":"d715697bf2288e3cf4b4b199d8d7e5ca2ea95942","unresolved":false,"context_lines":[{"line_number":112,"context_line":"    def _test_image_operation(self, operation\u003d\"delete\", bytes_body\u003dFalse):"},{"line_number":113,"context_line":"        mock_operation \u003d self.func2mock[\u0027get\u0027]"},{"line_number":114,"context_line":"        expected_op \u003d self.FAKE_IMAGE_DATA[operation]"},{"line_number":115,"context_line":"        params \u003d {\"image_id\": self.FAKE_IMAGE_ID}"},{"line_number":116,"context_line":"        if operation \u003d\u003d \u0027list\u0027:"},{"line_number":117,"context_line":"            function \u003d self.client.list_images"},{"line_number":118,"context_line":"        elif operation \u003d\u003d \u0027show\u0027:"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba15a1d1_ce4a6eac","line":115,"in_reply_to":"ba15a1d1_b462f2ab","updated":"2015-09-17 00:17:56.000000000","message":"Sorry. I missed your comment in PS3.","commit_id":"aaeda0ecab337d2b28f32359d36f845f66536320"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"4e8e1cb3bc8b0a8b3e390392a6c6157cfeac1da8","unresolved":false,"context_lines":[{"line_number":112,"context_line":"    def _test_image_operation(self, operation\u003d\"delete\", bytes_body\u003dFalse):"},{"line_number":113,"context_line":"        mock_operation \u003d self.func2mock[\u0027get\u0027]"},{"line_number":114,"context_line":"        expected_op \u003d self.FAKE_IMAGE_DATA[operation]"},{"line_number":115,"context_line":"        params \u003d {\"image_id\": self.FAKE_IMAGE_ID}"},{"line_number":116,"context_line":"        if operation \u003d\u003d \u0027list\u0027:"},{"line_number":117,"context_line":"            function \u003d self.client.list_images"},{"line_number":118,"context_line":"        elif operation \u003d\u003d \u0027show\u0027:"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba15a1d1_b462f2ab","line":115,"in_reply_to":"ba15a1d1_dc4904d2","updated":"2015-09-16 00:33:15.000000000","message":"Create does not return a response body.\nTherefore, it cannot be tested.","commit_id":"aaeda0ecab337d2b28f32359d36f845f66536320"},{"author":{"_account_id":17104,"name":"Kenji Yasui","email":"k-yasui@ti.jp.nec.com","username":"yasui"},"change_message_id":"53721e8fc84a0f4bbd0b22105c111dbb4b0d620d","unresolved":false,"context_lines":[{"line_number":196,"context_line":"        self._test_image_operation(\u0027show\u0027, True)"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"    def test_delete_image_with_str_body(self):"},{"line_number":199,"context_line":"        self._test_image_operation(\u0027delete\u0027)"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"    def test_delete_image_with_bytes_body(self):"},{"line_number":202,"context_line":"        self._test_image_operation(\u0027delete\u0027, True)"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba15a1d1_3c5cc04a","line":199,"updated":"2015-09-15 03:04:15.000000000","message":"Argument \u0027delete\u0027  is necessary?\n\nApart from that, \"Delete image\" doesn\u0027t use str_body. I think you can combine these tests into one.","commit_id":"aaeda0ecab337d2b28f32359d36f845f66536320"},{"author":{"_account_id":17104,"name":"Kenji Yasui","email":"k-yasui@ti.jp.nec.com","username":"yasui"},"change_message_id":"d715697bf2288e3cf4b4b199d8d7e5ca2ea95942","unresolved":false,"context_lines":[{"line_number":196,"context_line":"        self._test_image_operation(\u0027show\u0027, True)"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"    def test_delete_image_with_str_body(self):"},{"line_number":199,"context_line":"        self._test_image_operation(\u0027delete\u0027)"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"    def test_delete_image_with_bytes_body(self):"},{"line_number":202,"context_line":"        self._test_image_operation(\u0027delete\u0027, True)"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba15a1d1_6a8be7c3","line":199,"in_reply_to":"ba15a1d1_1422be52","updated":"2015-09-17 00:17:56.000000000","message":"\u003e\u003e It is not causing any issue in the code, is it? If not , I think we can keep it.\n\nOK.","commit_id":"aaeda0ecab337d2b28f32359d36f845f66536320"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"4e8e1cb3bc8b0a8b3e390392a6c6157cfeac1da8","unresolved":false,"context_lines":[{"line_number":196,"context_line":"        self._test_image_operation(\u0027show\u0027, True)"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"    def test_delete_image_with_str_body(self):"},{"line_number":199,"context_line":"        self._test_image_operation(\u0027delete\u0027)"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"    def test_delete_image_with_bytes_body(self):"},{"line_number":202,"context_line":"        self._test_image_operation(\u0027delete\u0027, True)"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba15a1d1_1422be52","line":199,"in_reply_to":"ba15a1d1_3c5cc04a","updated":"2015-09-16 00:33:15.000000000","message":"Earlier I had a create function which was the default argument.\nThe create function however, didnot return a response body, so there was no point of checking it.\n\nI removed the create function and changed the default argument to delete, but did not remove the default delete value in the _test_image_operation .\nThats why its still here.\nIt is not causing any issue in the code, is it? If not , I think we can keep it.\n\n\u003e\u003eApart from that, \"Delete image\" doesn\u0027t use str_body. I think you can combine these tests into one.\n\nThis function is for delete image only","commit_id":"aaeda0ecab337d2b28f32359d36f845f66536320"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"0c6d46b6223a513e379509c3b4598181ceaa4919","unresolved":false,"context_lines":[{"line_number":100,"context_line":"    FAKE_IMAGE_ID \u003d FAKE_IMAGE_DATA[\u0027show\u0027][\u0027image\u0027][\u0027id\u0027]"},{"line_number":101,"context_line":"    FAKE_CREATE_INFO \u003d {\u0027location\u0027: \u0027None\u0027}"},{"line_number":102,"context_line":"    FAKE_METADATA \u003d FAKE_IMAGE_METADATA[\u0027show_item\u0027][\u0027meta\u0027]"},{"line_number":103,"context_line":"    RESPONSE_CODE \u003d 200"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    def setUp(self):"},{"line_number":106,"context_line":"        super(TestImagesClient, self).setUp()"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a1a9d01_fc692fbf","line":103,"updated":"2015-09-28 16:29:19.000000000","message":"Please, see my comment about \u0027class\u0027 variable on the other patch.","commit_id":"90effaf27166b8ff312149b73601a5c34bbd0edd"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"221c7268e606b9d9ddfa33599ddb72c9fb1f3134","unresolved":false,"context_lines":[{"line_number":19,"context_line":"from tempest.services.compute.json import images_client"},{"line_number":20,"context_line":"from tempest.tests import fake_auth_provider"},{"line_number":21,"context_line":"from tempest.tests.services.compute import base"},{"line_number":22,"context_line":"from tempest_lib import exceptions as lib_exc"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"class TestImagesClient(base.BaseComputeServiceTest):"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a1a9d01_96862664","line":22,"updated":"2015-10-02 01:00:04.000000000","message":"\"from tempest_lib ...\" should be next to \"from oslotest\" because tempest_lib is 3rd part library.\nnecessary to move line22 to line18.","commit_id":"d79542811cf5065ad3a67073656d789d1d1fbc2a"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"221c7268e606b9d9ddfa33599ddb72c9fb1f3134","unresolved":false,"context_lines":[{"line_number":34,"context_line":"            {\"meta\": {"},{"line_number":35,"context_line":"             \"Label\": \"Changed\","},{"line_number":36,"context_line":"             \"auto_disk_config\": \"True\""},{"line_number":37,"context_line":"             }},"},{"line_number":38,"context_line":"        \"show_item\":"},{"line_number":39,"context_line":"            {\"meta\": {"},{"line_number":40,"context_line":"             \"architecture\": \"x86_64\","}],"source_content_type":"text/x-python","patch_set":6,"id":"9a1a9d01_56b88ee5","line":37,"updated":"2015-10-02 01:00:04.000000000","message":"here should be\n\n{\n    \"meta\": {\n        \"auto_disk_config\": \"False\"\n    }\n}\n\nbecause this api should return a single key/value.","commit_id":"d79542811cf5065ad3a67073656d789d1d1fbc2a"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"221c7268e606b9d9ddfa33599ddb72c9fb1f3134","unresolved":false,"context_lines":[{"line_number":41,"context_line":"             \"auto_disk_config\": \"True\","},{"line_number":42,"context_line":"             \"kernel_id\": \"nokernel\","},{"line_number":43,"context_line":"             \"ramdisk_id\": \"nokernel\""},{"line_number":44,"context_line":"             }},"},{"line_number":45,"context_line":"        \"update\":"},{"line_number":46,"context_line":"            {\"metadata\": {"},{"line_number":47,"context_line":"             \"kernel_id\": \"False\","}],"source_content_type":"text/x-python","patch_set":6,"id":"9a1a9d01_36987a6a","line":44,"updated":"2015-10-02 01:00:04.000000000","message":"show_image_metadata_item is\n\n \"\"\"Returns the value for a specific image metadata key.\"\"\"\n\nso multiple metadata values are wrong.\n\nHow about\n\n{\n    \"meta\": {\n        \"kernel_id\": \"nokernel\"\n    }\n}\n\n?","commit_id":"d79542811cf5065ad3a67073656d789d1d1fbc2a"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"221c7268e606b9d9ddfa33599ddb72c9fb1f3134","unresolved":false,"context_lines":[{"line_number":125,"context_line":"            function, mock_operation, expected_op,"},{"line_number":126,"context_line":"            bytes_body, self.response_code, **params)"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"    def _test_image_metaData(self, operation\u003d\"set_item\", bytes_body\u003dFalse):"},{"line_number":129,"context_line":"        self.response_code \u003d 200"},{"line_number":130,"context_line":"        expected_op \u003d self.FAKE_IMAGE_METADATA[operation]"},{"line_number":131,"context_line":"        if operation \u003d\u003d \u0027list\u0027:"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a1a9d01_16da1679","line":128,"updated":"2015-10-02 01:00:04.000000000","message":"better to avoid using lower case chars in the method name as common manner of python.","commit_id":"d79542811cf5065ad3a67073656d789d1d1fbc2a"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"76fef2e072783729922c71ec87609b9c6f9a76e1","unresolved":false,"context_lines":[{"line_number":104,"context_line":"                                                 \"compute\", \"regionOne\")"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    def _test_image_operation(self, operation\u003d\"delete\", bytes_body\u003dFalse):"},{"line_number":107,"context_line":"        self.response_code \u003d 200"},{"line_number":108,"context_line":"        mock_operation \u003d self.func2mock[\u0027get\u0027]"},{"line_number":109,"context_line":"        expected_op \u003d self.FAKE_IMAGE_DATA[operation]"},{"line_number":110,"context_line":"        params \u003d {\"image_id\": self.FAKE_IMAGE_ID}"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a1a9d01_55871b12","line":107,"range":{"start_line":107,"start_character":23,"end_line":107,"end_character":31},"updated":"2015-10-02 11:55:54.000000000","message":"You don\u0027t need an instance variable here. This must be response_code \u003d 200, no self.","commit_id":"b9f49cec144747c59d9d78a93fbf4a68997fd3ff"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"76fef2e072783729922c71ec87609b9c6f9a76e1","unresolved":false,"context_lines":[{"line_number":115,"context_line":"        else:"},{"line_number":116,"context_line":"            function \u003d self.client.delete_image"},{"line_number":117,"context_line":"            mock_operation \u003d self.func2mock[\u0027delete\u0027]"},{"line_number":118,"context_line":"            self.response_code \u003d 204"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"        self.check_service_client_function("},{"line_number":121,"context_line":"            function, mock_operation, expected_op,"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a1a9d01_f578af2d","line":118,"updated":"2015-10-02 11:55:54.000000000","message":"You don\u0027t need an instance variable here. This must be response_code \u003d 204, no self.","commit_id":"b9f49cec144747c59d9d78a93fbf4a68997fd3ff"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"76fef2e072783729922c71ec87609b9c6f9a76e1","unresolved":false,"context_lines":[{"line_number":122,"context_line":"            bytes_body, self.response_code, **params)"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    def _test_image_metadata(self, operation\u003d\"set_item\", bytes_body\u003dFalse):"},{"line_number":125,"context_line":"        self.response_code \u003d 200"},{"line_number":126,"context_line":"        expected_op \u003d self.FAKE_IMAGE_METADATA[operation]"},{"line_number":127,"context_line":"        if operation \u003d\u003d \u0027list\u0027:"},{"line_number":128,"context_line":"            function \u003d self.client.list_image_metadata"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a1a9d01_1598c369","line":125,"updated":"2015-10-02 11:55:54.000000000","message":"same","commit_id":"b9f49cec144747c59d9d78a93fbf4a68997fd3ff"}]}
