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
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
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
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"]
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']
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")
def _pod_list_for_container_status(container_status): return V1PodList(items=[ V1Pod(status=V1PodStatus(container_statuses=[container_status])) ])
def list_func(options): return V1PodList(metadata=V1ListMeta(resource_version="1"), items=[])
def mk_list(rv, *pods): items = list(pods) return V1PodList(metadata=V1ListMeta(resource_version=rv), items=items)