From 81b820b5344cb7b5047a3990d585a5f80d9fff74 Mon Sep 17 00:00:00 2001 From: Bart Schilperoort Date: Wed, 28 Aug 2024 14:48:04 +0200 Subject: [PATCH] Load docker image from test config file instead of hardcoded --- PyStemmusScope/bmi/implementation.py | 3 ++- tests/test_bmi_docker.py | 20 +++++++++++++++----- 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/PyStemmusScope/bmi/implementation.py b/PyStemmusScope/bmi/implementation.py index 17af3bb2..029c7e37 100644 --- a/PyStemmusScope/bmi/implementation.py +++ b/PyStemmusScope/bmi/implementation.py @@ -9,7 +9,8 @@ from bmipy.bmi import Bmi from PyStemmusScope.bmi.utils import InapplicableBmiMethods from PyStemmusScope.bmi.utils import nested_set -from PyStemmusScope.bmi.variable_reference import VARIABLES, BmiVariable +from PyStemmusScope.bmi.variable_reference import VARIABLES +from PyStemmusScope.bmi.variable_reference import BmiVariable from PyStemmusScope.config_io import read_config diff --git a/tests/test_bmi_docker.py b/tests/test_bmi_docker.py index a6b10e78..47621bd8 100644 --- a/tests/test_bmi_docker.py +++ b/tests/test_bmi_docker.py @@ -10,6 +10,7 @@ from PyStemmusScope import forcing_io from PyStemmusScope import soil_io from PyStemmusScope.bmi.docker_utils import pull_image +from PyStemmusScope.bmi.implementation import MODEL_VARNAMES from PyStemmusScope.bmi.implementation import StemmusScopeBmi from . import data_folder @@ -39,13 +40,14 @@ # fmt: on -def docker_available(): +def docker_available(cfg_file): try: docker.APIClient() + config = config_io.read_config(cfg_file) # Github Actions windows runners couldn't pull the image: if platform.system() == "Windows": - pull_image("ghcr.io/ecoextreml/stemmus_scope:1.5.0") + pull_image(config["DockerImage"]) return True except docker.errors.DockerException as err: @@ -144,7 +146,7 @@ def updated_model(uninitialized_model, prepare_data_config): model.finalize() -@pytest.mark.skipif(not docker_available(), reason="Docker not available") +@pytest.mark.skipif(not docker_available(cfg_file), reason="Docker not available") class TestUninitialized: def test_component_name(self, uninitialized_model): assert uninitialized_model.get_component_name() == "STEMMUS_SCOPE" @@ -168,7 +170,7 @@ def test_initialize(self, uninitialized_model, prepare_data_config): uninitialized_model.initialize(str(prepare_data_config)) -@pytest.mark.skipif(not docker_available(), reason="Docker not available") +@pytest.mark.skipif(not docker_available(cfg_file), reason="Docker not available") class TestInitializedModel: def test_input_item(self, initialized_model): assert isinstance(initialized_model.get_input_item_count(), int) @@ -218,7 +220,7 @@ def test_model_update(self, initialized_model): initialized_model.update() -@pytest.mark.skipif(not docker_available(), reason="Docker not available") +@pytest.mark.skipif(not docker_available(cfg_file), reason="Docker not available") class TestUpdatedModel: # Many of these should be available after init def test_get_current_time(self, updated_model): @@ -295,3 +297,11 @@ def test_itemsize(self, updated_model): def test_get_var_nbytes(self, updated_model): assert updated_model.get_var_nbytes("soil_temperature") == 8 * 55 + + @pytest.mark.parametrize("varname", MODEL_VARNAMES) + def test_get_vars(self, updated_model: StemmusScopeBmi, varname): + dest = np.zeros( + shape=updated_model.get_grid_size(updated_model.get_var_grid(varname)), + dtype=updated_model.get_var_type(varname), + ) + updated_model.get_value(varname, dest)