)]}'
{"tempest/api/image/v1/test_images.py":[{"author":{"_account_id":8625,"name":"Anju Tiwari","username":"Anju5","inactive":true},"change_message_id":"0cbd7acc096f857e2ef2bd81b9df8eedaae7cb7d","unresolved":false,"context_lines":[{"line_number":254,"context_line":"class UpdateImagesTest(base.BaseV1ImageTest):"},{"line_number":255,"context_line":"    \"\"\"Here we test the update operations of images.\"\"\""},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"    @attr(type\u003d\u0027gate\u0027)"},{"line_number":258,"context_line":"    def test_update_image_with_deleted_status(self):"},{"line_number":259,"context_line":"        # Negative tests for update a deleted image PUT /images/\u003cimage_id\u003e"},{"line_number":260,"context_line":"        resp, image \u003d self.client.create_image(\u0027test\u0027, \u0027bare\u0027, \u0027raw\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAS3%2F%2FVI4%3D","line":257,"updated":"2013-09-30 04:11:16.000000000","message":"Please fix the comments  given by  \"zhu zhu\".\nfor example:-\nhttps://github.com/openstack/tempest/blob/master/tempest/api/compute/servers/test_servers_negative.py#L265","commit_id":"fe895de68f400960c9a0f985daec21f4ef17d519"},{"author":{"_account_id":8625,"name":"Anju Tiwari","username":"Anju5","inactive":true},"change_message_id":"0cbd7acc096f857e2ef2bd81b9df8eedaae7cb7d","unresolved":false,"context_lines":[{"line_number":263,"context_line":"        self.assertRaises(exceptions.NotFound,"},{"line_number":264,"context_line":"                          self.client.update_image, image[\u0027id\u0027])"},{"line_number":265,"context_line":""},{"line_number":266,"context_line":"    @attr(type\u003d\u0027gate\u0027)"},{"line_number":267,"context_line":"    def test_update_image_with_immutable_properties(self):"},{"line_number":268,"context_line":"        # Negative tests for update an immutable property"},{"line_number":269,"context_line":"        # PUT /images/\u003cimage_id\u003e"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAS3%2F%2FVI8%3D","line":266,"updated":"2013-09-30 04:11:16.000000000","message":"same here","commit_id":"fe895de68f400960c9a0f985daec21f4ef17d519"},{"author":{"_account_id":8625,"name":"Anju Tiwari","username":"Anju5","inactive":true},"change_message_id":"0cbd7acc096f857e2ef2bd81b9df8eedaae7cb7d","unresolved":false,"context_lines":[{"line_number":283,"context_line":"                          container_format\u003d\u0027bare\u0027,"},{"line_number":284,"context_line":"                          size\u003d1024)"},{"line_number":285,"context_line":""},{"line_number":286,"context_line":"    @attr(type\u003d\u0027gate\u0027)"},{"line_number":287,"context_line":"    def test_update_image_with_image_data_and_not_queued(self):"},{"line_number":288,"context_line":"        # Negative tests to update image data with an active image id"},{"line_number":289,"context_line":"        # PUT /images/\u003cimage_id\u003e"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAS3%2F%2FVJA%3D","line":286,"updated":"2013-09-30 04:11:16.000000000","message":"same here","commit_id":"fe895de68f400960c9a0f985daec21f4ef17d519"},{"author":{"_account_id":8625,"name":"Anju Tiwari","username":"Anju5","inactive":true},"change_message_id":"0cbd7acc096f857e2ef2bd81b9df8eedaae7cb7d","unresolved":false,"context_lines":[{"line_number":303,"context_line":"                          container_format\u003d\u0027bare\u0027,"},{"line_number":304,"context_line":"                          data\u003dimage_file)"},{"line_number":305,"context_line":""},{"line_number":306,"context_line":"    @attr(type\u003d\u0027gate\u0027)"},{"line_number":307,"context_line":"    def test_update_image_with_location_and_not_queued(self):"},{"line_number":308,"context_line":"        location \u003d \u0027http://example.com/someimage.iso\u0027"},{"line_number":309,"context_line":"        resp, image \u003d self.client.create_image(name\u003d\u0027test\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAS3%2F%2FVJE%3D","line":306,"updated":"2013-09-30 04:11:16.000000000","message":"same here","commit_id":"fe895de68f400960c9a0f985daec21f4ef17d519"},{"author":{"_account_id":8625,"name":"Anju Tiwari","username":"Anju5","inactive":true},"change_message_id":"0cbd7acc096f857e2ef2bd81b9df8eedaae7cb7d","unresolved":false,"context_lines":[{"line_number":321,"context_line":"                          container_format\u003d\u0027bare\u0027,"},{"line_number":322,"context_line":"                          location\u003dnew_location)"},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"    @attr(type\u003d\u0027gate\u0027)"},{"line_number":325,"context_line":"    def test_update_image_with_non_existing_id(self):"},{"line_number":326,"context_line":"        self.assertRaises(exceptions.NotFound,"},{"line_number":327,"context_line":"                          self.client.update_image,"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAS3%2F%2FVJI%3D","line":324,"updated":"2013-09-30 04:11:16.000000000","message":"same here","commit_id":"fe895de68f400960c9a0f985daec21f4ef17d519"},{"author":{"_account_id":8625,"name":"Anju Tiwari","username":"Anju5","inactive":true},"change_message_id":"0cbd7acc096f857e2ef2bd81b9df8eedaae7cb7d","unresolved":false,"context_lines":[{"line_number":322,"context_line":"                          location\u003dnew_location)"},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"    @attr(type\u003d\u0027gate\u0027)"},{"line_number":325,"context_line":"    def test_update_image_with_non_existing_id(self):"},{"line_number":326,"context_line":"        self.assertRaises(exceptions.NotFound,"},{"line_number":327,"context_line":"                          self.client.update_image,"},{"line_number":328,"context_line":"                          \u00271111111\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAS3%2F%2FVKI%3D","line":325,"updated":"2013-09-30 04:11:16.000000000","message":"Please use a random value for invalid image_id.\n\nexample:-\nhttps://github.com/openstack/tempest/blob/master/tempest/api/compute/servers/test_servers_negative.py#L268","commit_id":"fe895de68f400960c9a0f985daec21f4ef17d519"},{"author":{"_account_id":8625,"name":"Anju Tiwari","username":"Anju5","inactive":true},"change_message_id":"0cbd7acc096f857e2ef2bd81b9df8eedaae7cb7d","unresolved":false,"context_lines":[{"line_number":328,"context_line":"                          \u00271111111\u0027)"},{"line_number":329,"context_line":""},{"line_number":330,"context_line":"    @attr(type\u003d\u0027gate\u0027)"},{"line_number":331,"context_line":"    def test_update_image_with_full(self):"},{"line_number":332,"context_line":"        resp, image \u003d self.client.create_image(name\u003d\u0027test\u0027,"},{"line_number":333,"context_line":"                                               container_format\u003d\u0027bare\u0027,"},{"line_number":334,"context_line":"                                               disk_format\u003d\u0027raw\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAS3%2F%2FVJk%3D","line":331,"updated":"2013-09-30 04:11:16.000000000","message":"test_update_image_with_full , can you please rename this test.","commit_id":"fe895de68f400960c9a0f985daec21f4ef17d519"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"1f5953d46f7c75b0d2c36a681121b3d5c68fe419","unresolved":false,"context_lines":[{"line_number":326,"context_line":"    def test_update_image_with_non_existing_id(self):"},{"line_number":327,"context_line":"        self.assertRaises(exceptions.NotFound,"},{"line_number":328,"context_line":"                          self.client.update_image,"},{"line_number":329,"context_line":"                          random.randint)"},{"line_number":330,"context_line":""},{"line_number":331,"context_line":"    @attr(type\u003d\u0027gate\u0027)"},{"line_number":332,"context_line":"    def test_update_image(self):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAS3%2F%2FVCo%3D","line":329,"updated":"2013-09-30 05:40:01.000000000","message":"it is better to use \"uuid.uuid4()\" instead of \"random.randint\" here,\nbecause uuid is more popular as an image id.","commit_id":"0fbf1b6a0c1783ae84fd952fabda7d4b940e6143"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"e5b8ed49ba70d2f5b6bbae6181d46318ce2d0bc4","unresolved":false,"context_lines":[{"line_number":327,"context_line":"    def test_update_image_with_non_existing_id(self):"},{"line_number":328,"context_line":"        self.assertRaises(exceptions.NotFound,"},{"line_number":329,"context_line":"                          self.client.update_image,"},{"line_number":330,"context_line":"                          uuid.uuid4())"},{"line_number":331,"context_line":""},{"line_number":332,"context_line":"    @attr(type\u003d\u0027gate\u0027)"},{"line_number":333,"context_line":"    def test_update_image(self):"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAS3%2F%2FU9E%3D","line":330,"updated":"2013-09-30 06:11:19.000000000","message":"Here should be \"str(uuid.uuid4())\" because of other callers of uuid.uuid4(). The other part is great.","commit_id":"dca9f5f2e878e30382a85898586ec221f5d0f49f"},{"author":{"_account_id":6796,"name":"Giulio Fidente","email":"gfidente@redhat.com","username":"gfidente"},"change_message_id":"66b33559a4cc68f81e12067f62e274a0151451e5","unresolved":false,"context_lines":[{"line_number":270,"context_line":"        # Negative tests for update an immutable property"},{"line_number":271,"context_line":"        # PUT /images/\u003cimage_id\u003e"},{"line_number":272,"context_line":"        location \u003d \u0027http://example.com/someimage.iso\u0027"},{"line_number":273,"context_line":"        resp, image \u003d self.client.create_image(name\u003d\u0027test\u0027,"},{"line_number":274,"context_line":"                                               container_format\u003d\u0027bare\u0027,"},{"line_number":275,"context_line":"                                               disk_format\u003d\u0027raw\u0027,"},{"line_number":276,"context_line":"                                               is_public\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAS3%2F%2FORQ%3D","line":273,"updated":"2013-10-02 00:20:17.000000000","message":"I\u0027d prefer you to use the helper utilities from base.py for the collateral tasks (self.create_image)","commit_id":"bafb04a7e3111b8327ea4335fcc041915add1165"},{"author":{"_account_id":6796,"name":"Giulio Fidente","email":"gfidente@redhat.com","username":"gfidente"},"change_message_id":"66b33559a4cc68f81e12067f62e274a0151451e5","unresolved":false,"context_lines":[{"line_number":286,"context_line":"                          size\u003d1024)"},{"line_number":287,"context_line":""},{"line_number":288,"context_line":"    @attr(type\u003d[\u0027negative\u0027, \u0027gate\u0027])"},{"line_number":289,"context_line":"    def test_update_image_with_image_data_and_not_queued(self):"},{"line_number":290,"context_line":"        # Negative tests to update image data with an active image id"},{"line_number":291,"context_line":"        # PUT /images/\u003cimage_id\u003e"},{"line_number":292,"context_line":"        location \u003d \u0027http://example.com/someimage.iso\u0027"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAS3%2F%2FORA%3D","line":289,"updated":"2013-10-02 00:20:17.000000000","message":"pardon it\u0027s my fault but I\u0027m not sure what this test does from the title, \"not queued\"?","commit_id":"bafb04a7e3111b8327ea4335fcc041915add1165"},{"author":{"_account_id":6981,"name":"Yang Yu","email":"yangyu@vmware.com","username":"yuyangbj"},"change_message_id":"93ec64cc9dd05134996b7812384a4caa2a7df273","unresolved":false,"context_lines":[{"line_number":286,"context_line":"                          size\u003d1024)"},{"line_number":287,"context_line":""},{"line_number":288,"context_line":"    @attr(type\u003d[\u0027negative\u0027, \u0027gate\u0027])"},{"line_number":289,"context_line":"    def test_update_image_with_image_data_and_not_queued(self):"},{"line_number":290,"context_line":"        # Negative tests to update image data with an active image id"},{"line_number":291,"context_line":"        # PUT /images/\u003cimage_id\u003e"},{"line_number":292,"context_line":"        location \u003d \u0027http://example.com/someimage.iso\u0027"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAATH%2F%2F2FQ%3D","line":289,"in_reply_to":"AAAAS3%2F%2FORA%3D","updated":"2013-10-09 03:13:26.000000000","message":"There is an image status named \u0027queued\u0027, in this status, we can update some properties, but if the image is not in this status, the property can not be updated.","commit_id":"bafb04a7e3111b8327ea4335fcc041915add1165"},{"author":{"_account_id":6796,"name":"Giulio Fidente","email":"gfidente@redhat.com","username":"gfidente"},"change_message_id":"66b33559a4cc68f81e12067f62e274a0151451e5","unresolved":false,"context_lines":[{"line_number":290,"context_line":"        # Negative tests to update image data with an active image id"},{"line_number":291,"context_line":"        # PUT /images/\u003cimage_id\u003e"},{"line_number":292,"context_line":"        location \u003d \u0027http://example.com/someimage.iso\u0027"},{"line_number":293,"context_line":"        resp, image \u003d self.client.create_image(name\u003d\u0027test\u0027,"},{"line_number":294,"context_line":"                                               container_format\u003d\u0027bare\u0027,"},{"line_number":295,"context_line":"                                               disk_format\u003d\u0027raw\u0027,"},{"line_number":296,"context_line":"                                               is_public\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAS3%2F%2FORM%3D","line":293,"updated":"2013-10-02 00:20:17.000000000","message":"I\u0027d prefer you to use the helper utilities from base.py for the collateral tasks (self.create_image)","commit_id":"bafb04a7e3111b8327ea4335fcc041915add1165"},{"author":{"_account_id":6796,"name":"Giulio Fidente","email":"gfidente@redhat.com","username":"gfidente"},"change_message_id":"66b33559a4cc68f81e12067f62e274a0151451e5","unresolved":false,"context_lines":[{"line_number":308,"context_line":"    @attr(type\u003d[\u0027negative\u0027, \u0027gate\u0027])"},{"line_number":309,"context_line":"    def test_update_image_with_location_and_not_queued(self):"},{"line_number":310,"context_line":"        location \u003d \u0027http://example.com/someimage.iso\u0027"},{"line_number":311,"context_line":"        resp, image \u003d self.client.create_image(name\u003d\u0027test\u0027,"},{"line_number":312,"context_line":"                                               container_format\u003d\u0027bare\u0027,"},{"line_number":313,"context_line":"                                               disk_format\u003d\u0027raw\u0027,"},{"line_number":314,"context_line":"                                               is_public\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAS3%2F%2FOQ8%3D","line":311,"updated":"2013-10-02 00:20:17.000000000","message":"ditto","commit_id":"bafb04a7e3111b8327ea4335fcc041915add1165"},{"author":{"_account_id":6796,"name":"Giulio Fidente","email":"gfidente@redhat.com","username":"gfidente"},"change_message_id":"66b33559a4cc68f81e12067f62e274a0151451e5","unresolved":false,"context_lines":[{"line_number":331,"context_line":""},{"line_number":332,"context_line":"    @attr(type\u003d\u0027gate\u0027)"},{"line_number":333,"context_line":"    def test_update_image(self):"},{"line_number":334,"context_line":"        resp, image \u003d self.client.create_image(name\u003d\u0027test\u0027,"},{"line_number":335,"context_line":"                                               container_format\u003d\u0027bare\u0027,"},{"line_number":336,"context_line":"                                               disk_format\u003d\u0027raw\u0027,"},{"line_number":337,"context_line":"                                               is_public\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAS3%2F%2FOQ0%3D","line":334,"updated":"2013-10-02 00:20:17.000000000","message":"ditto","commit_id":"bafb04a7e3111b8327ea4335fcc041915add1165"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"4ea479181b87d8d18f6c095d2ff76662de5f5e2c","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from tempest.test import attr"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"import uuid"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"class CreateRegisterImagesTest(base.BaseV1ImageTest):"},{"line_number":28,"context_line":"    \"\"\"Here we test the registration and creation of images.\"\"\""}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAATH%2F%2FxG0%3D","line":25,"updated":"2013-10-10 05:09:43.000000000","message":"The order is wrong.\n\n\"import uuid\" is Stdlib, and it should be imported before OpenStack lib(tempest). so here should be:\n\n import cStringIO as StringIO\n import uuid\n (new line)\n from tempest.api.image import base\n from tempest import exceptions\n [..]\n\nPlease see Matthew\u0027s comment on https://review.openstack.org/#/c/45779/ . I have learn about this topic from his comment.","commit_id":"fb8061d7fbfebcbf64d36ddbeac54261b0dc8bd5"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"4ea479181b87d8d18f6c095d2ff76662de5f5e2c","unresolved":false,"context_lines":[{"line_number":274,"context_line":"                                        container_format\u003d\u0027bare\u0027,"},{"line_number":275,"context_line":"                                        disk_format\u003d\u0027raw\u0027,"},{"line_number":276,"context_line":"                                        is_public\u003dTrue,"},{"line_number":277,"context_line":"                                        location\u003dlocation)"},{"line_number":278,"context_line":"        self.assertIn(\u0027size\u0027, image)"},{"line_number":279,"context_line":"        self.client.wait_for_image_status(image[\u0027id\u0027], \u0027active\u0027)"},{"line_number":280,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAATH%2F%2FxHA%3D","line":277,"updated":"2013-10-10 05:09:43.000000000","message":"\"self.assertEqual(resp.status, 201)\" of here would detect some errors faster.","commit_id":"fb8061d7fbfebcbf64d36ddbeac54261b0dc8bd5"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"4ea479181b87d8d18f6c095d2ff76662de5f5e2c","unresolved":false,"context_lines":[{"line_number":294,"context_line":"                                        container_format\u003d\u0027bare\u0027,"},{"line_number":295,"context_line":"                                        disk_format\u003d\u0027raw\u0027,"},{"line_number":296,"context_line":"                                        is_public\u003dTrue,"},{"line_number":297,"context_line":"                                        location\u003dlocation)"},{"line_number":298,"context_line":"        image_id \u003d image.get(\u0027id\u0027)"},{"line_number":299,"context_line":"        self.client.wait_for_image_status(image_id, \u0027active\u0027)"},{"line_number":300,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAATH%2F%2FxGs%3D","line":297,"updated":"2013-10-10 05:09:43.000000000","message":"ditto","commit_id":"fb8061d7fbfebcbf64d36ddbeac54261b0dc8bd5"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"4ea479181b87d8d18f6c095d2ff76662de5f5e2c","unresolved":false,"context_lines":[{"line_number":306,"context_line":"                          data\u003dimage_file)"},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"    @attr(type\u003d[\u0027negative\u0027, \u0027gate\u0027])"},{"line_number":309,"context_line":"    def test_update_image_with_location_and_not_queued(self):"},{"line_number":310,"context_line":"        location \u003d \u0027http://example.com/someimage.iso\u0027"},{"line_number":311,"context_line":"        resp, image \u003d self.create_image(name\u003d\u0027test\u0027,"},{"line_number":312,"context_line":"                                        container_format\u003d\u0027bare\u0027,"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAATH%2F%2FxF0%3D","line":309,"updated":"2013-10-10 05:09:43.000000000","message":"nit: most test cases have the comment about its behavior.","commit_id":"fb8061d7fbfebcbf64d36ddbeac54261b0dc8bd5"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"4ea479181b87d8d18f6c095d2ff76662de5f5e2c","unresolved":false,"context_lines":[{"line_number":312,"context_line":"                                        container_format\u003d\u0027bare\u0027,"},{"line_number":313,"context_line":"                                        disk_format\u003d\u0027raw\u0027,"},{"line_number":314,"context_line":"                                        is_public\u003dTrue,"},{"line_number":315,"context_line":"                                        location\u003dlocation)"},{"line_number":316,"context_line":"        self.client.wait_for_image_status(image[\u0027id\u0027], \u0027active\u0027)"},{"line_number":317,"context_line":""},{"line_number":318,"context_line":"        image_id \u003d image.get(\u0027id\u0027)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAATH%2F%2FxGo%3D","line":315,"updated":"2013-10-10 05:09:43.000000000","message":"ditto: self.assertEqual(resp.status, 201)","commit_id":"fb8061d7fbfebcbf64d36ddbeac54261b0dc8bd5"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"4ea479181b87d8d18f6c095d2ff76662de5f5e2c","unresolved":false,"context_lines":[{"line_number":330,"context_line":"                          str(uuid.uuid4()))"},{"line_number":331,"context_line":""},{"line_number":332,"context_line":"    @attr(type\u003d\u0027gate\u0027)"},{"line_number":333,"context_line":"    def test_update_image(self):"},{"line_number":334,"context_line":"        resp, image \u003d self.create_image(name\u003d\u0027test\u0027,"},{"line_number":335,"context_line":"                                        container_format\u003d\u0027bare\u0027,"},{"line_number":336,"context_line":"                                        disk_format\u003d\u0027raw\u0027,"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAATH%2F%2FxF8%3D","line":333,"updated":"2013-10-10 05:09:43.000000000","message":"why don\u0027t you put a positive test fast?","commit_id":"fb8061d7fbfebcbf64d36ddbeac54261b0dc8bd5"},{"author":{"_account_id":6981,"name":"Yang Yu","email":"yangyu@vmware.com","username":"yuyangbj"},"change_message_id":"edd14ceb4098c21e9acdc1b921234de9af5314ce","unresolved":false,"context_lines":[{"line_number":330,"context_line":"                          str(uuid.uuid4()))"},{"line_number":331,"context_line":""},{"line_number":332,"context_line":"    @attr(type\u003d\u0027gate\u0027)"},{"line_number":333,"context_line":"    def test_update_image(self):"},{"line_number":334,"context_line":"        resp, image \u003d self.create_image(name\u003d\u0027test\u0027,"},{"line_number":335,"context_line":"                                        container_format\u003d\u0027bare\u0027,"},{"line_number":336,"context_line":"                                        disk_format\u003d\u0027raw\u0027,"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAATH%2F%2FwrQ%3D","line":333,"in_reply_to":"AAAATH%2F%2FxF8%3D","updated":"2013-10-10 07:56:35.000000000","message":"I think leaving it blank would mean positive.","commit_id":"fb8061d7fbfebcbf64d36ddbeac54261b0dc8bd5"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"4ea479181b87d8d18f6c095d2ff76662de5f5e2c","unresolved":false,"context_lines":[{"line_number":334,"context_line":"        resp, image \u003d self.create_image(name\u003d\u0027test\u0027,"},{"line_number":335,"context_line":"                                        container_format\u003d\u0027bare\u0027,"},{"line_number":336,"context_line":"                                        disk_format\u003d\u0027raw\u0027,"},{"line_number":337,"context_line":"                                        is_public\u003dTrue)"},{"line_number":338,"context_line":""},{"line_number":339,"context_line":"        self.assertIn(\u0027id\u0027, image)"},{"line_number":340,"context_line":"        self.assertEqual(image[\u0027status\u0027], \u0027queued\u0027)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAATH%2F%2FxGE%3D","line":337,"updated":"2013-10-10 05:09:43.000000000","message":"ditto: self.assertEqual(resp.status, 201)","commit_id":"fb8061d7fbfebcbf64d36ddbeac54261b0dc8bd5"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"4ea479181b87d8d18f6c095d2ff76662de5f5e2c","unresolved":false,"context_lines":[{"line_number":341,"context_line":""},{"line_number":342,"context_line":"        image_id \u003d image.get(\u0027id\u0027)"},{"line_number":343,"context_line":"        image_file \u003d StringIO.StringIO((\u0027*\u0027 * 1024))"},{"line_number":344,"context_line":"        resp, image \u003d self.client.update_image(image_id, data\u003dimage_file)"},{"line_number":345,"context_line":"        self.assertIn(\u0027size\u0027, image)"},{"line_number":346,"context_line":"        self.assertEqual(1024, image.get(\u0027size\u0027))"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAATH%2F%2FxGI%3D","line":344,"updated":"2013-10-10 05:09:43.000000000","message":"ditto: self.assertEqual(resp.status, 20?) is necessary.\n\nI\u0027m not sure the code 20?. please put a right value.","commit_id":"fb8061d7fbfebcbf64d36ddbeac54261b0dc8bd5"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"3364d453d17986e94859dd7bcd9955775f4d26cd","unresolved":false,"context_lines":[{"line_number":260,"context_line":"        # Negative tests for update a deleted image PUT /images/\u003cimage_id\u003e"},{"line_number":261,"context_line":"        resp, image \u003d self.client.create_image(\u0027test\u0027, \u0027bare\u0027, \u0027raw\u0027)"},{"line_number":262,"context_line":"        self.assertEqual(resp.status, 201)"},{"line_number":263,"context_line":"        self.client.delete_image(image[\u0027id\u0027])"},{"line_number":264,"context_line":"        self.assertRaises(exceptions.NotFound,"},{"line_number":265,"context_line":"                          self.client.update_image, image[\u0027id\u0027])"},{"line_number":266,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAATH%2F%2FvJQ%3D","line":263,"updated":"2013-10-10 14:16:36.000000000","message":"Delete is an async operation, so you need to wait for image deletion here. Otherwise the test might fail if the image delete hasn\u0027t finished by the time you run update.","commit_id":"1df02e0d7ddb0a487a4077b8a4239c18626cfbe6"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"3364d453d17986e94859dd7bcd9955775f4d26cd","unresolved":false,"context_lines":[{"line_number":334,"context_line":"                          str(uuid.uuid4()))"},{"line_number":335,"context_line":""},{"line_number":336,"context_line":"    @attr(type\u003d\u0027gate\u0027)"},{"line_number":337,"context_line":"    def test_update_image(self):"},{"line_number":338,"context_line":"        resp, image \u003d self.create_image(name\u003d\u0027test\u0027,"},{"line_number":339,"context_line":"                                        container_format\u003d\u0027bare\u0027,"},{"line_number":340,"context_line":"                                        disk_format\u003d\u0027raw\u0027,"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAATH%2F%2FvIE%3D","line":337,"updated":"2013-10-10 14:16:36.000000000","message":"What advantage does this test provide over test_register_then_upload above? We don\u0027t need to have the same test twice.","commit_id":"1df02e0d7ddb0a487a4077b8a4239c18626cfbe6"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"2a626cc17e18cc01ce6e6850f1ef76789c2f0652","unresolved":false,"context_lines":[{"line_number":262,"context_line":"        self.assertEqual(resp.status, 201)"},{"line_number":263,"context_line":"        self.client.delete_image(image[\u0027id\u0027])"},{"line_number":264,"context_line":"        self.assertRaises(exceptions.NotFound,"},{"line_number":265,"context_line":"                          self.client.wait_for_image_status,"},{"line_number":266,"context_line":"                          image_id\u003dimage[\u0027id\u0027],"},{"line_number":267,"context_line":"                          status\u003d\u0027deleted\u0027)"},{"line_number":268,"context_line":"        self.assertRaises(exceptions.NotFound,"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAATH%2F%2FqU4%3D","line":265,"updated":"2013-10-11 15:37:06.000000000","message":"Just use self.client.wait_for_resource_deletion(image[\u0027id\u0027]) here. What you\u0027re doing here with wait_for_status is very weird. (and I don\u0027t think it works like you\u0027re expecting either)","commit_id":"02bc393a8d80957229e4017fe472a86cb2ba2ed1"},{"author":{"_account_id":5586,"name":"Ivan-Zhu","email":"zhubo198511@gmail.com","username":"ivan-zhu"},"change_message_id":"57f9c44847c4ad24e579e3c8b7a1e6737242e340","unresolved":false,"context_lines":[{"line_number":264,"context_line":"        self.assertRaises(exceptions.NotFound,"},{"line_number":265,"context_line":"                          self.client.wait_for_image_status,"},{"line_number":266,"context_line":"                          image_id\u003dimage[\u0027id\u0027],"},{"line_number":267,"context_line":"                          status\u003d\u0027deleted\u0027)"},{"line_number":268,"context_line":"        self.assertRaises(exceptions.NotFound,"},{"line_number":269,"context_line":"                          self.client.update_image, image[\u0027id\u0027])"},{"line_number":270,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAATH%2F%2FryU%3D","line":267,"updated":"2013-10-11 08:51:19.000000000","message":"if the status reach \"deleted\", it will not raise exceptions.NotFound, right?","commit_id":"02bc393a8d80957229e4017fe472a86cb2ba2ed1"},{"author":{"_account_id":6981,"name":"Yang Yu","email":"yangyu@vmware.com","username":"yuyangbj"},"change_message_id":"0718e3e43c7b0e3d29ed54247153cc92563c514c","unresolved":false,"context_lines":[{"line_number":264,"context_line":"        self.assertRaises(exceptions.NotFound,"},{"line_number":265,"context_line":"                          self.client.wait_for_image_status,"},{"line_number":266,"context_line":"                          image_id\u003dimage[\u0027id\u0027],"},{"line_number":267,"context_line":"                          status\u003d\u0027deleted\u0027)"},{"line_number":268,"context_line":"        self.assertRaises(exceptions.NotFound,"},{"line_number":269,"context_line":"                          self.client.update_image, image[\u0027id\u0027])"},{"line_number":270,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAATH%2F%2FqyM%3D","line":267,"in_reply_to":"AAAATH%2F%2Fq7w%3D","updated":"2013-10-11 13:40:17.000000000","message":"Do you think we really need to modify the wait_for_image_status() code even though it is not a bug? Here delete_image is an ansyc operation, and I need to input an unreachable status to wait for the delete completion (Actually, here we can input any invalid status). When the image is in deleted status, it will throw a NotFound exception from DB layer, and we expect the NotFound to make sure the image is deleted. If we catch the exception in wait_for_image_status, and do not throw it to upper layer, we can not detect some errors.","commit_id":"02bc393a8d80957229e4017fe472a86cb2ba2ed1"},{"author":{"_account_id":6981,"name":"Yang Yu","email":"yangyu@vmware.com","username":"yuyangbj"},"change_message_id":"61f1eea88abb3fd048d4b921725d693897f32176","unresolved":false,"context_lines":[{"line_number":264,"context_line":"        self.assertRaises(exceptions.NotFound,"},{"line_number":265,"context_line":"                          self.client.wait_for_image_status,"},{"line_number":266,"context_line":"                          image_id\u003dimage[\u0027id\u0027],"},{"line_number":267,"context_line":"                          status\u003d\u0027deleted\u0027)"},{"line_number":268,"context_line":"        self.assertRaises(exceptions.NotFound,"},{"line_number":269,"context_line":"                          self.client.update_image, image[\u0027id\u0027])"},{"line_number":270,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAATH%2F%2Fqq8%3D","line":267,"in_reply_to":"AAAATH%2F%2FqtI%3D","updated":"2013-10-11 14:14:03.000000000","message":"Thank you for your comments. It made me investigate more codes. Thanks. I think if we want to make wait_for_image_status to support all status of image,  we need to modify it in another thread. But actually, this method works well for current all test cases. If we want to reach the status which is not \u0027deleted\u0027, usually it will not raise the NotFound exception, the code will return when we get to the expected status, it is a utility method to support async api.","commit_id":"02bc393a8d80957229e4017fe472a86cb2ba2ed1"},{"author":{"_account_id":5586,"name":"Ivan-Zhu","email":"zhubo198511@gmail.com","username":"ivan-zhu"},"change_message_id":"dba35ed9d12cb08610e00ba2a50728344a761db6","unresolved":false,"context_lines":[{"line_number":264,"context_line":"        self.assertRaises(exceptions.NotFound,"},{"line_number":265,"context_line":"                          self.client.wait_for_image_status,"},{"line_number":266,"context_line":"                          image_id\u003dimage[\u0027id\u0027],"},{"line_number":267,"context_line":"                          status\u003d\u0027deleted\u0027)"},{"line_number":268,"context_line":"        self.assertRaises(exceptions.NotFound,"},{"line_number":269,"context_line":"                          self.client.update_image, image[\u0027id\u0027])"},{"line_number":270,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAATH%2F%2FqtI%3D","line":267,"in_reply_to":"AAAATH%2F%2FqyM%3D","updated":"2013-10-11 14:03:17.000000000","message":"ok, this couldn\u0027t be done here. \n\nI\u0027m not familiar with glance. But \"deleted\" like these status of image: \"active, queued, saving, pending_delete, kill\"\nWe can use wait_for_image_status wait for the status \"active, queued\", so wait for \"deleted\" in this way will make sense.\n \nWhen the status we want to reach is not \"deleted\", we can raise the exceptions.NotFound.  When it is \"deleted\", we can catch the exceptions, ignore it and return successfully.","commit_id":"02bc393a8d80957229e4017fe472a86cb2ba2ed1"},{"author":{"_account_id":5586,"name":"Ivan-Zhu","email":"zhubo198511@gmail.com","username":"ivan-zhu"},"change_message_id":"ee6e3aa0816c9a0a5505d18b30ce892516fd874d","unresolved":false,"context_lines":[{"line_number":264,"context_line":"        self.assertRaises(exceptions.NotFound,"},{"line_number":265,"context_line":"                          self.client.wait_for_image_status,"},{"line_number":266,"context_line":"                          image_id\u003dimage[\u0027id\u0027],"},{"line_number":267,"context_line":"                          status\u003d\u0027deleted\u0027)"},{"line_number":268,"context_line":"        self.assertRaises(exceptions.NotFound,"},{"line_number":269,"context_line":"                          self.client.update_image, image[\u0027id\u0027])"},{"line_number":270,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAATH%2F%2Fq7w%3D","line":267,"in_reply_to":"AAAATH%2F%2FrAE%3D","updated":"2013-10-11 13:06:55.000000000","message":"yes, it will raise the exception. I meant we can fix it.","commit_id":"02bc393a8d80957229e4017fe472a86cb2ba2ed1"},{"author":{"_account_id":6981,"name":"Yang Yu","email":"yangyu@vmware.com","username":"yuyangbj"},"change_message_id":"7c3e0f7e7cd246ff1cab23a4bbf4c3f2061f1ec3","unresolved":false,"context_lines":[{"line_number":264,"context_line":"        self.assertRaises(exceptions.NotFound,"},{"line_number":265,"context_line":"                          self.client.wait_for_image_status,"},{"line_number":266,"context_line":"                          image_id\u003dimage[\u0027id\u0027],"},{"line_number":267,"context_line":"                          status\u003d\u0027deleted\u0027)"},{"line_number":268,"context_line":"        self.assertRaises(exceptions.NotFound,"},{"line_number":269,"context_line":"                          self.client.update_image, image[\u0027id\u0027])"},{"line_number":270,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAATH%2F%2FrAE%3D","line":267,"in_reply_to":"AAAATH%2F%2FrG0%3D","updated":"2013-10-11 12:55:06.000000000","message":"The exception can not be caught by the wait_for_image_status, it will throw the exception the upper layer, so if we used the first one, the test case would be failed. And I think there is no difference compared to the second one. This code aims to guarantee the image could be deleted. So we expect an NotFound exception here.","commit_id":"02bc393a8d80957229e4017fe472a86cb2ba2ed1"},{"author":{"_account_id":5586,"name":"Ivan-Zhu","email":"zhubo198511@gmail.com","username":"ivan-zhu"},"change_message_id":"43ed487b4f869ca689798810fd3c7cdb8f7cec90","unresolved":false,"context_lines":[{"line_number":264,"context_line":"        self.assertRaises(exceptions.NotFound,"},{"line_number":265,"context_line":"                          self.client.wait_for_image_status,"},{"line_number":266,"context_line":"                          image_id\u003dimage[\u0027id\u0027],"},{"line_number":267,"context_line":"                          status\u003d\u0027deleted\u0027)"},{"line_number":268,"context_line":"        self.assertRaises(exceptions.NotFound,"},{"line_number":269,"context_line":"                          self.client.update_image, image[\u0027id\u0027])"},{"line_number":270,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAATH%2F%2FrG0%3D","line":267,"in_reply_to":"AAAATH%2F%2Frv4%3D","updated":"2013-10-11 12:13:42.000000000","message":"Sorry, I\u0027m not sure why it can not reach to the \"deleted\" status.\n\nBut this is confused. why not use the following: self.client.wait_for_image_status(image[\u0027id\u0027], \"deleted\")\nthe exceptions.NotFound should be caught in wait_for_image_status.\n\nor use:\ntry:\n    self.client.wait_for_image_status(image[\u0027id\u0027], \"deleted\")\nexcept exceptions.NotFound:\n    ................\n\nbut I prefer the first one.","commit_id":"02bc393a8d80957229e4017fe472a86cb2ba2ed1"},{"author":{"_account_id":6981,"name":"Yang Yu","email":"yangyu@vmware.com","username":"yuyangbj"},"change_message_id":"cf8ed9e5d588bc70d019a5a59e831f6212679b56","unresolved":false,"context_lines":[{"line_number":264,"context_line":"        self.assertRaises(exceptions.NotFound,"},{"line_number":265,"context_line":"                          self.client.wait_for_image_status,"},{"line_number":266,"context_line":"                          image_id\u003dimage[\u0027id\u0027],"},{"line_number":267,"context_line":"                          status\u003d\u0027deleted\u0027)"},{"line_number":268,"context_line":"        self.assertRaises(exceptions.NotFound,"},{"line_number":269,"context_line":"                          self.client.update_image, image[\u0027id\u0027])"},{"line_number":270,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAATH%2F%2Frv4%3D","line":267,"in_reply_to":"AAAATH%2F%2FryU%3D","updated":"2013-10-11 08:59:01.000000000","message":"Actually, we can not reach to the \"Deleted\" status, the code is just waiting for the async operation completion. The target is to raise NotFound. So can you move your -1 out? Thanks.","commit_id":"02bc393a8d80957229e4017fe472a86cb2ba2ed1"}],"tempest/api/image/v1/test_images_negative.py":[{"author":{"_account_id":6796,"name":"Giulio Fidente","email":"gfidente@redhat.com","username":"gfidente"},"change_message_id":"711b9e970b26673a85e4b91101b5ad02d2f5c6c4","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    \"\"\"Here we test the update operations of images.\"\"\""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    @attr(type\u003d[\u0027negative\u0027, \u0027gate\u0027])"},{"line_number":31,"context_line":"    def test_update_image_with_deleted_status(self):"},{"line_number":32,"context_line":"        # Negative tests for update a deleted image PUT /images/\u003cimage_id\u003e"},{"line_number":33,"context_line":"        resp, image \u003d self.client.create_image(\u0027test\u0027, \u0027bare\u0027, \u0027raw\u0027)"},{"line_number":34,"context_line":"        self.assertEqual(resp.status, 201)"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAATH%2F%2FYmM%3D","line":31,"updated":"2013-10-16 21:00:12.000000000","message":"maybe test_update_deleted_image describes this test better","commit_id":"ca8eae05daba1cc0247546b0d63ff1a6737d3515"},{"author":{"_account_id":6796,"name":"Giulio Fidente","email":"gfidente@redhat.com","username":"gfidente"},"change_message_id":"711b9e970b26673a85e4b91101b5ad02d2f5c6c4","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    @attr(type\u003d[\u0027negative\u0027, \u0027gate\u0027])"},{"line_number":31,"context_line":"    def test_update_image_with_deleted_status(self):"},{"line_number":32,"context_line":"        # Negative tests for update a deleted image PUT /images/\u003cimage_id\u003e"},{"line_number":33,"context_line":"        resp, image \u003d self.client.create_image(\u0027test\u0027, \u0027bare\u0027, \u0027raw\u0027)"},{"line_number":34,"context_line":"        self.assertEqual(resp.status, 201)"},{"line_number":35,"context_line":"        self.client.delete_image(image[\u0027id\u0027])"},{"line_number":36,"context_line":"        self.client.wait_for_resource_deletion(image[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAATH%2F%2FYmQ%3D","line":33,"updated":"2013-10-16 21:00:12.000000000","message":"I think you should use self.create_image here","commit_id":"ca8eae05daba1cc0247546b0d63ff1a6737d3515"},{"author":{"_account_id":6796,"name":"Giulio Fidente","email":"gfidente@redhat.com","username":"gfidente"},"change_message_id":"711b9e970b26673a85e4b91101b5ad02d2f5c6c4","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        self.assertIn(\u0027size\u0027, image)"},{"line_number":52,"context_line":"        self.client.wait_for_image_status(image[\u0027id\u0027], \u0027active\u0027)"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"        self.assertRaises(exceptions.Unauthorized,"},{"line_number":55,"context_line":"                          self.client.update_image,"},{"line_number":56,"context_line":"                          image_id\u003dimage[\u0027id\u0027],"},{"line_number":57,"context_line":"                          name\u003d\u0027test\u0027,"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAATH%2F%2FYlI%3D","line":54,"updated":"2013-10-16 21:00:12.000000000","message":"maybe we can strip this down into updating a single immutable property and also pass just the bare minimum to self.create_image","commit_id":"ca8eae05daba1cc0247546b0d63ff1a6737d3515"},{"author":{"_account_id":6981,"name":"Yang Yu","email":"yangyu@vmware.com","username":"yuyangbj"},"change_message_id":"7d81321e56dd5b4c9270091e1a8d4df56e215709","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        self.assertIn(\u0027size\u0027, image)"},{"line_number":52,"context_line":"        self.client.wait_for_image_status(image[\u0027id\u0027], \u0027active\u0027)"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"        self.assertRaises(exceptions.Unauthorized,"},{"line_number":55,"context_line":"                          self.client.update_image,"},{"line_number":56,"context_line":"                          image_id\u003dimage[\u0027id\u0027],"},{"line_number":57,"context_line":"                          name\u003d\u0027test\u0027,"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAATH%2F%2FN8Q%3D","line":54,"in_reply_to":"AAAATH%2F%2FYlI%3D","updated":"2013-10-21 08:45:03.000000000","message":"Hi Guilio, I am not sure I get your point. Here the size property is an immutable property, and the container_format is a mutable property.","commit_id":"ca8eae05daba1cc0247546b0d63ff1a6737d3515"},{"author":{"_account_id":6796,"name":"Giulio Fidente","email":"gfidente@redhat.com","username":"gfidente"},"change_message_id":"711b9e970b26673a85e4b91101b5ad02d2f5c6c4","unresolved":false,"context_lines":[{"line_number":59,"context_line":"                          size\u003d1024)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    @attr(type\u003d[\u0027negative\u0027, \u0027gate\u0027])"},{"line_number":62,"context_line":"    def test_update_image_with_image_data_and_not_queued(self):"},{"line_number":63,"context_line":"        # Negative tests to update image data with an active image id"},{"line_number":64,"context_line":"        # PUT /images/\u003cimage_id\u003e"},{"line_number":65,"context_line":"        location \u003d \u0027http://example.com/someimage.iso\u0027"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAATH%2F%2FYkk%3D","line":62,"updated":"2013-10-16 21:00:12.000000000","message":"now that I learned about it, I don\u0027t think it is really necessary to add the and_not_queued suffix, most of the times we wait for resources to be in a \u0027clean\u0027 state before running the tests\n\nI\u0027d eventually add the queued notion to those tests which execute operations against images in queued state","commit_id":"ca8eae05daba1cc0247546b0d63ff1a6737d3515"},{"author":{"_account_id":6796,"name":"Giulio Fidente","email":"gfidente@redhat.com","username":"gfidente"},"change_message_id":"711b9e970b26673a85e4b91101b5ad02d2f5c6c4","unresolved":false,"context_lines":[{"line_number":73,"context_line":"        self.client.wait_for_image_status(image_id, \u0027active\u0027)"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"        image_file \u003d StringIO.StringIO((\u0027*\u0027 * 1024))"},{"line_number":76,"context_line":"        self.assertRaises(exceptions.Duplicate, self.client.update_image,"},{"line_number":77,"context_line":"                          image_id\u003dimage_id,"},{"line_number":78,"context_line":"                          name\u003d\u0027test\u0027,"},{"line_number":79,"context_line":"                          container_format\u003d\u0027bare\u0027,"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAATH%2F%2FYkU%3D","line":76,"updated":"2013-10-16 21:00:12.000000000","message":"as per comment on line 54, I\u0027d strip this and the create_image of all the non necessary args","commit_id":"ca8eae05daba1cc0247546b0d63ff1a6737d3515"},{"author":{"_account_id":6796,"name":"Giulio Fidente","email":"gfidente@redhat.com","username":"gfidente"},"change_message_id":"711b9e970b26673a85e4b91101b5ad02d2f5c6c4","unresolved":false,"context_lines":[{"line_number":80,"context_line":"                          data\u003dimage_file)"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    @attr(type\u003d[\u0027negative\u0027, \u0027gate\u0027])"},{"line_number":83,"context_line":"    def test_update_image_with_location_and_not_queued(self):"},{"line_number":84,"context_line":"        # Negative tests to update image location with an active image id"},{"line_number":85,"context_line":"        # PUT /images/\u003cimage_id\u003e"},{"line_number":86,"context_line":"        location \u003d \u0027http://example.com/someimage.iso\u0027"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAATH%2F%2FYjs%3D","line":83,"updated":"2013-10-16 21:00:12.000000000","message":"same comments from previous test case apply","commit_id":"ca8eae05daba1cc0247546b0d63ff1a6737d3515"},{"author":{"_account_id":6796,"name":"Giulio Fidente","email":"gfidente@redhat.com","username":"gfidente"},"change_message_id":"711b9e970b26673a85e4b91101b5ad02d2f5c6c4","unresolved":false,"context_lines":[{"line_number":120,"context_line":"    def test_delete_protected_image(self):"},{"line_number":121,"context_line":"        # Delete a protected image."},{"line_number":122,"context_line":"        location \u003d \u0027http://example.com/someimage.iso\u0027"},{"line_number":123,"context_line":"        resp, image \u003d self.client.create_image(name\u003d\u0027test\u0027,"},{"line_number":124,"context_line":"                                               container_format\u003d\u0027bare\u0027,"},{"line_number":125,"context_line":"                                               disk_format\u003d\u0027raw\u0027,"},{"line_number":126,"context_line":"                                               is_public\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAATH%2F%2FYjU%3D","line":123,"updated":"2013-10-16 21:00:12.000000000","message":"maybe you can use self.create_image here","commit_id":"ca8eae05daba1cc0247546b0d63ff1a6737d3515"},{"author":{"_account_id":5586,"name":"Ivan-Zhu","email":"zhubo198511@gmail.com","username":"ivan-zhu"},"change_message_id":"7705b1930830161835040ebd138c00f2a9d90765","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        # Negative tests for update an immutable property"},{"line_number":45,"context_line":"        # PUT /images/\u003cimage_id\u003e"},{"line_number":46,"context_line":"        location \u003d \u0027http://example.com/someimage.iso\u0027"},{"line_number":47,"context_line":"        resp, image \u003d self.create_image(name\u003d\u0027test\u0027,"},{"line_number":48,"context_line":"                                        container_format\u003d\u0027bare\u0027,"},{"line_number":49,"context_line":"                                        disk_format\u003d\u0027raw\u0027,"},{"line_number":50,"context_line":"                                        is_public\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAATn%2F%2Fs4A%3D","line":47,"updated":"2013-10-30 08:54:23.000000000","message":"I have looked through this class, all tests need create a image, why not share it in the class, all tests are negative tests.","commit_id":"d9a6faf1bfd39d1e5a293f17d342cc26e2a3d6c1"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"91f6ab46f99bc6e1ac5dbcfe65bf62d89e404d16","unresolved":false,"context_lines":[{"line_number":57,"context_line":"                          self.client.update_image,"},{"line_number":58,"context_line":"                          image_id\u003dimage[\u0027id\u0027],"},{"line_number":59,"context_line":"                          name\u003d\u0027test\u0027,"},{"line_number":60,"context_line":"                          container_format\u003d\u0027bare\u0027,"},{"line_number":61,"context_line":"                          size\u003d1024)"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    @attr(type\u003d[\u0027negative\u0027, \u0027gate\u0027])"}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAATn%2F%2FwX0%3D","line":60,"updated":"2013-10-29 14:32:40.000000000","message":"Why don\u0027t you specify just \"size\" as an immutable property?\nI guess \"size\" is the purpose because line53 checks the existence of \"size\".\n\nThere are many properties here, and I was a little difficult to understand the purpose.","commit_id":"d9a6faf1bfd39d1e5a293f17d342cc26e2a3d6c1"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"af3ddb53e097bda342b34f8e42bd63eab2344ad0","unresolved":false,"context_lines":[{"line_number":57,"context_line":"                          self.client.update_image,"},{"line_number":58,"context_line":"                          image_id\u003dimage[\u0027id\u0027],"},{"line_number":59,"context_line":"                          name\u003d\u0027test\u0027,"},{"line_number":60,"context_line":"                          container_format\u003d\u0027bare\u0027,"},{"line_number":61,"context_line":"                          size\u003d1024)"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    @attr(type\u003d[\u0027negative\u0027, \u0027gate\u0027])"}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAATn%2F%2Fozk%3D","line":60,"in_reply_to":"AAAATn%2F%2Fr7U%3D","updated":"2013-10-31 03:41:08.000000000","message":"Sorry, my previous comment was not clear.\n\nI\u0027d like to say:\nHow about testing like the following?\n\n self.assertRaises(exceptions.Unauthorized,\n                   self.client.update_image,\n                   image_id\u003dimage[\u0027id\u0027],\n                   size\u003d1024)\n\nBy changing to the above, I guess the test purpose would be clear.","commit_id":"d9a6faf1bfd39d1e5a293f17d342cc26e2a3d6c1"},{"author":{"_account_id":6981,"name":"Yang Yu","email":"yangyu@vmware.com","username":"yuyangbj"},"change_message_id":"ec1b2543d78eac0bf8e18e65503821a66de4b6b5","unresolved":false,"context_lines":[{"line_number":57,"context_line":"                          self.client.update_image,"},{"line_number":58,"context_line":"                          image_id\u003dimage[\u0027id\u0027],"},{"line_number":59,"context_line":"                          name\u003d\u0027test\u0027,"},{"line_number":60,"context_line":"                          container_format\u003d\u0027bare\u0027,"},{"line_number":61,"context_line":"                          size\u003d1024)"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    @attr(type\u003d[\u0027negative\u0027, \u0027gate\u0027])"}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAATn%2F%2Fr7U%3D","line":60,"in_reply_to":"AAAATn%2F%2FwX0%3D","updated":"2013-10-30 13:01:09.000000000","message":"So you mean I need test another immutable property here? Actually, I want test the immutable property here, and the size will be an immutable property after the image is in active status.","commit_id":"d9a6faf1bfd39d1e5a293f17d342cc26e2a3d6c1"},{"author":{"_account_id":8336,"name":"QianLin","email":"lin.qian@huawei.com","username":"qianlin"},"change_message_id":"643e0e182ec109915035b693e333b164395c6407","unresolved":false,"context_lines":[{"line_number":63,"context_line":"    @attr(type\u003d[\u0027negative\u0027, \u0027gate\u0027])"},{"line_number":64,"context_line":"    def test_update_image_with_image_data(self):"},{"line_number":65,"context_line":"        # Negative tests to update image data with an active image"},{"line_number":66,"context_line":"        # PUT /images/\u003cimage_id\u003e"},{"line_number":67,"context_line":"        location \u003d \u0027http://example.com/someimage.iso\u0027"},{"line_number":68,"context_line":"        resp, image \u003d self.create_image(name\u003d\u0027test\u0027,"},{"line_number":69,"context_line":"                                        container_format\u003d\u0027bare\u0027,"}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAATn%2F%2FwLc%3D","line":66,"updated":"2013-10-29 14:59:50.000000000","message":"line67 to line75  can be abstracted as a function, i think.","commit_id":"d9a6faf1bfd39d1e5a293f17d342cc26e2a3d6c1"}],"tempest/services/image/v1/json/image_client.py":[{"author":{"_account_id":6796,"name":"Giulio Fidente","email":"gfidente@redhat.com","username":"gfidente"},"change_message_id":"66b33559a4cc68f81e12067f62e274a0151451e5","unresolved":false,"context_lines":[{"line_number":174,"context_line":"        data \u003d None"},{"line_number":175,"context_line":"        if \u0027data\u0027 in kwargs:"},{"line_number":176,"context_line":"            data \u003d kwargs[\u0027data\u0027]"},{"line_number":177,"context_line":"            if data is not None:"},{"line_number":178,"context_line":"                return self._update_with_data(image_id, headers, data)"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"        url \u003d \u0027v1/images/%s\u0027 % image_id"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAS3%2F%2FOQg%3D","line":177,"updated":"2013-10-02 00:20:17.000000000","message":"maybe you can change this in \"if data:\" and drop line 174?","commit_id":"bafb04a7e3111b8327ea4335fcc041915add1165"},{"author":{"_account_id":6981,"name":"Yang Yu","email":"yangyu@vmware.com","username":"yuyangbj"},"change_message_id":"93ec64cc9dd05134996b7812384a4caa2a7df273","unresolved":false,"context_lines":[{"line_number":174,"context_line":"        data \u003d None"},{"line_number":175,"context_line":"        if \u0027data\u0027 in kwargs:"},{"line_number":176,"context_line":"            data \u003d kwargs[\u0027data\u0027]"},{"line_number":177,"context_line":"            if data is not None:"},{"line_number":178,"context_line":"                return self._update_with_data(image_id, headers, data)"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"        url \u003d \u0027v1/images/%s\u0027 % image_id"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAATH%2F%2F2E4%3D","line":177,"in_reply_to":"AAAAS3%2F%2FOQg%3D","updated":"2013-10-09 03:13:26.000000000","message":"No, we need to initiate the variable data because the line 181 uses it.","commit_id":"bafb04a7e3111b8327ea4335fcc041915add1165"}]}
