Commit a3e46f279f0164004c0471970e4db7d4d978d31a

Authored by Jürgen Knödlseder
1 parent 72cdceaa

Add csiactdata script unit test.

cscripts/Makefile.am
... ... @@ -30,7 +30,8 @@ testscripts = tests/__init__.py \
30 30 ../test/test_csobs2caldb.py \
31 31 ../test/test_cslightcrv.py \
32 32 ../test/test_csfindobs.py \
33   - ../test/test_csiactcopy.py
  33 + ../test/test_csiactcopy.py \
  34 + ../test/test_csiactdata.py
34 35  
35 36 # Test data to be distributed in $(pyexecdir)/cscripts/tests/data
36 37 testdata = ../test/data/crab.xml \
... ...
cscripts/cscaldb.py
... ... @@ -59,6 +59,11 @@ class cscaldb(ctools.cscript):
59 59 """
60 60 Get parameters from parfile.
61 61 """
  62 + # Write input parameters into logger
  63 + if self._logTerse():
  64 + self._log_parameters()
  65 + self._log("\n")
  66 +
62 67 # Return
63 68 return
64 69  
... ... @@ -160,11 +165,6 @@ class cscaldb(ctools.cscript):
160 165 # Get parameters
161 166 self._get_parameters()
162 167  
163   - # Write input parameters into logger
164   - if self._logTerse():
165   - self._log_parameters()
166   - self._log("\n")
167   -
168 168 # Get the calibration database
169 169 caldb = gammalib.GCaldb()
170 170  
... ...
cscripts/csfindobs.py
... ... @@ -151,6 +151,11 @@ class csfindobs(ctools.cscript):
151 151 'file or run csiactdata to get a list of '+
152 152 'available storage names.')
153 153  
  154 + # Write input parameters into logger
  155 + if self._logTerse():
  156 + self._log_parameters()
  157 + self._log("\n")
  158 +
154 159 # Return
155 160 return
156 161  
... ... @@ -166,12 +171,7 @@ class csfindobs(ctools.cscript):
166 171  
167 172 # Get parameters
168 173 self._get_parameters()
169   -
170   - # Write input parameters into logger
171   - if self._logTerse():
172   - self._log_parameters()
173   - self._log("\n")
174   -
  174 +
175 175 # Initialise run list
176 176 self._runs = []
177 177  
... ...
cscripts/csiactdata.py
... ... @@ -60,7 +60,7 @@ class csiactdata(ctools.cscript):
60 60  
61 61  
62 62 # Private methods
63   - def get_parameters(self):
  63 + def _get_parameters(self):
64 64 """
65 65 Get parameters from parfile and setup the observation.
66 66 """
... ... @@ -82,33 +82,64 @@ class csiactdata(ctools.cscript):
82 82 '" not found. Use hidden parameter '+
83 83 '"master_indx" to specifiy a different '+
84 84 'filename.')
  85 +
  86 + # Write input parameters into logger
  87 + if self._logTerse():
  88 + self._log_parameters()
  89 + self._log("\n")
85 90  
86 91 # Return
87 92 return
88 93  
  94 + # Log configuration
  95 + def _log_configuration(self, config):
  96 + """
  97 + Log configuration.
  98 + """
  99 + # Log information
  100 + if self._logTerse():
  101 + self._log.header3(str(config["name"]))
  102 + self._log.parformat("Name")
  103 + self._log(str(config["name"]))
  104 + self._log("\n")
  105 + self._log.parformat("Observation index")
  106 + self._log(str(config["obsindx"]))
  107 + self._log("\n")
  108 + self._log.parformat("HDU index")
  109 + self._log(str(config["hduindx"]))
  110 + self._log("\n")
  111 +
  112 + # Print additional information
  113 + for key in config:
  114 + if key in ["name","hduindx","obsindx"]:
  115 + continue
  116 + self._log.parformat(str(key))
  117 + self._log(str(config[key]))
  118 + self._log("\n")
  119 +
  120 + # Return
  121 + return
  122 +
  123 +
89 124 # Public methods
90 125 def run(self):
91 126 """
92 127 Run the script.
93 128 """
94   - # Switch screen logging on
95   - self._log.cout(True)
  129 + # Switch screen logging on in debug mode
  130 + if self._logDebug():
  131 + self._log.cout(True)
96 132  
97 133 # Get parameters
98 134 self._get_parameters()
99 135  
100   - # Write input parameters into logger
  136 + # Write header into logger
