def test_statement_sensor(mocker):
    sen = LivyStatementSensor(
        session_id=123,
        statement_id=456,
        poke_interval=1,
        timeout=3,
        task_id="test_statement_sensor",
    )
    response = mock_http_calls(
        200,
        content=b"""
        {
            "id": 123,
            "state": "available",
            "output": {
                "status": "ok"
            }
        }""",
    )
    mocker.patch.object(HttpHook, "get_conn", return_value=response)
    sen.execute({})
def test_statement_sensor_invalid_timings(poke_interval, timeout):
    print(f"\n\nRunning test_statement_sensor_invalid_timings with:\n"
          f"poke_interval={poke_interval}, timeout={timeout}")
    with raises(AirflowException) as ae:
        LivyStatementSensor(
            session_id=123,
            statement_id=456,
            poke_interval=poke_interval,
            timeout=timeout,
            task_id="test_statement_sensor_invalid_timings",
        )
    print(f"Set up the statement sensor with invalid timings, "
          f"got the expected exception:\n<{ae.value}>\n")
def test_statement_sensor_malformed_status(mocker):
    sen = LivyStatementSensor(
        session_id=123,
        statement_id=456,
        poke_interval=2,
        timeout=5,
        task_id="test_statement_sensor_malformed_status",
    )
    http_response = mock_http_calls(
        200,
        content=b"""
        {
            "id": 123,
            "state": "available",
            "output": {
                "nostatus": "here"
            }
        }""",
    )
    mocker.patch.object(HttpHook, "get_conn", return_value=http_response)
    with raises(AirflowBadRequest) as ae:
        sen.execute({})
    print(f"Imitated invalid 'output' object for statement sensor, "
          f"got the expected exception:\n<{ae.value}>\n")