Esempio n. 1
0
    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)

Esempio n. 3
0
    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)