Skip to content

Commit

Permalink
Merged in [19555] from jennifer@painless-security.com:
Browse files Browse the repository at this point in the history
    Use temporary directories instead of 'real' filesystem for tests. Fixes #3414.
 - Legacy-Id: 19561
Note: SVN reference [19555] has been migrated to Git commit 81d9234
  • Loading branch information
rjsparks committed Nov 8, 2021
2 parents e3cd5f5 + 81d9234 commit 5c28a85
Show file tree
Hide file tree
Showing 35 changed files with 279 additions and 420 deletions.
10 changes: 1 addition & 9 deletions ietf/api/tests.py
Expand Up @@ -5,7 +5,6 @@
import json
import html
import os
import shutil
import sys

from importlib import import_module
Expand Down Expand Up @@ -38,14 +37,7 @@
)

class CustomApiTests(TestCase):
def setUp(self):
self.agenda_path = self.tempdir('materials')
self.saved_agenda_path = settings.AGENDA_PATH
settings.AGENDA_PATH = self.agenda_path

def tearDown(self):
shutil.rmtree(self.agenda_path)
settings.AGENDA_PATH = self.saved_agenda_path
settings_temp_path_overrides = TestCase.settings_temp_path_overrides + ['AGENDA_PATH']

# Using mock to patch the import functions in ietf.meeting.views, where
# api_import_recordings() are using them:
Expand Down
97 changes: 38 additions & 59 deletions ietf/doc/tests.py
Expand Up @@ -3,7 +3,6 @@


import os
import shutil
import datetime
import io
import lxml
Expand All @@ -13,6 +12,7 @@
import copy

