[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