From 98e0c1ebe68c46853864ee2b13a21ecab9770872 Mon Sep 17 00:00:00 2001 From: Martin Pitt Date: Wed, 10 Jan 2024 14:34:30 +0100 Subject: [PATCH] kdump: Fix unhandled promise rejection on service start failure Log the error to the console instead of crashing the page. The UI already shows the failure in an alert. --- pkg/kdump/kdump.js | 10 ++++++---- test/verify/check-kdump | 26 ++++++++++++++++++++++++++ 2 files changed, 32 insertions(+), 4 deletions(-) diff --git a/pkg/kdump/kdump.js b/pkg/kdump/kdump.js index bf5a8e62d9d..f2eab375c5f 100644 --- a/pkg/kdump/kdump.js +++ b/pkg/kdump/kdump.js @@ -59,10 +59,12 @@ const initStore = function(rootElement) { const promise = desiredState ? dataStore.kdumpClient.ensureOn() : dataStore.kdumpClient.ensureOff(); dataStore.stateChanging = true; dataStore.render(); - promise.finally(function() { - dataStore.stateChanging = false; - dataStore.render(); - }); + promise + .catch(error => console.warn("Failed to change kdump state:", error)) + .finally(() => { + dataStore.stateChanging = false; + dataStore.render(); + }); } const render = function() { root.render({React.createElement(KdumpPage, { diff --git a/test/verify/check-kdump b/test/verify/check-kdump index 403f30580a0..b5368ec8bcc 100755 --- a/test/verify/check-kdump +++ b/test/verify/check-kdump @@ -214,6 +214,32 @@ class TestKdump(KdumpHelpers): b.wait_not_present(".automation-script-modal") m.execute("diff /etc/kdump.conf /etc/kdump.conf.orig", stdout=None) + # service errors + + m.execute("systemctl disable --now kdump.service") + self.assertActive(active=False) + b.wait_not_present(".pf-v5-c-alert__title") + + # service is absent (not installed) + m.execute("mv /usr/lib/systemd/system/kdump.service /usr/lib/systemd/system/kdump.service.disabled") + m.execute("systemctl daemon-reload") + b.wait_in_text(".pf-v5-c-alert__title", "Kdump service is not installed") + + # put it back, but cause error on startup + m.execute("mv /usr/lib/systemd/system/kdump.service.disabled /usr/lib/systemd/system/kdump.service") + m.write("/etc/systemd/system/kdump.service.d/break.conf", + "[Service]\nExecStart=\nExecStart=/bin/false\n") + m.execute("systemctl daemon-reload") + b.wait_not_present(".pf-v5-c-alert__title") + b.click(".pf-v5-c-switch__input") + b.wait_in_text(".pf-v5-c-alert__title", "Service has an error") + self.assertActive(active=False) + # "more details" leads to services page + b.click(".pf-v5-c-alert__title button") + b.switch_to_top() + b.wait_js_cond('window.location.pathname === "/system/services"') + b.wait_js_cond('window.location.hash === "#/kdump.service"') + @testlib.nondestructive def testConfiguration(self): b = self.browser