From 41f4f741ea04d3bc32852e67640ca1c001287987 Mon Sep 17 00:00:00 2001 From: Martin Vrachev Date: Wed, 25 Nov 2020 20:07:52 +0200 Subject: [PATCH] Remove redundant temp folder and unused imports In many of the tests classes, we are creating two temporary directories: one with the name "temp_" and inside it, we generate a new directory for each test with the name "Test_". I think we don't need the "temp_" directory. The only benefit I can think of is that it could contain multiple temp folders from failing tests from a particular test run. But even then, this is not a big bonus because the name "temp_" is not really descriptive from which test run this directory was created. Also, fixed the way we import "unittest_toolbox" and replace "unittest_toolbox.Modified_TestCase.function(self)" with "super().function()". PS: Thanks to Jussi Kukkonen who noticed we are using two temp folders per class in our tests. Signed-off-by: Martin Vrachev --- tests/test_arbitrary_package_attack.py | 21 ++----- tests/test_download.py | 6 +- tests/test_endless_data_attack.py | 20 ++---- tests/test_extraneous_dependencies_attack.py | 20 ++---- tests/test_indefinite_freeze_attack.py | 20 ++---- tests/test_key_revocation_integration.py | 20 ++---- tests/test_mirrors.py | 5 +- tests/test_mix_and_match_attack.py | 21 ++----- .../test_multiple_repositories_integration.py | 26 +++----- tests/test_replay_attack.py | 22 ++----- tests/test_repository_lib.py | 63 +++++++------------ tests/test_repository_tool.py | 23 ++----- tests/test_root_versioning_integration.py | 20 +++--- tests/test_slow_retrieval_attack.py | 10 ++- tests/test_unittest_toolbox.py | 8 ++- tests/test_updater.py | 37 +++-------- .../test_updater_root_rotation_integration.py | 20 ++---- tests/test_utils.py | 2 +- 18 files changed, 105 insertions(+), 259 deletions(-) diff --git a/tests/test_arbitrary_package_attack.py b/tests/test_arbitrary_package_attack.py index 21096fb4bf..0f39eac948 100755 --- a/tests/test_arbitrary_package_attack.py +++ b/tests/test_arbitrary_package_attack.py @@ -37,7 +37,6 @@ from __future__ import unicode_literals import os -import tempfile import shutil import json import logging @@ -50,7 +49,7 @@ import tuf.keydb import tuf.log import tuf.client.updater as updater -import tuf.unittest_toolbox as unittest_toolbox +from tuf import unittest_toolbox from tests import utils @@ -64,11 +63,6 @@ class TestArbitraryPackageAttack(unittest_toolbox.Modified_TestCase): @classmethod def setUpClass(cls): - # Create a temporary directory to store the repository, metadata, and target - # files. 'temporary_directory' must be deleted in TearDownModule() so that - # temporary files are always removed, even when exceptions occur. - cls.temporary_directory = tempfile.mkdtemp(dir=os.getcwd()) - # Launch a SimpleHTTPServer (serves files in the current directory). # Test cases will request metadata and target files that have been # pre-generated in 'tuf/tests/repository_data', which will be served by the @@ -85,16 +79,11 @@ def tearDownClass(cls): # Cleans the resources and flush the logged lines (if any). cls.server_process_handler.clean() - # Remove the temporary repository directory, which should contain all the - # metadata, targets, and key files generated of all the test cases. - shutil.rmtree(cls.temporary_directory) - def setUp(self): - # We are inheriting from custom class. - unittest_toolbox.Modified_TestCase.setUp(self) + super().setUp() self.repository_name = 'test_repository1' @@ -103,7 +92,7 @@ def setUp(self): # The 'repository_data' directory is expected to exist in 'tuf/tests/'. original_repository_files = os.path.join(os.getcwd(), 'repository_data') temporary_repository_root = \ - self.make_temp_directory(directory=self.temporary_directory) + self.make_temp_directory(directory=os.getcwd()) # The original repository, keystore, and client directories will be copied # for each test case. @@ -142,9 +131,7 @@ def setUp(self): def tearDown(self): - # Modified_TestCase.tearDown() automatically deletes temporary files and - # directories that may have been created during each test case. - unittest_toolbox.Modified_TestCase.tearDown(self) + super().tearDown() # updater.Updater() populates the roledb with the name "test_repository1" tuf.roledb.clear_roledb(clear_all=True) tuf.keydb.clear_keydb(clear_all=True) diff --git a/tests/test_download.py b/tests/test_download.py index 6ae0e4c4e4..beae0fef6b 100755 --- a/tests/test_download.py +++ b/tests/test_download.py @@ -45,8 +45,8 @@ import tuf.download as download import tuf.requests_fetcher import tuf.log -import tuf.unittest_toolbox as unittest_toolbox import tuf.exceptions +from tuf import unittest_toolbox from tests import utils @@ -64,7 +64,7 @@ def setUp(self): current working directory. """ - unittest_toolbox.Modified_TestCase.setUp(self) + super().setUp() # Making a temporary file. current_dir = os.getcwd() @@ -93,7 +93,7 @@ def setUp(self): # Stop server process and perform clean up. def tearDown(self): - unittest_toolbox.Modified_TestCase.tearDown(self) + super().tearDown() # Cleans the resources and flush the logged lines (if any). self.server_process_handler.clean() diff --git a/tests/test_endless_data_attack.py b/tests/test_endless_data_attack.py index 01701d9830..4f5c790802 100755 --- a/tests/test_endless_data_attack.py +++ b/tests/test_endless_data_attack.py @@ -40,7 +40,6 @@ from __future__ import unicode_literals import os -import tempfile import shutil import json import logging @@ -51,8 +50,8 @@ import tuf.formats import tuf.log import tuf.client.updater as updater -import tuf.unittest_toolbox as unittest_toolbox import tuf.roledb +from tuf import unittest_toolbox from tests import utils @@ -66,10 +65,6 @@ class TestEndlessDataAttack(unittest_toolbox.Modified_TestCase): @classmethod def setUpClass(cls): - # Create a temporary directory to store the repository, metadata, and target - # files. 'temporary_directory' must be deleted in TearDownModule() so that - # temporary files are always removed, even when exceptions occur. - cls.temporary_directory = tempfile.mkdtemp(dir=os.getcwd()) # Launch a SimpleHTTPServer (serves files in the current directory). # Test cases will request metadata and target files that have been @@ -87,16 +82,11 @@ def tearDownClass(cls): # Cleans the resources and flush the logged lines (if any). cls.server_process_handler.clean() - # Remove the temporary repository directory, which should contain all the - # metadata, targets, and key files generated of all the test cases. - shutil.rmtree(cls.temporary_directory) - def setUp(self): - # We are inheriting from custom class. - unittest_toolbox.Modified_TestCase.setUp(self) + super().setUp() self.repository_name = 'test_repository1' @@ -105,7 +95,7 @@ def setUp(self): # The 'repository_data' directory is expected to exist in 'tuf/tests/'. original_repository_files = os.path.join(os.getcwd(), 'repository_data') temporary_repository_root = \ - self.make_temp_directory(directory=self.temporary_directory) + self.make_temp_directory(directory=os.getcwd()) # The original repository, keystore, and client directories will be copied # for each test case. @@ -143,9 +133,7 @@ def setUp(self): def tearDown(self): - # Modified_TestCase.tearDown() automatically deletes temporary files and - # directories that may have been created during each test case. - unittest_toolbox.Modified_TestCase.tearDown(self) + super().tearDown() tuf.roledb.clear_roledb(clear_all=True) tuf.keydb.clear_keydb(clear_all=True) diff --git a/tests/test_extraneous_dependencies_attack.py b/tests/test_extraneous_dependencies_attack.py index 2e71ee800b..352f3ed041 100755 --- a/tests/test_extraneous_dependencies_attack.py +++ b/tests/test_extraneous_dependencies_attack.py @@ -43,7 +43,6 @@ from __future__ import unicode_literals import os -import tempfile import shutil import json import logging @@ -55,7 +54,7 @@ import tuf.client.updater as updater import tuf.roledb import tuf.keydb -import tuf.unittest_toolbox as unittest_toolbox +from tuf import unittest_toolbox from tests import utils @@ -70,10 +69,6 @@ class TestExtraneousDependenciesAttack(unittest_toolbox.Modified_TestCase): @classmethod def setUpClass(cls): - # Create a temporary directory to store the repository, metadata, and target - # files. 'temporary_directory' must be deleted in TearDownModule() so that - # temporary files are always removed, even when exceptions occur. - cls.temporary_directory = tempfile.mkdtemp(dir=os.getcwd()) # Launch a SimpleHTTPServer (serves files in the current directory). # Test cases will request metadata and target files that have been @@ -91,16 +86,11 @@ def tearDownClass(cls): # Cleans the resources and flush the logged lines (if any). cls.server_process_handler.clean() - # Remove the temporary repository directory, which should contain all the - # metadata, targets, and key files generated of all the test cases. - shutil.rmtree(cls.temporary_directory) - def setUp(self): - # We are inheriting from custom class. - unittest_toolbox.Modified_TestCase.setUp(self) + super().setUp() self.repository_name = 'test_repository1' @@ -109,7 +99,7 @@ def setUp(self): # The 'repository_data' directory is expected to exist in 'tuf/tests/'. original_repository_files = os.path.join(os.getcwd(), 'repository_data') temporary_repository_root = \ - self.make_temp_directory(directory=self.temporary_directory) + self.make_temp_directory(directory=os.getcwd()) # The original repository, keystore, and client directories will be copied # for each test case. @@ -150,9 +140,7 @@ def setUp(self): def tearDown(self): - # Modified_TestCase.tearDown() automatically deletes temporary files and - # directories that may have been created during each test case. - unittest_toolbox.Modified_TestCase.tearDown(self) + super().tearDown() tuf.roledb.clear_roledb(clear_all=True) tuf.keydb.clear_keydb(clear_all=True) diff --git a/tests/test_indefinite_freeze_attack.py b/tests/test_indefinite_freeze_attack.py index 6e10f3a075..519ffa2a77 100755 --- a/tests/test_indefinite_freeze_attack.py +++ b/tests/test_indefinite_freeze_attack.py @@ -47,7 +47,6 @@ import datetime import os import time -import tempfile import shutil import json import logging @@ -63,10 +62,10 @@ import tuf.log import tuf.client.updater as updater import tuf.repository_tool as repo_tool -import tuf.unittest_toolbox as unittest_toolbox import tuf.roledb import tuf.keydb import tuf.exceptions +from tuf import unittest_toolbox from tests import utils @@ -84,10 +83,6 @@ class TestIndefiniteFreezeAttack(unittest_toolbox.Modified_TestCase): @classmethod def setUpClass(cls): - # Create a temporary directory to store the repository, metadata, and target - # files. 'temporary_directory' must be deleted in TearDownModule() so that - # temporary files are always removed, even when exceptions occur. - cls.temporary_directory = tempfile.mkdtemp(dir=os.getcwd()) # Launch a SimpleHTTPServer (serves files in the current directory). # Test cases will request metadata and target files that have been @@ -105,16 +100,11 @@ def tearDownClass(cls): # Cleans the resources and flush the logged lines (if any). cls.server_process_handler.clean() - # Remove the temporary repository directory, which should contain all the - # metadata, targets, and key files generated of all the test cases. - shutil.rmtree(cls.temporary_directory) - def setUp(self): - # We are inheriting from custom class. - unittest_toolbox.Modified_TestCase.setUp(self) + super().setUp() self.repository_name = 'test_repository1' # Copy the original repository files provided in the test folder so that @@ -122,7 +112,7 @@ def setUp(self): # The 'repository_data' directory is expected to exist in 'tuf/tests/'. original_repository_files = os.path.join(os.getcwd(), 'repository_data') temporary_repository_root = \ - self.make_temp_directory(directory=self.temporary_directory) + self.make_temp_directory(directory=os.getcwd()) # The original repository, keystore, and client directories will be copied # for each test case. @@ -163,9 +153,7 @@ def setUp(self): def tearDown(self): - # Modified_TestCase.tearDown() automatically deletes temporary files and - # directories that may have been created during each test case. - unittest_toolbox.Modified_TestCase.tearDown(self) + super().tearDown() tuf.roledb.clear_roledb(clear_all=True) tuf.keydb.clear_keydb(clear_all=True) diff --git a/tests/test_key_revocation_integration.py b/tests/test_key_revocation_integration.py index b235760e4a..08f6bec295 100755 --- a/tests/test_key_revocation_integration.py +++ b/tests/test_key_revocation_integration.py @@ -39,7 +39,6 @@ import os import shutil -import tempfile import logging import unittest import sys @@ -49,8 +48,8 @@ import tuf.roledb import tuf.keydb import tuf.repository_tool as repo_tool -import tuf.unittest_toolbox as unittest_toolbox import tuf.client.updater as updater +from tuf import unittest_toolbox from tests import utils @@ -65,11 +64,6 @@ class TestKeyRevocation(unittest_toolbox.Modified_TestCase): @classmethod def setUpClass(cls): - # Create a temporary directory to store the repository, metadata, and target - # files. 'temporary_directory' must be deleted in TearDownModule() so that - # temporary files are always removed, even when exceptions occur. - cls.temporary_directory = tempfile.mkdtemp(dir=os.getcwd()) - # Launch a SimpleHTTPServer (serves files in the current directory). Test # cases will request metadata and target files that have been pre-generated # in 'tuf/tests/repository_data', which will be served by the @@ -86,16 +80,11 @@ def tearDownClass(cls): # Cleans the resources and flush the logged lines (if any). cls.server_process_handler.clean() - # Remove the temporary repository directory, which should contain all the - # metadata, targets, and key files generated for the test cases. - shutil.rmtree(cls.temporary_directory) - def setUp(self): - # We are inheriting from custom class. - unittest_toolbox.Modified_TestCase.setUp(self) + super().setUp() self.repository_name = 'test_repository1' @@ -104,7 +93,7 @@ def setUp(self): # The 'repository_data' directory is expected to exist in 'tuf.tests/'. original_repository_files = os.path.join(os.getcwd(), 'repository_data') temporary_repository_root = \ - self.make_temp_directory(directory=self.temporary_directory) + self.make_temp_directory(directory=os.getcwd()) # The original repository, keystore, and client directories will be copied # for each test case. @@ -156,8 +145,7 @@ def setUp(self): def tearDown(self): - # We are inheriting from custom class. - unittest_toolbox.Modified_TestCase.tearDown(self) + super().tearDown() tuf.roledb.clear_roledb(clear_all=True) tuf.keydb.clear_keydb(clear_all=True) diff --git a/tests/test_mirrors.py b/tests/test_mirrors.py index 5f49294876..743e82d895 100755 --- a/tests/test_mirrors.py +++ b/tests/test_mirrors.py @@ -32,7 +32,7 @@ import sys import tuf.mirrors as mirrors -import tuf.unittest_toolbox as unittest_toolbox +from tuf import unittest_toolbox from tests import utils @@ -43,8 +43,7 @@ class TestMirrors(unittest_toolbox.Modified_TestCase): def setUp(self): - - unittest_toolbox.Modified_TestCase.setUp(self) + super().setUp() self.mirrors = \ {'mirror1': {'url_prefix' : 'http://mirror1.com', diff --git a/tests/test_mix_and_match_attack.py b/tests/test_mix_and_match_attack.py index 123c447325..c40f074d75 100755 --- a/tests/test_mix_and_match_attack.py +++ b/tests/test_mix_and_match_attack.py @@ -39,7 +39,6 @@ from __future__ import unicode_literals import os -import tempfile import shutil import logging import unittest @@ -49,9 +48,9 @@ import tuf.log import tuf.client.updater as updater import tuf.repository_tool as repo_tool -import tuf.unittest_toolbox as unittest_toolbox import tuf.roledb import tuf.keydb +from tuf import unittest_toolbox from tests import utils @@ -69,11 +68,6 @@ class TestMixAndMatchAttack(unittest_toolbox.Modified_TestCase): @classmethod def setUpClass(cls): - # Create a temporary directory to store the repository, metadata, and - # target files. 'temporary_directory' must be deleted in TearDownModule() - # so that temporary files are always removed, even when exceptions occur. - cls.temporary_directory = tempfile.mkdtemp(dir=os.getcwd()) - # Launch a SimpleHTTPServer (serves files in the current directory). # Test cases will request metadata and target files that have been # pre-generated in 'tuf/tests/repository_data', which will be served by the @@ -90,16 +84,11 @@ def tearDownClass(cls): # Cleans the resources and flush the logged lines (if any). cls.server_process_handler.clean() - # Remove the temporary repository directory, which should contain all the - # metadata, targets, and key files generated of all the test cases. - shutil.rmtree(cls.temporary_directory) - def setUp(self): - # We are inheriting from custom class. - unittest_toolbox.Modified_TestCase.setUp(self) + super().setUp() self.repository_name = 'test_repository1' @@ -108,7 +97,7 @@ def setUp(self): # The 'repository_data' directory is expected to exist in 'tuf/tests/'. original_repository_files = os.path.join(os.getcwd(), 'repository_data') temporary_repository_root = \ - self.make_temp_directory(directory=self.temporary_directory) + self.make_temp_directory(directory=os.getcwd()) # The original repository, keystore, and client directories will be copied # for each test case. @@ -149,9 +138,7 @@ def setUp(self): def tearDown(self): - # Modified_TestCase.tearDown() automatically deletes temporary files and - # directories that may have been created during each test case. - unittest_toolbox.Modified_TestCase.tearDown(self) + super().tearDown() tuf.roledb.clear_roledb(clear_all=True) tuf.keydb.clear_keydb(clear_all=True) diff --git a/tests/test_multiple_repositories_integration.py b/tests/test_multiple_repositories_integration.py index de9920244d..c1f41efe0f 100755 --- a/tests/test_multiple_repositories_integration.py +++ b/tests/test_multiple_repositories_integration.py @@ -30,7 +30,6 @@ from __future__ import unicode_literals import os -import tempfile import logging import shutil import unittest @@ -42,9 +41,10 @@ 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 +from tuf import unittest_toolbox + from tests import utils import six @@ -58,18 +58,14 @@ class TestMultipleRepositoriesIntegration(unittest_toolbox.Modified_TestCase): def setUp(self): - # We are inheriting from custom class. - unittest_toolbox.Modified_TestCase.setUp(self) - - self.temporary_directory = tempfile.mkdtemp(dir=os.getcwd()) - + super().setUp() # Copy the original repository files provided in the test folder so that # any modifications made to repository files are restricted to the copies. # The 'repository_data' directory is expected to exist in 'tuf/tests/'. original_repository_files = os.path.join(os.getcwd(), 'repository_data') - self.temporary_repository_root = self.make_temp_directory(directory= - self.temporary_directory) + self.temporary_repository_root = self.make_temp_directory( + directory=os.getcwd()) # The original repository, keystore, and client directories will be copied # for each test case. @@ -160,9 +156,7 @@ def setUp(self): def tearDown(self): - # Modified_TestCase.tearDown() automatically deletes temporary files and - # directories that may have been created during each test case. - unittest_toolbox.Modified_TestCase.tearDown(self) + super().tearDown() # Cleans the resources and flush the logged lines (if any). self.server_process_handler.clean() @@ -172,8 +166,6 @@ def tearDown(self): tuf.roledb.clear_roledb(clear_all=True) tuf.keydb.clear_keydb(clear_all=True) - shutil.rmtree(self.temporary_directory) - def test_update(self): self.assertEqual('test_repository1', str(self.repository_updater)) @@ -272,8 +264,10 @@ def test_repository_tool(self): valid_targetinfo = multi_repo_updater.get_valid_targetinfo('file3.txt') for my_updater, my_targetinfo in six.iteritems(valid_targetinfo): - my_updater.download_target(my_targetinfo, self.temporary_directory) - self.assertTrue(os.path.exists(os.path.join(self.temporary_directory, 'file3.txt'))) + my_updater.download_target(my_targetinfo, + self.temporary_repository_root) + self.assertTrue(os.path.exists(os.path.join( + self.temporary_repository_root, 'file3.txt'))) diff --git a/tests/test_replay_attack.py b/tests/test_replay_attack.py index 1195d99b22..d8fce364ef 100755 --- a/tests/test_replay_attack.py +++ b/tests/test_replay_attack.py @@ -39,7 +39,6 @@ from __future__ import unicode_literals import os -import tempfile import datetime import shutil import logging @@ -50,7 +49,7 @@ import tuf.log import tuf.client.updater as updater import tuf.repository_tool as repo_tool -import tuf.unittest_toolbox as unittest_toolbox +from tuf import unittest_toolbox from tests import utils @@ -69,11 +68,6 @@ class TestReplayAttack(unittest_toolbox.Modified_TestCase): @classmethod def setUpClass(cls): - # Create a temporary directory to store the repository, metadata, and target - # files. 'temporary_directory' must be deleted in TearDownModule() so that - # temporary files are always removed, even when exceptions occur. - cls.temporary_directory = tempfile.mkdtemp(dir=os.getcwd()) - # Launch a SimpleHTTPServer (serves files in the current directory). # Test cases will request metadata and target files that have been # pre-generated in 'tuf/tests/repository_data', which will be served by the @@ -90,16 +84,10 @@ def tearDownClass(cls): # Cleans the resources and flush the logged lines (if any). cls.server_process_handler.clean() - # Remove the temporary repository directory, which should contain all the - # metadata, targets, and key files generated of all the test cases. - shutil.rmtree(cls.temporary_directory) - - def setUp(self): - # We are inheriting from custom class. - unittest_toolbox.Modified_TestCase.setUp(self) + super().setUp() self.repository_name = 'test_repository1' @@ -108,7 +96,7 @@ def setUp(self): # The 'repository_data' directory is expected to exist in 'tuf/tests/'. original_repository_files = os.path.join(os.getcwd(), 'repository_data') temporary_repository_root = \ - self.make_temp_directory(directory=self.temporary_directory) + self.make_temp_directory(directory=os.getcwd()) # The original repository, keystore, and client directories will be copied # for each test case. @@ -149,9 +137,7 @@ def setUp(self): def tearDown(self): - # Modified_TestCase.tearDown() automatically deletes temporary files and - # directories that may have been created during each test case. - unittest_toolbox.Modified_TestCase.tearDown(self) + super().tearDown() tuf.roledb.clear_roledb(clear_all=True) tuf.keydb.clear_keydb(clear_all=True) diff --git a/tests/test_repository_lib.py b/tests/test_repository_lib.py index 36d1826a2e..18e9d73c3b 100755 --- a/tests/test_repository_lib.py +++ b/tests/test_repository_lib.py @@ -32,7 +32,6 @@ import time import datetime import logging -import tempfile import json import shutil import unittest @@ -42,11 +41,12 @@ import tuf import tuf.formats import tuf.log -import tuf.formats import tuf.roledb import tuf.keydb import tuf.settings +from tuf import unittest_toolbox + import tuf.repository_lib as repo_lib import tuf.repository_tool as repo_tool @@ -67,16 +67,11 @@ 'snapshot.json'] -class TestRepositoryToolFunctions(unittest.TestCase): +class TestRepositoryToolFunctions(unittest_toolbox.Modified_TestCase): @classmethod def setUpClass(cls): - # Create a temporary directory to store the repository, metadata, and target - # files. 'temporary_directory' must be deleted in TearDownClass() so that - # temporary files are always removed, even when exceptions occur. tuf.roledb.clear_roledb(clear_all=True) tuf.keydb.clear_keydb(clear_all=True) - cls.temporary_directory = tempfile.mkdtemp(dir=os.getcwd()) - @classmethod @@ -86,24 +81,22 @@ def tearDownClass(cls): tuf.roledb.clear_roledb(clear_all=True) tuf.keydb.clear_keydb(clear_all=True) - shutil.rmtree(cls.temporary_directory) - def setUp(self): + super().setUp() tuf.roledb.create_roledb('test_repository') tuf.keydb.create_keydb('test_repository') + self.temporary_directory = self.make_temp_directory(directory=os.getcwd()) def tearDown(self): tuf.roledb.clear_roledb(clear_all=True) tuf.keydb.clear_keydb(clear_all=True) - + super().tearDown() def test_import_rsa_privatekey_from_file(self): # Test normal case. - temporary_directory = tempfile.mkdtemp(dir=self.temporary_directory) - # Load one of the pre-generated key files from 'tuf/tests/repository_data'. # 'password' unlocks the pre-generated key files. key_filepath = os.path.join('repository_data', 'keystore', @@ -122,14 +115,14 @@ def test_import_rsa_privatekey_from_file(self): # Test invalid argument. # Non-existent key file. - nonexistent_keypath = os.path.join(temporary_directory, + nonexistent_keypath = os.path.join(self.temporary_directory, 'nonexistent_keypath') self.assertRaises(securesystemslib.exceptions.StorageError, repo_lib.import_rsa_privatekey_from_file, nonexistent_keypath, 'pw') # Invalid key file argument. - invalid_keyfile = os.path.join(temporary_directory, 'invalid_keyfile') + invalid_keyfile = os.path.join(self.temporary_directory, 'invalid_keyfile') with open(invalid_keyfile, 'wb') as file_object: file_object.write(b'bad keyfile') self.assertRaises(securesystemslib.exceptions.CryptoError, repo_lib.import_rsa_privatekey_from_file, @@ -140,8 +133,7 @@ def test_import_rsa_privatekey_from_file(self): def test_import_ed25519_privatekey_from_file(self): # Test normal case. # Generate ed25519 keys that can be imported. - temporary_directory = tempfile.mkdtemp(dir=self.temporary_directory) - ed25519_keypath = os.path.join(temporary_directory, 'ed25519_key') + ed25519_keypath = os.path.join(self.temporary_directory, 'ed25519_key') securesystemslib.interface.generate_and_write_ed25519_keypair( password='pw', filepath=ed25519_keypath) @@ -157,14 +149,14 @@ def test_import_ed25519_privatekey_from_file(self): # Test invalid argument. # Non-existent key file. - nonexistent_keypath = os.path.join(temporary_directory, + nonexistent_keypath = os.path.join(self.temporary_directory, 'nonexistent_keypath') self.assertRaises(securesystemslib.exceptions.StorageError, repo_lib.import_ed25519_privatekey_from_file, nonexistent_keypath, 'pw') # Invalid key file argument. - invalid_keyfile = os.path.join(temporary_directory, 'invalid_keyfile') + invalid_keyfile = os.path.join(self.temporary_directory, 'invalid_keyfile') with open(invalid_keyfile, 'wb') as file_object: file_object.write(b'bad keyfile') @@ -198,7 +190,6 @@ def test_import_ed25519_privatekey_from_file(self): def test_get_top_level_metadata_filenames(self): - # Test normal case. metadata_directory = os.path.join('metadata/') filenames = {'root.json': metadata_directory + 'root.json', @@ -228,8 +219,7 @@ def test_get_top_level_metadata_filenames(self): def test_get_targets_metadata_fileinfo(self): # Test normal case. - temporary_directory = tempfile.mkdtemp(dir=self.temporary_directory) - test_filepath = os.path.join(temporary_directory, 'file.txt') + test_filepath = os.path.join(self.temporary_directory, 'file.txt') with open(test_filepath, 'wt') as file_object: file_object.write('test file') @@ -257,7 +247,7 @@ def test_get_targets_metadata_fileinfo(self): # Test non-existent file. - nonexistent_filepath = os.path.join(temporary_directory, 'oops.txt') + nonexistent_filepath = os.path.join(self.temporary_directory, 'oops.txt') self.assertRaises(securesystemslib.exceptions.Error, repo_lib.get_targets_metadata_fileinfo, nonexistent_filepath, storage_backend) @@ -325,8 +315,7 @@ def test_generate_root_metadata(self): def test_generate_targets_metadata(self): # Test normal case. - temporary_directory = tempfile.mkdtemp(dir=self.temporary_directory) - targets_directory = os.path.join(temporary_directory, 'targets') + targets_directory = os.path.join(self.temporary_directory, 'targets') file1_path = os.path.join(targets_directory, 'file.txt') securesystemslib.util.ensure_parent_dir(file1_path) @@ -469,10 +458,9 @@ def test_generate_targets_metadata(self): def _setup_generate_snapshot_metadata_test(self): # Test normal case. - temporary_directory = tempfile.mkdtemp(dir=self.temporary_directory) original_repository_path = os.path.join('repository_data', 'repository') - repository_directory = os.path.join(temporary_directory, 'repository') + repository_directory = os.path.join(self.temporary_directory, 'repository') shutil.copytree(original_repository_path, repository_directory) metadata_directory = os.path.join(repository_directory, repo_lib.METADATA_STAGED_DIRECTORY_NAME) @@ -629,10 +617,9 @@ def test_generate_snapshot_metadata_with_hashes_and_length(self): def _setup_generate_timestamp_metadata_test(self): # Test normal case. repository_name = 'test_repository' - temporary_directory = tempfile.mkdtemp(dir=self.temporary_directory) original_repository_path = os.path.join('repository_data', 'repository') - repository_directory = os.path.join(temporary_directory, 'repository') + repository_directory = os.path.join(self.temporary_directory, 'repository') shutil.copytree(original_repository_path, repository_directory) metadata_directory = os.path.join(repository_directory, repo_lib.METADATA_STAGED_DIRECTORY_NAME) @@ -733,7 +720,6 @@ def test_generate_timestamp_metadata_without_length_and_hashes(self): def test_sign_metadata(self): # Test normal case. repository_name = 'test_repository' - temporary_directory = tempfile.mkdtemp(dir=self.temporary_directory) metadata_path = os.path.join('repository_data', 'repository', 'metadata') keystore_path = os.path.join('repository_data', 'keystore') root_filename = os.path.join(metadata_path, 'root.json') @@ -792,12 +778,11 @@ def test_sign_metadata(self): def test_write_metadata_file(self): # Test normal case. - temporary_directory = tempfile.mkdtemp(dir=self.temporary_directory) metadata_directory = os.path.join('repository_data', 'repository', 'metadata') root_filename = os.path.join(metadata_directory, 'root.json') root_signable = securesystemslib.util.load_json_file(root_filename) - output_filename = os.path.join(temporary_directory, 'root.json') + output_filename = os.path.join(self.temporary_directory, 'root.json') version_number = root_signable['signed']['version'] + 1 self.assertFalse(os.path.exists(output_filename)) @@ -825,9 +810,8 @@ def test_write_metadata_file(self): def test_create_tuf_client_directory(self): # Test normal case. - temporary_directory = tempfile.mkdtemp(dir=self.temporary_directory) repository_directory = os.path.join('repository_data', 'repository') - client_directory = os.path.join(temporary_directory, 'client') + client_directory = os.path.join(self.temporary_directory, 'client') repo_lib.create_tuf_client_directory(repository_directory, client_directory) @@ -887,10 +871,9 @@ def test__generate_and_write_metadata(self): repository_name) tuf.keydb.create_keydb_from_root_metadata(root_signable['signed'], repository_name) - temporary_directory = tempfile.mkdtemp(dir=self.temporary_directory) - targets_directory = os.path.join(temporary_directory, 'targets') + targets_directory = os.path.join(self.temporary_directory, 'targets') os.mkdir(targets_directory) - repository_directory = os.path.join(temporary_directory, 'repository') + repository_directory = os.path.join(self.temporary_directory, 'repository') metadata_directory = os.path.join(repository_directory, repo_lib.METADATA_STAGED_DIRECTORY_NAME) targets_metadata = os.path.join('repository_data', 'repository', 'metadata', @@ -942,8 +925,7 @@ def test__generate_and_write_metadata(self): def test__delete_obsolete_metadata(self): repository_name = 'test_repository' - temporary_directory = tempfile.mkdtemp(dir=self.temporary_directory) - repository_directory = os.path.join(temporary_directory, 'repository') + repository_directory = os.path.join(self.temporary_directory, 'repository') metadata_directory = os.path.join(repository_directory, repo_lib.METADATA_STAGED_DIRECTORY_NAME) os.makedirs(metadata_directory) @@ -978,8 +960,7 @@ def test__delete_obsolete_metadata(self): def test__load_top_level_metadata(self): repository_name = 'test_repository' - temporary_directory = tempfile.mkdtemp(dir=self.temporary_directory) - repository_directory = os.path.join(temporary_directory, 'repository') + repository_directory = os.path.join(self.temporary_directory, 'repository') metadata_directory = os.path.join(repository_directory, repo_lib.METADATA_STAGED_DIRECTORY_NAME) targets_directory = os.path.join(repository_directory, diff --git a/tests/test_repository_tool.py b/tests/test_repository_tool.py index 0fac025a31..3c5327441c 100755 --- a/tests/test_repository_tool.py +++ b/tests/test_repository_tool.py @@ -44,6 +44,8 @@ import tuf.keydb import tuf.repository_tool as repo_tool +from tuf import unittest_toolbox + from tests import utils import securesystemslib @@ -55,33 +57,20 @@ repo_tool.disable_console_log_messages() -class TestRepository(unittest.TestCase): - @classmethod - def setUpClass(cls): - # Create a temporary directory to store the repository, metadata, and target - # files. 'temporary_directory' must be deleted in TearDownClass() so that - # temporary files are always removed, even when exceptions occur. - cls.temporary_directory = tempfile.mkdtemp(dir=os.getcwd()) - - - @classmethod - def tearDownClass(cls): - # Remove the temporary repository directory, which should contain all the - # metadata, targets, and key files generated for the test cases. - shutil.rmtree(cls.temporary_directory) - +class TestRepository(unittest_toolbox.Modified_TestCase): def setUp(self): + super().setUp() tuf.roledb.create_roledb('test_repository') tuf.keydb.create_keydb('test_repository') - + self.temporary_directory = self.make_temp_directory(directory=os.getcwd()) def tearDown(self): tuf.roledb.clear_roledb(clear_all=True) tuf.keydb.clear_keydb(clear_all=True) - + super().tearDown() def test_init(self): # Test normal case. diff --git a/tests/test_root_versioning_integration.py b/tests/test_root_versioning_integration.py index b0eda37bd5..870370de5a 100755 --- a/tests/test_root_versioning_integration.py +++ b/tests/test_root_versioning_integration.py @@ -40,6 +40,8 @@ import tuf.keydb import tuf.repository_tool as repo_tool +from tuf import unittest_toolbox + from tests import utils import securesystemslib @@ -50,19 +52,18 @@ repo_tool.disable_console_log_messages() -class TestRepository(unittest.TestCase): +class TestRepository(unittest_toolbox.Modified_TestCase): - @classmethod - def setUpClass(cls): - cls.temporary_directory = tempfile.mkdtemp(dir=os.getcwd()) + def setUp(self): + super().setUp() + self.temporary_directory = self.make_temp_directory(directory=os.getcwd()) - @classmethod - def tearDownClass(cls): - shutil.rmtree(cls.temporary_directory) def tearDown(self): tuf.roledb.clear_roledb() tuf.keydb.clear_keydb() + super().tearDown() + def test_init(self): # Test normal case. @@ -98,8 +99,7 @@ def test_root_role_versioning(self): # # Copy the target files from 'tuf/tests/repository_data' so that writeall() # has target fileinfo to include in metadata. - temporary_directory = tempfile.mkdtemp(dir=self.temporary_directory) - targets_directory = os.path.join(temporary_directory, 'repository', + targets_directory = os.path.join(self.temporary_directory, 'repository', repo_tool.TARGETS_DIRECTORY_NAME) original_targets_directory = os.path.join('repository_data', 'repository', 'targets') @@ -107,7 +107,7 @@ def test_root_role_versioning(self): # In this case, create_new_repository() creates the 'repository/' # sub-directory in 'temporary_directory' if it does not exist. - repository_directory = os.path.join(temporary_directory, 'repository') + repository_directory = os.path.join(self.temporary_directory, 'repository') metadata_directory = os.path.join(repository_directory, repo_tool.METADATA_STAGED_DIRECTORY_NAME) repository = repo_tool.create_new_repository(repository_directory) diff --git a/tests/test_slow_retrieval_attack.py b/tests/test_slow_retrieval_attack.py index 8a56e483ba..9f85e6040d 100755 --- a/tests/test_slow_retrieval_attack.py +++ b/tests/test_slow_retrieval_attack.py @@ -53,11 +53,12 @@ import tuf.log import tuf.client.updater as updater -import tuf.unittest_toolbox as unittest_toolbox import tuf.repository_tool as repo_tool import tuf.roledb import tuf.keydb +from tuf import unittest_toolbox + from tests import utils import six @@ -70,8 +71,7 @@ class TestSlowRetrieval(unittest_toolbox.Modified_TestCase): def setUp(self): - # We are inheriting from custom class. - unittest_toolbox.Modified_TestCase.setUp(self) + super().setUp() self.repository_name = 'test_repository1' @@ -189,9 +189,7 @@ def setUp(self): def tearDown(self): - # Modified_TestCase.tearDown() automatically deletes temporary files and - # directories that may have been created during each test case. - unittest_toolbox.Modified_TestCase.tearDown(self) + super().tearDown() tuf.roledb.clear_roledb(clear_all=True) tuf.keydb.clear_keydb(clear_all=True) diff --git a/tests/test_unittest_toolbox.py b/tests/test_unittest_toolbox.py index acc6f44371..feea6bc291 100755 --- a/tests/test_unittest_toolbox.py +++ b/tests/test_unittest_toolbox.py @@ -33,7 +33,7 @@ import shutil import sys -import tuf.unittest_toolbox as unittest_toolbox +from tuf import unittest_toolbox from tests import utils @@ -41,11 +41,13 @@ class TestUnittestToolbox(unittest_toolbox.Modified_TestCase): + def setUp(self): - unittest_toolbox.Modified_TestCase.setUp(self) + super().setUp() + def tearDown(self): - unittest_toolbox.Modified_TestCase.tearDown(self) + super().tearDown() def test_tear_down_already_deleted_dir(self): diff --git a/tests/test_updater.py b/tests/test_updater.py index 4654cfab23..370422eb53 100755 --- a/tests/test_updater.py +++ b/tests/test_updater.py @@ -73,9 +73,10 @@ import tuf.roledb import tuf.repository_tool as repo_tool import tuf.repository_lib as repo_lib -import tuf.unittest_toolbox as unittest_toolbox import tuf.client.updater as updater +from tuf import unittest_toolbox + from tests import utils import securesystemslib @@ -89,11 +90,6 @@ class TestUpdater(unittest_toolbox.Modified_TestCase): @classmethod def setUpClass(cls): - # Create a temporary directory to store the repository, metadata, and target - # files. 'temporary_directory' must be deleted in TearDownModule() so that - # temporary files are always removed, even when exceptions occur. - cls.temporary_directory = tempfile.mkdtemp(dir=os.getcwd()) - # Needed because in some tests simple_server.py cannot be found. # The reason is that the current working directory # has been changed when executing a subprocess. @@ -116,15 +112,10 @@ def tearDownClass(cls): # Cleans the resources and flush the logged lines (if any). cls.server_process_handler.clean() - # Remove the temporary repository directory, which should contain all the - # metadata, targets, and key files generated for the test cases - shutil.rmtree(cls.temporary_directory) - def setUp(self): - # We are inheriting from custom class. - unittest_toolbox.Modified_TestCase.setUp(self) + super().setUp() tuf.roledb.clear_roledb(clear_all=True) tuf.keydb.clear_keydb(clear_all=True) @@ -135,7 +126,7 @@ def setUp(self): # The 'repository_data' directory is expected to exist in 'tuf.tests/'. original_repository_files = os.path.join(os.getcwd(), 'repository_data') temporary_repository_root = \ - self.make_temp_directory(directory=self.temporary_directory) + self.make_temp_directory(directory=os.getcwd()) # The original repository, keystore, and client directories will be copied # for each test case. @@ -191,8 +182,7 @@ def setUp(self): def tearDown(self): - # We are inheriting from custom class. - unittest_toolbox.Modified_TestCase.tearDown(self) + super().tearDown() tuf.roledb.clear_roledb(clear_all=True) tuf.keydb.clear_keydb(clear_all=True) @@ -1782,19 +1772,16 @@ def test_13__targets_of_role(self): class TestMultiRepoUpdater(unittest_toolbox.Modified_TestCase): def setUp(self): - # We are inheriting from custom class. - unittest_toolbox.Modified_TestCase.setUp(self) + super().setUp() - self.temporary_directory = tempfile.mkdtemp(dir=os.getcwd()) + self.temporary_repository_root = \ + self.make_temp_directory(directory=os.getcwd()) # Copy the original repository files provided in the test folder so that # any modifications made to repository files are restricted to the copies. # The 'repository_data' directory is expected to exist in 'tuf/tests/'. original_repository_files = os.path.join(os.getcwd(), 'repository_data') - self.temporary_repository_root = self.make_temp_directory(directory= - self.temporary_directory) - # Needed because in some tests simple_server.py cannot be found. # The reason is that the current working directory # has been changed when executing a subprocess. @@ -1908,9 +1895,7 @@ def setUp(self): def tearDown(self): - # Modified_TestCase.tearDown() automatically deletes temporary files and - # directories that may have been created during each test case. - unittest_toolbox.Modified_TestCase.tearDown(self) + super().tearDown() # Cleans the resources and flush the logged lines (if any). self.server_process_handler.clean() @@ -1920,10 +1905,6 @@ def tearDown(self): tuf.roledb.clear_roledb(clear_all=True) tuf.keydb.clear_keydb(clear_all=True) - # Remove the temporary repository directory, which should contain all the - # metadata, targets, and key files generated of all the test cases - shutil.rmtree(self.temporary_directory) - # UNIT TESTS. diff --git a/tests/test_updater_root_rotation_integration.py b/tests/test_updater_root_rotation_integration.py index 9182aa6c1f..decf55cd90 100755 --- a/tests/test_updater_root_rotation_integration.py +++ b/tests/test_updater_root_rotation_integration.py @@ -55,10 +55,11 @@ import tuf.roledb import tuf.exceptions import tuf.repository_tool as repo_tool -import tuf.unittest_toolbox as unittest_toolbox import tuf.client.updater as updater import tuf.settings +from tuf import unittest_toolbox + from tests import utils import securesystemslib @@ -72,11 +73,6 @@ class TestUpdater(unittest_toolbox.Modified_TestCase): @classmethod def setUpClass(cls): - # Create a temporary directory to store the repository, metadata, and target - # files. 'temporary_directory' must be deleted in TearDownModule() so that - # temporary files are always removed, even when exceptions occur. - cls.temporary_directory = tempfile.mkdtemp(dir=os.getcwd()) - # Launch a SimpleHTTPServer (serves files in the current directory). Test # cases will request metadata and target files that have been pre-generated # in 'tuf/tests/repository_data', which will be served by the @@ -94,16 +90,11 @@ def tearDownClass(cls): # Cleans the resources and flush the logged lines (if any). cls.server_process_handler.clean() - # Remove the temporary repository directory, which should contain all the - # metadata, targets, and key files generated for the test cases. - shutil.rmtree(cls.temporary_directory) - def setUp(self): - # We are inheriting from custom class. - unittest_toolbox.Modified_TestCase.setUp(self) + super().setUp() self.repository_name = 'test_repository1' @@ -112,7 +103,7 @@ def setUp(self): # The 'repository_data' directory is expected to exist in 'tuf.tests/'. original_repository_files = os.path.join(os.getcwd(), 'repository_data') temporary_repository_root = \ - self.make_temp_directory(directory=self.temporary_directory) + self.make_temp_directory(directory=os.getcwd()) # The original repository, keystore, and client directories will be copied # for each test case. @@ -164,8 +155,7 @@ def setUp(self): def tearDown(self): - # We are inheriting from custom class. - unittest_toolbox.Modified_TestCase.tearDown(self) + super().tearDown() tuf.roledb.clear_roledb(clear_all=True) tuf.keydb.clear_keydb(clear_all=True) diff --git a/tests/test_utils.py b/tests/test_utils.py index 63589fb516..1a266e68b1 100644 --- a/tests/test_utils.py +++ b/tests/test_utils.py @@ -26,7 +26,7 @@ import socket import sys -import tuf.unittest_toolbox as unittest_toolbox +from tuf import unittest_toolbox from tests import utils