예제 #1
0
파일: __init__.py 프로젝트: hfunai/bakthat
def show_local_glacier_inventory(**kwargs):
    conf = kwargs.get("conf", None)
    glacier_backend = GlacierBackend(conf)
    archives = glacier_backend.load_archives()
    log.info(json.dumps(archives, sort_keys=True, indent=4, separators=(",", ": ")))
    return archives
예제 #2
0
    def test_glacier_backup_restore(self):
        if raw_input("Test glacier upload/download ? It can take up to 4 hours ! (y/N): ").lower() == "y":

            # Backup dummy file
            bakthat.backup(self.test_file.name, "glacier", password="")

            # Check that file is showing up in bakthat ls
            self.assertEqual(bakthat.match_filename(self.test_filename, "glacier")[0]["filename"],
                            self.test_filename)


            # We initialize glacier backend 
            # to check that the file appear in both local and remote (S3) inventory
            glacier_backend = GlacierBackend(None)
            
            archives = glacier_backend.load_archives()
            archives_s3 = glacier_backend.load_archives_from_s3()

            # Check that local and remote custom inventory are equal
            self.assertEqual(archives, archives_s3)

            # Next we check that the file is stored in both inventories
            inventory_key_name = bakthat.match_filename(self.test_filename, "glacier")[0]["key"]

            self.assertTrue(inventory_key_name in archives)
            self.assertTrue(inventory_key_name in archives_s3)

            # Restore backup
            job = bakthat.restore(self.test_filename, "glacier", job_check=True)
            
            # Check that a job is initiated
            self.assertEqual(job.__dict__["action"], "ArchiveRetrieval")
            self.assertEqual(job.__dict__["status_code"], "InProgress")

            while 1:
                # Check every ten minutes if the job is done
                result = bakthat.restore(self.test_filename, "glacier")
                
                # If job is done, we can download the file
                if result:
                    restored_hash = hashlib.sha1(open(self.test_filename).read()).hexdigest()
        
                    # Check if the hash of the restored file is equal to inital file hash
                    self.assertEqual(self.test_hash, restored_hash)

                    os.remove(self.test_filename)

                    # Now, we can delete the restored file
                    bakthat.delete(self.test_filename, "glacier")

                    # Check that the file is deleted
                    self.assertEqual(bakthat.match_filename(self.test_filename, "glacier"), [])

                    archives = glacier_backend.load_archives()
                    archives_s3 = glacier_backend.load_archives_from_s3()

                    # Check if the file has been removed from both archives
                    self.assertEqual(archives, archives_s3) 

                    self.assertTrue(inventory_key_name not in archives)
                    self.assertTrue(inventory_key_name not in archives_s3)

                    break
                else:
                    time.sleep(600)