test_python_comscripts.py
4.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
#! /usr/bin/env python
# ==========================================================================
# This scripts performs unit tests for comscripts
#
# Copyright (C) 2021-2022 Juergen Knoedlseder
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
# ==========================================================================
import os
import sys
import gammalib
import comscripts
sys.path.append(os.path.dirname(os.path.abspath(__file__)))
import test_comgendb
import test_comobsselect
import test_comobsbin
import test_comobsback
import test_comobsmodel
import test_comobsadd
import test_comobsres
import test_comobssim
import test_comlixfit
import test_comlixmap
import test_comsrcdetect
# ================== #
# Perform unit tests #
# ================== #
def test(installed=False, debug=False):
"""
Perform comscripts unit testing.
Parameters
----------
installed : bool, optional
Flag indicating whether the script has been installed or not
debug : bool, optional
Enables debugging
"""
# If we have an installed version then create a temporary directory and
# copy over all information that is needed
if installed:
# Create temporary working directory
import tempfile
path = tempfile.mkdtemp()
os.chdir(path)
# Get test directory
import inspect
testdir = inspect.getfile(comscripts.tests)
dirname = os.path.dirname(testdir)
# Copy test data in "data" directory
os.system('cp -r %s %s' % (dirname + '/data', 'data'))
# Set 'TEST_DATA' and 'COMDATA' environment variable
os.environ['TEST_DATA'] = 'data'
os.environ['COMDATA'] = '%s/data/comptel/data' % (path)
# ... otherwise set the calibration database to the installed GammaLib
# version and use the data in the test directory; we don't need to set
# the 'TEST_DATA' environment variable as this is done by the test
# environment
else:
os.environ['CALDB'] = '%s/share/caldb' % (os.environ['GAMMALIB'])
os.environ['COMDATA'] = '%s/test/data/comptel/data' % (os.environ['TEST_SRCDIR'])
# Create a local "pfiles" directory and set PFILES environment variable
try:
os.mkdir('pfiles')
except:
pass
os.environ['PFILES'] = 'pfiles'
# Copy the comscripts parameter files into the "pfiles" directory. For a
# non-installed test we copy the parameter files from the "comscripts"
# source directory into the "pfiles" directory, for an installed version
# we get all parameter files from the "syspfiles" directory. Also make
# sure that all parameter files are writable.
if not installed:
os.system('cp -r %s/modules/comscripts/*.par pfiles/' % (os.environ['TEST_SRCDIR']))
os.system('chmod u+w pfiles/*')
else:
os.system('cp -r %s/syspfiles/*.par pfiles/' % (os.environ['CTOOLS']))
os.system('chmod u+w pfiles/*')
# Define list of test suites
tests = [test_comgendb.Test(),
test_comobsselect.Test(),
test_comobsbin.Test(),
test_comobsback.Test(),
test_comobsmodel.Test(),
test_comobsadd.Test(),
test_comobsres.Test(),
test_comobssim.Test(),
test_comlixfit.Test(),
test_comlixmap.Test(),
test_comsrcdetect.Test()]
# Allocate test suite container
suites = gammalib.GTestSuites('comscripts unit testing')
# Set test suites and append them to suite container
for suite in tests:
suite.set()
suites.append(suite)
# Run test suite
success = suites.run()
# Save test results
if not installed:
suites.save('reports/comscripts.xml')
else:
suites.save('comscripts_reports.xml')
# If debuging is requested then print test suites
if debug:
print(suites)
# Remove temporary direction
if installed:
os.system('rm -rf %s' % (path))
# Raise an exception in case of failure
if not success:
raise RuntimeError('At least one error occured during the test.')
# Return
return
# ======================== #
# Main routine entry point #
# ======================== #
if __name__ == '__main__':
# Run tests
test()