def test_round_trip_for_None_values(self): metadata = obnamlib.metadata.Metadata() encoded = obnamlib.encode_metadata(metadata) decoded = obnamlib.decode_metadata(encoded) for name in dir(metadata): if name in obnamlib.metadata.metadata_fields: self.assertEqual(getattr(decoded, name), None, 'attribute %s must be None' % name)
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.encode_metadata(self.file_metadata) self.dir_metadata = obnamlib.Metadata(st_mode=stat.S_IFDIR | 0777) self.dir_encoded = obnamlib.encode_metadata(self.dir_metadata)
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.encode_metadata(self.file_metadata)
def test_round_trip_for_maximum_values(self): unsigned_max = 2**64 - 1 signed_max = 2**63 - 1 metadata = obnamlib.metadata.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.encode_metadata(metadata) decoded = obnamlib.decode_metadata(encoded) self.equal(metadata, decoded)
def test_round_trip(self): metadata = obnamlib.metadata.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.encode_metadata(metadata) decoded = obnamlib.decode_metadata(encoded) self.equal(metadata, decoded)
def set_file_key(self, generation_id, filename, key, value): client_name, gen_number = generation_id self._require_client_lock(client_name) self._require_existing_file(generation_id, filename) client = self._open_client(client_name) encoded_metadata = client.get_metadata(gen_number, filename) metadata = obnamlib.decode_metadata(encoded_metadata) if key == obnamlib.REPO_FILE_MTIME: metadata.st_mtime_sec = value elif key == obnamlib.REPO_FILE_TEST_KEY: metadata.target = value else: raise obnamlib.RepositoryFileKeyNotAllowed( self.format, client_name, key) encoded_metadata = obnamlib.encode_metadata(metadata) # FIXME: Only sets in unfinished generation client.set_metadata(filename, encoded_metadata)
def add_file(self, generation_id, filename): client_name, gen_number = generation_id self._require_client_lock(client_name) client = self._open_client(client_name) encoded_metadata = obnamlib.encode_metadata(obnamlib.Metadata()) client.create(filename, encoded_metadata)
def create(self, filename, metadata): '''Create a new (empty) file in the new generation.''' self.require_started_generation() encoded = obnamlib.encode_metadata(metadata) self.client.create(filename, encoded)