Skip to content

Commit

Permalink
and now for sub and peers
Browse files Browse the repository at this point in the history
  • Loading branch information
PietroPasotti committed Feb 7, 2024
1 parent 75a09fd commit 3196c5f
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 36 deletions.
10 changes: 7 additions & 3 deletions scenario/state.py
Original file line number Diff line number Diff line change
Expand Up @@ -360,7 +360,9 @@ class RelationBase(_DCBase):
local_app_data: "RawDataBagContents" = dataclasses.field(default_factory=dict)
"""This application's databag for this relation."""

local_unit_data: "RawDataBagContents" = dataclasses.field(default_factory=dict)
local_unit_data: "RawDataBagContents" = dataclasses.field(
default_factory=lambda: DEFAULT_JUJU_DATABAG.copy(),
)
"""This unit's databag for this relation."""

@property
Expand Down Expand Up @@ -490,7 +492,9 @@ def _databags(self):
@dataclasses.dataclass(frozen=True)
class SubordinateRelation(RelationBase):
remote_app_data: "RawDataBagContents" = dataclasses.field(default_factory=dict)
remote_unit_data: "RawDataBagContents" = dataclasses.field(default_factory=dict)
remote_unit_data: "RawDataBagContents" = dataclasses.field(
default_factory=lambda: DEFAULT_JUJU_DATABAG.copy(),
)

# app name and ID of the remote unit that *this unit* is attached to.
remote_app_name: str = "remote"
Expand Down Expand Up @@ -526,7 +530,7 @@ def remote_unit_name(self) -> str:
@dataclasses.dataclass(frozen=True)
class PeerRelation(RelationBase):
peers_data: Dict["UnitID", "RawDataBagContents"] = dataclasses.field(
default_factory=lambda: {0: {}},
default_factory=lambda: {0: DEFAULT_JUJU_DATABAG.copy()},
)
# mapping from peer unit IDs to their databag contents.
# Consistency checks will validate that *this unit*'s ID is not in here.
Expand Down
44 changes: 11 additions & 33 deletions tests/test_e2e/test_relations.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
from ops.framework import EventBase, Framework

from scenario.state import (
_DEFAULT_IP,
DEFAULT_JUJU_DATABAG,
PeerRelation,
Relation,
Expand Down Expand Up @@ -231,42 +230,21 @@ def callback(charm: CharmBase, event):
)


@pytest.mark.parametrize(
"evt_name",
("changed", "broken", "departed", "joined", "created"),
)
def test_relation_events_remote_units_data_defaults(mycharm, evt_name, caplog):
relation = Relation(
endpoint="foo",
interface="foo",
)
def test_relation_default_unit_data_regular():
relation = Relation("baz")
assert relation.local_unit_data == DEFAULT_JUJU_DATABAG
assert relation.remote_units_data == {0: DEFAULT_JUJU_DATABAG}

def callback(charm: CharmBase, event):
if isinstance(event, CollectStatusEvent):
return

assert event.app # that's always present
remote_unit = event.relation.units.pop()
def test_relation_default_unit_data_sub():
relation = SubordinateRelation("baz")
assert relation.local_unit_data == DEFAULT_JUJU_DATABAG
assert relation.remote_unit_data == DEFAULT_JUJU_DATABAG

assert event.relation.data[remote_unit] == DEFAULT_JUJU_DATABAG

mycharm._call = callback

trigger(
State(
relations=[
relation,
],
),
getattr(relation, f"{evt_name}_event"),
mycharm,
meta={
"name": "local",
"requires": {
"foo": {"interface": "foo"},
},
},
)
def test_relation_default_unit_data_peer():
relation = PeerRelation("baz")
assert relation.local_unit_data == DEFAULT_JUJU_DATABAG


@pytest.mark.parametrize(
Expand Down

0 comments on commit 3196c5f

Please sign in to comment.