예제 #1
0
    def test_basic(self):
        """Compare sha1sum of a few strings"""
        sfile = StringIO.StringIO(self.s1)
        fw = hash.FileWrapper(sfile)
        assert fw.read() == self.s1
        report = fw.close()
        assert report.sha1_digest == self.s1_hash, report.sha1_digest

        sfile2 = StringIO.StringIO(self.s1)
        fw2 = hash.FileWrapper(sfile2)
        assert fw2.read(5) == self.s1[:5]
        assert fw2.read() == self.s1[5:]
        report2 = fw2.close()
        assert report2.sha1_digest == self.s1_hash, report2.sha1_digest
예제 #2
0
    def test_basic(self):
        """Compare sha1sum of a few strings"""
        b1 = self.s1.encode()
        sfile = io.BytesIO(b1)
        fw = hash.FileWrapper(sfile)
        self.assertEqual(fw.read(), b1)
        report = fw.close()
        self.assertEqual(report.sha1_digest, self.s1_hash)

        sfile2 = io.BytesIO(b1)
        fw2 = hash.FileWrapper(sfile2)
        self.assertEqual(fw2.read(5), b1[:5])
        self.assertEqual(fw2.read(), b1[5:])
        report2 = fw2.close()
        self.assertEqual(report2.sha1_digest, self.s1_hash)
예제 #3
0
    def test_basic(self):
        """Compare sha1sum of a few strings"""
        b1 = self.s1.encode()
        sfile = io.BytesIO(b1)
        fw = hash.FileWrapper(sfile)
        assert fw.read() == b1
        report = fw.close()
        assert report.sha1_digest == self.s1_hash, report.sha1_digest

        sfile2 = io.BytesIO(b1)
        fw2 = hash.FileWrapper(sfile2)
        assert fw2.read(5) == b1[:5]
        assert fw2.read() == b1[5:]
        report2 = fw2.close()
        assert report2.sha1_digest == self.s1_hash, report2.sha1_digest
예제 #4
0
 def attach_snapshot(diff_rorp, src_rp):
     """Attach file of snapshot to diff_rorp, w/ error checking"""
     fileobj = robust.check_common_error(
         error_handler, rpath.RPath.open, (src_rp, "rb"))
     if fileobj:
         diff_rorp.setfile(hash.FileWrapper(fileobj))
     else:
         diff_rorp.zero()
     diff_rorp.set_attached_filetype('snapshot')
예제 #5
0
    def test_rorpiter_xfer(self):
        """Test if hashes are transferred in files, rorpiter"""
        Globals.security_level = 'override'
        conn = SetConnections.init_connection(
            b'%b %b/server.py' %
            (os.fsencode(sys.executable), abs_testing_dir))
        assert conn.reval("lambda x: x+1", 4) == 5  # connection sanity check

        fp = hash.FileWrapper(io.BytesIO(self.s1.encode()))
        conn.Globals.set('tmp_file', fp)
        fp_remote = conn.Globals.get('tmp_file')
        assert fp_remote.read() == self.s1.encode()
        assert fp_remote.close().sha1_digest == self.s1_hash

        # Tested xfer of file, now test xfer of files in rorpiter
        root = MakeOutputDir()
        rp1 = root.append('s1')
        rp1.write_string(self.s1)
        rp2 = root.append('s2')
        rp2.write_string(self.s2)
        rp1.setfile(hash.FileWrapper(rp1.open('rb')))
        rp2.setfile(hash.FileWrapper(rp2.open('rb')))
        rpiter = iter([rp1, rp2])

        conn.Globals.set('tmp_conn_iter', rpiter)
        remote_iter = conn.Globals.get('tmp_conn_iter')

        rorp1 = next(remote_iter)
        fp = hash.FileWrapper(rorp1.open('rb'))
        read_s1 = fp.read().decode()
        assert read_s1 == self.s1, "Read string 1 %s isn't the same as written string %s" % (
            read_s1, self.s1)
        ret_val = fp.close()
        assert isinstance(ret_val, hash.Report), ret_val
        assert ret_val.sha1_digest == self.s1_hash
        rorp2 = next(remote_iter)
        fp2 = hash.FileWrapper(rorp2.open('rb'))
        read_s2 = fp2.read().decode()
        assert read_s2 == self.s2, "Read string 2 %s isn't the same as written string %s" % (
            read_s2, self.s2)
        assert fp2.close().sha1_digest == self.s2_hash

        conn.quit()
