diff --git a/tests/client/client_common.py b/tests/client/client_common.py index 7037b791..15a8d8ba 100644 --- a/tests/client/client_common.py +++ b/tests/client/client_common.py @@ -260,6 +260,16 @@ def test_delete_image__not_only_meta_ok(ebnt: Ebonite, image_to_delete: Image, m assert ebnt.meta_repo.get_image_by_id(image_to_delete.id) is None +def test_get_default_environment(ebnt: Ebonite): + ebnt.default_env = 'Pseudo_env' + env = ebnt.get_default_environment() + assert env == 'Pseudo_env' + + ebnt.default_env = None + ebnt.get_default_environment() + assert ebnt.get_environment('docker_localhost') is not None + + @docker_test def test_build_and_run_instance(ebnt: Ebonite, regression_and_data, container_name, mock_env): reg, data = regression_and_data diff --git a/tests/core/objects/test_core.py b/tests/core/objects/test_core.py index bd5625c9..5a00b644 100644 --- a/tests/core/objects/test_core.py +++ b/tests/core/objects/test_core.py @@ -3,11 +3,13 @@ from pyjackson import deserialize, serialize from pyjackson.core import Unserializable -from ebonite.core.errors import (EboniteError, MetadataError, NonExistingModelError, NonExistingTaskError, +from ebonite.core.errors import (EboniteError, MetadataError, NonExistingEnvironmentError, NonExistingModelError, + NonExistingPipelineError, NonExistingProjectError, NonExistingTaskError, UnboundObjectError) from ebonite.core.objects import ModelWrapper from ebonite.core.objects.artifacts import Blobs, InMemoryBlob -from ebonite.core.objects.core import Model, Pipeline, Project, Task, _WrapperMethodAccessor +from ebonite.core.objects.core import (Model, Pipeline, PipelineStep, Project, RuntimeEnvironment, Task, + _WrapperMethodAccessor) from ebonite.core.objects.dataset_source import DatasetSource from ebonite.core.objects.metric import Metric from ebonite.core.objects.requirements import InstallableRequirement, Requirement, Requirements @@ -93,6 +95,18 @@ def test_project_serde(project_saved): serde_and_compare(project_saved) +def test_task_wo_project(task_saved): + task_saved.project_id = 666 + with pytest.raises(NonExistingProjectError): + task_saved.project + + +def test_task_delete_nonexistant_pipe(task_saved): + pipe = Pipeline(id=666, name='pipe', steps=[PipelineStep('a', 'b'), ], input_data=str, output_data=str) + with pytest.raises(NonExistingPipelineError): + task_saved.delete_pipeline(pipe) + + def test_task__project_property(project_saved_art, task): assert project_saved_art.has_artifact_repo assert project_saved_art.has_meta_repo @@ -179,6 +193,9 @@ def test_task__delete_model_with_artifacts(task_saved, model, artifact_repo): assert model.id is None assert model.task_id is None + task_saved.unbind_artifact_repo() + assert task_saved.has_artifact_repo is False + def test_task__delete_model__nonexistent(task_factory, model): model_task = task_factory(True) @@ -239,6 +256,8 @@ def test_task__delete_metric_non_existing(task_saved): def test_task__add_dataset(task_saved, dataset): + assert task_saved.has_dataset_repo is True + task_saved.add_dataset('data', dataset) assert 'data' in task_saved.datasets assert isinstance(task_saved.datasets['data'], DatasetSource) @@ -250,6 +269,9 @@ def test_task__add_dataset(task_saved, dataset): assert isinstance(task.datasets['data'], DatasetSource) assert not isinstance(task.datasets['data'], Unserializable) + task_saved.unbind_dataset_repo() + assert task_saved.has_dataset_repo is False + def test_task__add_dataset_exists(task_saved, dataset): task_saved.add_dataset('data', dataset) @@ -449,6 +471,15 @@ def f2(a): return model +def test_pipeline_wo_task(meta, len_model, task_saved): + pipeline = len_model.as_pipeline() + pipeline.task_id = task_saved.id + pipeline = meta.create_pipeline(pipeline) + pipeline.task_id = 666 + with pytest.raises(NonExistingTaskError): + pipeline.task + + def test_pipeline__append(double_model, len_model): p1 = double_model.as_pipeline() p2 = p1.append(len_model) @@ -548,6 +579,29 @@ def test_task__delete_pipeline(task_factory, pipeline_factory): # ################IMAGES########### +def test_image_wo_task(meta, image_factory, task_saved): + image = image_factory() + image.task_id = task_saved.id + image = meta.create_image(image) + image.task_id = 666 + with pytest.raises(NonExistingTaskError): + image.task + + with pytest.raises(UnboundObjectError): + image.environment + + env = RuntimeEnvironment('env') + env = meta.create_environment(env) + + image_2 = image_factory() + image_2.task_id = task_saved.id + image_2.environment_id = env.id + image_2 = meta.create_image(image_2) + image_2.environment_id = 666 + with pytest.raises(NonExistingEnvironmentError): + image_2.environment + + def test_task__no_images(task_factory): task = task_factory(True)