def test_agent_logs_flow_run_exceptions(monkeypatch, runner_token, caplog, cloud_api): gql_return = MagicMock( return_value=MagicMock(data=MagicMock(write_run_logs=MagicMock(success=True))) ) client = MagicMock() client.return_value.write_run_logs = gql_return monkeypatch.setattr("prefect.agent.agent.Client", MagicMock(return_value=client)) agent = Agent() agent.deploy_flow = MagicMock(side_effect=Exception("Error Here")) agent.deploy_and_update_flow_run( flow_run=GraphQLResult( { "id": "id", "serialized_state": Scheduled().serialize(), "version": 1, "task_runs": [ GraphQLResult( { "id": "id", "version": 1, "serialized_state": Scheduled().serialize(), } ) ], } ) ) assert client.write_run_logs.called client.write_run_logs.assert_called_with( [dict(flow_run_id="id", level="ERROR", message="Error Here", name="agent")] ) assert "Logging platform error for flow run" in caplog.text
def test_deploy_flow_run_logs_flow_run_exceptions(monkeypatch, caplog, cloud_api): gql_return = MagicMock( return_value=MagicMock(data=MagicMock(write_run_logs=MagicMock(success=True))) ) client = MagicMock() client.return_value.write_run_logs = gql_return monkeypatch.setattr("prefect.agent.agent.Client", MagicMock(return_value=client)) agent = Agent() agent.deploy_flow = MagicMock(side_effect=Exception("Error Here")) agent._deploy_flow_run( flow_run=GraphQLResult( { "id": "id", "serialized_state": Scheduled().serialize(), "scheduled_start_time": str(pendulum.now()), "version": 1, "task_runs": [ GraphQLResult( { "id": "id", "version": 1, "serialized_state": Scheduled().serialize(), } ) ], } ) ) assert client.write_run_logs.called client.write_run_logs.assert_called_with( [dict(flow_run_id="id", level="ERROR", message="Error Here", name="agent")] ) assert "Exception encountered while deploying flow run id" in caplog.text
def test_deploy_flow_run_sleeps_until_start_time(monkeypatch, cloud_api): gql_return = MagicMock(return_value=MagicMock(data=MagicMock( write_run_logs=MagicMock(success=True)))) client = MagicMock() client.return_value.write_run_logs = gql_return monkeypatch.setattr("prefect.agent.agent.Client", MagicMock(return_value=client)) sleep = MagicMock() monkeypatch.setattr("time.sleep", sleep) dt = pendulum.now() agent = Agent() agent.deploy_flow = MagicMock() agent._deploy_flow_run(flow_run=GraphQLResult({ "id": "id", "serialized_state": Scheduled().serialize(), "scheduled_start_time": str(dt.add(seconds=10)), "version": 1, "task_runs": [ GraphQLResult({ "id": "id", "version": 1, "serialized_state": Scheduled().serialize(), }) ], })) sleep_time = sleep.call_args[0][0] assert 10 >= sleep_time > 9 agent.deploy_flow.assert_called_once()
def test_deploy_flows_passes_base_agent(runner_token, cloud_api): agent = Agent() with pytest.raises(NotImplementedError): agent.deploy_flow(None)
def test_deploy_flow_must_be_implemented(cloud_api): agent = Agent() with pytest.raises(NotImplementedError): agent.deploy_flow(None)