Skip to content

Commit 77beaf6

Browse files
authored
pin pytest-asyncio (#430)
* pin pytest-asyncio * updated, accelerated mysql-root test with current osm bundle * bump lib * wait mongo be ready to workaround initalization issue * juju 2 compatible mongodb-k8s * bump lib
1 parent 7273a25 commit 77beaf6

File tree

5 files changed

+55
-48
lines changed

5 files changed

+55
-48
lines changed

lib/charms/data_platform_libs/v0/upgrade.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -285,7 +285,7 @@ def restart(self, event) -> None:
285285

286286
# Increment this PATCH version before using `charmcraft publish-lib` or reset
287287
# to 0 if you are raising the major API version
288-
LIBPATCH = 16
288+
LIBPATCH = 17
289289

290290
PYDEPS = ["pydantic>=1.10,<2", "poetry-core"]
291291

@@ -907,6 +907,17 @@ def _on_upgrade_charm(self, event: UpgradeCharmEvent) -> None:
907907
logger.error(e)
908908
self.set_unit_failed()
909909
return
910+
top_unit_id = self.upgrade_stack[-1]
911+
top_unit = self.charm.model.get_unit(f"{self.charm.app.name}/{top_unit_id}")
912+
if (
913+
top_unit == self.charm.unit
914+
and self.peer_relation.data[self.charm.unit].get("state") == "recovery"
915+
):
916+
# While in a rollback and the Juju leader unit is the top unit in the upgrade stack, emit the event
917+
# for this unit to start the rollback.
918+
self.peer_relation.data[self.charm.unit].update({"state": "ready"})
919+
self.on_upgrade_changed(event)
920+
return
910921
self.charm.unit.status = WaitingStatus("other units upgrading first...")
911922
self.peer_relation.data[self.charm.unit].update({"state": "ready"})
912923

lib/charms/grafana_k8s/v0/grafana_dashboard.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -219,7 +219,7 @@ def __init__(self, *args):
219219
# Increment this PATCH version before using `charmcraft publish-lib` or reset
220220
# to 0 if you are raising the major API version
221221

222-
LIBPATCH = 35
222+
LIBPATCH = 36
223223

224224
logger = logging.getLogger(__name__)
225225

@@ -1050,6 +1050,7 @@ def __init__(
10501050

10511051
self.framework.observe(self._charm.on.leader_elected, self._update_all_dashboards_from_dir)
10521052
self.framework.observe(self._charm.on.upgrade_charm, self._update_all_dashboards_from_dir)
1053+
self.framework.observe(self._charm.on.config_changed, self._update_all_dashboards_from_dir)
10531054

10541055
self.framework.observe(
10551056
self._charm.on[self._relation_name].relation_created,

poetry.lock

Lines changed: 7 additions & 17 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pyproject.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ urllib3 = "^1.26.16"
7777
lightkube = "^0.14.0"
7878
kubernetes = "^27.2.0"
7979
allure-pytest = "^2.13.2"
80-
80+
pytest-asyncio = "^0.21.1"
8181

8282
[tool.coverage.run]
8383
branch = true
@@ -89,6 +89,7 @@ show_missing = true
8989
minversion = "6.0"
9090
log_cli_level = "INFO"
9191
markers = ["unstable", "juju3", "only_with_juju_secrets", "only_without_juju_secrets"]
92+
asyncio_mode = "auto"
9293

9394
# Formatting tools configuration
9495
[tool.black]

tests/integration/relations/test_mysql_root.py

Lines changed: 32 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ async def test_deploy_and_relate_osm_bundle(ops_test: OpsTest) -> None:
4848
application_name=APP_NAME,
4949
resources=resources,
5050
config=config,
51-
num_units=3,
51+
num_units=1,
5252
series="jammy",
5353
trust=True,
5454
),
@@ -57,70 +57,71 @@ async def test_deploy_and_relate_osm_bundle(ops_test: OpsTest) -> None:
5757
# not correctly deploy with the correct resources)
5858
ops_test.juju(
5959
"deploy",
60-
"--channel=latest/edge",
61-
"--trust",
60+
"--channel=latest/beta",
6261
"--resource",
6362
"keystone-image=opensourcemano/keystone:testing-daily",
6463
"osm-keystone",
65-
"osm-keystone",
6664
),
6765
ops_test.model.deploy(
6866
"osm-pol",
6967
application_name="osm-pol",
70-
channel="latest/candidate",
68+
channel="latest/beta",
7169
resources=osm_pol_resources,
70+
trust=True,
71+
),
72+
ops_test.model.deploy(
73+
"kafka-k8s", application_name="kafka", trust=True, channel="latest/stable"
7274
),
7375
ops_test.model.deploy(
74-
"charmed-osm-kafka-k8s",
75-
application_name="osm-kafka",
76+
"zookeeper-k8s", application_name="zookeeper", channel="latest/stable"
77+
),
78+
# sticking to revision that support both juju 2.9.x and 3.x
79+
ops_test.model.deploy(
80+
"mongodb-k8s",
81+
application_name="mongodb",
82+
channel="5/edge",
83+
revision=36,
84+
series="jammy",
7685
),
77-
ops_test.model.deploy("charmed-osm-zookeeper-k8s", application_name="osm-zookeeper"),
78-
ops_test.model.deploy("charmed-osm-mongodb-k8s", application_name="osm-mongodb"),
7986
)
8087

8188
# cannot block until "osm-keystone" units are available since they are not
8289
# registered with ops_test.model.applications (due to the way it's deployed)
83-
await ops_test.model.block_until(
84-
lambda: len(ops_test.model.applications[APP_NAME].units) == 3,
90+
await ops_test.model.wait_for_idle(
91+
apps=[APP_NAME, "mongodb"],
92+
status="active",
8593
timeout=1000,
8694
)
8795
await ops_test.model.block_until(
8896
lambda: len(ops_test.model.applications["osm-pol"].units) == 1,
8997
timeout=1000,
9098
)
9199
await ops_test.model.block_until(
92-
lambda: len(ops_test.model.applications["osm-kafka"].units) == 1,
100+
lambda: len(ops_test.model.applications["kafka"].units) == 1,
93101
timeout=1000,
94102
)
95103
await ops_test.model.block_until(
96-
lambda: len(ops_test.model.applications["osm-zookeeper"].units) == 1,
104+
lambda: len(ops_test.model.applications["zookeeper"].units) == 1,
97105
timeout=1000,
98106
)
99107
await ops_test.model.block_until(
100-
lambda: len(ops_test.model.applications["osm-mongodb"].units) == 1,
108+
lambda: len(ops_test.model.applications["mongodb"].units) == 1,
101109
timeout=1000,
102110
)
103111

104-
await ops_test.model.relate("osm-kafka:zookeeper", "osm-zookeeper:zookeeper")
112+
logger.info("Relate kafka and zookeeper")
113+
await ops_test.model.relate("kafka:zookeeper", "zookeeper:zookeeper")
105114
await ops_test.model.block_until(
106115
lambda: is_relation_joined(ops_test, "zookeeper", "zookeeper"),
107116
timeout=1000,
108117
)
109118

110-
# osm-zookeeper is never `active` long enough (15 seconds is necessary),
111-
# it constantly changes state `active`<>`maintenance`:
112-
# > osm-zookeeper/0 [idle] maintenance: Sending Zookeeper configuration
113-
await ops_test.model.wait_for_idle(
114-
apps=[APP_NAME, "osm-kafka", "osm-mongodb"],
115-
status="active",
116-
raise_on_blocked=True,
117-
timeout=1000,
118-
)
119119
await ops_test.model.block_until(
120-
lambda: ops_test.model.applications["osm-zookeeper"].status == "active",
120+
lambda: ops_test.model.applications["zookeeper"].status == "active",
121121
timeout=1000,
122122
)
123123

124+
logger.info("Relate keystone and mysql")
124125
await ops_test.model.relate("osm-keystone:db", f"{APP_NAME}:mysql-root")
125126
await ops_test.model.block_until(
126127
lambda: is_relation_joined(ops_test, "db", "mysql-root"), timeout=1000
@@ -133,16 +134,19 @@ async def test_deploy_and_relate_osm_bundle(ops_test: OpsTest) -> None:
133134
timeout=1000,
134135
)
135136

136-
await ops_test.model.relate("osm-pol:mongodb", "osm-mongodb:mongo")
137+
logger.info("Relate osm-pol and mongo")
138+
await ops_test.model.relate("osm-pol:mongodb", "mongodb:database")
137139
await ops_test.model.block_until(
138-
lambda: is_relation_joined(ops_test, "mongodb", "mongo"), timeout=1000
140+
lambda: is_relation_joined(ops_test, "mongodb", "database"), timeout=1000
139141
)
140142

141-
await ops_test.model.relate("osm-pol:kafka", "osm-kafka:kafka")
143+
logger.info("Relate osm-pol and kafka")
144+
await ops_test.model.relate("osm-pol:kafka", "kafka:kafka")
142145
await ops_test.model.block_until(
143146
lambda: is_relation_joined(ops_test, "kafka", "kafka"), timeout=1000
144147
)
145148

149+
logger.info("Relate osm-pol and mysql")
146150
await ops_test.model.relate("osm-pol:mysql", f"{APP_NAME}:mysql-root")
147151
await ops_test.model.block_until(
148152
lambda: is_relation_joined(ops_test, "mysql", "mysql-root"),

0 commit comments

Comments
 (0)