import unittest
import logging
import os
import sys
import argparse
from toolbox_scs.util.data_access import (
find_run_dir,
)
from toolbox_scs.util.exceptions import ToolBoxPathError
[docs]suites = {"ed-extensions": (
"test_rundir1",
"test_rundir2",
"test_rundir3",
)
}
[docs]def list_suites():
print("""\nPossible test suites:\n-------------------------""")
for key in suites:
print(key)
print("-------------------------\n")
[docs]class TestDataAccess(unittest.TestCase):
@classmethod
[docs] def setUpClass(cls):
pass
@classmethod
[docs] def tearDownClass(cls):
pass
[docs] def tearDown(self):
pass
[docs] def test_rundir1(self):
Proposal = 2212
Run = 235
Dir = find_run_dir(Proposal, Run)
self.assertEqual(Dir,
"/gpfs/exfel/exp/SCS/201901/p002212/raw/r0235")
[docs] def test_rundir2(self):
Proposal = 23678
Run = 235
with self.assertRaises(Exception) as cm:
find_run_dir(Proposal, Run)
exp = cm.exception
self.assertEqual(str(exp), "Couldn't find proposal dir for 'p023678'")
[docs] def test_rundir3(self):
Proposal = 2212
Run = 800
with self.assertRaises(ToolBoxPathError) as cm:
find_run_dir(Proposal, Run)
exp_msg = cm.exception.message
print(exp_msg)
path = f'/gpfs/exfel/exp/SCS/201901/p00{Proposal}/raw/r0{Run}'
err_msg = f"Invalid path: {path}. " \
"The constructed path does not exist."
self.assertEqual(exp_msg, err_msg)
[docs]def suite(*tests):
suite = unittest.TestSuite()
for test in tests:
suite.addTest(TestDataAccess(test))
return suite
[docs]def main(*cliargs):
logging.basicConfig(level=logging.DEBUG)
log_root = logging.getLogger(__name__)
try:
for test_suite in cliargs:
if test_suite in suites:
runner = unittest.TextTestRunner(verbosity=2)
runner.run(suite(*suites[test_suite]))
else:
log_root.warning(
"Unknown suite: '{}'".format(test_suite))
pass
except Exception as err:
log_root.error("Unecpected error: {}".format(err),
exc_info=True)
pass
if __name__ == '__main__':
[docs] parser = argparse.ArgumentParser()
parser.add_argument('--list-suites',
action='store_true',
help='list possible test suites')
parser.add_argument('--run-suites', metavar='S',
nargs='+', action='store',
help='a list of valid test suites')
args = parser.parse_args()
if args.list_suites:
list_suites()
if args.run_suites:
main(*args.run_suites)