예제 #6
0
    def test_rorpiter_xfer(self):
        """Test if hashes are transferred in files, rorpiter"""
        Security._security_level = "override"
        conn = SetConnections._init_connection(
            b'%b %b/server.py' %
            (os.fsencode(sys.executable), abs_testing_dir))
        # make a connection sanity check
        self.assertEqual(conn.reval("lambda x: x+1", 4), 5)

        fp = hash.FileWrapper(io.BytesIO(self.s1.encode()))
        conn.Globals.set('tmp_file', fp)
        fp_remote = conn.Globals.get('tmp_file')
        self.assertEqual(fp_remote.read(), self.s1.encode())
        self.assertEqual(fp_remote.close().sha1_digest, self.s1_hash)

        # Tested xfer of file, now test xfer of files in rorpiter
        root = MakeOutputDir()
        rp1 = root.append('s1')
        rp1.write_string(self.s1)
        rp2 = root.append('s2')
        rp2.write_string(self.s2)
        rp1.setfile(hash.FileWrapper(rp1.open('rb')))
        rp2.setfile(hash.FileWrapper(rp2.open('rb')))
        rpiter = iter([rp1, rp2])

        conn.Globals.set('tmp_conn_iter', rpiter)
        remote_iter = conn.Globals.get('tmp_conn_iter')

        rorp1 = next(remote_iter)
        fp = hash.FileWrapper(rorp1.open('rb'))
        read_s1 = fp.read().decode()
        self.assertEqual(read_s1, self.s1)
        ret_val = fp.close()
        self.assertIsInstance(ret_val, hash.Report)
        self.assertEqual(ret_val.sha1_digest, self.s1_hash)
        rorp2 = next(remote_iter)
        fp2 = hash.FileWrapper(rorp2.open('rb'))
        read_s2 = fp2.read().decode()
        self.assertEqual(read_s2, self.s2)
        self.assertEqual(fp2.close().sha1_digest, self.s2_hash)

        conn.quit()
예제 #7
0
    def test_rorpiter_xfer(self):
        """Test if hashes are transferred in files, rorpiter"""
        #log.Log.setverbosity(5)
        Globals.security_level = 'override'
        conn = SetConnections.init_connection('python ./server.py .')
        assert conn.reval("lambda x: x+1", 4) == 5  # connection sanity check

        fp = hash.FileWrapper(StringIO.StringIO(self.s1))
        conn.Globals.set('tmp_file', fp)
        fp_remote = conn.Globals.get('tmp_file')
        assert fp_remote.read() == self.s1
        assert fp_remote.close().sha1_digest == self.s1_hash

        # Tested xfer of file, now test xfer of files in rorpiter
        root = MakeOutputDir()
        rp1 = root.append('s1')
        rp1.write_string(self.s1)
        rp2 = root.append('s2')
        rp2.write_string(self.s2)
        rp1.setfile(hash.FileWrapper(rp1.open('rb')))
        rp2.setfile(hash.FileWrapper(rp2.open('rb')))
        rpiter = iter([rp1, rp2])

        conn.Globals.set('tmp_conn_iter', rpiter)
        remote_iter = conn.Globals.get('tmp_conn_iter')

        rorp1 = remote_iter.next()
        fp = rorp1.open('rb')
        assert fp.read() == self.s1, fp.read()
        ret_val = fp.close()
        assert isinstance(ret_val, hash.Report), ret_val
        assert ret_val.sha1_digest == self.s1_hash
        rorp2 = remote_iter.next()
        fp2 = rorp1.open('rb')
        assert fp2.close().sha1_digest == self.s2_hash

        conn.quit()
예제 #8
0
def get_delta_sigrp_hash(rp_signature, rp_new):
    """Like above but also calculate hash of new as close() value"""
    log.Log("Getting delta (with hash) of file {fi} with signature {si}".format(
        fi=rp_new, si=rp_signature), log.DEBUG)
    return librsync.DeltaFile(
        rp_signature.open("rb"), hash.FileWrapper(rp_new.open("rb")))