Skip to content

Commit 2ef8871

Browse files
authored
[DPE-6664] Make username mandatory in set-password (#846)
* Make username mandatory * Second get password method * Default in get-password
1 parent 77d8210 commit 2ef8871

File tree

2 files changed

+16
-9
lines changed

2 files changed

+16
-9
lines changed

src/charm.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1507,13 +1507,14 @@ def _on_set_password(self, event: ActionEvent) -> None:
15071507
event.fail("The action can be run only on leader unit")
15081508
return
15091509

1510-
username = event.params.get("username", USER)
1511-
if username not in SYSTEM_USERS and self.is_ldap_enabled:
1512-
event.fail("The action can be run only for system users when LDAP is enabled")
1510+
if not (username := event.params.get("username")):
1511+
event.fail("The action requires a username")
15131512
return
15141513
if username not in SYSTEM_USERS:
15151514
event.fail(
1516-
f"The action can be run only for system users:"
1515+
"The action can be run only for system users when LDAP is enabled"
1516+
if self.is_ldap_enabled
1517+
else "The action can be run only for system users:"
15171518
f" {', '.join(SYSTEM_USERS)} not {username}"
15181519
)
15191520
return

tests/unit/test_charm.py

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -854,14 +854,16 @@ def test_on_set_password(harness):
854854
patch("charm.PostgresqlOperatorCharm.postgresql") as _postgresql,
855855
patch("charm.Patroni.are_all_members_ready") as _are_all_members_ready,
856856
patch("charm.PostgresqlOperatorCharm._on_leader_elected"),
857+
patch("charm.new_password", return_value="newpass"),
857858
):
858859
# Create a mock event.
859860
mock_event = MagicMock(params={})
860861

861862
# Set some values for the other mocks.
862-
_are_all_members_ready.side_effect = [False, True, True, True, True]
863-
_postgresql.update_user_password = PropertyMock(
864-
side_effect=[PostgreSQLUpdateUserPasswordError, None, None, None]
863+
_are_all_members_ready.return_value = False
864+
_postgresql.update_user_password = PropertyMock()
865+
_postgresql.update_user_password.return_value.side_effect = (
866+
PostgreSQLUpdateUserPasswordError
865867
)
866868

867869
# Test trying to set a password through a non leader unit.
@@ -878,6 +880,7 @@ def test_on_set_password(harness):
878880
_set_secret.assert_not_called()
879881

880882
# Test without providing the username option but without all cluster members ready.
883+
_are_all_members_ready.return_value = True
881884
mock_event.reset_mock()
882885
del mock_event.params["username"]
883886
harness.charm._on_set_password(mock_event)
@@ -891,14 +894,17 @@ def test_on_set_password(harness):
891894
_set_secret.assert_not_called()
892895

893896
# Test without providing the username option.
897+
mock_event.reset_mock()
898+
_postgresql.update_user_password.return_value.side_effect = None
894899
harness.charm._on_set_password(mock_event)
895-
assert _set_secret.call_args_list[0][0][1] == "operator-password"
900+
mock_event.fail.assert_called_once()
901+
_set_secret.assert_not_called()
896902

897903
# Also test providing the username option.
898904
_set_secret.reset_mock()
899905
mock_event.params["username"] = "replication"
900906
harness.charm._on_set_password(mock_event)
901-
assert _set_secret.call_args_list[0][0][1] == "replication-password"
907+
_set_secret.assert_called_once_with("app", "replication-password", "newpass")
902908

903909
# And test providing both the username and password options.
904910
_set_secret.reset_mock()

0 commit comments

Comments
 (0)