)]}'
{"tempest/api/image/v2/admin/test_images.py":[{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"7640922b354a8bf6381f3750738b6504a795542f","unresolved":false,"context_lines":[{"line_number":61,"context_line":""},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"class ImportCopyImagesTest(base.BaseV2ImageAdminTest):"},{"line_number":64,"context_line":"    \"\"\"Test the import copy-image operations\"\"\""},{"line_number":65,"context_line":"    @classmethod"},{"line_number":66,"context_line":"    def skip_checks(cls):"},{"line_number":67,"context_line":"        super(ImportCopyImagesTest, cls).skip_checks()"},{"line_number":68,"context_line":"        if not CONF.image_feature_enabled.import_image:"}],"source_content_type":"text/x-python","patch_set":5,"id":"9f560f44_a3abce1b","line":65,"range":{"start_line":64,"start_character":47,"end_line":65,"end_character":16},"updated":"2020-10-08 19:15:45.000000000","message":"unrelated change.","commit_id":"26dfb4a73d4cb831a37eb367975a739fdc1d8c7e"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"7640922b354a8bf6381f3750738b6504a795542f","unresolved":false,"context_lines":[{"line_number":70,"context_line":"                \"%s skipped as image import is not available\" % cls.__name__)"},{"line_number":71,"context_line":"            raise cls.skipException(skip_msg)"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    @decorators.idempotent_id(\u00279b3b644e-03d1-11eb-a036-fa163e2eaf49\u0027)"},{"line_number":74,"context_line":"    def test_image_copy_image_import(self):"},{"line_number":75,"context_line":"        \"\"\"Test \u0027copy-image\u0027 import functionalities"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"        Create image, import image with copy-image method and"},{"line_number":78,"context_line":"        verify that import succeeded."},{"line_number":79,"context_line":"        \"\"\""},{"line_number":80,"context_line":"        available_stores \u003d self.get_available_stores()"},{"line_number":81,"context_line":"        available_import_methods \u003d self.client.info_import()["},{"line_number":82,"context_line":"            \u0027import-methods\u0027][\u0027value\u0027]"},{"line_number":83,"context_line":"        # NOTE(gmann): Skip if copy-image import method and mutlistore"},{"line_number":84,"context_line":"        # are not available."},{"line_number":85,"context_line":"        if (\u0027copy-image\u0027 not in available_import_methods or"},{"line_number":86,"context_line":"            not available_stores):"},{"line_number":87,"context_line":"            raise self.skipException(\u0027Either copy-image import method or \u0027"},{"line_number":88,"context_line":"                                     \u0027multistore is not available\u0027)"},{"line_number":89,"context_line":"        uuid \u003d data_utils.rand_uuid()"},{"line_number":90,"context_line":"        image_name \u003d data_utils.rand_name(\u0027copy-image\u0027)"},{"line_number":91,"context_line":"        container_format \u003d CONF.image.container_formats[0]"},{"line_number":92,"context_line":"        disk_format \u003d CONF.image.disk_formats[0]"},{"line_number":93,"context_line":"        image \u003d self.create_image(name\u003dimage_name,"},{"line_number":94,"context_line":"                                  container_format\u003dcontainer_format,"},{"line_number":95,"context_line":"                                  disk_format\u003ddisk_format,"},{"line_number":96,"context_line":"                                  visibility\u003d\u0027private\u0027,"},{"line_number":97,"context_line":"                                  ramdisk_id\u003duuid)"},{"line_number":98,"context_line":"        self.assertEqual(\u0027queued\u0027, image[\u0027status\u0027])"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"        file_content \u003d data_utils.random_bytes()"},{"line_number":101,"context_line":"        image_file \u003d six.BytesIO(file_content)"},{"line_number":102,"context_line":"        self.client.store_image_file(image[\u0027id\u0027], image_file)"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"        body \u003d self.client.show_image(image[\u0027id\u0027])"},{"line_number":105,"context_line":"        self.assertEqual(image[\u0027id\u0027], body[\u0027id\u0027])"},{"line_number":106,"context_line":"        self.assertEqual(1024, body.get(\u0027size\u0027))"},{"line_number":107,"context_line":"        self.assertEqual(\u0027active\u0027, body[\u0027status\u0027])"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"        # Copy image to all the stores. In case of all_stores request"},{"line_number":110,"context_line":"        # glance will skip the stores where image is already available."},{"line_number":111,"context_line":"        self.admin_client.image_import(image[\u0027id\u0027], method\u003d\u0027copy-image\u0027,"},{"line_number":112,"context_line":"                                       all_stores\u003dTrue)"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"        # Wait for copy to finished on all stores."},{"line_number":115,"context_line":"        failed_store \u003d waiters.wait_and_status_copy_on_all_stores("},{"line_number":116,"context_line":"            self.client, image[\u0027id\u0027])"},{"line_number":117,"context_line":"        # Assert if copy is failed on any store."},{"line_number":118,"context_line":"        self.assertEqual(0, len(failed_store), str(failed_store))"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"    @decorators.idempotent_id(\u0027f6f7687e-03d0-11eb-8480-fa163e2eaf49\u0027)"},{"line_number":121,"context_line":"    def test_image_copy_image_import_with_specific_stores_list(self):"}],"source_content_type":"text/x-python","patch_set":5,"id":"9f560f44_8334cafb","line":118,"range":{"start_line":73,"start_character":1,"end_line":118,"end_character":65},"updated":"2020-10-08 19:15:45.000000000","message":"let\u0027s use this test code in new test. we can define  def _test_image_copy_image_import and take param if test want to copy to all store or a set of store.","commit_id":"26dfb4a73d4cb831a37eb367975a739fdc1d8c7e"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"7640922b354a8bf6381f3750738b6504a795542f","unresolved":false,"context_lines":[{"line_number":161,"context_line":"        self.admin_client.image_import(image[\u0027id\u0027], method\u003d\u0027copy-image\u0027,"},{"line_number":162,"context_line":"                                       stores\u003dstores_list)"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"        # Wait for copy to finished on all stores."},{"line_number":165,"context_line":"        failed_store \u003d waiters.wait_and_status_copy_on_all_stores("},{"line_number":166,"context_line":"            self.client, image[\u0027id\u0027])"},{"line_number":167,"context_line":"        # Assert if copy is failed on any store."},{"line_number":168,"context_line":"        self.assertEqual(0, len(failed_store), str(failed_store))"}],"source_content_type":"text/x-python","patch_set":5,"id":"9f560f44_63441674","line":166,"range":{"start_line":164,"start_character":0,"end_line":166,"end_character":37},"updated":"2020-10-08 19:15:45.000000000","message":"we need to wait for only stores_list","commit_id":"26dfb4a73d4cb831a37eb367975a739fdc1d8c7e"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"bfd13791869ac0a272bd7a5009336c126da810b3","unresolved":true,"context_lines":[{"line_number":120,"context_line":"        image, stores \u003d self._test_image_copy_image_import(all_stores\u003dTrue)"},{"line_number":121,"context_line":"        # Copy image to all the stores. In case of all_stores request"},{"line_number":122,"context_line":"        # glance will skip the stores where image is already available."},{"line_number":123,"context_line":"        self.admin_client.image_import(image[\u0027id\u0027], method\u003d\u0027copy-image\u0027,"},{"line_number":124,"context_line":"                                       all_stores\u003dTrue,"},{"line_number":125,"context_line":"                                       all_stores_must_succeed\u003dFalse)"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"        # Wait for copy to finished on all stores."},{"line_number":128,"context_line":"        failed_stores \u003d waiters.wait_for_image_copied_to_stores("}],"source_content_type":"text/x-python","patch_set":6,"id":"432dcb09_d1d77257","line":125,"range":{"start_line":123,"start_character":0,"end_line":125,"end_character":69},"updated":"2020-12-25 20:54:15.000000000","message":"we can move this part also to common method _test_image_copy_image_import and test only wait and assert.\n\nYou can take stores\u003dNone param in _test_image_copy_image_import and do\nif stores:\n        # Copy image to all the stores. In case of all_stores request\n        # glance will skip the stores where image is already available.\n        self.admin_client.image_import(image[\u0027id\u0027], method\u003d\u0027copy-image\u0027,\n                                       stores\u003dstores)\nelse:\n        # Copy image to all the stores. In case of all_stores request\n        # glance will skip the stores where image is already available.\n        self.admin_client.image_import(image[\u0027id\u0027], method\u003d\u0027copy-image\u0027,\n                                       all_stores\u003dTrue,\n                                       all_stores_must_succeed\u003dFalse)","commit_id":"b76658488eec0861cf52e18537976f994d21f411"}]}
