Ejemplo n.º 1
0
def test_wait_for_launch_then_success():

    mock_client = create_mocked_client()

    no_pods = V1PodList(items=[])
    single_ready_running_pod = _pod_list_for_container_status(
        _ready_running_status())

    mock_client.core_api.list_namespaced_pod.side_effect = [
        no_pods, 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 launch...' % pod_name,
            'Pod "%s" is ready, done waiting' % pod_name,
        ],
    )

    # slept only once
    assert len(mock_client.sleeper.mock_calls) == 1
Ejemplo n.º 2
0
def test_wait_for_statuses_then_success():
    mock_client = create_mocked_client()

    single_no_status_pod = V1PodList(items=[V1Pod(status=V1PodStatus())])
    single_ready_running_pod = _pod_list_for_container_status(
        _ready_running_status())
    mock_client.core_api.list_namespaced_pod.side_effect = [
        single_no_status_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 container status to be set by kubernetes...",
            'Pod "%s" is ready, done waiting' % pod_name,
        ],
    )

    # slept only once
    assert len(mock_client.sleeper.mock_calls) == 1
Ejemplo n.º 3
0
def mocked_k8s_CoreV1Api(mocker):
    mocked_coreV1Api_class = mocker.patch('kubernetes.client.CoreV1Api')
    mocker.patch('kubernetes.client.ApiClient')
    coreV1API_instance = mocked_coreV1Api_class.return_value

    pods_mock = MagicMock()
    pods_mock.items = [
        MagicMock(spec=V1Pod),
        MagicMock(spec=V1Pod),
        MagicMock(spec=V1Pod)
    ]
    coreV1API_instance.list_pod_for_all_namespaces.return_value = pods_mock

    services_mock = MagicMock()
    services_mock.items = [
        MagicMock(spec=V1Service),
        MagicMock(spec=V1Service),
        MagicMock(spec=V1Service)
    ]
    coreV1API_instance.list_service_for_all_namespaces.return_value = services_mock

    v1_namespace = V1Namespace()
    v1_metadata_namespace = V1ObjectMeta(name=test_namespace)
    v1_namespace.metadata = v1_metadata_namespace
    v1_namespace_status = V1NamespaceStatus(phase=NamespaceStatus.ACTIVE.value)
    v1_namespace.status = v1_namespace_status

    coreV1API_instance.read_namespace.return_value = v1_namespace
    coreV1API_instance.delete_namespace.return_value = V1Status(
        status="{'phase': 'Terminating'}")

    v1_config_map = V1ConfigMap(data=test_config_map_data())

    coreV1API_instance.read_namespaced_config_map.return_value = v1_config_map

    secret_data = {"token": TEST_TOKEN}
    v1_metadata_secret = V1ObjectMeta(name="default-token")
    v1_secret = V1Secret(metadata=v1_metadata_secret, data=secret_data)
    v1_secret_list = V1SecretList(items=[v1_secret])

    coreV1API_instance.list_namespaced_secret.return_value = v1_secret_list

    v1_pod_status = V1PodStatus(phase=K8S_RUNNING_POD_STATUS)
    v1_pod = V1Pod(status=v1_pod_status)
    v1_pod_lists = V1PodList(items=[v1_pod])

    coreV1API_instance.list_namespaced_pod.return_value = v1_pod_lists

    v1_metadata_event = V1ObjectMeta(name="default-name")
    v1_object = V1ObjectReference(name="pod_name")
    v1_event = V1Event(message="Insufficient cpu",
                       involved_object=v1_object,
                       metadata=v1_metadata_event)
    v1_event_list = V1EventList(items=[v1_event])

    coreV1API_instance.list_namespaced_event.return_value = v1_event_list

    return coreV1API_instance
Ejemplo n.º 4
0
def test_get_names_in_job():

    pod_list = V1PodList(items=[
        V1Pod(metadata=V1ObjectMeta(name="foo")),
        V1Pod(metadata=V1ObjectMeta(name="bar"))
    ])
    mock_client = create_mocked_client()

    mock_client.core_api.list_namespaced_pod.side_effect = [pod_list]

    assert mock_client.get_pod_names_in_job("job",
                                            "namespace") == ["foo", "bar"]
Ejemplo n.º 5
0
def test_get_names_in_job():

    pod_list = V1PodList(items=[
        V1Pod(metadata=V1ObjectMeta(name='foo')),
        V1Pod(metadata=V1ObjectMeta(name='bar'))
    ])
    mock_client = create_mocked_client()

    mock_client.core_api.list_namespaced_pod.side_effect = [pod_list]

    assert mock_client.get_pod_names_in_job('job',
                                            'namespace') == ['foo', 'bar']
Ejemplo n.º 6
0
def test_initial_timeout_with_no_pod():
    mock_client = create_mocked_client(timer=create_timing_out_timer(
        num_good_ticks=0))
    no_pods = V1PodList(items=[])

    mock_client.core_api.list_namespaced_pod.side_effect = [no_pods]

    pod_name = "a_pod"

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

    # a bit of a dubious state here but it works
    assert (str(
        exc_info.value
    ) == "Timed out while waiting for pod to become ready with pod info: None")
Ejemplo n.º 7
0
def _pod_list_for_container_status(container_status):
    return V1PodList(items=[
        V1Pod(status=V1PodStatus(container_statuses=[container_status]))
    ])
Ejemplo n.º 8
0
 def list_func(options):
     return V1PodList(metadata=V1ListMeta(resource_version="1"), items=[])
Ejemplo n.º 9
0
 def mk_list(rv, *pods):
     items = list(pods)
     return V1PodList(metadata=V1ListMeta(resource_version=rv), items=items)