implement BORG_SELFTEST env variable, fixes #5871

on my laptop, this saved ~100ms cpu time (sys+user) per borg command invocation.
This commit is contained in:
Thomas Waldmann 2021-06-27 16:21:27 +02:00
parent 0af0a444b7
commit d6be97527c
3 changed files with 13 additions and 2 deletions

View file

@ -68,6 +68,14 @@ General:
When set to no (default: yes), system information (like OS, Python version, ...) in
exceptions is not shown.
Please only use for good reasons as it makes issues harder to analyze.
BORG_SELFTEST
This can be used to influence borg's builtin self-tests. The default is to execute the tests
at the beginning of each borg command invocation.
BORG_SELFTEST=disabled can be used to switch off the tests and rather save some time.
Disabling is not recommended for normal borg users, but large scale borg storage providers can
use this to optimize production servers after at least doing a one-time test borg (with
selftests not disabled) when installing or upgrading machines / OS / borg.
BORG_WORKAROUNDS
A list of comma separated strings that trigger workarounds in borg,
e.g. to work around bugs in other software.

View file

@ -12,8 +12,7 @@ To assert that self test discovery works correctly the number of tests is kept i
variable. SELFTEST_COUNT must be updated if new tests are added or removed to or from any of the tests
used here.
"""
import os
import sys
import time
from unittest import TestResult, TestSuite, defaultTestLoader
@ -56,6 +55,9 @@ class SelfTestResult(TestResult):
def selftest(logger):
if os.environ.get('BORG_SELFTEST') == 'disabled':
logger.debug("borg selftest disabled via BORG_SELFTEST env variable")
return
selftest_started = time.perf_counter()
result = SelfTestResult()
test_suite = TestSuite()

View file

@ -251,6 +251,7 @@ class ArchiverTestCaseBase(BaseTestCase):
os.environ['BORG_CHECK_I_KNOW_WHAT_I_AM_DOING'] = 'YES'
os.environ['BORG_DELETE_I_KNOW_WHAT_I_AM_DOING'] = 'YES'
os.environ['BORG_PASSPHRASE'] = 'waytooeasyonlyfortests'
os.environ['BORG_SELFTEST'] = 'disabled'
self.archiver = not self.FORK_DEFAULT and Archiver() or None
self.tmpdir = tempfile.mkdtemp()
self.repository_path = os.path.join(self.tmpdir, 'repository')