101 137 if self._logTerse():
102   - self._log_parameters()
103 138 self._log("\n")
104   -
105   - self._log("\n")
106   - self._log.header1("Data storage entries")
107   - self._log("\n")
108   - self._log.parformat("Master index file")
109   - self._log(self._master_file)
110   - self._log("\n")
111   - self._log("\n")
  139 + self._log.header1("Data storage entries")
  140 + self._log.parformat("Master index file")
  141 + self._log(self._master_file)
  142 + self._log("\n")
112 143  
113 144 # Open and load JSON file
114 145 json_data = open(self._master_file).read()
... ... @@ -117,24 +148,8 @@ class csiactdata(ctools.cscript):
117 148  
118 149 # Initialise array for available names
119 150 self._prodnames = []
120   -
121   - # Loop over configs and display unavailable storage first
122   - for config in configs:
123   -
124   - # Create hdu and obs index files
125   - hdu = os.path.join(self._datapath, config["hduindx"])
126   - obs = os.path.join(self._datapath, config["obsindx"])
127   -
128   - filename_hdu = gammalib.GFilename(str(hdu)+"[HDU_INDEX]")
129   - filename_obs = gammalib.GFilename(str(obs)+"[OBS_INDEX]")
130   -
131   - # Check if index files are available
132   - if not (filename_hdu.is_fits() and filename_obs.is_fits()):
133   - self._log.parformat(str(config["name"]))
134   - self._log("Not available")
135   - self._log("\n")
136   -
137   -
  151 +
  152 + # Write header into logger
138 153 self._log("\n")
139 154 self._log.header2("Available data configs")
140 155  
... ... @@ -142,40 +157,26 @@ class csiactdata(ctools.cscript):
142 157 for config in configs:
143 158  
144 159 # Create hdu and obs index files
145   - hdu = os.path.join(self._datapath, config["hduindx"])
146   - obs = os.path.join(self._datapath, config["obsindx"])
147   -
  160 + hdu = os.path.join(self._datapath, config["hduindx"])
  161 + obs = os.path.join(self._datapath, config["obsindx"])
148 162 filename_hdu = gammalib.GFilename(str(hdu)+"[HDU_INDEX]")
149 163 filename_obs = gammalib.GFilename(str(obs)+"[OBS_INDEX]")
150 164  
151   - # Check if index files are available
  165 + # If index files are available then log configuration
  166 + # information ...
152 167 if (filename_hdu.is_fits() and filename_obs.is_fits()):
153   -
154   - # Log data information
155   - self._log("\n")
156   - self._log.header3(str(config["name"]))
157   -
158   - # Print important informations first
159   - self._log.parformat("Name")
160   - self._log(str(config["name"]))
161   - self._log("\n")
162   - self._log.parformat("Observation index")
163   - self._log(str(config["obsindx"]))
164   - self._log("\n")
165   - self._log.parformat("HDU index")
166   - self._log(str(config["hduindx"]))
167   - self._log("\n")
168   -
  168 +
169 169 # Append to available names
170 170 self._prodnames.append(str(config["name"]))
171 171  
172   - # Print additional information
173   - for key in config:
174   - if key in ["name","hduindx","obsindx"]:
175   - continue
176   - self._log.parformat(str(key))
177   - self._log(str(config[key]))
178   - self._log("\n")
  172 + # Log information
  173 + self._log_configuration(config)
  174 +
  175 + # ... otherwise log that the configuration is not available
  176 + else:
  177 + if self._logTerse():
  178 + self._log.header3(str(config["name"]))
  179 + self._log(" Not available\n")
