def test_wait_for_completion(mocker): workflow_status_mock = MagicMock() workflow_status_mock.phase = 'Succeeded' get_workflow_mock = mocker.patch('platform_resources.workflow.ArgoWorkflow.get', return_value=workflow_status_mock) test_workflow = ArgoWorkflow() test_workflow.wait_for_completion() assert get_workflow_mock.call_count == 1
def test_wait_for_completion_failure(mocker): workflow_status_mock = MagicMock() workflow_status_mock.phase = 'Failed' get_workflow_mock = mocker.patch('platform_resources.workflow.ArgoWorkflow.get', return_value=workflow_status_mock) test_workflow = ArgoWorkflow() with pytest.raises(RuntimeError): test_workflow.wait_for_completion() assert get_workflow_mock.call_count == 1
def test_set_parameters_error(): test_workflow = ArgoWorkflow() test_workflow.body = { 'spec': { 'arguments': { 'parameters': [{ 'name': 'test-param-1', 'value': 'test-value-1' }, { 'name': 'test-param-2' }] } } } with pytest.raises(KeyError): test_workflow.parameters = {'test-param-1': 'new-value'}
def test_parameters(): test_workflow = ArgoWorkflow() test_workflow.body = { 'spec': { 'arguments': { 'parameters': [{ 'name': 'test-param-1', 'value': 'test-value-1' }, { 'name': 'test-param-2', 'value': 'test-value-2' }] } } } assert test_workflow.parameters == { 'test-param-1': 'test-value-1', 'test-param-2': 'test-value-2' }
from cli_text_consts import ModelExportCmdTexts as Texts from commands.model.common import workflow_description from commands.model.export import export from platform_resources.workflow import ArgoWorkflow, QUEUED_PHASE FEM_NAME = "EXPORT_1" SEM_NAME = "EXPORT_2" FEM_PARAMETERS = "PARAMS_1" SEM_PARAMETERS = "PARAMS_2" FEM_START_DATE = '2000-01-01' FEM_NAMESPACE = 'test-namespace' TEST_AGROWORKFLOW = ArgoWorkflow(name=FEM_NAME, started_at=FEM_START_DATE, finished_at=None, namespace=FEM_NAMESPACE, phase=None) TWO_MODEL_OUTPUT = [ workflow_description(name=FEM_NAME, parameters=FEM_PARAMETERS), workflow_description(name=SEM_NAME, parameters=SEM_PARAMETERS) ] def setup_mocks(mocker): mocker.patch('commands.model.export.get_kubectl_current_context_namespace', return_value='fake-namespace') mocker.patch('platform_resources.workflow.ArgoWorkflow.from_yaml', return_value=mocker.MagicMock()) mocker.patch('platform_resources.workflow.ArgoWorkflow.get',
# limitations under the License. # from unittest.mock import MagicMock import pytest from click.testing import CliRunner from kubernetes.client import CustomObjectsApi from commands.workflow.logs import logs from cli_text_consts import WorkflowLogsTexts as Texts from logs_aggregator.k8s_log_entry import LogEntry from platform_resources.workflow import ArgoWorkflow FAKE_WORKFLOW = ArgoWorkflow( name='fake-workflow', namespace='fake-namespace', k8s_custom_object_api=MagicMock(spec=CustomObjectsApi)) FAKE_LOGS = [ LogEntry(date='2018-04-17T09:28:39+00:00', content='Warning: Unable to load ' '/usr/share/zoneinfo/right/Factory as time zone. Skipping it.\n', pod_name='understood-gnat-mysql-868b556f8f-lwdr9', namespace='default'), LogEntry(date='2018-04-17T09:28:49+00:00', content='MySQL init process done. Ready for start up.\n', pod_name='understood-gnat-mysql-868b556f8f-lwdr9', namespace='default') ]
# limitations under the License. # from unittest.mock import MagicMock import pytest from click.testing import CliRunner from kubernetes.client import CustomObjectsApi from commands.workflow.view import view from cli_text_consts import WorkflowViewTexts as Texts from platform_resources.workflow import ArgoWorkflow FAKE_WORKFLOW = ArgoWorkflow( name='fake-workflow', namespace='fake-namespace', k8s_custom_object_api=MagicMock(spec=CustomObjectsApi), status={'phase': 'Succeeded'}) FAKE_WORKFLOW_PATH = '/bla/workflow.yaml' class WorkflowViewMocks: def __init__(self, mocker): self.get_namespace = mocker.patch( 'commands.workflow.view.get_kubectl_current_context_namespace', return_value='fake-namespace') self.get_workflow = mocker.patch( 'commands.workflow.view.ArgoWorkflow.get', return_value=FAKE_WORKFLOW)
# http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # import pytest from unittest.mock import MagicMock, mock_open, patch from typing import List from platform_resources.workflow import ArgoWorkflow workflow_w_two_param = ArgoWorkflow() workflow_w_two_param.body = {'spec': {'arguments': {'parameters': [{'name': 'test-param-1', 'value': 'test-value-1'}, {'name': 'test-param-2', 'value': 'test-value-2'}]}}} workflow_wo_value = ArgoWorkflow() workflow_wo_value.body = {'spec': {'arguments': {'parameters': [{'name': 'test-param-1', 'value': 'test-value-1'}, {'name': 'test-param-2'}]}}} process_template = ''' apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: process-template- spec: entrypoint: process-template templates:
import pytest from click.testing import CliRunner from kubernetes.client import CustomObjectsApi from commands.model.status import status from cli_text_consts import ModelStatusCmdTexts as Texts from platform_resources.workflow import ArgoWorkflow, ArgoWorkflowStep MODEL_STEPS = [ ArgoWorkflowStep(name="model1", phase="Running"), ArgoWorkflowStep(name="model2", phase="Failed") ] MODEL = ArgoWorkflow(name='fake-workflow', namespace='fake-namespace', k8s_custom_object_api=MagicMock(spec=CustomObjectsApi), phase='Succeeded', steps=MODEL_STEPS) BUILD_MODEL = ArgoWorkflow( name='fake-workflow', namespace='fake-namespace', k8s_custom_object_api=MagicMock(spec=CustomObjectsApi), phase='Succeeded', steps=MODEL_STEPS, body={'spec': { 'meta-data': [{ 'labels': { 'type': ['buildctl'] } }]
import pytest from click.testing import CliRunner from kubernetes.client import CustomObjectsApi from commands.model.status import status from cli_text_consts import ModelStatusCmdTexts as Texts from platform_resources.workflow import ArgoWorkflow, ArgoWorkflowStep MODEL_STEPS = [ ArgoWorkflowStep(name="model1", phase="Running"), ArgoWorkflowStep(name="model2", phase="Failed") ] MODEL = ArgoWorkflow(name='fake-workflow', namespace='fake-namespace', k8s_custom_object_api=MagicMock(spec=CustomObjectsApi), phase='Succeeded', steps=MODEL_STEPS) class ModelStatusMocks: def __init__(self, mocker): self.get_namespace = mocker.patch( 'commands.model.status.get_kubectl_current_context_namespace', return_value='fake-namespace') self.get_workflow = mocker.patch( 'commands.model.status.ArgoWorkflow.get', return_value=MODEL) @pytest.fixture() def status_mocks(mocker) -> ModelStatusMocks:
from commands.model.status import status from cli_text_consts import ModelStatusCmdTexts as Texts from platform_resources.workflow import ArgoWorkflow, ArgoWorkflowStep MODEL_STEPS = [ ArgoWorkflowStep(name="model1", phase="Running"), ArgoWorkflowStep(name="model2", phase="Failed") ] MODEL = ArgoWorkflow(name='fake-workflow', namespace='fake-namespace', k8s_custom_object_api=MagicMock(spec=CustomObjectsApi), phase='Succeeded', steps=MODEL_STEPS, body={ 'spec': { 'templates': [{ 'container': { 'command': ['other command'] } }] } }) BUILD_MODEL = ArgoWorkflow( name='fake-workflow', namespace='fake-namespace', k8s_custom_object_api=MagicMock(spec=CustomObjectsApi), phase='Succeeded', steps=MODEL_STEPS, body={'spec': { 'templates': [{