From 87f0705cf0e4c1d4a55244ce3b79ab0f2b012f90 Mon Sep 17 00:00:00 2001 From: Jürgen Knödlseder Date: Wed, 23 Mar 2016 13:59:25 +0100 Subject: [PATCH] Add csmodelmerge script unit test. --- cscripts/Makefile.am | 6 +++++- test/data/models.txt | 2 ++ test/test_csmodelinfo.py | 2 +- test/test_csmodelmerge.py | 185 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ test/test_python_cscripts.py | 12 ++++++++---- 5 files changed, 201 insertions(+), 6 deletions(-) create mode 100644 test/data/models.txt create mode 100755 test/test_csmodelmerge.py diff --git a/cscripts/Makefile.am b/cscripts/Makefile.am index 1f83612..d2dd60f 100644 --- a/cscripts/Makefile.am +++ b/cscripts/Makefile.am @@ -30,6 +30,7 @@ testscripts = tests/__init__.py \ ../test/test_csobs2caldb.py \ ../test/test_cslightcrv.py \ ../test/test_csmodelinfo.py \ + ../test/test_csmodelmerge.py \ ../test/test_csfindobs.py \ ../test/test_csiactcopy.py \ ../test/test_csiactdata.py \ @@ -40,7 +41,10 @@ testdata = ../test/data/crab.xml \ ../test/data/obs_unbinned.xml \ ../test/data/crab_events.fits.gz \ ../test/data/crab_cntmap.fits.gz \ - ../test/data/exclusion.reg + ../test/data/exclusion.reg \ + ../test/data/models.txt \ + ../test/data/model_cube_background.xml \ + ../test/data/model_cube_background2.xml # Test data to be distributed in $(pyexecdir)/cscripts/tests/iactdata testiactdata = ../test/iactdata/hdu-index.fits.gz \ diff --git a/test/data/models.txt b/test/data/models.txt new file mode 100644 index 0000000..0561063 --- /dev/null +++ b/test/data/models.txt @@ -0,0 +1,2 @@ +data/model_cube_background.xml +data/model_cube_background2.xml diff --git a/test/test_csmodelinfo.py b/test/test_csmodelinfo.py index 295e80f..e92f935 100755 --- a/test/test_csmodelinfo.py +++ b/test/test_csmodelinfo.py @@ -122,7 +122,7 @@ class Test(gammalib.GPythonTestSuite): modelinfo["logfile"] = "csmodelinfo_py1.log" modelinfo["chatter"] = 2 - # Run csmodelinfo script and save light curve + # Run csmodelinfo script and save DS9 file modelinfo.logFileOpen() # Make sure we get a log file modelinfo.run() modelinfo.save() diff --git a/test/test_csmodelmerge.py b/test/test_csmodelmerge.py new file mode 100755 index 0000000..c99b5a6 --- /dev/null +++ b/test/test_csmodelmerge.py @@ -0,0 +1,185 @@ +#! /usr/bin/env python +# ========================================================================== +# This scripts performs unit tests for the csmodelmerge script. +# +# Copyright (C) 2016 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 . +# +# ========================================================================== +import os +import gammalib +import cscripts + + +# ================================== # +# Test class for csmodelmerge script # +# ================================== # +class Test(gammalib.GPythonTestSuite): + """ + Test class for csmodelmerge script. + + This test class makes unit tests for the csmodelmerge script by using it + from the command line and from Python. + """ + + # Constructor + def __init__(self): + """ + Constructor. + """ + # Call base class constructor + gammalib.GPythonTestSuite.__init__(self) + + # Return + return + + # Set test functions + def set(self): + """ + Set all test functions. + """ + # Set test name + self.name("csmodelmerge") + + # Append tests + self.append(self._test_cmd, "Test csmodelmerge on command line") + self.append(self._test_python, "Test csmodelmerge from Python") + + # Return + return + + # Test csmodelmerge on command line + def _test_cmd(self): + """ + Test csmodelmerge on the command line. + """ + # Kluge to set the command (installed version has no README file) + if os.path.isfile("README"): + csmodelmerge = "../cscripts/csmodelmerge.py" + else: + csmodelmerge = "csmodelmerge" + + # Setup csmodelmerge command + cmd = csmodelmerge+' inmodels="data/crab.xml data/model_cube_background.xml"'+ \ + ' outmodel="mergedmodel_cmd1.xml"'+ \ + ' logfile="csmodelmerge_cmd1.log" chatter=1' + + # Execute csmodelmerge, make sure we catch any exception + try: + rc = os.system(cmd+" >/dev/null 2>&1") + except: + pass + + # Check if execution was successful + self.test_assert(rc == 0, + "Successful csmodelmerge execution on command line") + + # Check model file + self._check_model_file("mergedmodel_cmd1.xml", 3) + + # Setup csmodelmerge command + cmd = csmodelmerge+' inmodels="model_that_does_not_exist.xml"'+ \ + ' outmodel="mergedmodel_cmd2.xml"'+ \ + ' logfile="csmodelmerge_cmd2.log"' + + # Execute csmodelmerge, make sure we catch any exception + try: + rc = os.system(cmd+" >/dev/null 2>&1") + except: + pass + + # Check if execution failed + self.test_assert(rc != 0, + "Failure of csmodelmerge execution on command line") + + # Return + return + + # Test csmodelmerge from Python + def _test_python(self): + """ + Test csmodelmerge from Python. + """ + # Set-up csmodelmerge for space-separated input + modelmerge = cscripts.csmodelmerge() + modelmerge["inmodels"] = "data/crab.xml data/model_cube_background.xml" + modelmerge["outmodel"] = "mergedmodel_py1.xml" + modelmerge["logfile"] = "csmodelmerge_py1.log" + modelmerge["chatter"] = 2 + + # Run csmodelmerge script and save models + modelmerge.logFileOpen() # Make sure we get a log file + modelmerge.run() + modelmerge.save() + + # Check model file + self._check_model_file("mergedmodel_py1.xml", 3) + + # Set-up csmodelmerge for semi-colon separated input + modelmerge = cscripts.csmodelmerge() + modelmerge["inmodels"] = "data/crab.xml;data/model_cube_background.xml" + modelmerge["outmodel"] = "mergedmodel_py2.xml" + modelmerge["logfile"] = "csmodelmerge_py2.log" + modelmerge["chatter"] = 3 + + # Execute csmodelmerge script + modelmerge.execute() + + # Check model file + self._check_model_file("mergedmodel_py2.xml", 3) + + # Set-up csmodelmerge for wildcard input + modelmerge = cscripts.csmodelmerge() + modelmerge["inmodels"] = "data/model_cube_background*.xml" + modelmerge["outmodel"] = "mergedmodel_py3.xml" + modelmerge["logfile"] = "csmodelmerge_py3.log" + modelmerge["chatter"] = 4 + + # Execute csmodelmerge script + modelmerge.execute() + + # Check model file + self._check_model_file("mergedmodel_py3.xml", 2) + + # Set-up csmodelmerge for ASCII file + modelmerge = cscripts.csmodelmerge() + modelmerge["inmodels"] = "@data/models.txt" + modelmerge["outmodel"] = "mergedmodel_py4.xml" + modelmerge["logfile"] = "csmodelmerge_py4.log" + modelmerge["chatter"] = 4 + + # Execute csmodelmerge script + modelmerge.execute() + + # Check model file + self._check_model_file("mergedmodel_py4.xml", 2) + + # Return + return + + # Check model file + def _check_model_file(self, filename, number): + """ + Check model file. + """ + # Open models + models = gammalib.GModels(filename) + + # Check number of models + self.test_value(models.size(), number, + 'Check for '+str(number)+' models in XML file') + + # Return + return diff --git a/test/test_python_cscripts.py b/test/test_python_cscripts.py index 85c7fdf..e70b537 100755 --- a/test/test_python_cscripts.py +++ b/test/test_python_cscripts.py @@ -27,6 +27,7 @@ import test_cscaldb import test_csobs2caldb import test_cslightcrv import test_csmodelinfo +import test_csmodelmerge import test_csfindobs import test_csiactcopy import test_csiactdata @@ -79,22 +80,25 @@ def test(installed=False, debug=False): suites = gammalib.GTestSuites("cscripts unit testing") # Allocate test suites - suite_cscaldb = test_cscaldb.Test() - suite_csobs2caldb = test_csobs2caldb.Test() - suite_cslightcrv = test_cslightcrv.Test() - suite_csmodelinfo = test_csmodelinfo.Test() + suite_cscaldb = test_cscaldb.Test() + suite_csobs2caldb = test_csobs2caldb.Test() + suite_cslightcrv = test_cslightcrv.Test() + suite_csmodelinfo = test_csmodelinfo.Test() + suite_csmodelmerge = test_csmodelmerge.Test() # Setup unit tests suite_cscaldb.set() suite_csobs2caldb.set() suite_cslightcrv.set() suite_csmodelinfo.set() + suite_csmodelmerge.set() # Append tests to container suites.append(suite_cscaldb) suites.append(suite_csobs2caldb) suites.append(suite_cslightcrv) suites.append(suite_csmodelinfo) + suites.append(suite_csmodelmerge) # Append tests for Python 2.6+ (the IACT cscripts depend on the json # module which is only available since Python 2.6+ -- libgit2 0.21.4