Skip to content

Commit 079b74f

Browse files
fix failing test cases
1 parent c3d3e2b commit 079b74f

File tree

3 files changed

+45
-42
lines changed

3 files changed

+45
-42
lines changed

tests/unitary/with_extras/operator/feature-store/test_local_marketplace.py

Lines changed: 4 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
import mock
55
import yaml
6-
from kubernetes.client import V1PodList, V1Pod, V1PodStatus, V1PodCondition
6+
from kubernetes.client import V1PodCondition
77

88
from ads.opctl.backend.marketplace.local_marketplace import LocalMarketplaceOperatorBackend
99
from ads.opctl.backend.marketplace.models.marketplace_type import HelmMarketplaceListingDetails
@@ -28,34 +28,6 @@ def test_helm_values_to_yaml(file_writer: Mock):
2828
file_writer.return_value.__enter__().write.assert_called_once_with(yaml.dump(sample_helm_value))
2929

3030

31-
@patch('ads.opctl.backend.marketplace.local_marketplace.time')
32-
@patch('ads.opctl.backend.marketplace.local_marketplace.client.CoreV1Api')
33-
@patch('ads.opctl.backend.marketplace.local_marketplace.config.load_kube_config')
34-
def test_wait_for_pod_healthy(kube_config: Mock, kube_client: Mock, timer: Mock):
35-
local_marketplace_operator = LocalMarketplaceOperatorBackend(config={'execution': {}})
36-
timer.time = Mock(side_effect=[0.0, 11 * 60])
37-
kube_client.return_value.list_namespaced_pod.return_value.items.__getitem__.return_value.status.conditions.__iter__ = Mock(
38-
return_value=iter([V1PodCondition(type="Ready", status="True")]))
39-
40-
assert local_marketplace_operator._wait_for_pod_ready('namespace', 'pod_name') == 0
41-
kube_client.return_value.list_namespaced_pod.assert_called_once_with(namespace='namespace',
42-
label_selector='app.kubernetes.io/instance=pod_name')
43-
kube_config.assert_called()
44-
45-
46-
@patch('ads.opctl.backend.marketplace.local_marketplace.time')
47-
@patch('ads.opctl.backend.marketplace.local_marketplace.client.CoreV1Api')
48-
@patch('ads.opctl.backend.marketplace.local_marketplace.config.load_kube_config')
49-
def test_wait_for_pod_unhealthy(kube_config: Mock, kube_client: Mock, timer: Mock):
50-
local_marketplace_operator = LocalMarketplaceOperatorBackend(config={'execution': {}})
51-
timer.time = Mock(return_value=0.0)
52-
kube_client.return_value.list_namespaced_pod.return_value.items.__getitem__.return_value.status.conditions.__iter__ = Mock(
53-
return_value=iter([V1PodCondition(type="Ready", status="False")]))
54-
55-
assert local_marketplace_operator._wait_for_pod_ready('namespace', 'pod_name') == -1
56-
kube_client.return_value.list_namespaced_pod.assert_called()
57-
kube_config.assert_called()
58-
5931

