From 14c748df98a67799bda3cbcb0ba87aca18686365 Mon Sep 17 00:00:00 2001 From: Henrik Levkowetz Date: Mon, 27 Mar 2017 21:41:18 +0000 Subject: [PATCH] Changed the creation of temporary test dirs to use names which include the test class name, in order to make it possible to run test cases in parallel. Disabled coverage testing when running in parallel (those classes cannot be pickled and distributed to the test runner threads, and also won't pass coverage data back). Tweaked the TestCase.tempdir() method. - Legacy-Id: 13157 --- ietf/doc/tests.py | 4 +--- ietf/doc/tests_charter.py | 3 +-- ietf/doc/tests_conflict_review.py | 3 +-- ietf/doc/tests_draft.py | 8 ++------ ietf/doc/tests_material.py | 14 ++++++++------ ietf/doc/tests_review.py | 5 +---- ietf/doc/tests_status_change.py | 4 +--- ietf/group/tests_info.py | 6 ++---- ietf/idindex/tests.py | 4 +--- ietf/iesg/tests.py | 4 +--- ietf/ietfauth/tests.py | 3 +-- ietf/liaisons/tests.py | 4 +--- ietf/meeting/tests_views.py | 10 +++------- ietf/nomcom/tests.py | 5 +---- ietf/secr/drafts/tests_views.py | 10 +++------- ietf/secr/meetings/tests.py | 12 +++--------- ietf/secr/proceedings/tests.py | 6 ++---- ietf/settings.py | 4 ---- ietf/submit/tests.py | 18 ++++++------------ ietf/sync/tests.py | 8 ++------ ietf/utils/test_runner.py | 3 ++- ietf/utils/test_utils.py | 6 ++++-- 22 files changed, 47 insertions(+), 97 deletions(-) diff --git a/ietf/doc/tests.py b/ietf/doc/tests.py index 09bdaa26a..aa0a52d19 100644 --- a/ietf/doc/tests.py +++ b/ietf/doc/tests.py @@ -422,9 +422,7 @@ Man Expires September 22, 2015 [Page 3] """ def setUp(self): - self.id_dir = os.path.abspath("tmp-id-dir") - if not os.path.exists(self.id_dir): - os.mkdir(self.id_dir) + self.id_dir = self.tempdir('id') self.saved_internet_draft_path = settings.INTERNET_DRAFT_PATH settings.INTERNET_DRAFT_PATH = self.id_dir self.saved_internet_all_drafts_archive_dir = settings.INTERNET_ALL_DRAFTS_ARCHIVE_DIR diff --git a/ietf/doc/tests_charter.py b/ietf/doc/tests_charter.py index e78b5fd15..3d50872bb 100644 --- a/ietf/doc/tests_charter.py +++ b/ietf/doc/tests_charter.py @@ -25,8 +25,7 @@ from ietf.utils.test_utils import login_testing_unauthorized class EditCharterTests(TestCase): def setUp(self): - self.charter_dir = os.path.abspath("tmp-charter-dir") - os.mkdir(self.charter_dir) + self.charter_dir = self.tempdir('charter') self.saved_charter_path = settings.CHARTER_PATH settings.CHARTER_PATH = self.charter_dir diff --git a/ietf/doc/tests_conflict_review.py b/ietf/doc/tests_conflict_review.py index b3c1dea79..0b9594286 100644 --- a/ietf/doc/tests_conflict_review.py +++ b/ietf/doc/tests_conflict_review.py @@ -388,8 +388,7 @@ class ConflictReviewSubmitTests(TestCase): def setUp(self): make_test_data() - self.test_dir = os.path.abspath("tmp-conflict-review-testdir") - os.mkdir(self.test_dir) + self.test_dir = self.tempdir('conflict-review') self.saved_conflict_review_path = settings.CONFLICT_REVIEW_PATH settings.CONFLICT_REVIEW_PATH = self.test_dir diff --git a/ietf/doc/tests_draft.py b/ietf/doc/tests_draft.py index a21b4d881..e1df40ed8 100644 --- a/ietf/doc/tests_draft.py +++ b/ietf/doc/tests_draft.py @@ -549,12 +549,8 @@ class ExpireIDsTests(TestCase): def setUp(self): self.saved_id_dir = settings.INTERNET_DRAFT_PATH self.saved_archive_dir = settings.INTERNET_DRAFT_ARCHIVE_DIR - self.id_dir = os.path.abspath("tmp-id-dir") - self.archive_dir = os.path.abspath("tmp-id-archive") - if not os.path.exists(self.id_dir): - os.mkdir(self.id_dir) - if not os.path.exists(self.archive_dir): - os.mkdir(self.archive_dir) + self.id_dir = self.tempdir('id') + self.archive_dir = self.tempdir('id-archive') os.mkdir(os.path.join(self.archive_dir, "unknown_ids")) os.mkdir(os.path.join(self.archive_dir, "deleted_tombstones")) os.mkdir(os.path.join(self.archive_dir, "expired_without_tombstone")) diff --git a/ietf/doc/tests_material.py b/ietf/doc/tests_material.py index d22f70838..1f098e124 100644 --- a/ietf/doc/tests_material.py +++ b/ietf/doc/tests_material.py @@ -22,15 +22,17 @@ from ietf.utils.test_data import make_test_data class GroupMaterialTests(TestCase): def setUp(self): - self.materials_dir = os.path.abspath("tmp-document-dir") - if not os.path.exists(self.materials_dir): - os.makedirs(os.path.join(self.materials_dir, "slides")) + self.materials_dir = self.tempdir("materials") + self.slides_dir = os.path.join(self.materials_dir, "slides") + if not os.path.exists(self.slides_dir): + os.mkdir(self.slides_dir) self.saved_document_path_pattern = settings.DOCUMENT_PATH_PATTERN settings.DOCUMENT_PATH_PATTERN = self.materials_dir + "/{doc.type_id}/" - self.agenda_dir = os.path.abspath("tmp-agenda-dir") - if not os.path.exists(self.agenda_dir): - os.makedirs(os.path.join(self.agenda_dir, "42", "slides")) + self.agenda_dir = self.tempdir("agenda") + self.meeting_slides_dir = os.path.join(self.agenda_dir, "42", "slides") + if not os.path.exists(self.meeting_slides_dir): + os.makedirs(self.meeting_slides_dir) self.saved_agenda_path = settings.AGENDA_PATH settings.AGENDA_PATH = self.agenda_dir diff --git a/ietf/doc/tests_review.py b/ietf/doc/tests_review.py index 4c0562fc9..4b91c2427 100644 --- a/ietf/doc/tests_review.py +++ b/ietf/doc/tests_review.py @@ -30,10 +30,7 @@ from ietf.person.factories import PersonFactory class ReviewTests(TestCase): def setUp(self): - self.review_dir = os.path.abspath("tmp-review-dir") - if not os.path.exists(self.review_dir): - os.mkdir(self.review_dir) - + self.review_dir = self.tempdir('review') self.old_document_path_pattern = settings.DOCUMENT_PATH_PATTERN settings.DOCUMENT_PATH_PATTERN = self.review_dir + "/{doc.type_id}/" diff --git a/ietf/doc/tests_status_change.py b/ietf/doc/tests_status_change.py index a84a6ae73..00a18bb12 100644 --- a/ietf/doc/tests_status_change.py +++ b/ietf/doc/tests_status_change.py @@ -479,9 +479,7 @@ class StatusChangeSubmitTests(TestCase): def setUp(self): make_test_data() - self.test_dir = os.path.abspath("tmp-status-change-testdir") - if not os.path.exists(self.test_dir): - os.mkdir(self.test_dir) + self.test_dir = self.tempdir('status-change') self.saved_status_change_path = settings.STATUS_CHANGE_PATH settings.STATUS_CHANGE_PATH = self.test_dir diff --git a/ietf/group/tests_info.py b/ietf/group/tests_info.py index 86c798fb3..e13689196 100644 --- a/ietf/group/tests_info.py +++ b/ietf/group/tests_info.py @@ -42,8 +42,7 @@ def group_urlreverse_list(group, viewname): class GroupPagesTests(TestCase): def setUp(self): - self.charter_dir = os.path.abspath("tmp-charter-dir") - os.mkdir(self.charter_dir) + self.charter_dir = self.tempdir('charter') self.saved_charter_path = settings.CHARTER_PATH settings.CHARTER_PATH = self.charter_dir @@ -418,8 +417,7 @@ class GroupPagesTests(TestCase): class GroupEditTests(TestCase): def setUp(self): - self.charter_dir = os.path.abspath("tmp-charter-dir") - os.mkdir(self.charter_dir) + self.charter_dir = self.tempdir('charter') self.saved_charter_path = settings.CHARTER_PATH settings.CHARTER_PATH = self.charter_dir diff --git a/ietf/idindex/tests.py b/ietf/idindex/tests.py index b79a2dac9..e06739237 100644 --- a/ietf/idindex/tests.py +++ b/ietf/idindex/tests.py @@ -12,9 +12,7 @@ from ietf.utils.test_data import make_test_data class IndexTests(TestCase): def setUp(self): - self.id_dir = os.path.abspath("tmp-id-dir") - if not os.path.exists(self.id_dir): - os.mkdir(self.id_dir) + self.id_dir = self.tempdir('id') self.saved_internet_draft_path = settings.INTERNET_DRAFT_PATH settings.INTERNET_DRAFT_PATH = self.id_dir diff --git a/ietf/iesg/tests.py b/ietf/iesg/tests.py index aa7d976f9..62ce9163d 100644 --- a/ietf/iesg/tests.py +++ b/ietf/iesg/tests.py @@ -95,9 +95,7 @@ class IESGAgendaTests(TestCase): by = Person.objects.get(name="AreaĆ° Irector") date = get_agenda_date() - self.draft_dir = os.path.abspath("tmp-agenda-draft-dir") - if not os.path.exists(self.draft_dir): - os.mkdir(self.draft_dir) + self.draft_dir = self.tempdir('agenda-draft') self.saved_internet_draft_path = settings.INTERNET_DRAFT_PATH settings.INTERNET_DRAFT_PATH = self.draft_dir diff --git a/ietf/ietfauth/tests.py b/ietf/ietfauth/tests.py index 642603163..abf3ec027 100644 --- a/ietf/ietfauth/tests.py +++ b/ietf/ietfauth/tests.py @@ -41,8 +41,7 @@ class IetfAuthTests(TestCase): settings.USE_PYTHON_HTDIGEST = True self.saved_htpasswd_file = settings.HTPASSWD_FILE - self.htpasswd_dir = os.path.abspath("tmp-htpasswd-dir") - os.mkdir(self.htpasswd_dir) + self.htpasswd_dir = self.tempdir('htpasswd') settings.HTPASSWD_FILE = os.path.join(self.htpasswd_dir, "htpasswd") open(settings.HTPASSWD_FILE, 'a').close() # create empty file diff --git a/ietf/liaisons/tests.py b/ietf/liaisons/tests.py index 93272fc51..802ba8157 100644 --- a/ietf/liaisons/tests.py +++ b/ietf/liaisons/tests.py @@ -321,9 +321,7 @@ class ManagementCommandTests(TestCase): class LiaisonManagementTests(TestCase): def setUp(self): self.saved_liaison_attach_path = settings.LIAISON_ATTACH_PATH - self.liaison_dir = os.path.abspath("tmp-liaison-dir") - if not os.path.exists(self.liaison_dir): - os.mkdir(self.liaison_dir) + self.liaison_dir = self.tempdir('liaison') settings.LIAISON_ATTACH_PATH = self.liaison_dir def tearDown(self): diff --git a/ietf/meeting/tests_views.py b/ietf/meeting/tests_views.py index f1d3825c0..ba7e1211d 100644 --- a/ietf/meeting/tests_views.py +++ b/ietf/meeting/tests_views.py @@ -38,9 +38,7 @@ from ietf.doc.factories import DocumentFactory class MeetingTests(TestCase): def setUp(self): - self.materials_dir = os.path.abspath(settings.TEST_MATERIALS_DIR) - if not os.path.exists(self.materials_dir): - os.mkdir(self.materials_dir) + self.materials_dir = self.tempdir('materials') self.saved_agenda_path = settings.AGENDA_PATH settings.AGENDA_PATH = self.materials_dir @@ -620,9 +618,7 @@ class EditScheduleListTests(TestCase): class InterimTests(TestCase): def setUp(self): - self.materials_dir = os.path.abspath(settings.TEST_MATERIALS_DIR) - if not os.path.exists(self.materials_dir): - os.mkdir(self.materials_dir) + self.materials_dir = self.tempdir('materials') self.saved_agenda_path = settings.AGENDA_PATH settings.AGENDA_PATH = self.materials_dir @@ -1440,7 +1436,7 @@ class FinalizeProceedingsTests(TestCase): class MaterialsTests(TestCase): def setUp(self): - self.materials_dir = os.path.abspath(settings.TEST_MATERIALS_DIR) + self.materials_dir = self.tempdir('materials') if not os.path.exists(self.materials_dir): os.mkdir(self.materials_dir) self.saved_agenda_path = settings.AGENDA_PATH diff --git a/ietf/nomcom/tests.py b/ietf/nomcom/tests.py index 6922e8da9..fb7696e95 100644 --- a/ietf/nomcom/tests.py +++ b/ietf/nomcom/tests.py @@ -1,7 +1,6 @@ # -*- coding: utf-8 -*- #import tempfile import datetime -import os import shutil import urlparse from pyquery import PyQuery @@ -52,9 +51,7 @@ def get_cert_files(): def build_test_public_keys_dir(obj): obj.saved_nomcom_public_keys_dir = settings.NOMCOM_PUBLIC_KEYS_DIR - obj.nomcom_public_keys_dir = os.path.abspath("tmp-nomcom-public-keys-dir") - if not os.path.exists(obj.nomcom_public_keys_dir): - os.mkdir(obj.nomcom_public_keys_dir) + obj.nomcom_public_keys_dir = obj.tempdir('nomcom-public-keys') settings.NOMCOM_PUBLIC_KEYS_DIR = obj.nomcom_public_keys_dir def clean_test_public_keys_dir(obj): diff --git a/ietf/secr/drafts/tests_views.py b/ietf/secr/drafts/tests_views.py index 54a965462..7724b653b 100644 --- a/ietf/secr/drafts/tests_views.py +++ b/ietf/secr/drafts/tests_views.py @@ -1,4 +1,3 @@ -import os import shutil from StringIO import StringIO @@ -21,18 +20,15 @@ SECR_USER='secretary' class SecrDraftsTestCase(TestCase): def setUp(self): self.saved_internet_draft_path = settings.INTERNET_DRAFT_PATH - self.repository_dir = os.path.abspath("tmp-submit-repository-dir") - os.mkdir(self.repository_dir) + self.repository_dir = self.tempdir('submit-repository') settings.INTERNET_DRAFT_PATH = self.repository_dir self.saved_internet_draft_archive_dir = settings.INTERNET_DRAFT_ARCHIVE_DIR - self.archive_dir = os.path.abspath("tmp-submit-archive-dir") - os.mkdir(self.archive_dir) + self.archive_dir = self.tempdir('submit-archive') settings.INTERNET_DRAFT_ARCHIVE_DIR = self.archive_dir self.saved_idsubmit_manual_staging_dir = settings.IDSUBMIT_MANUAL_STAGING_DIR - self.manual_dir = os.path.abspath("tmp-submit-manual-dir") - os.mkdir(self.manual_dir) + self.manual_dir = self.tempdir('submit-manual') settings.IDSUBMIT_MANUAL_STAGING_DIR = self.manual_dir def tearDown(self): diff --git a/ietf/secr/meetings/tests.py b/ietf/secr/meetings/tests.py index fbcc499d7..f6aa1fe72 100644 --- a/ietf/secr/meetings/tests.py +++ b/ietf/secr/meetings/tests.py @@ -20,24 +20,18 @@ from ietf.utils.test_utils import TestCase class SecrMeetingTestCase(TestCase): def setUp(self): - self.proceedings_dir = os.path.abspath("tmp-proceedings-dir") - if not os.path.exists(self.proceedings_dir): - os.mkdir(self.proceedings_dir) + self.proceedings_dir = self.tempdir('proceedings') self.saved_secr_proceedings_dir = settings.SECR_PROCEEDINGS_DIR settings.SECR_PROCEEDINGS_DIR = self.proceedings_dir self.saved_agenda_path = settings.AGENDA_PATH settings.AGENDA_PATH = self.proceedings_dir - self.bluesheet_dir = os.path.abspath(settings.TEST_BLUESHEET_DIR) + self.bluesheet_dir = self.tempdir('bluesheet') self.bluesheet_path = os.path.join(self.bluesheet_dir,'blue_sheet.rtf') - if not os.path.exists(self.bluesheet_dir): - os.mkdir(self.bluesheet_dir) self.saved_secr_blue_sheet_path = settings.SECR_BLUE_SHEET_PATH settings.SECR_BLUE_SHEET_PATH = self.bluesheet_path - self.materials_dir = os.path.abspath(settings.TEST_MATERIALS_DIR) - if not os.path.exists(self.materials_dir): - os.mkdir(self.materials_dir) + self.materials_dir = self.tempdir('materials') def tearDown(self): settings.SECR_PROCEEDINGS_DIR = self.saved_secr_proceedings_dir diff --git a/ietf/secr/proceedings/tests.py b/ietf/secr/proceedings/tests.py index b41d6bea7..82b034b61 100644 --- a/ietf/secr/proceedings/tests.py +++ b/ietf/secr/proceedings/tests.py @@ -39,11 +39,9 @@ class ProceedingsTestCase(TestCase): class RecordingTestCase(TestCase): def setUp(self): - self.meeting_recordings_dir = os.path.abspath("tmp-meeting-recordings-dir") + self.meeting_recordings_dir = self.tempdir('meeting-recordings') self.saved_meeting_recordings_dir = settings.MEETING_RECORDINGS_DIR settings.MEETING_RECORDINGS_DIR = self.meeting_recordings_dir - if not os.path.exists(self.meeting_recordings_dir): - os.makedirs(self.meeting_recordings_dir) def tearDown(self): shutil.rmtree(self.meeting_recordings_dir) @@ -182,7 +180,7 @@ class OldProceedingsTestCase(TestCase): ''' Ensure coverage of fragments of old proceedings generation until those are removed ''' def setUp(self): self.session = SessionFactory(meeting__type_id='ietf') - self.proceedings_dir = os.path.abspath("tmp-proceedings-dir") + self.proceedings_dir = self.tempdir('proceedings') # This unintuitive bit is a consequence of the surprising implementation of meeting.get_materials_path self.saved_agenda_path = settings.AGENDA_PATH diff --git a/ietf/settings.py b/ietf/settings.py index ec5834b90..3540c8bb7 100644 --- a/ietf/settings.py +++ b/ietf/settings.py @@ -461,10 +461,6 @@ TEST_DIFF_FAILURE_DIR = "/tmp/test/failure/" TEST_GHOSTDRIVER_LOG_PATH = "ghostdriver.log" -TEST_MATERIALS_DIR = "tmp-meeting-materials-dir" - -TEST_BLUESHEET_DIR = "tmp-bluesheet-dir" - # These are regexes TEST_URL_COVERAGE_EXCLUDE = [ r"^\^admin/", diff --git a/ietf/submit/tests.py b/ietf/submit/tests.py index 78a781656..2348be203 100644 --- a/ietf/submit/tests.py +++ b/ietf/submit/tests.py @@ -56,34 +56,28 @@ def submission_file(name, rev, group, format, templatename, author=None): class SubmitTests(TestCase): def setUp(self): self.saved_idsubmit_staging_path = settings.IDSUBMIT_STAGING_PATH - self.staging_dir = os.path.abspath("tmp-submit-staging-dir") - os.mkdir(self.staging_dir) + self.staging_dir = self.tempdir('submit-staging') settings.IDSUBMIT_STAGING_PATH = self.staging_dir self.saved_internet_draft_path = settings.INTERNET_DRAFT_PATH self.saved_idsubmit_repository_path = settings.IDSUBMIT_REPOSITORY_PATH - self.repository_dir = os.path.abspath("tmp-submit-repository-dir") - os.mkdir(self.repository_dir) + self.repository_dir = self.tempdir('submit-repository') settings.INTERNET_DRAFT_PATH = settings.IDSUBMIT_REPOSITORY_PATH = self.repository_dir self.saved_archive_dir = settings.INTERNET_DRAFT_ARCHIVE_DIR - self.archive_dir = os.path.abspath("tmp-submit-archive-dir") - os.mkdir(self.archive_dir) + self.archive_dir = self.tempdir('submit-archive') settings.INTERNET_DRAFT_ARCHIVE_DIR = self.archive_dir self.saved_yang_rfc_model_dir = settings.YANG_RFC_MODEL_DIR - self.yang_rfc_model_dir = os.path.abspath("tmp-yang-rfc-model-dir") - os.mkdir(self.yang_rfc_model_dir) + self.yang_rfc_model_dir = self.tempdir('yang-rfc-model') settings.YANG_RFC_MODEL_DIR = self.yang_rfc_model_dir self.saved_yang_draft_model_dir = settings.YANG_DRAFT_MODEL_DIR - self.yang_draft_model_dir = os.path.abspath("tmp-yang-draft-model-dir") - os.mkdir(self.yang_draft_model_dir) + self.yang_draft_model_dir = self.tempdir('yang-draft-model') settings.YANG_DRAFT_MODEL_DIR = self.yang_draft_model_dir self.saved_yang_inval_model_dir = settings.YANG_INVAL_MODEL_DIR - self.yang_inval_model_dir = os.path.abspath("tmp-yang-inval-model-dir") - os.mkdir(self.yang_inval_model_dir) + self.yang_inval_model_dir = self.tempdir('yang-inval-model') settings.YANG_INVAL_MODEL_DIR = self.yang_inval_model_dir def tearDown(self): diff --git a/ietf/sync/tests.py b/ietf/sync/tests.py index 534afb25a..e03f6c746 100644 --- a/ietf/sync/tests.py +++ b/ietf/sync/tests.py @@ -211,12 +211,8 @@ class RFCSyncTests(TestCase): def setUp(self): self.save_id_dir = settings.INTERNET_DRAFT_PATH self.save_archive_dir = settings.INTERNET_DRAFT_ARCHIVE_DIR - self.id_dir = os.path.abspath("tmp-id-dir") - self.archive_dir = os.path.abspath("tmp-id-archive") - if not os.path.exists(self.id_dir): - os.mkdir(self.id_dir) - if not os.path.exists(self.archive_dir): - os.mkdir(self.archive_dir) + self.id_dir = self.tempdir('id') + self.archive_dir = self.tempdir('id-archive') settings.INTERNET_DRAFT_PATH = self.id_dir settings.INTERNET_DRAFT_ARCHIVE_DIR = self.archive_dir diff --git a/ietf/utils/test_runner.py b/ietf/utils/test_runner.py index 96d366e5f..b28159c78 100644 --- a/ietf/utils/test_runner.py +++ b/ietf/utils/test_runner.py @@ -107,7 +107,6 @@ def safe_destroy_test_db(*args, **kwargs): global test_database_name, old_destroy keepdb = kwargs.get('keepdb', False) if not keepdb: - print " Checking that it's safe to destroy test database..." if settings.DATABASES["default"]["NAME"] != test_database_name: print ' NOT SAFE; Changing settings.DATABASES["default"]["NAME"] from %s to %s' % (settings.DATABASES["default"]["NAME"], test_database_name) settings.DATABASES["default"]["NAME"] = test_database_name @@ -366,6 +365,8 @@ class IetfTestRunner(DiscoverRunner): self.root_dir = os.path.dirname(settings.BASE_DIR) self.coverage_file = os.path.join(self.root_dir, settings.TEST_COVERAGE_MASTER_FILE) super(IetfTestRunner, self).__init__(**kwargs) + if self.parallel: + self.check_coverage = False def setup_test_environment(self, **kwargs): global template_coverage_collection diff --git a/ietf/utils/test_utils.py b/ietf/utils/test_utils.py index dab2f7c65..0e7b1973d 100644 --- a/ietf/utils/test_utils.py +++ b/ietf/utils/test_utils.py @@ -101,8 +101,8 @@ class TestCase(django.test.TestCase): self.assertValidHTML(resp.content) def tempdir(self, label): - slug = slugify(self.__class__.replace('.','-')) - dirname = "tmp-{label}-{slug}".format(**locals()) + slug = slugify(self.__class__.__name__.replace('.','-')) + dirname = "tmp-{label}-{slug}-dir".format(**locals()) path = os.path.abspath(dirname) if not os.path.exists(path): os.mkdir(path) @@ -110,3 +110,5 @@ class TestCase(django.test.TestCase): def __str__(self): return "%s (%s.%s)" % (self._testMethodName, strclass(self.__class__),self._testMethodName) + + \ No newline at end of file