Skip to content

Commit 2a3cdf2

Browse files
committed
Fix bake-and-sign buttons staying enabled after signature key deletion
Deep-copy _feature_config_defaults in get_default_config() to prevent exec-based .mk file loading from mutating the module-level defaults via in-place dict.update(). This caused deleted signature keys to persist across requests, keeping the buttons enabled. CMK-33375 Change-Id: I1b8fa466f6e49ce3278a8e7c6b5bbb4d3b01971a
1 parent 02ab65a commit 2a3cdf2

3 files changed

Lines changed: 20 additions & 2 deletions

File tree

cmk/gui/config.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -246,7 +246,7 @@ def register_feature_config_defaults(defaults: dict[str, Any]) -> None:
246246

247247
def get_default_config() -> dict[str, Any]:
248248
default_config = asdict(Config()) # First apply the built-in config
249-
default_config.update(_feature_config_defaults)
249+
default_config.update(copy.deepcopy(_feature_config_defaults))
250250
default_config.update(_get_default_config_from_legacy_plugins())
251251
default_config.update(_get_default_config_from_module_plugins())
252252
return default_config

tests/gui_e2e/test_signature_keys_for_signing_agents.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,6 @@ def test_bake_and_sign(test_site: Site, dashboard_page: MainDashboard, with_key:
168168
agent_bakery_page.assert_baking_succeeded()
169169

170170

171-
@pytest.mark.skip(reason="CMK-33355")
172171
def test_bake_and_sign_disabled(dashboard_page: MainDashboard) -> None:
173172
"""Delete all keys, go to agents and check that the sign buttons are disabled."""
174173
signature_keys_page = SignatureKeysPage(dashboard_page.page)

tests/unit/cmk/gui/test_gui_config.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,25 @@ def test_feature_config_defaults_appear_in_default_config() -> None:
196196
cmk.gui.config._feature_config_defaults.pop("_test_feature_var", None)
197197

198198

199+
def test_feature_config_defaults_not_mutated_by_config_loading() -> None:
200+
"""Verify that get_default_config() deep-copies mutable values from _feature_config_defaults.
201+
202+
Without deep-copying, exec-based config loading (e.g. agent_signature_keys.update({...}))
203+
mutates the module-level defaults, causing stale data to persist across requests (CMK-33375).
204+
"""
205+
cmk.gui.config.register_feature_config_defaults({"_test_mutable_var": {}})
206+
try:
207+
default_config = cmk.gui.config.get_default_config()
208+
default_config["_test_mutable_var"]["injected_key"] = "injected_value"
209+
210+
assert cmk.gui.config._feature_config_defaults["_test_mutable_var"] == {}
211+
212+
default_config_2 = cmk.gui.config.get_default_config()
213+
assert default_config_2["_test_mutable_var"] == {}
214+
finally:
215+
cmk.gui.config._feature_config_defaults.pop("_test_mutable_var", None)
216+
217+
199218
def test_load_config(request_context: None) -> None:
200219
config_path = cmk.utils.paths.default_config_dir / "multisite.mk"
201220
config_path.unlink(missing_ok=True)

0 commit comments

Comments
 (0)