Skip to content

Commit

Permalink
Merge pull request #429 from theupdateframework/multiple_repositories…
Browse files Browse the repository at this point in the history
…_tool

Keep track of multiple repositories with the repository tools
  • Loading branch information
vladimir-v-diaz committed Feb 9, 2017
2 parents 772c6e7 + 1f70402 commit 40aaf93
Show file tree
Hide file tree
Showing 7 changed files with 675 additions and 521 deletions.
34 changes: 30 additions & 4 deletions tests/test_multiple_repositories_integration.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,9 +39,11 @@

import tuf
import tuf.log
import tuf.roledb
import tuf.client.updater as updater
import tuf.settings
import tuf.unittest_toolbox as unittest_toolbox
import tuf.repository_tool as repo_tool

# 'unittest2' required for testing under Python < 2.7.
if sys.version_info >= (2, 7):
Expand All @@ -51,6 +53,7 @@
import unittest2 as unittest

logger = logging.getLogger('test_multiple_repositories_integration')
repo_tool.disable_console_log_messages()


class TestMultipleRepositoriesIntegration(unittest_toolbox.Modified_TestCase):
Expand Down Expand Up @@ -130,7 +133,9 @@ def setUp(self):
# Save references to the often-needed client repository directories.
# Test cases need these references to access metadata and target files.
self.repository_directory = os.path.join(temporary_repository_root,
'repository')
'repository_server1')
self.repository_directory2 = os.path.join(temporary_repository_root,
'repository_server2')

# Setting 'tuf.settings.repositories_directory' with the temporary client
# directory copied from the original repository files.
Expand All @@ -144,6 +149,7 @@ def setUp(self):
# Copy the original 'repository', 'client', and 'keystore' directories
# to the temporary repository the test cases can use.
shutil.copytree(original_repository, self.repository_directory)
shutil.copytree(original_repository, self.repository_directory2)
shutil.copytree(original_client, self.client_directory)
shutil.copytree(original_client, self.client_directory2)

Expand All @@ -168,9 +174,9 @@ def setUp(self):
# Create the repository instances. The test cases will use these client
# updaters to refresh metadata, fetch target files, etc.
self.repository_updater = updater.Updater(repository_name,
self.repository_mirrors)
self.repository_mirrors)
self.repository_updater2 = updater.Updater(repository_name2,
self.repository_mirrors2)
self.repository_mirrors2)


def tearDown(self):
Expand All @@ -193,7 +199,12 @@ def test_update(self):
self.assertEqual(sorted(['role1', 'root', 'snapshot', 'targets', 'timestamp']),
sorted(tuf.roledb.get_rolenames('repository2')))

#self.repository_updater.refresh()
self.repository_updater.refresh()

self.assertEqual(sorted(['role1', 'root', 'snapshot', 'targets', 'timestamp']),
sorted(tuf.roledb.get_rolenames('repository1')))
self.assertEqual(sorted(['role1', 'root', 'snapshot', 'targets', 'timestamp']),
sorted(tuf.roledb.get_rolenames('repository2')))

# 'role1.json' should be downloaded, because it provides info for the
# requested 'file3.txt'.
Expand All @@ -203,5 +214,20 @@ def test_update(self):
sorted(tuf.roledb.get_rolenames('repository1')))


def test_repository_tool(self):
repository_name1 = 'repository1'
repository_name2 = 'repository2'

self.assertEqual(repository_name1, str(self.repository_updater))
self.assertEqual(repository_name2, str(self.repository_updater2))

repository1 = repo_tool.load_repository(self.repository_directory, repository_name1)
repository2 = repo_tool.load_repository(self.repository_directory2, repository_name2)

repository2.timestamp.version = 2
self.assertEqual([], tuf.roledb.get_dirty_roles(repository_name1))
self.assertEqual(['timestamp'], tuf.roledb.get_dirty_roles(repository_name2))


if __name__ == '__main__':
unittest.main()
Loading

0 comments on commit 40aaf93

Please sign in to comment.