def test_housekeeping_with_xtrigger_satisfied(): """The housekeeping method makes sure only satisfied xtrigger function are kept.""" xtrigger_mgr = XtriggerManager(suite="sample_suite", user="******") xtrig = SubFuncContext(label="get_name", func_name="get_name", func_args=[], func_kwargs={}) xtrigger_mgr.add_trig("get_name", xtrig) xtrig.out = "[\"True\", {\"name\": \"Yossarian\"}]" tdef = TaskDef(name="foo", rtcfg=None, run_mode="live", start_point=1, spawn_ahead=False) tdef.xtrig_labels.add("get_name") start_point = ISO8601Point('20000101T0000+05') itask = TaskProxy(tdef=tdef, start_point=start_point) xtrigger_mgr.collate([itask]) # pretend the function has been activated xtrigger_mgr.active.append(xtrig.get_signature()) xtrigger_mgr.callback(xtrig) assert xtrigger_mgr.sat_xtrig xtrigger_mgr.housekeep() # here we still have the same number as before assert xtrigger_mgr.sat_xtrig # however, we have no xclock trigger satisfied assert not xtrigger_mgr.sat_xclock
def test_callback(): """Test callback.""" xtrigger_mgr = XtriggerManager(suite="sample_suite", user="******") get_name = SubFuncContext(label="get_name", func_name="get_name", func_args=[], func_kwargs={}) get_name.out = "[\"True\", \"1\"]" xtrigger_mgr.active.append(get_name.get_signature()) xtrigger_mgr.callback(get_name) # this means that the xtrigger was satisfied assert xtrigger_mgr.sat_xtrig
def test_callback_not_active(): """Test callback with no active contexts.""" xtrigger_mgr = XtriggerManager(suite="sample_suite", user="******") # calling callback with a SubFuncContext with none active # results in a ValueError get_name = SubFuncContext(label="get_name", func_name="get_name", func_args=[], func_kwargs={}) with pytest.raises(ValueError): xtrigger_mgr.callback(get_name)
def test_callback_invalid_json(): """Test callback with invalid JSON.""" xtrigger_mgr = XtriggerManager(suite="sample_suite", user="******") get_name = SubFuncContext(label="get_name", func_name="get_name", func_args=[], func_kwargs={}) get_name.out = "{no_quotes: \"mom!\"}" xtrigger_mgr.active.append(get_name.get_signature()) xtrigger_mgr.callback(get_name) # this means that the xtrigger was not satisfied # TODO: this means site admins are only aware of this if they # look at the debug log. Is that OK? assert not xtrigger_mgr.sat_xtrig
def test_satisfy_xtrigger(): """Test satisfy_xtriggers""" # the XtriggerManager instance xtrigger_mgr = XtriggerManager( suite="sample_suite", user="******", proc_pool=MockedProcPool(), broadcast_mgr=MockedBroadcastMgr(suite_db_mgr=None)) # the echo1 xtrig (not satisfied) echo1_xtrig = SubFuncContext(label="echo1", func_name="echo1", func_args=[], func_kwargs={}) echo1_xtrig.out = "[\"True\", {\"name\": \"herminia\"}]" xtrigger_mgr.add_trig("echo1", echo1_xtrig) # the echo2 xtrig (satisfied through callback later) echo2_xtrig = SubFuncContext(label="echo2", func_name="echo2", func_args=[], func_kwargs={}) echo2_xtrig.out = "[\"True\", {\"name\": \"herminia\"}]" xtrigger_mgr.add_trig("echo2", echo2_xtrig) # create a task tdef = TaskDef(name="foo", rtcfg=None, run_mode="live", start_point=1, spawn_ahead=False) tdef.xtrig_labels.add("echo1") tdef.xtrig_labels.add("echo2") # cycle point for task proxy init() start_point = ISO8601Point('20000101T0000+05') # create task proxy itask = TaskProxy(tdef=tdef, start_point=start_point) # we start with no satisfied xtriggers, and nothing active assert len(xtrigger_mgr.sat_xtrig) == 0 assert len(xtrigger_mgr.active) == 0 # after calling satisfy_xtriggers the first time, we get two active xtrigger_mgr.satisfy_xtriggers(itask) assert len(xtrigger_mgr.sat_xtrig) == 0 assert len(xtrigger_mgr.active) == 2 # calling satisfy_xtriggers again does not change anything xtrigger_mgr.satisfy_xtriggers(itask) assert len(xtrigger_mgr.sat_xtrig) == 0 assert len(xtrigger_mgr.active) == 2 # now we call callback manually as the proc_pool we passed is a mock # then both should be satisfied xtrigger_mgr.callback(echo1_xtrig) xtrigger_mgr.callback(echo2_xtrig) # so both were satisfied, and nothing is active assert len(xtrigger_mgr.sat_xtrig) == 2 assert len(xtrigger_mgr.active) == 0 # calling satisfy_xtriggers again still does not change anything xtrigger_mgr.satisfy_xtriggers(itask) assert len(xtrigger_mgr.sat_xtrig) == 2 assert len(xtrigger_mgr.active) == 0