def perform_synthesis(self): from tool import decomp_overlay Log = open("/dev/null", "w+b") #Log = sys.stdout meta = Const.OVERLAY_MEMA_FILE base_disk = Const.BASE_DISK_PATH overlay_filename = NamedTemporaryFile(prefix="cloudlet-overlay-file-") meta_info = decomp_overlay(meta, overlay_filename.name, print_out=Log) # recover modified VM modified_img, modified_mem, fuse, delta_proc, fuse_thread = \ cloudlet.recover_launchVM(base_disk, meta_info, overlay_filename.name, log=Log) delta_proc.start() fuse_thread.start() delta_proc.join() fuse_thread.join() residue_img = os.path.join(fuse.mountpoint, 'disk', 'image') residue_mem = os.path.join(fuse.mountpoint, 'memory', 'image') # compare hash import tool print "[INFO] Modified disk is recovered at %s" % residue_img print "[INFO] Modified memory is recovered at %s" % residue_mem print "getting sha1 for comparison" sha1_modified_img = tool.sha1_fromfile(residue_img) sha1_modified_mem = tool.sha1_fromfile(residue_mem) sha1_original_mem = tool.sha1_fromfile(Const.MODIFIED_MEMORY_SNAPSHOT) fuse.terminate() self.assertEqual(sha1_original_mem, sha1_modified_mem, "recover memory should be same with original")
sys.path.append(library_path) import tool #extract hash base_disk_hash = tool.extract_hashlist(open(base_disk, "rb")) base_mem_hash = tool.extract_hashlist(open(base_mem, "rb")) overlay_mem_hash = tool.extract_hashlist(open(overlay_mem, "rb")) #delta hash_for_disk = [(1, base_disk, base_disk_hash), (2, base_mem, base_mem_hash), (3, overlay_mem, overlay_mem_hash)] hash_for_mem = [(1, base_disk, base_disk_hash), (2, base_mem, base_mem_hash)] disk_deltalist = tool.get_delta(open(overlay_disk, "rb"), hash_for_disk) mem_deltalist = tool.get_delta(open(overlay_mem, "rb"), hash_for_mem) tool.deltalist_to_file(disk_deltalist, overlay_disk+".delta") tool.deltalist_to_file(mem_deltalist, overlay_mem+".delta") #merge recovered_disk = tool.merge_delta(disk_deltalist, hash_for_disk) recovered_mem = tool.merge_delta(mem_deltalist, hash_for_mem) open(overlay_disk+".recover", "wb").write(recovered_disk) open(overlay_mem+".recover", "wb").write(recovered_mem) #check sanity original = tool.sha1_fromfile(overlay_disk) recover = tool.sha1_fromfile(overlay_disk+".recover") if recover != original: print "Error, recover failed %s != %s" % (recover, original) else: print "Success, recovered %s == %s" % (recover, original)