summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLars Wirzenius <liw@liw.fi>2014-01-10 10:51:34 +0000
committerLars Wirzenius <liw@liw.fi>2014-01-10 10:51:34 +0000
commit35b540244c0303f516f4cbd7ebdc2439190d8986 (patch)
treefb0e2523e29c4d23fc700f99ceaaa46d9db5acae
parent0825b046af42257471d535cd3882f1301042606c (diff)
downloadobnam-35b540244c0303f516f4cbd7ebdc2439190d8986.tar.gz
Ensure all common file metadata keys are allowed
-rw-r--r--obnamlib/repo_dummy.py27
-rw-r--r--obnamlib/repo_interface.py36
-rw-r--r--test-gpghome/random_seedbin600 -> 600 bytes
3 files changed, 55 insertions, 8 deletions
diff --git a/obnamlib/repo_dummy.py b/obnamlib/repo_dummy.py
index f1fcaa2d..53b33c74 100644
--- a/obnamlib/repo_dummy.py
+++ b/obnamlib/repo_dummy.py
@@ -250,14 +250,10 @@ class DummyClient(object):
raise obnamlib.RepositoryFileDoesNotExistInGeneration(
self.name, self.make_generation_spec(gen_id), filename)
- _integer_keys = (
- obnamlib.REPO_FILE_MTIME_SEC,
- )
-
def get_file_key(self, gen_id, filename, key):
self._require_generation(gen_id)
self._require_file(gen_id, filename)
- if key in self._integer_keys:
+ if key in obnamlib.REPO_FILE_INTEGER_KEYS:
default = 0
else:
default = ''
@@ -620,7 +616,26 @@ class RepositoryFormatDummy(obnamlib.RepositoryInterface):
client.set_file_key(generation_id, filename, key, value)
def get_allowed_file_keys(self):
- return [obnamlib.REPO_FILE_TEST_KEY, obnamlib.REPO_FILE_MTIME_SEC]
+ return [
+ obnamlib.REPO_FILE_TEST_KEY,
+ obnamlib.REPO_FILE_MODE,
+ obnamlib.REPO_FILE_MTIME_SEC,
+ obnamlib.REPO_FILE_MTIME_NSEC,
+ obnamlib.REPO_FILE_ATIME_SEC,
+ obnamlib.REPO_FILE_ATIME_NSEC,
+ obnamlib.REPO_FILE_NLINK,
+ obnamlib.REPO_FILE_SIZE,
+ obnamlib.REPO_FILE_UID,
+ obnamlib.REPO_FILE_GID,
+ obnamlib.REPO_FILE_BLOCKS,
+ obnamlib.REPO_FILE_DEV,
+ obnamlib.REPO_FILE_INO,
+ obnamlib.REPO_FILE_USERNAME,
+ obnamlib.REPO_FILE_GROUPNAME,
+ obnamlib.REPO_FILE_SYMLINK_TARGET,
+ obnamlib.REPO_FILE_XATTR_BLOB,
+ obnamlib.REPO_FILE_MD5,
+ ]
def get_file_chunk_ids(self, generation_id, filename):
client = self._client_list.get_client_by_generation_id(generation_id)
diff --git a/obnamlib/repo_interface.py b/obnamlib/repo_interface.py
index 5010ea58..ee9e81f4 100644
--- a/obnamlib/repo_interface.py
+++ b/obnamlib/repo_interface.py
@@ -1450,15 +1450,47 @@ class RepositoryInterfaceTests(unittest.TestCase): # pragma: no cover
def test_has_list_of_allowed_file_keys(self):
self.assertEqual(type(self.repo.get_allowed_file_keys()), list)
+ def test_all_common_file_metadata_keys_are_allowed(self):
+ common = [
+ REPO_FILE_MODE,
+ REPO_FILE_MTIME_SEC,
+ REPO_FILE_MTIME_NSEC,
+ REPO_FILE_ATIME_SEC,
+ REPO_FILE_ATIME_NSEC,
+ REPO_FILE_NLINK,
+ REPO_FILE_SIZE,
+ REPO_FILE_UID,
+ REPO_FILE_GID,
+ REPO_FILE_BLOCKS,
+ REPO_FILE_DEV,
+ REPO_FILE_INO,
+ REPO_FILE_USERNAME,
+ REPO_FILE_GROUPNAME,
+ REPO_FILE_SYMLINK_TARGET,
+ REPO_FILE_XATTR_BLOB,
+ REPO_FILE_MD5,
+ ]
+ for key in common:
+ self.assertTrue(
+ key in self.repo.get_allowed_file_keys(),
+ 'key %s (%d) not in allowed file keys' %
+ (_key_name(key), key))
+
def test_gets_all_allowed_file_keys(self):
gen_id = self.create_generation()
self.repo.add_file(gen_id, '/foo/bar')
for key in self.repo.get_allowed_file_keys():
value = self.repo.get_file_key(gen_id, '/foo/bar', key)
if key in REPO_FILE_INTEGER_KEYS:
- self.assertEqual(type(value), int)
+ self.assertEqual(
+ type(value), int,
+ msg='key %s (%d) has value %s which is not an int' %
+ (_key_name(key), key, repr(value)))
else:
- self.assertEqual(type(value), str)
+ self.assertEqual(
+ type(value), str,
+ msg='key %s (%d) has value %s which is not a str' %
+ (_key_name(key), key, repr(value)))
def test_has_empty_string_for_file_test_key(self):
gen_id = self.create_generation()
diff --git a/test-gpghome/random_seed b/test-gpghome/random_seed
index 19a89568..a4480bbf 100644
--- a/test-gpghome/random_seed
+++ b/test-gpghome/random_seed
Binary files differ