diff --git a/SAS/OTDB_Services/test/t_TreeService.py b/SAS/OTDB_Services/test/t_TreeService.py index 133f4f7788e389da2d2f7749c253580484f8716d..e4118bd132ffb9ae3632997c144bdda1f0ba9179 100644 --- a/SAS/OTDB_Services/test/t_TreeService.py +++ b/SAS/OTDB_Services/test/t_TreeService.py @@ -30,6 +30,7 @@ StatusUpdateCommand : finction to update the status of a tree. import sys import logging +from lofar.messaging.messagebus import * from lofar.messaging.RPC import * logging.basicConfig(stream=sys.stdout, level=logging.WARNING) @@ -58,91 +59,92 @@ def do_rpc(rpc_instance, arg_dict): return data if __name__ == "__main__": - busname = sys.argv[1] if len(sys.argv) > 1 else "simpletest" - - with RPC("OTDBService.TaskGetIDs", ForwardExceptions=True, busname=busname, timeout=10) as otdbRPC: - # Existing: otdb_id:1099268, mom_id:353713 - do_rpc (otdbRPC, {'OtdbID': 1099268, 'MomID': 353713 }) - do_rpc (otdbRPC, {'OtdbID': 1099268, 'MomID': 5 }) - do_rpc (otdbRPC, {'OtdbID': 1099268, 'MomID': None }) - do_rpc (otdbRPC, {'OtdbID': 5, 'MomID': 353713 }) - do_rpc_catch_exception('', otdbRPC, {'OtdbID': 5, 'MomID': 5 }) - do_rpc_catch_exception('', otdbRPC, {'OtdbID': 5, 'MomID': None }) - do_rpc (otdbRPC, {'OtdbID': None, 'MomID': 353713 }) - do_rpc_catch_exception('', otdbRPC, {'OtdbID': None, 'MomID': 5 }) - do_rpc_catch_exception('', otdbRPC, {'OtdbID': None, 'MomID': None }) - - with RPC("OTDBService.GetDefaultTemplates", ForwardExceptions=True, busname=busname, timeout=10) as otdbRPC: - do_rpc(otdbRPC,{}) - - with RPC("OTDBService.SetProject", ForwardExceptions=True, busname=busname, timeout=10) as otdbRPC: - do_rpc(otdbRPC,{'name':"Taka Tuka Land", "title":"Adventure movie", "pi":"Pippi", "co_i":"Mr.Nelson", "contact":"Witje"}) - - with RPC("OTDBService.TaskCreate", ForwardExceptions=True, busname=busname, timeout=10) as task_create: - do_rpc(task_create, {'OtdbID':1099268, 'TemplateName':'BeamObservation', 'Specification': {'state':'finished'}}) - do_rpc(task_create, {'MomID':353713, 'TemplateName':'BeamObservation', 'Specification': {'state':'finished'}}) - do_rpc_catch_exception('on non-exsisting campaign', task_create, - {'MomID':998877, 'TemplateName':'BeamObservation', - 'CampaignName':'No such campaign', 'Specification': {'state':'finished'}}) - do_rpc(task_create, {'MomID':998877, 'TemplateName':'BeamObservation', - 'CampaignName':'Taka Tuka Land', 'Specification': {'state':'finished'}}) - data = do_rpc(task_create, {'MomID':12345, 'TemplateName':'BeamObservation', 'Specification': {'state':'finished'}}) - new_tree1 = data['MomID'] - data = do_rpc(task_create, {'MomID':54321, 'TemplateName':'BeamObservation', 'Specification': {'state':'finished'}}) - new_tree2= data['MomID'] - - with RPC("OTDBService.TaskPrepareForScheduling", ForwardExceptions=True, busname=busname, timeout=10) as otdbRPC: - do_rpc(otdbRPC, {'MomID':new_tree1}) # template - do_rpc(otdbRPC, {'MomID':new_tree1}) # now a VIC tree - do_rpc(otdbRPC, {'MomID':new_tree1, 'StartTime':'2016-03-01 12:00:00', 'StopTime':'2016-03-01 12:34:56'}) - do_rpc_catch_exception("on invalid stoptime", otdbRPC, - {'MomID':new_tree1, 'StartTime':'2016-03-01 12:00:00', 'StopTime':'2016'}) - - with RPC("OTDBService.TaskDelete", ForwardExceptions=True, busname=busname, timeout=10) as otdbRPC: - do_rpc(otdbRPC, {'MomID':new_tree2}) - - with RPC("OTDBService.TaskGetSpecification", ForwardExceptions=True, busname=busname, timeout=10) as otdbRPC: - do_rpc(otdbRPC, {'OtdbID':1099269}) # PIC - do_rpc(otdbRPC, {'OtdbID':1099238}) # Template - do_rpc(otdbRPC, {'OtdbID':1099266}) # VIC - do_rpc_catch_exception('on non-existing treeID', otdbRPC, {'OtdbID':5}) # Non existing - - with RPC("OTDBService.TaskSetStatus", ForwardExceptions=True, busname=busname, timeout=5) as status_update_command: - # PIC - do_rpc(status_update_command, {'OtdbID':1099269, 'NewStatus':'finished', 'UpdateTimestamps':True}) - # Template - do_rpc(status_update_command, {'OtdbID':1099238, 'NewStatus':'finished', 'UpdateTimestamps':True}) - # VIC - do_rpc(status_update_command, {'OtdbID':1099266, 'NewStatus':'finished', 'UpdateTimestamps':True}) - - # Nonexisting tree - do_rpc_catch_exception('on invalid treeID', - status_update_command, {'OtdbID':10, 'NewStatus':'finished', 'UpdateTimestamps':True}) - - # VIC tree: invalid status - do_rpc_catch_exception('on invalid status', - status_update_command, {'OtdbID':1099266, 'NewStatus':'what_happend', 'UpdateTimestamps':True}) - # Set PIC back to active... - do_rpc(status_update_command, {'OtdbID':1099269, 'NewStatus':'active', 'UpdateTimestamps':True}) - - - with RPC("OTDBService.GetStations", ForwardExceptions=True, busname=busname, timeout=10) as otdbRPC: - do_rpc(otdbRPC,{}) - - with RPC("OTDBService.TaskSetSpecification", ForwardExceptions=True, busname=busname, timeout=5) as key_update: - # VIC tree: valid - do_rpc(key_update, {'OtdbID':1099266, - 'Specification':{'LOFAR.ObsSW.Observation.ObservationControl.PythonControl.pythonHost':'NameOfTestHost'}}) - # Template tree: not supported yet - do_rpc(key_update, {'OtdbID':1099238, - 'Specification':{'LOFAR.ObsSW.Observation.Scheduler.priority':'0.1'}}) - # PIC tree: not supported yet - do_rpc_catch_exception('on invalid treetype (PIC)', key_update, - {'OtdbID':1099269, 'Specification':{'LOFAR.PIC.Core.CS001.status_state':'50'}}) - # Non exsisting tree - do_rpc_catch_exception('on invalid treeID', key_update, {'OtdbID':10, - 'Specification':{'LOFAR.ObsSW.Observation.ObservationControl.PythonControl.pythonHost':'NameOfTestHost'}}) - # VIC tree: wrong key - do_rpc_catch_exception('on invalid key', key_update, {'OtdbID':1099266, - 'Specification':{'LOFAR.ObsSW.Observation.ObservationControl.PythonControl.NoSuchKey':'NameOfTestHost'}}) + with TemporaryQueue(__name__) as tmp_queue: + busname = tmp_queue.address + + with RPC("OTDBService.TaskGetIDs", ForwardExceptions=True, busname=busname, timeout=10) as otdbRPC: + # Existing: otdb_id:1099268, mom_id:353713 + do_rpc (otdbRPC, {'OtdbID': 1099268, 'MomID': 353713 }) + do_rpc (otdbRPC, {'OtdbID': 1099268, 'MomID': 5 }) + do_rpc (otdbRPC, {'OtdbID': 1099268, 'MomID': None }) + do_rpc (otdbRPC, {'OtdbID': 5, 'MomID': 353713 }) + do_rpc_catch_exception('', otdbRPC, {'OtdbID': 5, 'MomID': 5 }) + do_rpc_catch_exception('', otdbRPC, {'OtdbID': 5, 'MomID': None }) + do_rpc (otdbRPC, {'OtdbID': None, 'MomID': 353713 }) + do_rpc_catch_exception('', otdbRPC, {'OtdbID': None, 'MomID': 5 }) + do_rpc_catch_exception('', otdbRPC, {'OtdbID': None, 'MomID': None }) + + with RPC("OTDBService.GetDefaultTemplates", ForwardExceptions=True, busname=busname, timeout=10) as otdbRPC: + do_rpc(otdbRPC,{}) + + with RPC("OTDBService.SetProject", ForwardExceptions=True, busname=busname, timeout=10) as otdbRPC: + do_rpc(otdbRPC,{'name':"Taka Tuka Land", "title":"Adventure movie", "pi":"Pippi", "co_i":"Mr.Nelson", "contact":"Witje"}) + + with RPC("OTDBService.TaskCreate", ForwardExceptions=True, busname=busname, timeout=10) as task_create: + do_rpc(task_create, {'OtdbID':1099268, 'TemplateName':'BeamObservation', 'Specification': {'state':'finished'}}) + do_rpc(task_create, {'MomID':353713, 'TemplateName':'BeamObservation', 'Specification': {'state':'finished'}}) + do_rpc_catch_exception('on non-exsisting campaign', task_create, + {'MomID':998877, 'TemplateName':'BeamObservation', + 'CampaignName':'No such campaign', 'Specification': {'state':'finished'}}) + do_rpc(task_create, {'MomID':998877, 'TemplateName':'BeamObservation', + 'CampaignName':'Taka Tuka Land', 'Specification': {'state':'finished'}}) + data = do_rpc(task_create, {'MomID':12345, 'TemplateName':'BeamObservation', 'Specification': {'state':'finished'}}) + new_tree1 = data['MomID'] + data = do_rpc(task_create, {'MomID':54321, 'TemplateName':'BeamObservation', 'Specification': {'state':'finished'}}) + new_tree2= data['MomID'] + + with RPC("OTDBService.TaskPrepareForScheduling", ForwardExceptions=True, busname=busname, timeout=10) as otdbRPC: + do_rpc(otdbRPC, {'MomID':new_tree1}) # template + do_rpc(otdbRPC, {'MomID':new_tree1}) # now a VIC tree + do_rpc(otdbRPC, {'MomID':new_tree1, 'StartTime':'2016-03-01 12:00:00', 'StopTime':'2016-03-01 12:34:56'}) + do_rpc_catch_exception("on invalid stoptime", otdbRPC, + {'MomID':new_tree1, 'StartTime':'2016-03-01 12:00:00', 'StopTime':'2016'}) + + with RPC("OTDBService.TaskDelete", ForwardExceptions=True, busname=busname, timeout=10) as otdbRPC: + do_rpc(otdbRPC, {'MomID':new_tree2}) + + with RPC("OTDBService.TaskGetSpecification", ForwardExceptions=True, busname=busname, timeout=10) as otdbRPC: + do_rpc(otdbRPC, {'OtdbID':1099269}) # PIC + do_rpc(otdbRPC, {'OtdbID':1099238}) # Template + do_rpc(otdbRPC, {'OtdbID':1099266}) # VIC + do_rpc_catch_exception('on non-existing treeID', otdbRPC, {'OtdbID':5}) # Non existing + + with RPC("OTDBService.TaskSetStatus", ForwardExceptions=True, busname=busname, timeout=5) as status_update_command: + # PIC + do_rpc(status_update_command, {'OtdbID':1099269, 'NewStatus':'finished', 'UpdateTimestamps':True}) + # Template + do_rpc(status_update_command, {'OtdbID':1099238, 'NewStatus':'finished', 'UpdateTimestamps':True}) + # VIC + do_rpc(status_update_command, {'OtdbID':1099266, 'NewStatus':'finished', 'UpdateTimestamps':True}) + + # Nonexisting tree + do_rpc_catch_exception('on invalid treeID', + status_update_command, {'OtdbID':10, 'NewStatus':'finished', 'UpdateTimestamps':True}) + + # VIC tree: invalid status + do_rpc_catch_exception('on invalid status', + status_update_command, {'OtdbID':1099266, 'NewStatus':'what_happend', 'UpdateTimestamps':True}) + # Set PIC back to active... + do_rpc(status_update_command, {'OtdbID':1099269, 'NewStatus':'active', 'UpdateTimestamps':True}) + + + with RPC("OTDBService.GetStations", ForwardExceptions=True, busname=busname, timeout=10) as otdbRPC: + do_rpc(otdbRPC,{}) + + with RPC("OTDBService.TaskSetSpecification", ForwardExceptions=True, busname=busname, timeout=5) as key_update: + # VIC tree: valid + do_rpc(key_update, {'OtdbID':1099266, + 'Specification':{'LOFAR.ObsSW.Observation.ObservationControl.PythonControl.pythonHost':'NameOfTestHost'}}) + # Template tree: not supported yet + do_rpc(key_update, {'OtdbID':1099238, + 'Specification':{'LOFAR.ObsSW.Observation.Scheduler.priority':'0.1'}}) + # PIC tree: not supported yet + do_rpc_catch_exception('on invalid treetype (PIC)', key_update, + {'OtdbID':1099269, 'Specification':{'LOFAR.PIC.Core.CS001.status_state':'50'}}) + # Non exsisting tree + do_rpc_catch_exception('on invalid treeID', key_update, {'OtdbID':10, + 'Specification':{'LOFAR.ObsSW.Observation.ObservationControl.PythonControl.pythonHost':'NameOfTestHost'}}) + # VIC tree: wrong key + do_rpc_catch_exception('on invalid key', key_update, {'OtdbID':1099266, + 'Specification':{'LOFAR.ObsSW.Observation.ObservationControl.PythonControl.NoSuchKey':'NameOfTestHost'}}) diff --git a/SAS/OTDB_Services/test/t_TreeService.run b/SAS/OTDB_Services/test/t_TreeService.run index 498561ac058a67eab0f75472c76b6aedac7e1986..b7cf02a98cc0da658288ab76261df4c0c0671990 100755 --- a/SAS/OTDB_Services/test/t_TreeService.run +++ b/SAS/OTDB_Services/test/t_TreeService.run @@ -3,23 +3,19 @@ DBHOST=sasdbtest.control.lofar #cleanup on normal exit and on SIGHUP, SIGINT, SIGQUIT, and SIGTERM -trap 'qpid-config del exchange --force $queue ; kill ${SERVICE_PID} ; dropdb -U postgres -h ${DBHOST} ${DBNAME}' 0 1 2 3 15 +trap 'kill ${SERVICE_PID} ; dropdb -U postgres -h ${DBHOST} ${DBNAME}' 0 1 2 3 15 # Generate randome queue name -queue=$(< /dev/urandom tr -dc [:alnum:] | head -c10) DBNAME=unittest_$queue -# Create the queue -qpid-config add exchange topic $queue - # Setup a clean database with predefined content createdb -U postgres -h ${DBHOST} ${DBNAME} gzip -dc $srcdir/unittest_db.dump.gz | psql -U postgres -h ${DBHOST} ${DBNAME} -f - -TreeService.py -B $queue -D ${DBNAME} -H ${DBHOST} -U postgres & +TreeService.py -D ${DBNAME} -H ${DBHOST} -U postgres & SERVICE_PID=$! # Starting up takes a while sleep 3 # Run the unit test source python-coverage.sh -python_coverage_test "Messaging/python" t_TreeService.py $queue +python_coverage_test "Messaging/python" t_TreeService.py