コード例 #1
0
ファイル: metadata_codec_tests.py プロジェクト: secmff/obnam
 def test_round_trip_for_None_values(self):
     metadata = obnamlib.Metadata()
     encoded = obnamlib.fmt_6.metadata_codec.encode_metadata(metadata)
     decoded = obnamlib.fmt_6.metadata_codec.decode_metadata(encoded)
     for name in dir(metadata):
         if name in obnamlib.metadata_fields:
             self.assertEqual(getattr(decoded, name), None,
                              'attribute %s must be None' % name)
コード例 #2
0
 def setUp(self):
     self.now = None
     self.tempdir = tempfile.mkdtemp()
     fs = obnamlib.LocalFS(self.tempdir)
     self.hooks = obnamlib.HookManager()
     self.hooks.new('repository-toplevel-init')
     self.client = obnamlib.ClientMetadataTree(
         fs, 'clientid', obnamlib.DEFAULT_NODE_SIZE,
         obnamlib.DEFAULT_UPLOAD_QUEUE_SIZE, obnamlib.DEFAULT_LRU_SIZE,
         self)
     # Force use of filename hash collisions.
     self.client.default_file_id = self.client._bad_default_file_id
     self.client.start_generation()
     self.clientid = self.client.get_generation_id(self.client.tree)
     self.file_metadata = obnamlib.Metadata(st_mode=stat.S_IFREG | 0666)
     self.file_encoded = obnamlib.fmt_6.metadata_codec.encode_metadata(
         self.file_metadata)
     self.dir_metadata = obnamlib.Metadata(st_mode=stat.S_IFDIR | 0777)
     self.dir_encoded = obnamlib.fmt_6.metadata_codec.encode_metadata(
         self.dir_metadata)
コード例 #3
0
ファイル: client.py プロジェクト: nom3ad/obnam
    def _make_metadata(self, get_value):
        metadata = obnamlib.Metadata()

        for key, field in obnamlib.metadata_file_key_mapping:
            value = get_value(key)
            if value is None:
                if key in obnamlib.REPO_FILE_INTEGER_KEYS:
                    value = 0
                else:
                    value = ''
            setattr(metadata, field, value)

        return metadata
コード例 #4
0
ファイル: metadata_codec.py プロジェクト: dfries/obnam
def decode_metadata(encoded):

    items = metadata_format.unpack_from(encoded)
    flags = items[0]
    pos = [1, metadata_format.size]
    metadata = obnamlib.Metadata()

    def is_present(field):
        i = obnamlib.metadata_fields.index(field)
        return (flags & (1 << i)) != 0

    def decode(field, num_items, inc_offset, getvalue):
        if is_present(field):
            value = getvalue(pos[0], pos[1])
            setattr(metadata, field, value)
            if inc_offset:
                pos[1] += len(value)
        pos[0] += num_items

    def decode_integer(field):
        decode(field, 1, False, lambda i, o: items[i])

    def decode_string(field):
        decode(field, 1, True, lambda i, o: encoded[o:o + items[i]])

    decode_integer('st_mode')
    decode_integer('st_mtime_sec')
    decode_integer('st_mtime_nsec')
    decode_integer('st_atime_sec')
    decode_integer('st_atime_nsec')
    decode_integer('st_nlink')
    decode_integer('st_size')
    decode_integer('st_uid')
    decode_integer('st_gid')
    decode_integer('st_dev')
    decode_integer('st_ino')
    decode_integer('st_blocks')
    decode_string('groupname')
    decode_string('username')
    decode_string('target')
    decode_string('md5')
    decode_string('xattr')

    # reset to start counting off extend items
    if pos[1] + extend_format.size <= len(encoded):
        items = extend_format.unpack(encoded[pos[1]:pos[1] +
                                             extend_format.size])
        pos[0] = 0
        decode_integer('st_rdev')

    return metadata
