[1.6.x] Fixed #21122 -- Improved clean up of test temp directory on Windows
- Fixed test that didn't close the files it opened
- Caught and handled exception when temp directory cannot be removed
Backport of 978e1351a6
of master
This commit is contained in:
parent
06b149e220
commit
02c7dbd255
|
@ -175,3 +175,6 @@ class FileMoveSafeTests(unittest.TestCase):
|
||||||
|
|
||||||
# should allow it and continue on if allow_overwrite is True
|
# should allow it and continue on if allow_overwrite is True
|
||||||
self.assertIsNone(file_move_safe(self.file_a, self.file_b, allow_overwrite=True))
|
self.assertIsNone(file_move_safe(self.file_a, self.file_b, allow_overwrite=True))
|
||||||
|
|
||||||
|
os.close(handle_a)
|
||||||
|
os.close(handle_b)
|
||||||
|
|
|
@ -146,8 +146,8 @@ def setup(verbosity, test_labels):
|
||||||
module_found_in_labels = True
|
module_found_in_labels = True
|
||||||
else:
|
else:
|
||||||
match = lambda label: (
|
match = lambda label: (
|
||||||
module_label == label or # exact match
|
module_label == label or # exact match
|
||||||
module_label.startswith(label + '.') # ancestor match
|
module_label.startswith(label + '.') # ancestor match
|
||||||
)
|
)
|
||||||
|
|
||||||
module_found_in_labels = any(match(l) for l in test_labels_set)
|
module_found_in_labels = any(match(l) for l in test_labels_set)
|
||||||
|
@ -162,17 +162,24 @@ def setup(verbosity, test_labels):
|
||||||
|
|
||||||
return state
|
return state
|
||||||
|
|
||||||
|
|
||||||
def teardown(state):
|
def teardown(state):
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
# Removing the temporary TEMP_DIR. Ensure we pass in unicode
|
|
||||||
# so that it will successfully remove temp trees containing
|
try:
|
||||||
# non-ASCII filenames on Windows. (We're assuming the temp dir
|
# Removing the temporary TEMP_DIR. Ensure we pass in unicode
|
||||||
# name itself does not contain non-ASCII characters.)
|
# so that it will successfully remove temp trees containing
|
||||||
shutil.rmtree(six.text_type(TEMP_DIR))
|
# non-ASCII filenames on Windows. (We're assuming the temp dir
|
||||||
|
# name itself does not contain non-ASCII characters.)
|
||||||
|
shutil.rmtree(six.text_type(TEMP_DIR))
|
||||||
|
except OSError:
|
||||||
|
print('Failed to remove temp directory: %s' % TEMP_DIR)
|
||||||
|
|
||||||
# Restore the old settings.
|
# Restore the old settings.
|
||||||
for key, value in state.items():
|
for key, value in state.items():
|
||||||
setattr(settings, key, value)
|
setattr(settings, key, value)
|
||||||
|
|
||||||
|
|
||||||
def django_tests(verbosity, interactive, failfast, test_labels):
|
def django_tests(verbosity, interactive, failfast, test_labels):
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
state = setup(verbosity, test_labels)
|
state = setup(verbosity, test_labels)
|
||||||
|
@ -253,6 +260,7 @@ def bisect_tests(bisection_label, options, test_labels):
|
||||||
print("***** Source of error: %s" % test_labels[0])
|
print("***** Source of error: %s" % test_labels[0])
|
||||||
teardown(state)
|
teardown(state)
|
||||||
|
|
||||||
|
|
||||||
def paired_tests(paired_test, options, test_labels):
|
def paired_tests(paired_test, options, test_labels):
|
||||||
state = setup(int(options.verbosity), test_labels)
|
state = setup(int(options.verbosity), test_labels)
|
||||||
|
|
||||||
|
@ -288,6 +296,7 @@ def paired_tests(paired_test, options, test_labels):
|
||||||
print('***** No problem pair found')
|
print('***** No problem pair found')
|
||||||
teardown(state)
|
teardown(state)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
from optparse import OptionParser
|
from optparse import OptionParser
|
||||||
usage = "%prog [options] [module module module ...]"
|
usage = "%prog [options] [module module module ...]"
|
||||||
|
|
Loading…
Reference in New Issue