6032
@patch('ads.opctl.backend.marketplace.local_marketplace.export_helm_chart')
6133
@patch('ads.opctl.backend.marketplace.local_marketplace.list_container_images')
@@ -73,19 +45,19 @@ def test_export_helm_chart_to_container_registry(list_api: Mock, export_api: Moc
7345
assert result[pattern] == f"{pattern}-1"
7446

7547

48+
@patch('ads.opctl.backend.marketplace.local_marketplace.wait_for_pod_ready')
7649
@patch('ads.opctl.backend.marketplace.local_marketplace.check_helm_login')
7750
@patch('ads.opctl.backend.marketplace.local_marketplace.check_prerequisites')
7851
@patch('ads.opctl.backend.marketplace.local_marketplace.run_helm_install')
7952
@patch('ads.opctl.backend.marketplace.local_marketplace.MarketplaceBackendRunner')
8053
@patch('ads.opctl.backend.marketplace.local_marketplace.operator_runtime')
8154
def test_run_with_python_success(operator_runtime: Mock, backend_runner: Mock, helm_install_api: Mock,
82-
check_prerequisites: Mock, check_helm_login: Mock
55+
check_prerequisites: Mock, check_helm_login: Mock, wait_for_pod_api:Mock
8356
):
8457
local_marketplace_operator = LocalMarketplaceOperatorBackend(config={'execution': {}}, operator_info=OperatorInfo())
8558
local_marketplace_operator._export_helm_chart_to_container_registry_ = Mock()
8659
local_marketplace_operator._save_helm_values_to_yaml_ = Mock()
87-
local_marketplace_operator.run_bugfix_command = Mock()
88-
local_marketplace_operator._wait_for_pod_ready = Mock(return_value=0)
60+
wait_for_pod_api.return_value = 0
8961
mock_helm_detail = Mock(spec=HelmMarketplaceListingDetails)
9062
mock_helm_detail.helm_values = {}
9163
mock_helm_detail.helm_app_name = 'helm_app_name'

tests/unitary/with_extras/operator/feature-store/test_marketplace_utils.py

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
import os
22
from unittest.mock import Mock, patch
33

4+
from kubernetes.client import V1PodCondition
5+
46
from ads.opctl.backend.marketplace.marketplace_utils import set_kubernetes_session_token_env, get_docker_bearer_token, \
5-
export_helm_chart, list_container_images
7+
export_helm_chart, list_container_images, wait_for_pod_ready
68

79

810
def test_set_kubernetes_session_token_env():
@@ -38,3 +40,30 @@ def test_list_container_image(oci_factory: Mock):
3840
listing_details = Mock()
3941
list_container_images(listing_details)
4042
oci_factory.return_value.artifacts.list_container_images.assert_called_once()
43+
44+
@patch('ads.opctl.backend.marketplace.marketplace_utils.time')
45+
@patch('kubernetes.client.CoreV1Api')
46+
@patch('kubernetes.config.load_kube_config')
47+
def test_wait_for_pod_unhealthy(kube_config: Mock, kube_client: Mock, timer: Mock):
48+
timer.time = Mock(return_value=0.0)
49+
kube_client.return_value.list_namespaced_pod.return_value.items.__getitem__.return_value.status.conditions.__iter__ = Mock(
50+
return_value=iter([V1PodCondition(type="Ready", status="False")]))
51+
52+
assert wait_for_pod_ready('namespace', 'pod_name') == -1
53+
kube_client.return_value.list_namespaced_pod.assert_called()
54+
kube_config.assert_called()
55+
56+
@patch('ads.opctl.backend.marketplace.marketplace_utils.time')
57+
@patch('kubernetes.client.CoreV1Api')
58+
@patch('kubernetes.config.load_kube_config')
59+
def test_wait_for_pod_healthy(kube_config: Mock, kube_client: Mock, timer: Mock):
60+
timer.time = Mock(side_effect=[0.0, 11 * 60])
61+
kube_client.return_value.list_namespaced_pod.return_value.items.__getitem__.return_value.status.conditions.__iter__ = Mock(
62+
return_value=iter([V1PodCondition(type="Ready", status="True")]))
63+
64+
assert wait_for_pod_ready('namespace', 'pod_name') == 0
65+
kube_client.return_value.list_namespaced_pod.assert_called_once_with(namespace='namespace',
66+
label_selector='app.kubernetes.io/instance=pod_name')
67+
kube_config.assert_called()
68+
69+

tests/unitary/with_extras/operator/feature-store/test_prerequisite_checker.py

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
from subprocess import CompletedProcess
22
from unittest.mock import patch, Mock, call
33

4+
import pytest
45
from oci.marketplace.models import AcceptedAgreementSummary, AgreementSummary
56

67
from ads.opctl.backend.marketplace.models.marketplace_type import HelmMarketplaceListingDetails, \
78
MarketplaceListingDetails
89
from ads.opctl.backend.marketplace.prerequisite_checker import check_prerequisites, _prompt_kubernetes_confirmation_, \
9-
_check_binaries_, _check_license_for_listing_
10+
_check_binaries_, _check_license_for_listing_, BinaryValidation
1011

1112

1213
@patch(
@@ -32,7 +33,7 @@ def test_prompt_kubernetes_confirmation(click: Mock):
3233

3334
@patch("ads.opctl.backend.marketplace.prerequisite_checker.subprocess.run")
3435
def test_check_binaries_success(subprocess_runner: Mock):
35-
binaries = ["bin_a", "bin_b"]
36+
binaries = [BinaryValidation("bin_a", ""), BinaryValidation("bin_b", "")]
3637
subprocess_runner.return_value = CompletedProcess(args="", returncode=0)
3738
_check_binaries_(binaries)
3839
subprocess_runner.assert_has_calls([
@@ -43,13 +44,14 @@ def test_check_binaries_success(subprocess_runner: Mock):
4344

4445
@patch("ads.opctl.backend.marketplace.prerequisite_checker.subprocess.run")
4546
def test_check_binaries_failure(subprocess_runner: Mock):
46-
binaries = ["bin_a", "bin_b"]
47-
subprocess_runner.return_value = CompletedProcess(args="", returncode=-1)
48-
_check_binaries_(binaries)
49-
subprocess_runner.assert_has_calls([
50-
call(['which', 'bin_a'], capture_output=True),
51-
call(['which', 'bin_b'], capture_output=True)
52-
])
47+
with pytest.raises(Exception):
48+
binaries = [BinaryValidation("bin_a", ""), BinaryValidation("bin_b", "")]
49+
subprocess_runner.return_value = CompletedProcess(args="", returncode=-1)
50+
_check_binaries_(binaries)
51+
subprocess_runner.assert_has_calls([
52+
call(['which', 'bin_a'], capture_output=True),
53+
call(['which', 'bin_b'], capture_output=True)
54+
])
5355

5456

5557
@patch("ads.opctl.backend.marketplace.prerequisite_checker.get_marketplace_client")

0 commit comments

Comments
 (0)