179 180  
180 181 # Return
181 182 return
... ... @@ -193,10 +194,12 @@ class csiactdata(ctools.cscript):
193 194 # Return
194 195 return
195 196  
196   -
197 197 def names(self):
198 198 """
199 199 Return available FITS production names
  200 +
  201 + Returns:
  202 + List of available FITS production names.
200 203 """
201 204  
202 205 # Return
... ...
test/test_csiactdata.py 0 → 100755
  1 +#! /usr/bin/env python
  2 +# ==========================================================================
  3 +# This scripts performs unit tests for the csiactdata script.
  4 +#
  5 +# Copyright (C) 2016 Juergen Knoedlseder
  6 +#
  7 +# This program is free software: you can redistribute it and/or modify
  8 +# it under the terms of the GNU General Public License as published by
  9 +# the Free Software Foundation, either version 3 of the License, or
  10 +# (at your option) any later version.
  11 +#
  12 +# This program is distributed in the hope that it will be useful,
  13 +# but WITHOUT ANY WARRANTY; without even the implied warranty of
  14 +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  15 +# GNU General Public License for more details.
  16 +#
  17 +# You should have received a copy of the GNU General Public License
  18 +# along with this program. If not, see <http://www.gnu.org/licenses/>.
  19 +#
  20 +# ==========================================================================
  21 +import os
  22 +import gammalib
  23 +import cscripts
  24 +
  25 +
  26 +# ================================ #
  27 +# Test class for csiactdata script #
  28 +# ================================ #
  29 +class Test(gammalib.GPythonTestSuite):
  30 + """
  31 + Test class for csiactdata script.
  32 +
  33 + This test class makes unit tests for the csiactdata script by using it
  34 + from the command line and from Python.
  35 + """
  36 +
  37 + # Constructor
  38 + def __init__(self):
  39 + """
  40 + Constructor.
  41 + """
  42 + # Call base class constructor
  43 + gammalib.GPythonTestSuite.__init__(self)
  44 +
  45 + # Return
  46 + return
  47 +
  48 + # Set test functions
  49 + def set(self):
  50 + """
  51 + Set all test functions.
  52 + """
  53 + # Set test name
  54 + self.name("csiactdata")
  55 +
  56 + # Append tests
  57 + self.append(self._test_cmd, "Test csiactdata on command line")
  58 + self.append(self._test_python, "Test csiactdata from Python")
  59 +
  60 + # Return
  61 + return
  62 +
  63 + # Test csiactdata on command line
  64 + def _test_cmd(self):
  65 + """
  66 + Test csiactdata on the command line.
  67 + """
  68 + # Kluge to set the command (installed version has no README file)
  69 + if os.path.isfile("README"):
  70 + csiactdata = "../cscripts/csiactdata.py"
  71 + else:
  72 + csiactdata = "csiactdata"
  73 +
  74 + # Setup csiactdata command
  75 + cmd = csiactdata+' datapath="iactdata"'+ \
  76 + ' logfile="csiactdata_cmd1.log" chatter=1'
  77 +
  78 + # Execute csiactdata, make sure we catch any exception
  79 + try:
  80 + rc = os.system(cmd+" >/dev/null 2>&1")
  81 + except:
  82 + pass
  83 +
  84 + # Check if execution was successful
  85 + self.test_assert(rc == 0,
  86 + "Successful csiactdata execution on command line")
  87 +
  88 + # Setup csiactdata command
  89 + cmd = csiactdata+' datapath="data_path_that_does_not_exist"'+ \
  90 + ' logfile="csiactdata_cmd2.log"'
  91 +
  92 + # Execute csiactdata, make sure we catch any exception
  93 + try:
  94 + rc = os.system(cmd+" >/dev/null 2>&1")
  95 + except:
  96 + pass
  97 +
  98 + # Check if execution failed
  99 + self.test_assert(rc != 0,
  100 + "Failure of csiactdata execution on command line")
  101 +
  102 + # Return
  103 + return
  104 +
  105 + # Test csiactdata from Python
  106 + def _test_python(self):
  107 + """
  108 + Test csiactdata from Python.
  109 + """
  110 + # Set-up csiactdata
  111 + iactdata = cscripts.csiactdata()
  112 + iactdata["datapath"] = "iactdata"
  113 + iactdata["logfile"] = "csiactdata_py1.log"
  114 + iactdata["chatter"] = 2
  115 +
  116 + # Run csiactdata script and save run list
  117 + iactdata.logFileOpen() # Make sure we get a log file
  118 + iactdata.run()
  119 +
  120 + # Return
  121 + return
... ...
test/test_python_cscripts.py
... ... @@ -28,6 +28,7 @@ import test_csobs2caldb
28 28 import test_cslightcrv
29 29 import test_csfindobs
30 30 import test_csiactcopy
  31 +import test_csiactdata
31 32  
32 33  
33 34 # ================== #
... ... @@ -98,14 +99,17 @@ def test(installed=False, debug=False):
98 99 # Allocate test suites
99 100 suite_csfindobs = test_csfindobs.Test()
100 101 suite_csiactcopy = test_csiactcopy.Test()
  102 + suite_csiactdata = test_csiactdata.Test()
101 103  
102 104 # Setup unit tests
103 105 suite_csfindobs.set()
104 106 suite_csiactcopy.set()
  107 + suite_csiactdata.set()
105 108  
106 109 # Append tests to container
107 110 suites.append(suite_csfindobs)
108 111 suites.append(suite_csiactcopy)
  112 + suites.append(suite_csiactdata)
109 113  
110 114 # Run test suite
111 115 success = suites.run()
... ...