Skip to content

Commit

Permalink
Merge pull request #49 from canonical/IAM-835
Browse files Browse the repository at this point in the history
Expose workload version
  • Loading branch information
nsklikas committed May 2, 2024
2 parents 94bd1a6 + 1d7d508 commit 4d8b14c
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 11 deletions.
5 changes: 5 additions & 0 deletions src/charm.py
Original file line number Diff line number Diff line change
Expand Up @@ -184,6 +184,7 @@ def __init__(self, *args: Any) -> None:

def _on_openfga_pebble_ready(self, event: PebbleReadyEvent) -> None:
"""Workload pebble ready."""
self._set_version()
self._update_workload(event)

def _on_config_changed(self, event: ConfigChangedEvent) -> None:
Expand Down Expand Up @@ -317,6 +318,10 @@ def _get_token(self) -> Optional[str]:
else:
return self._state.token

def _set_version(self) -> None:
version = self.openfga.get_version()
self.unit.set_workload_version(version)

@requires_state_setter
def _on_leader_elected(self, event: LeaderElectedEvent) -> None:
"""Leader elected."""
Expand Down
17 changes: 15 additions & 2 deletions tests/unit/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
from unittest.mock import MagicMock, PropertyMock

import pytest
from ops.testing import Harness
from ops.testing import ExecResult, Harness
from pytest_mock import MockerFixture

from charm import OpenFGAOperatorCharm
Expand All @@ -24,7 +24,6 @@ def harness(mocked_kubernetes_service_patcher: MagicMock) -> Generator[Harness,
tempdir = tempfile.TemporaryDirectory()
harness.charm.framework.charm_dir = pathlib.Path(tempdir.name)

harness.container_pebble_ready("openfga")
yield harness

harness.cleanup()
Expand Down Expand Up @@ -73,3 +72,17 @@ def mocked_token_urlsafe(mocker: MockerFixture) -> MagicMock:
@pytest.fixture()
def mocked_juju_version(mocker: MockerFixture) -> MagicMock:
return mocker.patch.dict(os.environ, {"JUJU_VERSION": "3.2.1"})


@pytest.fixture()
def mocked_workload_version(harness: Harness):
version = "1.0.0"
harness.handle_exec(
"openfga",
["openfga", "version"],
result=ExecResult(
stdout=b"",
stderr=f"OpenFGA version `{version}` build from `abcd1234` on `2024-04-01 12:34:56`",
),
)
return version
28 changes: 19 additions & 9 deletions tests/unit/test_charm.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
from unittest.mock import MagicMock

from ops.model import WaitingStatus
from ops.testing import ExecResult, Harness
from ops.testing import Harness

logger = logging.getLogger(__name__)

Expand Down Expand Up @@ -56,6 +56,7 @@ def test_on_config_changed(
mocked_token_urlsafe: MagicMock,
mocked_dsn: MagicMock,
mocked_migration_is_needed: MagicMock,
mocked_workload_version: int,
) -> None:
harness.container_pebble_ready("openfga")
setup_peer_relation(harness)
Expand Down Expand Up @@ -110,6 +111,7 @@ def test_on_openfga_relation_joined(
mocked_migration_is_needed: MagicMock,
mocked_dsn: MagicMock,
mocked_create_openfga_store: MagicMock,
mocked_workload_version: int,
) -> None:
ip = "10.0.0.1"
harness.add_network(ip)
Expand Down Expand Up @@ -142,6 +144,7 @@ def test_on_openfga_relation_joined_with_ingress(
mocked_migration_is_needed: MagicMock,
mocked_dsn: MagicMock,
mocked_create_openfga_store: MagicMock,
mocked_workload_version: int,
) -> None:
ip = "10.0.0.1"
harness.add_network(ip)
Expand Down Expand Up @@ -177,6 +180,7 @@ def test_on_openfga_relation_joined_with_secrets(
mocked_dsn: MagicMock,
mocked_create_openfga_store: MagicMock,
mocked_juju_version: MagicMock,
mocked_workload_version: int,
) -> None:
ip = "10.0.0.1"
harness.add_network(ip)
Expand Down Expand Up @@ -209,15 +213,8 @@ def test_update_status_with_container_cannot_connect(
mocked_dsn: MagicMock,
mocked_create_openfga_store: MagicMock,
mocked_juju_version: MagicMock,
mocked_workload_version: int,
) -> None:
harness.handle_exec(
"openfga",
["openfga", "version"],
result=ExecResult(
stdout=b"",
stderr=b"OpenFGA version `1.0.0` build from `abcd1234` on `2024-04-01 12:34:56`",
),
)
ip = "10.0.0.1"
harness.add_network(ip)
harness.container_pebble_ready("openfga")
Expand All @@ -227,3 +224,16 @@ def test_update_status_with_container_cannot_connect(
harness.set_can_connect(container="openfga", val=False)
harness.charm.on.update_status.emit()
assert harness.model.unit.status == WaitingStatus("waiting for the OpenFGA workload")


def test_workload_version(
harness: Harness,
mocked_token_urlsafe: MagicMock,
mocked_dsn: MagicMock,
mocked_create_openfga_store: MagicMock,
mocked_juju_version: MagicMock,
mocked_workload_version: int,
) -> None:
harness.container_pebble_ready("openfga")

assert harness.get_workload_version() == mocked_workload_version

0 comments on commit 4d8b14c

Please sign in to comment.