From 03348f2dbbfb7ee90b1c802c39ffd6802155212c Mon Sep 17 00:00:00 2001 From: dachshund Date: Thu, 20 Jun 2013 19:56:34 +0800 Subject: [PATCH] Introduce name property for tuf.formats.ROLE_SCHEMA. --- tuf/formats.py | 17 ++++++++++++++--- tuf/tests/test_formats.py | 23 +++++++++++++++++++---- 2 files changed, 33 insertions(+), 7 deletions(-) diff --git a/tuf/formats.py b/tuf/formats.py index 698e2463..fb0c2d43 100755 --- a/tuf/formats.py +++ b/tuf/formats.py @@ -267,11 +267,12 @@ targets_directory=PATH_SCHEMA, backup_directory=PATH_SCHEMA)) -# Role object in {'keyids': [keydids..], 'threshold': 1, 'paths':[filepaths..]} -# format. +# Role object in {'keyids': [keydids..], 'name': 'ABC', 'threshold': 1, +# 'paths':[filepaths..]} # format. ROLE_SCHEMA = SCHEMA.Object( object_name='role', keyids=SCHEMA.ListOf(KEYID_SCHEMA), + name=SCHEMA.Optional(NAME_SCHEMA), threshold=THRESHOLD_SCHEMA, paths=SCHEMA.Optional(SCHEMA.ListOf(RELPATH_SCHEMA))) @@ -281,6 +282,9 @@ key_schema=ROLENAME_SCHEMA, value_schema=ROLE_SCHEMA) +# Like ROLEDICT_SCHEMA, except that ROLE_SCHEMA instances are stored in order. +ROLELIST_SCHEMA = SCHEMA.ListOf(ROLENAME_SCHEMA) + # The root: indicates root keys and top-level roles. ROOT_SCHEMA = SCHEMA.Object( object_name='root', @@ -818,7 +822,7 @@ def make_fileinfo(length, hashes, custom=None): -def make_role_metadata(keyids, threshold, paths=None): +def make_role_metadata(keyids, threshold, name=None, paths=None): """ Create a dictionary conforming to 'tuf.formats.ROLE_SCHEMA', @@ -833,6 +837,9 @@ def make_role_metadata(keyids, threshold, paths=None): An integer denoting the number of required keys for the signing role. + name: + A string that is the name of this role. + paths: The 'Target' role stores the paths of target files in its metadata file. 'paths' is a list of @@ -856,6 +863,10 @@ def make_role_metadata(keyids, threshold, paths=None): role_meta = {} role_meta['keyids'] = keyids role_meta['threshold'] = threshold + + if name is not None: + role_meta['name'] = name + if paths is not None: role_meta['paths'] = paths diff --git a/tuf/tests/test_formats.py b/tuf/tests/test_formats.py index abb6152c..bf45adfa 100755 --- a/tuf/tests/test_formats.py +++ b/tuf/tests/test_formats.py @@ -491,23 +491,38 @@ def test_make_role_metadata(self): keyids = ['123abc', 'abc123'] threshold = 2 paths = ['path1/', 'path2'] + name = '123' ROLE_SCHEMA = tuf.formats.ROLE_SCHEMA make_role = tuf.formats.make_role_metadata - self.assertTrue(ROLE_SCHEMA.matches(make_role(keyids, threshold, paths))) + self.assertTrue(ROLE_SCHEMA.matches(make_role(keyids, threshold))) + self.assertTrue(ROLE_SCHEMA.matches(make_role(keyids, threshold, name=name))) + self.assertTrue(ROLE_SCHEMA.matches(make_role(keyids, threshold, paths=paths))) + self.assertTrue(ROLE_SCHEMA.matches(make_role(keyids, threshold, name=name, paths=paths))) # Test conditions for invalid arguments. bad_keyids = 'bad' bad_threshold = 'bad' bad_paths = 'bad' + bad_name = 123 - self.assertRaises(tuf.FormatError, make_role, bad_keyids, threshold, paths) - self.assertRaises(tuf.FormatError, make_role, keyids, bad_threshold, paths) - self.assertRaises(tuf.FormatError, make_role, keyids, threshold, bad_paths) self.assertRaises(tuf.FormatError, make_role, bad_keyids, threshold) self.assertRaises(tuf.FormatError, make_role, keyids, bad_threshold) + self.assertRaises(tuf.FormatError, make_role, bad_keyids, threshold, paths=paths) + self.assertRaises(tuf.FormatError, make_role, keyids, bad_threshold, paths=paths) + self.assertRaises(tuf.FormatError, make_role, keyids, threshold, paths=bad_paths) + + self.assertRaises(tuf.FormatError, make_role, bad_keyids, threshold, name=name) + self.assertRaises(tuf.FormatError, make_role, keyids, bad_threshold, name=name) + self.assertRaises(tuf.FormatError, make_role, keyids, threshold, name=bad_name) + + self.assertRaises(tuf.FormatError, make_role, bad_keyids, threshold, name=name, paths=paths) + self.assertRaises(tuf.FormatError, make_role, keyids, bad_threshold, name=name, paths=paths) + self.assertRaises(tuf.FormatError, make_role, keyids, threshold, name=bad_name, paths=paths) + self.assertRaises(tuf.FormatError, make_role, keyids, threshold, name=name, paths=bad_paths) + def test_get_role_class(self):