[python-cpl] 01/04: Update to new test release 0.6
Ole Streicher
olebole-guest at alioth.debian.org
Sun Nov 3 19:47:18 UTC 2013
This is an automated email from the git hooks/post-receive script.
olebole-guest pushed a commit to branch debian
in repository python-cpl.
commit 02163ca37a6d880fc32a006d1cbcae43ab1068e8
Author: Ole Streicher <debian at liska.ath.cx>
Date: Sun Nov 3 19:55:14 2013 +0100
Update to new test release 0.6
---
test/TestRecipe.py | 200 +++++++++++++++++++++++++++---------
test/iiinstrumentp/recipes/rtest.c | 33 ++++++
2 files changed, 183 insertions(+), 50 deletions(-)
diff --git a/test/TestRecipe.py b/test/TestRecipe.py
index ef3a62a..6ecbcad 100644
--- a/test/TestRecipe.py
+++ b/test/TestRecipe.py
@@ -5,8 +5,12 @@ import tempfile
import unittest
import numpy
-import pyfits
+try:
+ from astropy.io import fits
+except:
+ import pyfits as fits
import cpl
+cpl.Recipe.memory_mode = 0
recipe_name = 'rtest'
raw_tag = 'RRRECIPE_DOCATG_RAW'
@@ -23,8 +27,8 @@ class RecipeTestCase(CplTestCase):
self.recipe.temp_dir = self.temp_dir
self.recipe.tag = raw_tag
self.image_size = (16, 16)
- self.raw_frame = pyfits.HDUList([
- pyfits.PrimaryHDU(numpy.random.random_integers(0, 65000,
+ self.raw_frame = fits.HDUList([
+ fits.PrimaryHDU(numpy.random.random_integers(0, 65000,
self.image_size))])
self.raw_frame[0].header.update('HIERARCH ESO DET DIT', 0.0)
self.raw_frame[0].header.update('HIERARCH ESO PRO CATG', raw_tag)
@@ -273,9 +277,9 @@ class RecipeCalib(RecipeTestCase):
class RecipeExec(RecipeTestCase):
def setUp(self):
RecipeTestCase.setUp(self)
- self.flat_frame = pyfits.HDUList([
- pyfits.PrimaryHDU(numpy.random.random_integers(0, 65000,
- self.image_size))])
+ self.flat_frame = fits.HDUList([
+ fits.PrimaryHDU(numpy.random.random_integers(0, 65000,
+ self.image_size))])
def test_frames_keyword_dict(self):
'''Raw and calibration frames specified as keyword dict'''
@@ -283,10 +287,13 @@ class RecipeExec(RecipeTestCase):
res = self.recipe(raw = {'RRRECIPE_DOCATG_RAW': self.raw_frame },
calib = { 'FLAT':self.flat_frame })
self.assertTrue(isinstance(res, cpl.Result))
- self.assertTrue(isinstance(res.THE_PRO_CATG_VALUE, pyfits.HDUList))
+ self.assertTrue(isinstance(res.THE_PRO_CATG_VALUE, fits.HDUList))
self.assertTrue(abs(self.raw_frame[0].data
- res.THE_PRO_CATG_VALUE[0].data).max() == 0)
- res.THE_PRO_CATG_VALUE.close()
+ try:
+ res.THE_PRO_CATG_VALUE.close()
+ except:
+ pass
def test_frames_keyword_calib(self):
'''Raw frame specified as keyword, calibration frame set in recipe'''
@@ -294,8 +301,11 @@ class RecipeExec(RecipeTestCase):
self.recipe.calib.FLAT = self.flat_frame
res = self.recipe({'RRRECIPE_DOCATG_RAW':self.raw_frame})
self.assertTrue(isinstance(res, cpl.Result))
- self.assertTrue(isinstance(res.THE_PRO_CATG_VALUE, pyfits.HDUList))
- res.THE_PRO_CATG_VALUE.close()
+ self.assertTrue(isinstance(res.THE_PRO_CATG_VALUE, fits.HDUList))
+ try:
+ res.THE_PRO_CATG_VALUE.close()
+ except:
+ pass
def test_frames_tag_keyword(self):
'''The 'tag' parameter'''
@@ -303,25 +313,34 @@ class RecipeExec(RecipeTestCase):
self.recipe.calib.FLAT = self.flat_frame
res = self.recipe(self.raw_frame, tag = raw_tag)
self.assertTrue(isinstance(res, cpl.Result))
- self.assertTrue(isinstance(res.THE_PRO_CATG_VALUE, pyfits.HDUList))
- res.THE_PRO_CATG_VALUE.close()
+ self.assertTrue(isinstance(res.THE_PRO_CATG_VALUE, fits.HDUList))
+ try:
+ res.THE_PRO_CATG_VALUE.close()
+ except:
+ pass
def test_frames_tag_attribute(self):
'''The 'tag' attribute'''
self.recipe.tag = raw_tag
res = self.recipe(self.raw_frame)
self.assertTrue(isinstance(res, cpl.Result))
- self.assertTrue(isinstance(res.THE_PRO_CATG_VALUE, pyfits.HDUList))
- res.THE_PRO_CATG_VALUE.close()
+ self.assertTrue(isinstance(res.THE_PRO_CATG_VALUE, fits.HDUList))
+ try:
+ res.THE_PRO_CATG_VALUE.close()
+ except:
+ pass
def test_frames_one_element_input_list(self):
'''Use 1-element list as input'''
# --> we want a list back'''
res = self.recipe([self.raw_frame])
self.assertTrue(isinstance(res, cpl.Result))
- self.assertFalse(isinstance(res.THE_PRO_CATG_VALUE, pyfits.HDUList))
+ self.assertFalse(isinstance(res.THE_PRO_CATG_VALUE, fits.HDUList))
self.assertTrue(isinstance(res.THE_PRO_CATG_VALUE, list))
- res.THE_PRO_CATG_VALUE[0].close()
+ try:
+ res.THE_PRO_CATG_VALUE[0].close()
+ except:
+ pass
def test_frames_many_element_input_list(self):
'''Use multiple files as input'''
@@ -329,8 +348,11 @@ class RecipeExec(RecipeTestCase):
# assumed to be a 'master', and we get back a plain frame'''
res = self.recipe([self.raw_frame, self.raw_frame])
self.assertTrue(isinstance(res, cpl.Result))
- self.assertTrue(isinstance(res.THE_PRO_CATG_VALUE, pyfits.HDUList))
- res.THE_PRO_CATG_VALUE.close()
+ self.assertTrue(isinstance(res.THE_PRO_CATG_VALUE, fits.HDUList))
+ try:
+ res.THE_PRO_CATG_VALUE.close()
+ except:
+ pass
def test_output_dir_attribute(self):
'''Write an output dir specified as attribute'''
@@ -343,9 +365,12 @@ class RecipeExec(RecipeTestCase):
'rtest.fits')
self.assertTrue(os.path.isdir(output_dir))
self.assertTrue(os.path.isfile(res.THE_PRO_CATG_VALUE))
- hdu = pyfits.open(res.THE_PRO_CATG_VALUE)
- self.assertTrue(isinstance(hdu, pyfits.HDUList))
- hdu.close()
+ hdu = fits.open(res.THE_PRO_CATG_VALUE)
+ self.assertTrue(isinstance(hdu, fits.HDUList))
+ try:
+ hdu.close()
+ except:
+ pass
def test_output_dir_keyword(self):
'''Write an output dir specified as call keyword arg'''
@@ -359,9 +384,12 @@ class RecipeExec(RecipeTestCase):
self.assertEqual(os.path.basename(res.THE_PRO_CATG_VALUE),
'rtest.fits')
self.assertTrue(os.path.isfile(res.THE_PRO_CATG_VALUE))
- hdu = pyfits.open(res.THE_PRO_CATG_VALUE)
- self.assertTrue(isinstance(hdu, pyfits.HDUList))
- hdu.close()
+ hdu = fits.open(res.THE_PRO_CATG_VALUE)
+ self.assertTrue(isinstance(hdu, fits.HDUList))
+ try:
+ hdu.close()
+ except:
+ pass
def test_param_default(self):
'''Test default parameter settings'''
@@ -378,14 +406,20 @@ class RecipeExec(RecipeTestCase):
self.recipe.param.enumopt.default)
self.assertEqual(res[0].header['HIERARCH ESO QC RANGEOPT'],
self.recipe.param.rangeopt.default)
- res.close()
+ try:
+ res.close()
+ except:
+ pass
def test_param_keyword_dict(self):
'''Parameter handling via keyword dict'''
res = self.recipe(self.raw_frame,
param = { 'stropt':'more' }).THE_PRO_CATG_VALUE
self.assertEqual(res[0].header['HIERARCH ESO QC STROPT'], 'more')
- res.close()
+ try:
+ res.close()
+ except:
+ pass
def test_param_keyword_dict_wrong(self):
'''Parameter handling via keyword dict'''
@@ -397,17 +431,26 @@ class RecipeExec(RecipeTestCase):
self.recipe.param.stropt = 'more'
res = self.recipe(self.raw_frame).THE_PRO_CATG_VALUE
self.assertEqual(res[0].header['HIERARCH ESO QC STROPT'], 'more')
- res.close()
+ try:
+ res.close()
+ except:
+ pass
def test_param_delete(self):
'''Delete a parameter in a second run after setting it'''
self.recipe.param.intopt = 123
res = self.recipe(self.raw_frame).THE_PRO_CATG_VALUE
- res.close()
+ try:
+ res.close()
+ except:
+ pass
del self.recipe.param.intopt
res = self.recipe(self.raw_frame).THE_PRO_CATG_VALUE
self.assertEqual(res[0].header['HIERARCH ESO QC INTOPT'], 2)
- res.close()
+ try:
+ res.close()
+ except:
+ pass
def test_param_overwrite(self):
'''Overwrite the recipe setting param via via keyword arg'''
@@ -430,21 +473,42 @@ class RecipeExec(RecipeTestCase):
self.assertEqual(res[0].header['HIERARCH ESO QC FLOATOPT'], -0.25)
self.assertEqual(res[0].header['HIERARCH ESO QC ENUMOPT'], 'third')
self.assertEqual(res[0].header['HIERARCH ESO QC RANGEOPT'], 0.125)
- res.close()
+ try:
+ res.close()
+ except:
+ pass
+ def test_disabled(self):
+ '''Parameter with CLI disabled'''
+ self.assertFalse(self.recipe.param.disabled.enabled[0])
+ self.assertTrue(self.recipe.param.intopt.enabled[0])
+# self.recipe.param.disabled = 0.2
+# res = self.recipe(self.raw_frame)
+# self.assertEqual(res[0].header['HIERARCH ESO QC DISABLED'], 0.2)
+# try:
+# res.close()
+# except:
+# pass
+
def test_environment_setting(self):
'''Additional environment parameter via recipe setting'''
self.recipe.env['TESTENV'] = 'unkk'
res = self.recipe(self.raw_frame).THE_PRO_CATG_VALUE
self.assertEqual(res[0].header['HIERARCH ESO QC TESTENV'], 'unkk')
- res.close()
+ try:
+ res.close()
+ except:
+ pass
def test_environment_keyword(self):
'''Additional environment parameter via recipe call keyword'''
res = self.recipe(self.raw_frame,
env = {'TESTENV':'kknu'}).THE_PRO_CATG_VALUE
self.assertEqual(res[0].header['HIERARCH ESO QC TESTENV'], 'kknu')
- res.close()
+ try:
+ res.close()
+ except:
+ pass
def test_error(self):
'''Error handling'''
@@ -462,7 +526,7 @@ class RecipeExec(RecipeTestCase):
threaded = True))
for i, res in enumerate(results):
# check if we got the correct type
- self.assertTrue(isinstance(res.THE_PRO_CATG_VALUE, pyfits.HDUList))
+ self.assertTrue(isinstance(res.THE_PRO_CATG_VALUE, fits.HDUList))
# check if we have the correct parameter
self.assertEqual(res.THE_PRO_CATG_VALUE[0].header[
'HIERARCH ESO QC INTOPT'], i)
@@ -475,7 +539,10 @@ class RecipeExec(RecipeTestCase):
# check that the data were moved correctly
self.assertTrue(abs(self.raw_frame[0].data
- res.THE_PRO_CATG_VALUE[0].data).max() < 1e-6)
- res.THE_PRO_CATG_VALUE.close()
+ try:
+ res.THE_PRO_CATG_VALUE.close()
+ except:
+ pass
def test_error_parallel(self):
'''Error handling in parallel execution'''
@@ -491,7 +558,10 @@ class RecipeExec(RecipeTestCase):
res = self.recipe(self.raw_frame)
key = 'DATAMD5'
md5sum = res.THE_PRO_CATG_VALUE[0].header[key]
- res.THE_PRO_CATG_VALUE.close()
+ try:
+ res.THE_PRO_CATG_VALUE.close()
+ except:
+ pass
self.assertNotEqual(md5sum, 'Not computed')
self.assertEqual(len(md5sum),
len('9d123996fa9a7bda315d07e063043454'))
@@ -503,7 +573,10 @@ class RecipeExec(RecipeTestCase):
res = self.recipe(self.raw_frame)
key = 'HIERARCH ESO PRO REC1 CAL1 DATAMD5'
md5sum = res.THE_PRO_CATG_VALUE[0].header[key]
- res.THE_PRO_CATG_VALUE.close()
+ try:
+ res.THE_PRO_CATG_VALUE.close()
+ except:
+ pass
self.assertNotEqual(md5sum, 'Not computed')
self.assertEqual(len(md5sum),
len('9d123996fa9a7bda315d07e063043454'))
@@ -534,17 +607,20 @@ class RecipeRes(RecipeTestCase):
self.res = self.recipe(self.raw_frame)
def tearDown(self):
- self.res.THE_PRO_CATG_VALUE.close()
+ try:
+ res.THE_PRO_CATG_VALUE.close()
+ except:
+ pass
def test_attribute(self):
'''The result as an attribute'''
self.assertTrue(isinstance(self.res.THE_PRO_CATG_VALUE,
- pyfits.HDUList))
+ fits.HDUList))
def test_dict(self):
'''The result as an attribute'''
self.assertTrue(isinstance(self.res['THE_PRO_CATG_VALUE'],
- pyfits.HDUList))
+ fits.HDUList))
def test_len(self):
'''Length of the result'''
@@ -554,7 +630,7 @@ class RecipeRes(RecipeTestCase):
'''Iterate over the result'''
for tag, hdu in self.res:
self.assertEqual(tag, 'THE_PRO_CATG_VALUE')
- self.assertTrue(isinstance(hdu, pyfits.HDUList))
+ self.assertTrue(isinstance(hdu, fits.HDUList))
class RecipeEsorex(CplTestCase):
def setUp(self):
@@ -671,7 +747,10 @@ class RecipeLog(RecipeTestCase):
self.handler.clear()
logging.getLogger().setLevel(logging.DEBUG)
res = self.recipe(self.raw_frame)
- res.THE_PRO_CATG_VALUE.close()
+ try:
+ res.THE_PRO_CATG_VALUE.close()
+ except:
+ pass
# check that the logs are not empty
self.assertNotEqual(len(self.handler.logs), 0)
@@ -695,7 +774,10 @@ class RecipeLog(RecipeTestCase):
self.handler.clear()
logging.getLogger('cpl.rtest').setLevel(logging.INFO)
res = self.recipe(self.raw_frame)
- res.THE_PRO_CATG_VALUE.close()
+ try:
+ res.THE_PRO_CATG_VALUE.close()
+ except:
+ pass
# check that the logs are not empty
self.assertNotEqual(len(self.handler.logs), 0)
@@ -705,7 +787,10 @@ class RecipeLog(RecipeTestCase):
self.handler.clear()
logging.getLogger('cpl.rtest').setLevel(logging.WARN)
res = self.recipe(self.raw_frame)
- res.THE_PRO_CATG_VALUE.close()
+ try:
+ res.THE_PRO_CATG_VALUE.close()
+ except:
+ pass
# check that the logs are not empty
self.assertNotEqual(len(self.handler.logs), 0)
@@ -716,7 +801,10 @@ class RecipeLog(RecipeTestCase):
self.handler.clear()
logging.getLogger('cpl.rtest').setLevel(logging.ERROR)
res = self.recipe(self.raw_frame)
- res.THE_PRO_CATG_VALUE.close()
+ try:
+ res.THE_PRO_CATG_VALUE.close()
+ except:
+ pass
self.assertEqual(len(self.handler.logs), 0)
def test_logging_common(self):
@@ -724,7 +812,10 @@ class RecipeLog(RecipeTestCase):
self.handler.clear()
self.other_handler.clear()
res = self.recipe(self.raw_frame, logname = 'othername')
- res.THE_PRO_CATG_VALUE.close()
+ try:
+ res.THE_PRO_CATG_VALUE.close()
+ except:
+ pass
self.assertNotEqual(len(self.other_handler.logs), 0)
def test_logging_multiline(self):
@@ -732,7 +823,10 @@ class RecipeLog(RecipeTestCase):
self.handler.clear()
logging.getLogger('cpl.rtest').setLevel(logging.INFO)
res = self.recipe(self.raw_frame)
- res.THE_PRO_CATG_VALUE.close()
+ try:
+ res.THE_PRO_CATG_VALUE.close()
+ except:
+ pass
# check that the multi line log sequence appears
multiline = 0
tag = 'multiline#'
@@ -763,7 +857,10 @@ class RecipeLog(RecipeTestCase):
self.assertTrue(isinstance(res.log.warning[0], str))
# Check that there were no error messages
self.assertEqual(len(res.log.error), 0)
- res.THE_PRO_CATG_VALUE.close()
+ try:
+ res.THE_PRO_CATG_VALUE.close()
+ except:
+ pass
def test_error(self):
'''"log" attribute of the CplError object'''
@@ -798,14 +895,17 @@ class ProcessingInfo(RecipeTestCase):
self.recipe.param.floatopt = -0.25
self.recipe.param.enumopt = 'third'
self.recipe.param.rangeopt = 0.125
- self.recipe.calib.FLAT = pyfits.HDUList([
- pyfits.PrimaryHDU(numpy.random.random_integers(0, 65000,
+ self.recipe.calib.FLAT = fits.HDUList([
+ fits.PrimaryHDU(numpy.random.random_integers(0, 65000,
self.image_size))])
self.res = self.recipe(self.raw_frame).THE_PRO_CATG_VALUE
self.pinfo = cpl.dfs.ProcessingInfo(self.res)
def tearDown(self):
- self.res.close()
+ try:
+ self.res.close()
+ except:
+ pass
def test_param(self):
'''Parameter information'''
diff --git a/test/iiinstrumentp/recipes/rtest.c b/test/iiinstrumentp/recipes/rtest.c
index 0e3fa89..21d0ca3 100644
--- a/test/iiinstrumentp/recipes/rtest.c
+++ b/test/iiinstrumentp/recipes/rtest.c
@@ -199,6 +199,15 @@ static int rtest_create(cpl_plugin * plugin)
cpl_parameter_disable(p, CPL_PARAMETER_MODE_ENV);
cpl_parameterlist_append(recipe->parameters, p);
+ /* --memleak */
+ p = cpl_parameter_new_value("iiinstrument.rtest.memleak",
+ CPL_TYPE_BOOL,
+ "If yes, dont deallocate some memory",
+ "iiinstrument.rtest", FALSE);
+ cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, "memleak");
+ cpl_parameter_disable(p, CPL_PARAMETER_MODE_ENV);
+ cpl_parameterlist_append(recipe->parameters, p);
+
/* --sleep */
p = cpl_parameter_new_value("iiinstrument.rtest.sleep",
CPL_TYPE_DOUBLE,
@@ -208,6 +217,16 @@ static int rtest_create(cpl_plugin * plugin)
cpl_parameter_disable(p, CPL_PARAMETER_MODE_ENV);
cpl_parameterlist_append(recipe->parameters, p);
+ /* --disabled */
+ p = cpl_parameter_new_value("iiinstrument.rtest.disabled",
+ CPL_TYPE_DOUBLE,
+ "Dummy disabled parameter",
+ "iiinstrument.rtest", -0.1);
+ cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, "disabled");
+ cpl_parameter_disable(p, CPL_PARAMETER_MODE_ENV);
+ cpl_parameter_disable(p, CPL_PARAMETER_MODE_CLI);
+ cpl_parameterlist_append(recipe->parameters, p);
+
return 0;
}
@@ -310,11 +329,20 @@ static int rtest(cpl_frameset * frameset,
"iiinstrument.rtest.crashing");
const char *crashing = cpl_parameter_get_string(param);
+ /* --memleak */
+ param = cpl_parameterlist_find_const(parlist,
+ "iiinstrument.rtest.memleak");
+ int memleak = cpl_parameter_get_bool(param);
+
/* --sleep */
param = cpl_parameterlist_find_const(parlist,
"iiinstrument.rtest.sleep");
double sleep_secs = cpl_parameter_get_double(param);
+ param = cpl_parameterlist_find_const(parlist,
+ "iiinstrument.rtest.disabled");
+ double disabled_option = cpl_parameter_get_double(param);
+
if (!cpl_errorstate_is_equal(prestate)) {
return (int)cpl_error_set_message(cpl_func, cpl_error_get_code(),
"Could not retrieve the input "
@@ -397,6 +425,7 @@ static int rtest(cpl_frameset * frameset,
} else {
cpl_propertylist_append_string(qclist, "ESO QC TESTENV", "(null)");
}
+ cpl_propertylist_append_double(qclist, "ESO QC DISABLEDOPT", disabled_option);
prestate = cpl_errorstate_get();
@@ -426,5 +455,9 @@ static int rtest(cpl_frameset * frameset,
*crashvar = 1.99;
}
+ if (memleak) {
+ cpl_malloc(16);
+ }
+
return (int)cpl_error_get_code();
}
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-science/packages/python-cpl.git
More information about the debian-science-commits
mailing list