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
This commit is contained in:
Henrik Levkowetz 2017-03-27 21:41:18 +00:00
parent 6110b15de1
commit 14c748df98
22 changed files with 47 additions and 97 deletions

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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"))

View file

@ -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

View file

@ -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}/"

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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):

View file

@ -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

View file

@ -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):

View file

@ -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):

View file

@ -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

View file

@ -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

View file

@ -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/",

View file

@ -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):

View file

@ -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

View file

@ -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

View file

@ -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)