from http.cookies import SimpleCookie
from pathlib import Path
from pyquery import PyQuery
from urllib.parse import urlparse, parse_qs
from tempfile import NamedTemporaryFile
Expand Down Expand Up @@ -523,19 +523,10 @@ class DocDraftTestCase(TestCase):
"""

def setUp(self):
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
settings.INTERNET_ALL_DRAFTS_ARCHIVE_DIR = self.id_dir
f = io.open(os.path.join(self.id_dir, 'draft-ietf-mars-test-01.txt'), 'w')
f.write(self.draft_text)
f.close()

def tearDown(self):
settings.INTERNET_ALL_DRAFTS_ARCHIVE_DIR = self.saved_internet_all_drafts_archive_dir
settings.INTERNET_DRAFT_PATH = self.saved_internet_draft_path
shutil.rmtree(self.id_dir)
super().setUp()
for dir in [settings.INTERNET_ALL_DRAFTS_ARCHIVE_DIR, settings.INTERNET_DRAFT_PATH]:
with (Path(dir) / 'draft-ietf-mars-test-01.txt').open('w') as f:
f.write(self.draft_text)

def test_document_draft(self):
draft = WgDraftFactory(name='draft-ietf-mars-test',rev='01')
Expand Down Expand Up @@ -694,6 +685,7 @@ def test_document_draft(self):
self.assertEqual(r.status_code, 200)

rfc = WgRfcFactory()
(Path(settings.RFC_PATH) / rfc.get_base_name()).touch()
r = self.client.get(urlreverse("ietf.doc.views_doc.document_html", kwargs=dict(name=rfc.canonical_name())))
self.assertEqual(r.status_code, 200)
r = self.client.get(urlreverse("ietf.doc.views_doc.document_html", kwargs=dict(name=rfc.rfc_number())))
Expand Down Expand Up @@ -1895,6 +1887,7 @@ def test_references(self):

class GenerateDraftAliasesTests(TestCase):
def setUp(self):
super().setUp()
self.doc_aliases_file = NamedTemporaryFile(delete=False, mode='w+')
self.doc_aliases_file.close()
self.doc_virtual_file = NamedTemporaryFile(delete=False, mode='w+')
Expand All @@ -1909,6 +1902,7 @@ def tearDown(self):
settings.DRAFT_VIRTUAL_PATH = self.saved_draft_virtual_path
os.unlink(self.doc_aliases_file.name)
os.unlink(self.doc_virtual_file.name)
super().tearDown()

def testManagementCommand(self):
a_month_ago = datetime.datetime.now() - datetime.timedelta(30)
Expand Down Expand Up @@ -2013,6 +2007,7 @@ def testManagementCommand(self):
class EmailAliasesTests(TestCase):

def setUp(self):
super().setUp()
WgDraftFactory(name='draft-ietf-mars-test',group__acronym='mars')
WgDraftFactory(name='draft-ietf-ames-test',group__acronym='ames')
RoleFactory(group__type_id='review', group__acronym='yangdoctors', name_id='secr')
Expand Down Expand Up @@ -2044,6 +2039,7 @@ def setUp(self):
def tearDown(self):
settings.DRAFT_VIRTUAL_PATH = self.saved_draft_virtual_path
os.unlink(self.doc_alias_file.name)
super().tearDown()

def testAliases(self):
PersonFactory(user__username='plain')
Expand All @@ -2068,6 +2064,7 @@ def testExpansions(self):
class DocumentMeetingTests(TestCase):

def setUp(self):
super().setUp()
self.group = GroupFactory(type_id='wg',state_id='active')
self.group_chair = PersonFactory()
self.group.role_set.create(name_id='chair',person=self.group_chair,email=self.group_chair.email())
Expand Down Expand Up @@ -2384,53 +2381,42 @@ class _TestForm(Form):
)

class MaterialsTests(TestCase):

settings_temp_path_overrides = TestCase.settings_temp_path_overrides + ['AGENDA_PATH']
def setUp(self):
self.id_dir = self.tempdir('id')
self.saved_agenda_path = settings.AGENDA_PATH
settings.AGENDA_PATH = self.id_dir
super().setUp()

meeting_number='111'
meeting_dir = os.path.join(f'{settings.AGENDA_PATH}',f'{meeting_number}')
os.mkdir(meeting_dir)
agenda_dir = os.path.join(meeting_dir,'agenda')
os.mkdir(agenda_dir)
meeting_dir = Path(settings.AGENDA_PATH) / meeting_number
meeting_dir.mkdir()
agenda_dir = meeting_dir / 'agenda'
agenda_dir.mkdir()

group_acronym='bogons'

# This is too much work - the factory should
# * build the DocumentHistory correctly
# * maybe do something by default with uploaded_filename
# and there should be a more usable unit to save bits to disk (handle_file_upload isn't quite right) that tests can leverage
try:
uploaded_filename_00 = f'agenda-{meeting_number}-{group_acronym}-00.txt'
uploaded_filename_01 = f'agenda-{meeting_number}-{group_acronym}-01.md'
f = io.open(os.path.join(agenda_dir, uploaded_filename_00), 'w')
f.write('This is some unremarkable text')
f.close()
f = io.open(os.path.join(agenda_dir, uploaded_filename_01), 'w')
f.write('This links to [an unusual place](https://unusual.example).')
f.close()

self.doc = DocumentFactory(type_id='agenda',rev='00',group__acronym=group_acronym, newrevisiondocevent=None, name=f'agenda-{meeting_number}-{group_acronym}', uploaded_filename=uploaded_filename_00)
e = NewRevisionDocEventFactory(doc=self.doc,rev='00')
self.doc.save_with_history([e])
self.doc.rev = '01'
self.doc.uploaded_filename = uploaded_filename_01
e = NewRevisionDocEventFactory(doc=self.doc, rev='01')
self.doc.save_with_history([e])

# This is necessary for the view to be able to find the document
# which hints that the view has an issue : if a materials document is taken out of all SessionPresentations, it is no longer accessable by this view
SessionPresentationFactory(session__meeting__number=meeting_number, session__group=self.doc.group, document=self.doc)

except:
shutil.rmtree(self.id_dir)
raise
uploaded_filename_00 = f'agenda-{meeting_number}-{group_acronym}-00.txt'
uploaded_filename_01 = f'agenda-{meeting_number}-{group_acronym}-01.md'
f = io.open(os.path.join(agenda_dir, uploaded_filename_00), 'w')
f.write('This is some unremarkable text')
f.close()
f = io.open(os.path.join(agenda_dir, uploaded_filename_01), 'w')
f.write('This links to [an unusual place](https://unusual.example).')
f.close()

def tearDown(self):
settings.AGENDA_PATH = self.saved_agenda_path
shutil.rmtree(self.id_dir)
self.doc = DocumentFactory(type_id='agenda',rev='00',group__acronym=group_acronym, newrevisiondocevent=None, name=f'agenda-{meeting_number}-{group_acronym}', uploaded_filename=uploaded_filename_00)
e = NewRevisionDocEventFactory(doc=self.doc,rev='00')
self.doc.save_with_history([e])
self.doc.rev = '01'
self.doc.uploaded_filename = uploaded_filename_01
e = NewRevisionDocEventFactory(doc=self.doc, rev='01')
self.doc.save_with_history([e])

# This is necessary for the view to be able to find the document
# which hints that the view has an issue : if a materials document is taken out of all SessionPresentations, it is no longer accessable by this view
SessionPresentationFactory(session__meeting__number=meeting_number, session__group=self.doc.group, document=self.doc)

def test_markdown_and_text(self):
url = urlreverse("ietf.doc.views_doc.document_main", kwargs=dict(name=self.doc.name,rev='00'))
Expand All @@ -2446,15 +2432,7 @@ def test_markdown_and_text(self):
self.assertEqual(q('#materials-content .panel-body a').attr['href'],'https://unusual.example')

class Idnits2SupportTests(TestCase):

def setUp(self):
self.derived_dir = self.tempdir('derived')
self.saved_derived_dir = settings.DERIVED_DIR
settings.DERIVED_DIR = self.derived_dir

def tearDown(self):
settings.DERIVED_DIR = self.saved_derived_dir
shutil.rmtree(self.derived_dir)
settings_temp_path_overrides = TestCase.settings_temp_path_overrides + ['DERIVED_DIR']

def test_obsoleted(self):
rfc = WgRfcFactory(alias2__name='rfc1001')
Expand Down Expand Up @@ -2506,6 +2484,7 @@ def test_idnits2_state(self):
class RfcdiffSupportTests(TestCase):

def setUp(self):
super().setUp()
self.target_view = 'ietf.doc.views_doc.rfcdiff_latest_json'

def getJson(self, view_args):
Expand Down
1 change: 1 addition & 0 deletions ietf/doc/tests_ballot.py
Expand Up @@ -1056,6 +1056,7 @@ def test_undefer_status_change(self):
# when charters support being deferred, be sure to test them here

def setUp(self):
super().setUp()
IndividualDraftFactory(name='draft-ietf-mars-test',states=[('draft','active'),('draft-iesg','iesg-eva')],
ad=Person.objects.get(user__username='ad'))
DocumentFactory(type_id='statchg',name='status-change-imaginary-mid-review',states=[('statchg','iesgeval')])
Expand Down
17 changes: 4 additions & 13 deletions ietf/doc/tests_bofreq.py
Expand Up @@ -2,10 +2,9 @@

import datetime
import debug # pyflakes:ignore
import io
import os
import shutil

from pathlib import Path
from pyquery import PyQuery
from random import randint
from tempfile import NamedTemporaryFile
Expand All @@ -24,19 +23,11 @@


class BofreqTests(TestCase):

def setUp(self):
self.bofreq_dir = self.tempdir('bofreq')
self.saved_bofreq_path = settings.BOFREQ_PATH
settings.BOFREQ_PATH = self.bofreq_dir

def tearDown(self):
settings.BOFREQ_PATH = self.saved_bofreq_path
shutil.rmtree(self.bofreq_dir)
settings_temp_path_overrides = TestCase.settings_temp_path_overrides + ['BOFREQ_PATH']

def write_bofreq_file(self, bofreq):
fname = os.path.join(self.bofreq_dir, "%s-%s.md" % (bofreq.canonical_name(), bofreq.rev))
with io.open(fname, "w") as f:
fname = Path(settings.BOFREQ_PATH) / ("%s-%s.md" % (bofreq.canonical_name(), bofreq.rev))
with fname.open("w") as f:
f.write(f"""# This is a test bofreq.
Version: {bofreq.rev}
Expand Down
22 changes: 9 additions & 13 deletions ietf/doc/tests_charter.py
Expand Up @@ -4,9 +4,8 @@

