Skip to content

Commit

Permalink
Add stateful dark storage test
Browse files Browse the repository at this point in the history
  • Loading branch information
eivindjahren committed Oct 2, 2024
1 parent 37ad8b1 commit cafa085
Show file tree
Hide file tree
Showing 4 changed files with 67 additions and 7 deletions.
6 changes: 5 additions & 1 deletion src/ert/dark_storage/endpoints/updates.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,8 @@
from fastapi import APIRouter
from fastapi import APIRouter, Depends

from ert.dark_storage.enkf import get_storage

DEFAULT_STORAGE = Depends(get_storage)

router = APIRouter(tags=["ensemble"])

Expand Down
15 changes: 10 additions & 5 deletions src/ert/dark_storage/enkf.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,16 @@


def get_storage() -> Storage:
global _storage
global _storage # noqa
if _storage is None:
try:
return (_storage := open_storage(os.environ["ERT_STORAGE_ENS_PATH"]))
except RuntimeError as err:
raise InternalServerError(f"{err!s}") from err
_storage = update_storage()
_storage.refresh()
return _storage


def update_storage() -> Storage:
global _storage
try:
return (_storage := open_storage(os.environ["ERT_STORAGE_ENS_PATH"]))
except RuntimeError as err:
raise InternalServerError(f"{err!s}") from err
50 changes: 50 additions & 0 deletions tests/ert/unit_tests/dark_storage/test_dark_storage_state.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
import os
from uuid import UUID

import pytest
from hypothesis import note, settings
from hypothesis.stateful import rule
from starlette.testclient import TestClient

from ert.dark_storage.app import app
from ert.dark_storage.enkf import update_storage
from tests.ert.unit_tests.storage.test_local_storage import StatefulStorageTest


@settings(max_examples=100)
class DarkStorageStateTest(StatefulStorageTest):
def __init__(self):
super().__init__()
self.prev_no_token = os.environ.get("ERT_STORAGE_NO_TOKEN")
self.prev_ens_path = os.environ.get("ERT_STORAGE_ENS_PATH")
os.environ["ERT_STORAGE_NO_TOKEN"] = "yup"
os.environ["ERT_STORAGE_ENS_PATH"] = str(self.storage.path)
update_storage()
self.client = TestClient(app)

@rule()
def get_experiment_through_client(self):
self.client.get("/updates/storage")
response = self.client.get("/experiments")
experiment_records = response.json()
note(str((experiment_records, list(self.storage.experiments))))
assert len(experiment_records) == len(list(self.storage.experiments))
for record in experiment_records:
storage_experiment = self.storage.get_experiment(UUID(record["id"]))
assert {UUID(i) for i in record["ensemble_ids"]} == {
ens.id for ens in storage_experiment.ensembles
}

def teardown(self):
super().teardown()
if self.prev_no_token is not None:
os.environ["ERT_STORAGE_NO_TOKEN"] = self.prev_no_token
else:
del os.environ["ERT_STORAGE_NO_TOKEN"]
if self.prev_ens_path is not None:
os.environ["ERT_STORAGE_ENS_PATH"] = self.prev_ens_path
else:
del os.environ["ERT_STORAGE_ENS_PATH"]


TestDarkStorage = pytest.mark.integration_test(DarkStorageStateTest.TestCase)
3 changes: 2 additions & 1 deletion tests/ert/unit_tests/storage/test_local_storage.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
import numpy as np
import pytest
import xarray as xr
from hypothesis import assume, given
from hypothesis import assume, given, note
from hypothesis.extra.numpy import arrays
from hypothesis.stateful import Bundle, RuleBasedStateMachine, initialize, rule

Expand Down Expand Up @@ -585,6 +585,7 @@ def __init__(self):
super().__init__()
self.tmpdir = tempfile.mkdtemp(prefix="StatefulStorageTest")
self.storage = open_storage(self.tmpdir + "/storage/", "w")
note(f"storage path is: {self.storage.path}")
self.model: Dict[UUID, Experiment] = {}
assert list(self.storage.ensembles) == []

Expand Down

0 comments on commit cafa085

Please sign in to comment.