Exemple #1
0
def test_wait_for_termination_ready_then_terminate():
    mock_client = create_mocked_client(timer=create_timing_out_timer(
        num_good_ticks=2))

    single_not_ready_running_pod = _pod_list_for_container_status(
        _create_status(
            state=V1ContainerState(running=V1ContainerStateRunning()),
            ready=False))
    single_pod_terminated_successful = _pod_list_for_container_status(
        _create_status(state=V1ContainerState(
            terminated=V1ContainerStateTerminated(exit_code=0)),
                       ready=False))
    mock_client.core_api.list_namespaced_pod.side_effect = [
        single_not_ready_running_pod,
        single_pod_terminated_successful,
    ]

    pod_name = "a_pod"

    mock_client.wait_for_pod(pod_name=pod_name,
                             namespace="namespace",
                             wait_for_state=WaitForPodState.Terminated)

    assert_logger_calls(
        mock_client.logger,
        [
            'Waiting for pod "%s"' % pod_name,
            "Pod {pod_name} exitted successfully".format(pod_name=pod_name),
        ],
    )

    # slept only once
    assert len(mock_client.sleeper.mock_calls) == 1
Exemple #2
0
def test_wait_for_ready_but_terminated_unsuccessfully():
    mock_client = create_mocked_client()

    single_not_ready_running_pod = _pod_list_for_container_status(
        _create_status(
            state=V1ContainerState(running=V1ContainerStateRunning()),
            ready=False))

    single_pod_terminated_unsuccessful = _pod_list_for_container_status(
        _create_status(
            state=V1ContainerState(terminated=V1ContainerStateTerminated(
                exit_code=1, message="error_message")),
            ready=False,
        ))

    mock_client.core_api.list_namespaced_pod.side_effect = [
        single_not_ready_running_pod,
        single_pod_terminated_unsuccessful,
    ]

    retrieve_pod_logs_mock = mock.MagicMock()
    retrieve_pod_logs_mock.side_effect = ["raw_logs_ret_val"]
    mock_client.retrieve_pod_logs = retrieve_pod_logs_mock

    pod_name = "a_pod"

    with pytest.raises(DagsterK8sError) as exc_info:
        mock_client.wait_for_pod(pod_name=pod_name, namespace="namespace")

    assert str(exc_info.value) == (
        'Pod did not exit successfully. Failed with message: "error_message" '
        'and pod logs: "raw_logs_ret_val"')
Exemple #3
0
def test_running_but_not_ready():

    mock_client = create_mocked_client()

    single_not_ready_running_pod = _pod_list_for_container_status(
        _create_status(
            state=V1ContainerState(running=V1ContainerStateRunning()),
            ready=False))
    single_ready_running_pod = _pod_list_for_container_status(
        _ready_running_status())

    mock_client.core_api.list_namespaced_pod.side_effect = [
        single_not_ready_running_pod,
        single_ready_running_pod,
    ]

    pod_name = "a_pod"

    mock_client.wait_for_pod(pod_name=pod_name, namespace="namespace")

    assert_logger_calls(
        mock_client.logger,
        [
            'Waiting for pod "%s"' % pod_name,
            'Waiting for pod "%s" to become ready...' % pod_name,
            'Pod "%s" is ready, done waiting' % pod_name,
        ],
    )
    # slept only once
    assert len(mock_client.sleeper.mock_calls) == 1
Exemple #4
0
def test_initial_timeout():
    mock_client = create_mocked_client(timer=create_timing_out_timer(
        num_good_ticks=0))
    not_ready_list = _pod_list_for_container_status(
        _create_status(
            state=V1ContainerState(running=V1ContainerStateRunning()),
            ready=False))

    mock_client.core_api.list_namespaced_pod.side_effect = [not_ready_list]

    pod_name = "a_pod"

    with pytest.raises(DagsterK8sError) as exc_info:
        mock_client.wait_for_pod(pod_name=pod_name, namespace="namespace")

    # value of pod info is big blob of serialized dict info
    assert str(exc_info.value).startswith(
        "Timed out while waiting for pod to become ready with pod info:")
Exemple #5
0
def _ready_running_status():
    return _create_status(
        state=V1ContainerState(running=V1ContainerStateRunning()), ready=True)