import datetime
import io
import os
import shutil

from pathlib import Path
from pyquery import PyQuery

from django.conf import settings
Expand Down Expand Up @@ -84,17 +83,12 @@ def test_view_revisions(self):


class EditCharterTests(TestCase):
def setUp(self):
self.charter_dir = self.tempdir('charter')
self.saved_charter_path = settings.CHARTER_PATH
settings.CHARTER_PATH = self.charter_dir

def tearDown(self):
settings.CHARTER_PATH = self.saved_charter_path
shutil.rmtree(self.charter_dir)
settings_temp_path_overrides = TestCase.settings_temp_path_overrides + ['CHARTER_PATH']

def write_charter_file(self, charter):
with io.open(os.path.join(self.charter_dir, "%s-%s.txt" % (charter.canonical_name(), charter.rev)), "w") as f:
with (Path(settings.CHARTER_PATH) /
("%s-%s.txt" % (charter.canonical_name(), charter.rev))
).open("w") as f:
f.write("This is a charter.")

def test_startstop_process(self):
Expand Down Expand Up @@ -513,7 +507,7 @@ def test_submit_charter(self):
self.assertEqual(charter.rev, next_revision(prev_rev))
self.assertTrue("new_revision" in charter.latest_event().type)

with io.open(os.path.join(self.charter_dir, charter.canonical_name() + "-" + charter.rev + ".txt"), encoding='utf-8') as f:
with (Path(settings.CHARTER_PATH) / (charter.canonical_name() + "-" + charter.rev + ".txt")).open(encoding='utf-8') as f:
self.assertEqual(f.read(), "Windows line\nMac line\nUnix line\n" + utf_8_snippet.decode('utf-8'))

