diff --git a/SAS/ResourceAssignment/TaskPrescheduler/lib/cobaltblocksize.py b/SAS/ResourceAssignment/TaskPrescheduler/lib/cobaltblocksize.py index fb67245c397ed2261114ed1a2e7b5dc9ed53c267..daa5266fc31381ea20a84d6200d696383b0608e9 100644 --- a/SAS/ResourceAssignment/TaskPrescheduler/lib/cobaltblocksize.py +++ b/SAS/ResourceAssignment/TaskPrescheduler/lib/cobaltblocksize.py @@ -206,4 +206,4 @@ class BlockSize(object): bestNrBlocks = nrBlocks bestError = error - return bestBlockSize + return int(round(bestBlockSize)) diff --git a/SAS/ResourceAssignment/TaskPrescheduler/taskprescheduler.py b/SAS/ResourceAssignment/TaskPrescheduler/taskprescheduler.py index a39e3075d20ea87757b666bb11903ae5e402fe3a..a5e6341fccba4509384dc7323f8e09b0c99cee28 100644 --- a/SAS/ResourceAssignment/TaskPrescheduler/taskprescheduler.py +++ b/SAS/ResourceAssignment/TaskPrescheduler/taskprescheduler.py @@ -72,8 +72,8 @@ def calculateCobaltSettings(spec): constraints = BlockConstraints(corr, coherent, incoherent, clock) calculator = BlockSize(constraints) - return {'nrSubblocks': int(calculator.nrSubblocks), 'blockSize': int(calculator.blockSize), - 'nrBlocks': int(calculator.nrBlocks), 'integrationTime': calculator.integrationTime} + return {'nrSubblocks': calculator.nrSubblocks, 'blockSize': calculator.blockSize, + 'nrBlocks': calculator.nrBlocks, 'integrationTime': calculator.integrationTime} def cobaltOTDBsettings(cobalt_values): otdb_info = {} diff --git a/SAS/ResourceAssignment/TaskPrescheduler/test/test_taskprescheduler.py b/SAS/ResourceAssignment/TaskPrescheduler/test/test_taskprescheduler.py index 85a39a65784f64161b79ef15d1fbf2f1539c05d8..3cbe34c59b3fe6b5abf62b1e4ff19d42b838f0dd 100755 --- a/SAS/ResourceAssignment/TaskPrescheduler/test/test_taskprescheduler.py +++ b/SAS/ResourceAssignment/TaskPrescheduler/test/test_taskprescheduler.py @@ -208,7 +208,14 @@ class PreschedulerTest(unittest.TestCase): def test_CobaltOTDBsettings(self): otdb_info = cobaltOTDBsettings(self.test_cobalt_settings) + + # beware! assertEqual succeeds for a comparison between 42.0 and 42 + # but for lofar specs it is essential that some values are int + # so, check specifically for those! self.assertEqual(otdb_info, self.otdb_info) + self.assertEqual(int, type(otdb_info['LOFAR.ObsSW.Observation.ObservationControl.OnlineControl.Cobalt.Correlator.nrBlocksPerIntegration'])) + self.assertEqual(int, type(otdb_info['LOFAR.ObsSW.Observation.ObservationControl.OnlineControl.Cobalt.Correlator.nrIntegrationsPerBlock'])) + self.assertEqual(int, type(otdb_info['LOFAR.ObsSW.Observation.ObservationControl.OnlineControl.Cobalt.blockSize'])) @mock.patch('lofar.sas.resourceassignment.common.specification.logger') def test_onObservationApproved_log_mom_id_found(self, logger_mock): @@ -292,7 +299,29 @@ class PreschedulerTest(unittest.TestCase): spec = Specification(self.otdbrpc_mock, self.momrpc_mock, self.radbrpc_mock) spec.internal_dict = self.test_specification cobalt_settings = calculateCobaltSettings(spec) + + # beware! assertEqual succeeds for a comparison between 42.0 and 42 + # but for lofar specs it is essential that some values are int + # so, check specifically for those! self.assertEqual(cobalt_settings, self.test_cobalt_settings) + self.assertEqual(int, type(cobalt_settings['blockSize'])) + self.assertEqual(int, type(cobalt_settings['nrBlocks'])) + self.assertEqual(int, type(cobalt_settings['nrSubblocks'])) + + def test_calculateCobaltSettingsAndConvertToOTDBsettings(self): + '''combination of test_CobaltOTDBsettings and test_calculateCobaltSettings + Make sure that the values are calculated and converted correctly''' + spec = Specification(self.otdbrpc_mock, self.momrpc_mock, self.radbrpc_mock) + spec.internal_dict = self.test_specification + otdb_info = cobaltOTDBsettings(calculateCobaltSettings(spec)) + + # beware! assertEqual succeeds for a comparison between 42.0 and 42 + # but for lofar specs it is essential that some values are int + # so, check specifically for those! + self.assertEqual(otdb_info, self.otdb_info) + self.assertEqual(int, type(otdb_info['LOFAR.ObsSW.Observation.ObservationControl.OnlineControl.Cobalt.Correlator.nrBlocksPerIntegration'])) + self.assertEqual(int, type(otdb_info['LOFAR.ObsSW.Observation.ObservationControl.OnlineControl.Cobalt.Correlator.nrIntegrationsPerBlock'])) + self.assertEqual(int, type(otdb_info['LOFAR.ObsSW.Observation.ObservationControl.OnlineControl.Cobalt.blockSize'])) @mock.patch("lofar.common.util.waitForInterrupt") @mock.patch("lofar.messaging.messagebus.BusListener.start_listening")