コード例 #5
0
 def setUp(self):
     self.now = None
     self.tempdir = tempfile.mkdtemp()
     fs = obnamlib.LocalFS(self.tempdir)
     self.hooks = obnamlib.HookManager()
     self.hooks.new('repository-toplevel-init')
     self.client = obnamlib.ClientMetadataTree(
         fs, 'clientid', obnamlib.DEFAULT_NODE_SIZE,
         obnamlib.DEFAULT_UPLOAD_QUEUE_SIZE, obnamlib.DEFAULT_LRU_SIZE,
         self)
     self.file_size = 123
     self.file_metadata = obnamlib.Metadata(st_mode=stat.S_IFREG | 0666,
                                            st_size=self.file_size)
     self.file_encoded = obnamlib.fmt_6.metadata_codec.encode_metadata(
         self.file_metadata)
コード例 #6
0
ファイル: metadata_codec_tests.py プロジェクト: secmff/obnam
 def test_round_trip_for_maximum_values(self):
     unsigned_max = 2**64 - 1
     signed_max = 2**63 - 1
     metadata = obnamlib.Metadata(st_mode=unsigned_max,
                                  st_mtime_sec=signed_max,
                                  st_mtime_nsec=unsigned_max,
                                  st_nlink=unsigned_max,
                                  st_size=signed_max,
                                  st_uid=unsigned_max,
                                  st_blocks=signed_max,
                                  st_dev=unsigned_max,
                                  st_gid=unsigned_max,
                                  st_ino=unsigned_max,
                                  st_atime_sec=signed_max,
                                  st_atime_nsec=unsigned_max)
     encoded = obnamlib.fmt_6.metadata_codec.encode_metadata(metadata)
     decoded = obnamlib.fmt_6.metadata_codec.decode_metadata(encoded)
     self.equal(metadata, decoded)
コード例 #7
0
ファイル: metadata_codec_tests.py プロジェクト: secmff/obnam
 def test_round_trip(self):
     metadata = obnamlib.Metadata(st_mode=1,
                                  st_mtime_sec=2,
                                  st_mtime_nsec=12756,
                                  st_nlink=3,
                                  st_size=4,
                                  st_uid=5,
                                  st_blocks=6,
                                  st_dev=7,
                                  st_gid=8,
                                  st_ino=9,
                                  st_atime_sec=10,
                                  st_atime_nsec=123,
                                  groupname='group',
                                  username='******',
                                  target='target',
                                  md5='checksum')
     encoded = obnamlib.fmt_6.metadata_codec.encode_metadata(metadata)
     decoded = obnamlib.fmt_6.metadata_codec.decode_metadata(encoded)
     self.equal(metadata, decoded)
コード例 #8
0
 def get_metadata_from_generation(self, gen, pathname):
     return obnamlib.Metadata(
         st_mtime_sec=self.repo.get_file_key(gen, pathname,
                                             obnamlib.REPO_FILE_MTIME_SEC),
         st_mtime_nsec=self.repo.get_file_key(
             gen, pathname, obnamlib.REPO_FILE_MTIME_NSEC),
         st_mode=self.repo.get_file_key(gen, pathname,
                                        obnamlib.REPO_FILE_MODE),
         st_nlink=self.repo.get_file_key(gen, pathname,
                                         obnamlib.REPO_FILE_NLINK),
         st_size=self.repo.get_file_key(gen, pathname,
                                        obnamlib.REPO_FILE_SIZE),
         st_uid=self.repo.get_file_key(gen, pathname,
                                       obnamlib.REPO_FILE_UID),
         st_gid=self.repo.get_file_key(gen, pathname,
                                       obnamlib.REPO_FILE_GID),
         st_rdev=self.repo.get_file_key(gen, pathname,
                                        obnamlib.REPO_FILE_RDEV),
         xattr=self.repo.get_file_key(gen, pathname,
                                      obnamlib.REPO_FILE_XATTR_BLOB))
コード例 #9
0
    def backup_parents(self, root):
        '''Back up parents of root, non-recursively.'''
        root = self.fs.abspath(root)
        tracing.trace('backing up parents of %s', root)

        dummy_metadata = obnamlib.Metadata(st_mode=0777 | stat.S_IFDIR)

        while True:
            parent = os.path.dirname(root)
            try:
                metadata = obnamlib.read_metadata(self.fs, root)
            except OSError, e:
                logging.warning('Failed to get metadata for %s: %s: %s' %
                                (root, e.errno or 0, e.strerror))
                logging.warning('Using fake metadata instead for %s' % root)
                metadata = dummy_metadata
            if not self.pretend:
                self.add_file_to_generation(root, metadata)

            if root == parent:
                break
            root = parent
