)]}'
{"tempest/api/volume/admin/test_volumes_backup.py":[{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"01609cb06a6106eb813eb1ef9e90ff126163f2fe","unresolved":false,"context_lines":[{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        # Export Backup"},{"line_number":91,"context_line":"        export_backup \u003d self.backups_adm_client.export_backup(backup[\u0027id\u0027])"},{"line_number":92,"context_line":"        self.assertIn(\u0027backup_service\u0027, export_backup)"},{"line_number":93,"context_line":"        self.assertIn(\u0027backup_url\u0027, export_backup)"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"        # Import Backup"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a80dd14_604b26b1","line":92,"updated":"2015-03-20 13:14:14.000000000","message":"Could you be more precise than just assertIn maybe ? Could you make some assertion on the value of  export_backup[\u0027backup_service\u0027] or export_backup[\u0027backup_url\u0027] ?","commit_id":"c7248ea4d1f9f4991a07010ef53fee39c22e0aad"},{"author":{"_account_id":2222,"name":"meenakshi-m","username":"meenakshi-m"},"change_message_id":"ca5cf540b59a1825551998a41259a09694584faa","unresolved":false,"context_lines":[{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        # Export Backup"},{"line_number":91,"context_line":"        export_backup \u003d self.backups_adm_client.export_backup(backup[\u0027id\u0027])"},{"line_number":92,"context_line":"        self.assertIn(\u0027backup_service\u0027, export_backup)"},{"line_number":93,"context_line":"        self.assertIn(\u0027backup_url\u0027, export_backup)"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"        # Import Backup"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a6ced46_340f0330","line":92,"in_reply_to":"9a80dd14_604b26b1","updated":"2015-03-25 10:05:39.000000000","message":"Hi Jordan,\n\nAs suggested added assertion on the value of export_backup[\u0027backup_service\u0027]. Whereas for export_backup[\u0027backup_url\u0027] just asserted the value to IsNotNone as it returns an encrypted string.\n\nRegards,\nMeenakshi","commit_id":"c7248ea4d1f9f4991a07010ef53fee39c22e0aad"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"fabd6e91f4cd99fffe84a0859b0be2cad2722894","unresolved":false,"context_lines":[{"line_number":91,"context_line":"        export_backup \u003d self.backups_adm_client.export_backup(backup[\u0027id\u0027])"},{"line_number":92,"context_line":"        self.assertIn(\u0027backup_service\u0027, export_backup)"},{"line_number":93,"context_line":"        self.assertIn(\u0027backup_url\u0027, export_backup)"},{"line_number":94,"context_line":"        self.assertEqual(\u0027cinder.backup.drivers.swift\u0027,"},{"line_number":95,"context_line":"                         export_backup[\u0027backup_service\u0027])"},{"line_number":96,"context_line":"        self.assertIsNotNone(export_backup[\u0027backup_url\u0027])"},{"line_number":97,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"1a6ced46_d4130f64","line":94,"updated":"2015-03-25 10:31:11.000000000","message":"I am sorry, now that I see it, my suggestion was a bad idea... Swift is not the only backup provider, there\"s also ceph and nfs for instance. In the future we would want to test the ceph and nfs backup driver so hardcoding \u0027swift\u0027 here won\u0027t work.\n\nWhat I suggest, but you\u0027re free to disagree, is to only assert that export_backup[\u0027backup_service\u0027] is not empty or that export_backup[\u0027backup_service\u0027] starts with \u0027cinder.backup.drivers.\u0027","commit_id":"c22eec00abc7760b5b6f8b50eb10f4f81408a8df"},{"author":{"_account_id":5803,"name":"Attila Fazekas","email":"afazekas@redhat.com","username":"afazekas"},"change_message_id":"2fb4e6a052df8eb35237049e1e5027be432f74fb","unresolved":false,"context_lines":[{"line_number":119,"context_line":"        volumes \u003d self.admin_volume_client.list_volumes()"},{"line_number":120,"context_line":"        self.assertIn(restore[\u0027volume_id\u0027], [v[\u0027id\u0027] for v in volumes])"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"        # Delete restored volume"},{"line_number":123,"context_line":"        self.addCleanup(self.admin_volume_client.delete_volume,"},{"line_number":124,"context_line":"                        restore[\u0027volume_id\u0027])"},{"line_number":125,"context_line":"        self.backups_adm_client.wait_for_backup_status(import_backup[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":5,"id":"dac4157f_1a0e473b","line":122,"updated":"2015-04-22 09:28:54.000000000","message":"Delete does not happens here, it happens at tearDown.","commit_id":"a95d4207fd145d5d4f7e5d1cab9b7afdd679928f"},{"author":{"_account_id":5803,"name":"Attila Fazekas","email":"afazekas@redhat.com","username":"afazekas"},"change_message_id":"2fb4e6a052df8eb35237049e1e5027be432f74fb","unresolved":false,"context_lines":[{"line_number":120,"context_line":"        self.assertIn(restore[\u0027volume_id\u0027], [v[\u0027id\u0027] for v in volumes])"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"        # Delete restored volume"},{"line_number":123,"context_line":"        self.addCleanup(self.admin_volume_client.delete_volume,"},{"line_number":124,"context_line":"                        restore[\u0027volume_id\u0027])"},{"line_number":125,"context_line":"        self.backups_adm_client.wait_for_backup_status(import_backup[\u0027id\u0027],"},{"line_number":126,"context_line":"                                                       \u0027available\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"dac4157f_65a6c411","line":123,"updated":"2015-04-22 09:28:54.000000000","message":"addCleanup needs to be used immediately after creation. (-1)","commit_id":"a95d4207fd145d5d4f7e5d1cab9b7afdd679928f"},{"author":{"_account_id":5803,"name":"Attila Fazekas","email":"afazekas@redhat.com","username":"afazekas"},"change_message_id":"2fb4e6a052df8eb35237049e1e5027be432f74fb","unresolved":false,"context_lines":[{"line_number":122,"context_line":"        # Delete restored volume"},{"line_number":123,"context_line":"        self.addCleanup(self.admin_volume_client.delete_volume,"},{"line_number":124,"context_line":"                        restore[\u0027volume_id\u0027])"},{"line_number":125,"context_line":"        self.backups_adm_client.wait_for_backup_status(import_backup[\u0027id\u0027],"},{"line_number":126,"context_line":"                                                       \u0027available\u0027)"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"dac4157f_2597ac49","line":125,"updated":"2015-04-22 09:28:54.000000000","message":"Looks like we should have helper function for backup deletion, the helper function should repeat the deletion until 404 or timeout. After timeout the deletion should be repeated once without a generic exception catcher.","commit_id":"a95d4207fd145d5d4f7e5d1cab9b7afdd679928f"},{"author":{"_account_id":5803,"name":"Attila Fazekas","email":"afazekas@redhat.com","username":"afazekas"},"change_message_id":"8eb12c212a5caf7bcb9d24187d464c4f41c2d3dd","unresolved":false,"context_lines":[{"line_number":38,"context_line":""},{"line_number":39,"context_line":"        cls.volume \u003d cls.create_volume()"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    def _delete_backup(self, backup_id):"},{"line_number":42,"context_line":"        self.backups_adm_client.delete_backup(backup_id)"},{"line_number":43,"context_line":"        self.backups_adm_client.wait_for_backup_deletion(backup_id)"},{"line_number":44,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"9af37de9_c125e4c2","line":41,"updated":"2015-05-11 08:37:24.000000000","message":"The some tag is removed here by: https://review.openstack.org/#/c/177810/\n\nSee also this thread.: http://lists.openstack.org/pipermail/openstack-dev/2015-April/062775.html","commit_id":"4380c583d230c801a609544c0bf0dc31c508c37c"},{"author":{"_account_id":5803,"name":"Attila Fazekas","email":"afazekas@redhat.com","username":"afazekas"},"change_message_id":"2ae5007c9f49cb5def49acaafc6c6bfedad8f4ce","unresolved":false,"context_lines":[{"line_number":78,"context_line":"        self.admin_volume_client.wait_for_volume_status("},{"line_number":79,"context_line":"            restore[\u0027volume_id\u0027], \u0027available\u0027)"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":82,"context_line":"    @test.idempotent_id(\u0027a99c54a1-dd80-4724-8a13-13bf58d4068d\u0027)"},{"line_number":83,"context_line":"    def test_volume_backup_export_import(self):"},{"line_number":84,"context_line":"        # Create backup"}],"source_content_type":"text/x-python","patch_set":8,"id":"3afb71cf_5fa7d70a","line":81,"updated":"2015-06-10 09:36:56.000000000","message":"I am not sure is this test really needs to be smoke,\nbut it is the only backup one with smoke tag.","commit_id":"9d07b479d1f3ab19dbd33bdc4c62d34a06357696"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"428575910141f337a9c10cc53abfcb5f2cfeac7f","unresolved":false,"context_lines":[{"line_number":78,"context_line":"        self.admin_volume_client.wait_for_volume_status("},{"line_number":79,"context_line":"            restore[\u0027volume_id\u0027], \u0027available\u0027)"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":82,"context_line":"    @test.idempotent_id(\u0027a99c54a1-dd80-4724-8a13-13bf58d4068d\u0027)"},{"line_number":83,"context_line":"    def test_volume_backup_export_import(self):"},{"line_number":84,"context_line":"        # Create backup"}],"source_content_type":"text/x-python","patch_set":8,"id":"3afb71cf_671ae5c7","line":81,"in_reply_to":"3afb71cf_5fa7d70a","updated":"2015-06-11 01:23:58.000000000","message":"I also think we should not have smoke tag here, as per ML discussion. For Volume service, volume creation/deletion/attache etc should be enough for smoke.","commit_id":"9d07b479d1f3ab19dbd33bdc4c62d34a06357696"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"428575910141f337a9c10cc53abfcb5f2cfeac7f","unresolved":false,"context_lines":[{"line_number":123,"context_line":"        volumes \u003d self.admin_volume_client.list_volumes()"},{"line_number":124,"context_line":"        self.assertIn(restore[\u0027volume_id\u0027], [v[\u0027id\u0027] for v in volumes])"},{"line_number":125,"context_line":"        self.backups_adm_client.wait_for_backup_status(import_backup[\u0027id\u0027],"},{"line_number":126,"context_line":"                                                       \u0027available\u0027)"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"class VolumesBackupsV1Test(VolumesBackupsV2Test):"}],"source_content_type":"text/x-python","patch_set":8,"id":"3afb71cf_e70a551f","line":126,"updated":"2015-06-11 01:23:58.000000000","message":"Why we need to wait for imported backup status to be available? I think it is already done @L107","commit_id":"9d07b479d1f3ab19dbd33bdc4c62d34a06357696"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"e2eef79c9d4b2049abb46a77a9ae5b9657c71d34","unresolved":false,"context_lines":[{"line_number":123,"context_line":"        volumes \u003d self.admin_volume_client.list_volumes()"},{"line_number":124,"context_line":"        self.assertIn(restore[\u0027volume_id\u0027], [v[\u0027id\u0027] for v in volumes])"},{"line_number":125,"context_line":"        self.backups_adm_client.wait_for_backup_status(import_backup[\u0027id\u0027],"},{"line_number":126,"context_line":"                                                       \u0027available\u0027)"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"class VolumesBackupsV1Test(VolumesBackupsV2Test):"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa32b979_e3444f1c","line":126,"in_reply_to":"3afb71cf_e70a551f","updated":"2015-06-16 08:56:50.000000000","message":"I think it\u0027s because when you do a restore-backup operation the state of the backup changes to \"restoring\". So after the restore operation is finished we have to check that the status is back to available.","commit_id":"9d07b479d1f3ab19dbd33bdc4c62d34a06357696"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"abc0b94b57afab3a5af770e7f4541a1fd5a9ae17","unresolved":false,"context_lines":[{"line_number":94,"context_line":"        self.assertIn(\u0027backup_service\u0027, export_backup)"},{"line_number":95,"context_line":"        self.assertIn(\u0027backup_url\u0027, export_backup)"},{"line_number":96,"context_line":"        self.assertTrue(export_backup[\u0027backup_service\u0027].startswith("},{"line_number":97,"context_line":"                        \u0027cinder.backup.drivers\u0027))"},{"line_number":98,"context_line":"        self.assertIsNotNone(export_backup[\u0027backup_url\u0027])"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"        # Import Backup"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a50d1a3_c7d87120","line":97,"updated":"2015-07-20 14:19:40.000000000","message":"Heh, I\u0027m sure at some point in the future someone will complain or file a bug about this at some point when they\u0027re running with an out of tree driver. :)","commit_id":"18c1d0eba54f1d6e8f4df4ec76c95efe472f2b14"}],"tempest/services/volume/json/backups_client.py":[{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"01609cb06a6106eb813eb1ef9e90ff126163f2fe","unresolved":false,"context_lines":[{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    def export_backup(self, backup_id):"},{"line_number":68,"context_line":"        \"\"\"Export backup metadata record.\"\"\""},{"line_number":69,"context_line":"        url \u003d \"backups/%s/export_record\" % str(backup_id)"},{"line_number":70,"context_line":"        resp, body \u003d self.get(url)"},{"line_number":71,"context_line":"        body \u003d json.loads(body)"},{"line_number":72,"context_line":"        self.expected_success(200, resp.status)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a80dd14_40f46286","line":69,"updated":"2015-03-20 13:14:14.000000000","message":"You don\u0027t need this type cast to string. %s will do the cast-ing already.","commit_id":"c7248ea4d1f9f4991a07010ef53fee39c22e0aad"},{"author":{"_account_id":2222,"name":"meenakshi-m","username":"meenakshi-m"},"change_message_id":"ca5cf540b59a1825551998a41259a09694584faa","unresolved":false,"context_lines":[{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    def export_backup(self, backup_id):"},{"line_number":68,"context_line":"        \"\"\"Export backup metadata record.\"\"\""},{"line_number":69,"context_line":"        url \u003d \"backups/%s/export_record\" % str(backup_id)"},{"line_number":70,"context_line":"        resp, body \u003d self.get(url)"},{"line_number":71,"context_line":"        body \u003d json.loads(body)"},{"line_number":72,"context_line":"        self.expected_success(200, resp.status)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a6ced46_9427d7b5","line":69,"in_reply_to":"9a80dd14_40f46286","updated":"2015-03-25 10:05:39.000000000","message":"Done","commit_id":"c7248ea4d1f9f4991a07010ef53fee39c22e0aad"}]}
