Make testing for orphaned file handles and temporary files optional.

Allows for running tests in parallel.
This commit is contained in:
Roberto Rosario
2017-02-17 18:50:36 -04:00
parent 0078600e62
commit e090628d72
2 changed files with 45 additions and 37 deletions

View File

@@ -5,6 +5,8 @@ import os
import psutil
from django.conf import settings
from ..settings import setting_temporary_directory
@@ -32,6 +34,34 @@ class ContentTypeCheckMixin(object):
self.client = CustomClient()
class OpenFileCheckMixin(object):
def _get_descriptor_count(self):
process = psutil.Process()
return process.num_fds()
def _get_open_files(self):
process = psutil.Process()
return process.open_files()
def setUp(self):
super(OpenFileCheckMixin, self).setUp()
if getattr(settings, 'COMMON_TEST_FILE_HANDLES', False):
self._open_files = self._get_open_files()
def tearDown(self):
if getattr(settings, 'COMMON_TEST_FILE_HANDLES', False) and not getattr(self, '_skip_file_descriptor_test', False):
for new_open_file in self._get_open_files():
self.assertFalse(
new_open_file not in self._open_files,
msg='File descriptor leak. The number of file descriptors '
'at the start and at the end of the test are not the same.'
)
self._skip_file_descriptor_test = False
super(OpenFileCheckMixin, self).tearDown()
class TempfileCheckMixin(object):
# Ignore the jvmstat instrumentation and GitLab's CI .config files
ignore_globs = ('hsperfdata_*', '.config', '.cache')
@@ -57,43 +87,18 @@ class TempfileCheckMixin(object):
def setUp(self):
super(TempfileCheckMixin, self).setUp()
self._temporary_items = self._get_temporary_entries()
if getattr(settings, 'COMMON_TEST_TEMP_FILES', False):
self._temporary_items = self._get_temporary_entries()
def tearDown(self):
final_temporary_items = self._get_temporary_entries()
self.assertEqual(
self._temporary_items, final_temporary_items,
msg='Orphan temporary file. The number of temporary files and/or '
'directories at the start and at the end of the test are not the '
'same. Orphan entries: {}'.format(
','.join(final_temporary_items - self._temporary_items)
)
)
super(TempfileCheckMixin, self).tearDown()
class OpenFileCheckMixin(object):
def _get_descriptor_count(self):
process = psutil.Process()
return process.num_fds()
def _get_open_files(self):
process = psutil.Process()
return process.open_files()
def setUp(self):
super(OpenFileCheckMixin, self).setUp()
self._open_files = self._get_open_files()
def tearDown(self):
if not getattr(self, '_skip_file_descriptor_test', False):
for new_open_file in self._get_open_files():
self.assertFalse(
new_open_file not in self._open_files,
msg='File descriptor leak. The number of file descriptors '
'at the start and at the end of the test are not the same.'
if getattr(settings, 'COMMON_TEST_TEMP_FILES', False):
final_temporary_items = self._get_temporary_entries()
self.assertEqual(
self._temporary_items, final_temporary_items,
msg='Orphan temporary file. The number of temporary files and/or '
'directories at the start and at the end of the test are not the '
'same. Orphan entries: {}'.format(
','.join(final_temporary_items - self._temporary_items)
)
self._skip_file_descriptor_test = False
super(OpenFileCheckMixin, self).tearDown()
)
super(TempfileCheckMixin, self).tearDown()