Skip to content

Commit d6fb2fe

Browse files
committed
Authentication unit test.
1 parent be8663d commit d6fb2fe

File tree

2 files changed

+39
-5
lines changed

2 files changed

+39
-5
lines changed

tests/unit/test_charm.py

Lines changed: 37 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,20 +10,54 @@
1010

1111
from charm import CassandraCharm
1212
from core.state import PEER_RELATION
13-
from managers.config import ConfigManager
1413

1514
BOOTSTRAP_RELATION = "bootstrap"
1615
PEER_SECRET = "cassandra-peers.cassandra.app"
1716

18-
# TODO: add start change password unit test
17+
18+
def test_start_change_password():
19+
"""Leader should generate & configure cassandra password."""
20+
ctx = testing.Context(CassandraCharm)
21+
relation = testing.PeerRelation(id=1, endpoint=PEER_RELATION)
22+
bootstrap_relation = testing.PeerRelation(id=2, endpoint=BOOTSTRAP_RELATION)
23+
secret = testing.Secret(label=PEER_SECRET, tracked_content={}, owner="app")
24+
state = testing.State(leader=True, relations={relation, bootstrap_relation}, secrets={secret})
25+
26+
with (
27+
patch("managers.config.ConfigManager.render_env") as render_env,
28+
patch("managers.config.ConfigManager.render_cassandra_config") as render_cassandra_config,
29+
patch(
30+
"managers.database.DatabaseManager.update_system_user_password"
31+
) as update_system_user_password,
32+
patch("charm.CassandraWorkload") as workload,
33+
patch(
34+
"managers.cluster.ClusterManager.is_healthy",
35+
new_callable=PropertyMock(return_value=True),
36+
),
37+
):
38+
workload.return_value.generate_password.return_value = "password"
39+
40+
state = ctx.run(ctx.on.start(), state)
41+
render_env.assert_called()
42+
render_cassandra_config.assert_called_once()
43+
assert render_cassandra_config.call_args.kwargs["authentication"] is False
44+
workload.return_value.start.assert_called()
45+
46+
render_cassandra_config.reset_mock()
47+
state = ctx.run(ctx.on.start(), state)
48+
update_system_user_password.assert_called_once_with("cassandra", "password")
49+
assert render_cassandra_config.call_args.kwargs["authentication"] is True
50+
workload.return_value.restart.assert_called()
1951

2052

2153
def test_start_leader():
2254
"""Leader should render all required configs and start workload."""
2355
ctx = testing.Context(CassandraCharm)
2456
relation = testing.PeerRelation(id=1, endpoint=PEER_RELATION)
2557
bootstrap_relation = testing.PeerRelation(id=2, endpoint=BOOTSTRAP_RELATION)
26-
secret = testing.Secret(label=PEER_SECRET, tracked_content={"cassandra-password": "ua"})
58+
secret = testing.Secret(
59+
label=PEER_SECRET, tracked_content={"cassandra-password": "ua"}, owner="app"
60+
)
2761
state = testing.State(leader=True, relations={relation, bootstrap_relation}, secrets={secret})
2862

2963
with (

tests/unit/test_config.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,8 @@ def test_render_env_preserves_existing_vars():
2323
config_manager.render_env(cassandra_limit_memory_mb=1024)
2424

2525
workload.cassandra_paths.env.read_text.assert_called()
26-
workload.cassandra_paths.env.write_text.assert_called()
27-
result = workload.cassandra_paths.env.write_text.call_args[0][0]
26+
workload.cassandra_paths.env.write_text.assert_called_once()
27+
result = workload.cassandra_paths.env.write_text.call_args.args[0]
2828
assert "EXTRA_VAR=extra_value" in result
2929
assert "PATH=/custom/path" in result
3030
assert "MAX_HEAP_SIZE=1024M" in result

0 commit comments

Comments
 (0)