コード例 #10
0
 def lstat(self, pathname):
     (ret, dev, ino, mode, nlink, uid, gid, rdev, size, blksize, blocks,
      atime_sec, atime_nsec, mtime_sec, mtime_nsec, ctime_sec,
      ctime_nsec) = obnamlib._obnam.lstat(self.join(pathname))
     if ret != 0:
         raise OSError(ret, os.strerror(ret), pathname)
     return obnamlib.Metadata(st_dev=dev,
                              st_ino=ino,
                              st_mode=mode,
                              st_nlink=nlink,
                              st_uid=uid,
                              st_gid=gid,
                              st_rdev=rdev,
                              st_size=size,
                              st_blksize=blksize,
                              st_blocks=blocks,
                              st_atime_sec=atime_sec,
                              st_atime_nsec=atime_nsec,
                              st_mtime_sec=mtime_sec,
                              st_mtime_nsec=mtime_nsec,
                              st_ctime_sec=ctime_sec,
                              st_ctime_nsec=ctime_nsec)
コード例 #11
0
ファイル: metadata_tests.py プロジェクト: dfries/obnam
 def test_islink_returns_true_for_symlink(self):
     metadata = obnamlib.Metadata(st_mode=stat.S_IFLNK)
     self.assert_(metadata.islink())
コード例 #12
0
ファイル: metadata_tests.py プロジェクト: dfries/obnam
 def test_islink_returns_false_for_regular_file(self):
     metadata = obnamlib.Metadata(st_mode=stat.S_IFREG)
     self.assertFalse(metadata.islink())
コード例 #13
0
ファイル: metadata_tests.py プロジェクト: dfries/obnam
 def test_isdir_returns_true_for_directory(self):
     metadata = obnamlib.Metadata(st_mode=stat.S_IFDIR)
     self.assert_(metadata.isdir())
コード例 #14
0
ファイル: metadata_tests.py プロジェクト: dfries/obnam
 def test_sets_mtime_from_kwarg(self):
     metadata = obnamlib.Metadata(st_mtime_sec=123)
     self.assertEqual(metadata.st_mtime_sec, 123)
コード例 #15
0
ファイル: metadata_tests.py プロジェクト: dfries/obnam
 def test_greater_than_works(self):
     m1 = obnamlib.Metadata(st_size=1)
     m2 = obnamlib.Metadata(st_size=2)
     self.assert_(m2 > m1)
コード例 #16
0
ファイル: metadata_tests.py プロジェクト: dfries/obnam
 def test_less_than_works(self):
     m1 = obnamlib.Metadata(st_size=1)
     m2 = obnamlib.Metadata(st_size=2)
     self.assert_(m1 < m2)
コード例 #17
0
ファイル: metadata_tests.py プロジェクト: dfries/obnam
 def test_is_equal_to_itself(self):
     metadata = obnamlib.Metadata(st_mode=stat.S_IFREG)
     self.assertEqual(metadata, metadata)
コード例 #18
0
ファイル: metadata_tests.py プロジェクト: dfries/obnam
 def test_sets_md5(self):
     metadata = obnamlib.Metadata(md5='checksum')
     self.assertEqual(metadata.md5, 'checksum')
コード例 #19
0
ファイル: metadata_tests.py プロジェクト: dfries/obnam
 def test_isfile_returns_true_for_regular_file(self):
     metadata = obnamlib.Metadata(st_mode=stat.S_IFREG)
     self.assert_(metadata.isfile())
コード例 #20
0
ファイル: metadata_tests.py プロジェクト: dfries/obnam
 def test_isfile_returns_false_when_st_mode_is_not_set(self):
     metadata = obnamlib.Metadata()
     self.assertFalse(metadata.isfile())
コード例 #21
0
ファイル: metadata_tests.py プロジェクト: dfries/obnam
 def test_has_no_md5_by_default(self):
     metadata = obnamlib.Metadata()
     self.assertEqual(metadata.md5, None)