Commit 2a2a1c3c by Jesse Zoldak Committed by GitHub

Merge pull request #12985 from edx/zoldak/EV-56

Make the temp dir for instructor dashboard local files uniquely named EV-56
parents 3216940c 5600a9bd
...@@ -4,8 +4,9 @@ Base test classes for LMS instructor-initiated background tasks ...@@ -4,8 +4,9 @@ Base test classes for LMS instructor-initiated background tasks
""" """
import os import os
import json import json
from mock import Mock from mock import Mock, patch
import shutil import shutil
from tempfile import mkdtemp
import unicodecsv import unicodecsv
from uuid import uuid4 from uuid import uuid4
...@@ -290,15 +291,30 @@ class TestReportMixin(object): ...@@ -290,15 +291,30 @@ class TestReportMixin(object):
""" """
Cleans up after tests that place files in the reports directory. Cleans up after tests that place files in the reports directory.
""" """
def tearDown(self): def setUp(self):
report_store = ReportStore.from_config(config_name='GRADES_DOWNLOAD')
try: def clean_up_tmpdir():
reports_download_path = report_store.storage.path('') """Remove temporary directory created for instructor task models."""
except NotImplementedError: if os.path.exists(self.tmp_dir):
pass # storage backend does not use the local filesystem shutil.rmtree(self.tmp_dir)
else:
if os.path.exists(reports_download_path): super(TestReportMixin, self).setUp()
shutil.rmtree(reports_download_path)
# Ensure that working with the temp directories in tests is thread safe
# by creating a unique temporary directory for each testcase.
self.tmp_dir = mkdtemp()
mock_grades_download = {'STORAGE_TYPE': 'localfs', 'BUCKET': 'test-grades', 'ROOT_PATH': self.tmp_dir}
self.grades_patch = patch.dict('django.conf.settings.GRADES_DOWNLOAD', mock_grades_download)
self.grades_patch.start()
self.addCleanup(self.grades_patch.stop)
mock_fin_report = {'STORAGE_TYPE': 'localfs', 'BUCKET': 'test-financial-reports', 'ROOT_PATH': self.tmp_dir}
self.reports_patch = patch.dict('django.conf.settings.FINANCIAL_REPORTS', mock_fin_report)
self.reports_patch.start()
self.addCleanup(self.reports_patch.stop)
self.addCleanup(clean_up_tmpdir)
def verify_rows_in_csv(self, expected_rows, file_index=0, verify_order=True, ignore_other_columns=False): def verify_rows_in_csv(self, expected_rows, file_index=0, verify_order=True, ignore_other_columns=False):
""" """
......
""" """
Tests for instructor_task/models.py. Tests for instructor_task/models.py.
""" """
import copy
from cStringIO import StringIO from cStringIO import StringIO
import time import time
...@@ -16,21 +16,6 @@ from instructor_task.tests.test_base import TestReportMixin ...@@ -16,21 +16,6 @@ from instructor_task.tests.test_base import TestReportMixin
from opaque_keys.edx.locator import CourseLocator from opaque_keys.edx.locator import CourseLocator
LOCAL_SETTINGS = {
'STORAGE_KWARGS': {
'location': settings.GRADES_DOWNLOAD['ROOT_PATH'],
},
}
S3_SETTINGS = {
'STORAGE_CLASS': 'storages.backends.s3boto.S3BotoStorage',
'STORAGE_KWARGS': {
'bucket': settings.GRADES_DOWNLOAD['BUCKET'],
'location': settings.GRADES_DOWNLOAD['ROOT_PATH'],
},
}
class ReportStoreTestMixin(object): class ReportStoreTestMixin(object):
""" """
Mixin for report store tests. Mixin for report store tests.
...@@ -92,7 +77,6 @@ class S3ReportStoreTestCase(MockS3Mixin, ReportStoreTestMixin, TestReportMixin, ...@@ -92,7 +77,6 @@ class S3ReportStoreTestCase(MockS3Mixin, ReportStoreTestMixin, TestReportMixin,
return ReportStore.from_config(config_name='GRADES_DOWNLOAD') return ReportStore.from_config(config_name='GRADES_DOWNLOAD')
@override_settings(GRADES_DOWNLOAD=LOCAL_SETTINGS)
class DjangoStorageReportStoreLocalTestCase(ReportStoreTestMixin, TestReportMixin, SimpleTestCase): class DjangoStorageReportStoreLocalTestCase(ReportStoreTestMixin, TestReportMixin, SimpleTestCase):
""" """
Test the DjangoStorageReportStore implementation using the local Test the DjangoStorageReportStore implementation using the local
...@@ -103,10 +87,12 @@ class DjangoStorageReportStoreLocalTestCase(ReportStoreTestMixin, TestReportMixi ...@@ -103,10 +87,12 @@ class DjangoStorageReportStoreLocalTestCase(ReportStoreTestMixin, TestReportMixi
Create and return a DjangoStorageReportStore configured to use the Create and return a DjangoStorageReportStore configured to use the
local filesystem for storage. local filesystem for storage.
""" """
return ReportStore.from_config(config_name='GRADES_DOWNLOAD') test_settings = copy.deepcopy(settings.GRADES_DOWNLOAD)
test_settings['STORAGE_KWARGS'] = {'location': settings.GRADES_DOWNLOAD['ROOT_PATH']}
with override_settings(GRADES_DOWNLOAD=test_settings):
return ReportStore.from_config(config_name='GRADES_DOWNLOAD')
@override_settings(GRADES_DOWNLOAD=S3_SETTINGS)
class DjangoStorageReportStoreS3TestCase(MockS3Mixin, ReportStoreTestMixin, TestReportMixin, SimpleTestCase): class DjangoStorageReportStoreS3TestCase(MockS3Mixin, ReportStoreTestMixin, TestReportMixin, SimpleTestCase):
""" """
Test the DjangoStorageReportStore implementation using S3 stubs. Test the DjangoStorageReportStore implementation using S3 stubs.
...@@ -116,6 +102,13 @@ class DjangoStorageReportStoreS3TestCase(MockS3Mixin, ReportStoreTestMixin, Test ...@@ -116,6 +102,13 @@ class DjangoStorageReportStoreS3TestCase(MockS3Mixin, ReportStoreTestMixin, Test
Create and return a DjangoStorageReportStore configured to use S3 for Create and return a DjangoStorageReportStore configured to use S3 for
storage. storage.
""" """
connection = boto.connect_s3() test_settings = copy.deepcopy(settings.GRADES_DOWNLOAD)
connection.create_bucket(settings.GRADES_DOWNLOAD['STORAGE_KWARGS']['bucket']) test_settings['STORAGE_CLASS'] = 'storages.backends.s3boto.S3BotoStorage'
return ReportStore.from_config(config_name='GRADES_DOWNLOAD') test_settings['STORAGE_KWARGS'] = {
'bucket': settings.GRADES_DOWNLOAD['BUCKET'],
'location': settings.GRADES_DOWNLOAD['ROOT_PATH'],
}
with override_settings(GRADES_DOWNLOAD=test_settings):
connection = boto.connect_s3()
connection.create_bucket(settings.GRADES_DOWNLOAD['STORAGE_KWARGS']['bucket'])
return ReportStore.from_config(config_name='GRADES_DOWNLOAD')
...@@ -70,10 +70,6 @@ FEATURES['ENABLE_VERIFIED_CERTIFICATES'] = True ...@@ -70,10 +70,6 @@ FEATURES['ENABLE_VERIFIED_CERTIFICATES'] = True
FEATURES['ENABLE_GRADE_DOWNLOADS'] = True FEATURES['ENABLE_GRADE_DOWNLOADS'] = True
FEATURES['ALLOW_COURSE_STAFF_GRADE_DOWNLOADS'] = True FEATURES['ALLOW_COURSE_STAFF_GRADE_DOWNLOADS'] = True
GRADES_DOWNLOAD['ROOT_PATH'] += "-{}".format(os.getpid())
FINANCIAL_REPORTS['ROOT_PATH'] += "-{}".format(os.getpid())
# Toggles embargo on for testing # Toggles embargo on for testing
FEATURES['EMBARGO'] = True FEATURES['EMBARGO'] = True
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment