def test_exception_raised(monkeypatch): # 1/ default case t = Timeout("name", 12) monkeypatch.setattr(signal, "signal", DummySignal([t._timed_out])) monkeypatch.setattr(signal, "alarm", DummyAlarm([12, 0])) with pytest.raises(JobError): with t(None, None) as max_end_time: t._timed_out(None, None) # 2/ another exception t = Timeout("name", 12, InfrastructureError) monkeypatch.setattr(signal, "signal", DummySignal([t._timed_out])) monkeypatch.setattr(signal, "alarm", DummyAlarm([12, 0])) with pytest.raises(InfrastructureError): with t(None, None) as max_end_time: t._timed_out(None, None)
def test_with_raising(monkeypatch): # 1/ without parent # 1.1/ without max_end_time t = Timeout("timeout-name", 200) monkeypatch.setattr(signal, "signal", DummySignal([t._timed_out])) monkeypatch.setattr(signal, "alarm", DummyAlarm([200, 0])) monkeypatch.setattr(time, "time", lambda: 0) with pytest.raises(JobError): with t(None, None) as max_end_time: assert max_end_time == 200 # nosec - assert is part of the test process. assert signal.alarm.data == [ # nosec - assert is part of the test process. 0 ] assert ( # nosec - assert is part of the test process. signal.signal.data == [] ) monkeypatch.setattr(time, "time", lambda: 200) t._timed_out(None, None) assert signal.alarm.data == [] # nosec - assert is part of the test process. assert t.elapsed_time == 200 # nosec - assert is part of the test process. # 1.1/ with a smaller max_end_time t = Timeout("timeout-name", 200) monkeypatch.setattr(signal, "signal", DummySignal([t._timed_out])) monkeypatch.setattr(signal, "alarm", DummyAlarm([125, 0])) monkeypatch.setattr(time, "time", lambda: 0) with pytest.raises(JobError): with t(None, 125) as max_end_time: assert max_end_time == 125 # nosec - assert is part of the test process. assert signal.alarm.data == [ # nosec - assert is part of the test process. 0 ] assert ( # nosec - assert is part of the test process. signal.signal.data == [] ) monkeypatch.setattr(time, "time", lambda: 126) t._timed_out(None, None) assert signal.alarm.data == [] # nosec - assert is part of the test process. assert t.elapsed_time == 126 # nosec - assert is part of the test process. # 1.2/ with a larger max_end_time t = Timeout("timeout-name", 200) monkeypatch.setattr(signal, "signal", DummySignal([t._timed_out])) monkeypatch.setattr(signal, "alarm", DummyAlarm([200, 0])) monkeypatch.setattr(time, "time", lambda: 0) with pytest.raises(JobError): with t(None, 201) as max_end_time: assert max_end_time == 200 # nosec - assert is part of the test process. assert signal.alarm.data == [0] # nosec - test process. assert signal.signal.data == [] # nosec - test process. monkeypatch.setattr(time, "time", lambda: 200) t._timed_out(None, None) assert signal.alarm.data == [] # nosec - assert is part of the test process. assert t.elapsed_time == 200 # nosec - assert is part of the test process. # 1.3/ with max_end_time <= 0 t = Timeout("timeout-name", 200) monkeypatch.setattr(signal, "signal", DummySignal([t._timed_out])) monkeypatch.setattr(signal, "alarm", DummyAlarm([0])) monkeypatch.setattr(time, "time", lambda: 0) with pytest.raises(JobError): with t(None, 0) as max_end_time: # Check that the exception is raised before this line assert 0 # nosec - assert is part of the test process. assert signal.alarm.data == [] # nosec - assert is part of the test process. assert t.elapsed_time == 0 # nosec - assert is part of the test process. # 2/ with a parent # 2.1/ with a larger max_end_time t0 = Timeout("timeout-parent", 200) parent = ParentAction(t0) t1 = Timeout("timeout-child", 100) monkeypatch.setattr(signal, "signal", DummySignal([t1._timed_out, t0._timed_out])) monkeypatch.setattr(signal, "alarm", DummyAlarm([100, 0])) monkeypatch.setattr(time, "time", lambda: 0) with pytest.raises(JobError): with t1(parent, 200) as max_end_time: assert max_end_time == 100 # nosec - assert is part of the test process. assert signal.alarm.data == [0] # nosec - test process. assert signal.signal.data == [t0._timed_out] # nosec - test process. monkeypatch.setattr(time, "time", lambda: 100) t1._timed_out(None, None) assert signal.alarm.data == [] # nosec - assert is part of the test process. assert signal.signal.data == [t0._timed_out] # nosec - test process. assert t1.elapsed_time == 100 # nosec - assert is part of the test process. # 2.2/ with a smaller max_end_time t0 = Timeout("timeout-parent", 50) parent = ParentAction(t0) t1 = Timeout("timeout-child", 100) monkeypatch.setattr(signal, "signal", DummySignal([t1._timed_out, t0._timed_out])) monkeypatch.setattr(signal, "alarm", DummyAlarm([50, 0])) monkeypatch.setattr(time, "time", lambda: 0) with pytest.raises(JobError): with t1(parent, 50) as max_end_time: assert max_end_time == 50 # nosec - assert is part of the test process. assert signal.alarm.data == [0] # nosec - test process. assert signal.signal.data == [t0._timed_out] # nosec - test process. monkeypatch.setattr(time, "time", lambda: 23) t1._timed_out(None, None) assert signal.alarm.data == [] # nosec - assert is part of the test process. assert signal.signal.data == [t0._timed_out] # nosec - test process. assert t1.elapsed_time == 23 # nosec - assert is part of the test process. # 2.3/ with max_end_time <= 0 t0 = Timeout("timeout-parent", 1) parent = ParentAction(t0) t1 = Timeout("timeout-child", 100) monkeypatch.setattr(signal, "signal", DummySignal([t1._timed_out, t0._timed_out])) monkeypatch.setattr(signal, "alarm", DummyAlarm([0])) monkeypatch.setattr(time, "time", lambda: 0) with pytest.raises(JobError): with t1(parent, -1) as max_end_time: assert 0 # nosec - assert is part of the test process. assert signal.alarm.data == [] # nosec - assert is part of the test process. assert signal.signal.data == [t1._timed_out, t0._timed_out] # nosec - test process. assert t1.elapsed_time == 0 # nosec - assert is part of the test process. # 2.4/ raising parent timeout t0 = Timeout("timeout-parent", 50, InfrastructureError) parent = ParentAction(t0) t1 = Timeout("timeout-child", 100) monkeypatch.setattr(signal, "signal", DummySignal([t1._timed_out, t0._timed_out])) monkeypatch.setattr(signal, "alarm", DummyAlarm([50, 0, 0])) monkeypatch.setattr(time, "time", lambda: 0) with pytest.raises(InfrastructureError): with t1(parent, 50) as max_end_time: assert max_end_time == 50 # nosec - assert is part of the test process. assert signal.alarm.data == [0, 0] # nosec - test assert signal.signal.data == [t0._timed_out] # nosec - test monkeypatch.setattr(time, "time", lambda: 50) assert signal.alarm.data == [] # nosec - assert is part of the test process. assert signal.signal.data == [] # nosec - assert is part of the test process. assert t1.elapsed_time == 50 # nosec - assert is part of the test process.