def test_submit_initial_charter(self):
Expand Down Expand Up @@ -792,7 +786,9 @@ def test_approve(self):
self.assertTrue(not charter.ballot_open("approve"))

self.assertEqual(charter.rev, "01")
self.assertTrue(os.path.exists(os.path.join(self.charter_dir, "charter-ietf-%s-%s.txt" % (group.acronym, charter.rev))))
self.assertTrue(
(Path(settings.CHARTER_PATH) / ("charter-ietf-%s-%s.txt" % (group.acronym, charter.rev))).exists()
)

self.assertEqual(len(outbox), 2)
#
Expand Down
11 changes: 3 additions & 8 deletions ietf/doc/tests_conflict_review.py
Expand Up @@ -4,7 +4,6 @@

import io
import os
import shutil

from pyquery import PyQuery
from textwrap import wrap
Expand Down Expand Up @@ -367,11 +366,13 @@ def test_no_approval_pend_notice_secr_noprob(self):
self.assertEqual(len(outbox), 0)

def setUp(self):
super().setUp()
IndividualDraftFactory(name='draft-imaginary-independent-submission')
ConflictReviewFactory(name='conflict-review-imaginary-irtf-submission',review_of=IndividualDraftFactory(name='draft-imaginary-irtf-submission',stream_id='irtf'),notify='notifyme@example.net')


class ConflictReviewSubmitTests(TestCase):
settings_temp_path_overrides = TestCase.settings_temp_path_overrides + ['CONFLICT_REVIEW_PATH']
def test_initial_submission(self):
doc = Document.objects.get(name='conflict-review-imaginary-irtf-submission')
url = urlreverse('ietf.doc.views_conflict_review.submit',kwargs=dict(name=doc.name))
Expand Down Expand Up @@ -447,11 +448,5 @@ def test_subsequent_submission(self):
self.assertTrue(q('textarea')[0].text.strip().startswith("[Edit this page"))

def setUp(self):
super().setUp()
ConflictReviewFactory(name='conflict-review-imaginary-irtf-submission',review_of=IndividualDraftFactory(name='draft-imaginary-irtf-submission',stream_id='irtf'),notify='notifyme@example.net')
self.test_dir = self.tempdir('conflict-review')
self.saved_conflict_review_path = settings.CONFLICT_REVIEW_PATH
settings.CONFLICT_REVIEW_PATH = self.test_dir

def tearDown(self):
settings.CONFLICT_REVIEW_PATH = self.saved_conflict_review_path
shutil.rmtree(self.test_dir)
1 change: 1 addition & 0 deletions ietf/doc/tests_downref.py
Expand Up @@ -16,6 +16,7 @@
class Downref(TestCase):

def setUp(self):
super().setUp()
PersonFactory(name='Plain Man',user__username='plain')
self.draft = WgDraftFactory(name='draft-ietf-mars-test')
self.draftalias = self.draft.docalias.get(name='draft-ietf-mars-test')
Expand Down

0 comments on commit 5c28a85

Please sign in to comment.