[LTP] [PATCH v4 02/31] testcases: sysfs: Add sys_power01
Cyril Hrubis
chrubis@suse.cz
Thu Aug 27 13:21:28 CEST 2026
A test for sysfs/power/* files.
Signed-off-by: Cyril Hrubis <chrubis@suse.cz>
---
include/tst_path_defs.h | 3 +
runtest/sysfs | 1 +
testcases/kernel/Makefile | 1 +
testcases/kernel/sysfs/Makefile | 7 +++
testcases/kernel/sysfs/power/.gitignore | 1 +
testcases/kernel/sysfs/power/Makefile | 7 +++
testcases/kernel/sysfs/power/sys_power01.c | 70 ++++++++++++++++++++++
7 files changed, 90 insertions(+)
create mode 100644 runtest/sysfs
create mode 100644 testcases/kernel/sysfs/Makefile
create mode 100644 testcases/kernel/sysfs/power/.gitignore
create mode 100644 testcases/kernel/sysfs/power/Makefile
create mode 100644 testcases/kernel/sysfs/power/sys_power01.c
diff --git a/include/tst_path_defs.h b/include/tst_path_defs.h
index 35fb24274..b13559af8 100644
--- a/include/tst_path_defs.h
+++ b/include/tst_path_defs.h
@@ -92,4 +92,7 @@
#define MEMINFO_HPAGE_SURP "HugePages_Surp:"
#define MEMINFO_HPAGE_SIZE "Hugepagesize:"
+/* SYSFS */
+#define PATH_SYS_POWER "/sys/power"
+
#endif /* TST_PATH_DEFS__ */
diff --git a/runtest/sysfs b/runtest/sysfs
new file mode 100644
index 000000000..e679cacb1
--- /dev/null
+++ b/runtest/sysfs
@@ -0,0 +1 @@
+sys_power01 sys_power01
diff --git a/testcases/kernel/Makefile b/testcases/kernel/Makefile
index ac816e4e8..6b8367fe0 100644
--- a/testcases/kernel/Makefile
+++ b/testcases/kernel/Makefile
@@ -36,6 +36,7 @@ SUBDIRS += connectors \
sched \
security \
sound \
+ sysfs \
thermal \
tracing \
uevents \
diff --git a/testcases/kernel/sysfs/Makefile b/testcases/kernel/sysfs/Makefile
new file mode 100644
index 000000000..654cda49e
--- /dev/null
+++ b/testcases/kernel/sysfs/Makefile
@@ -0,0 +1,7 @@
+# SPDX-License-Identifier: GPL-2.0-or-later
+# Copyright (c) 2026 Cyril Hrubis <chrubis@suse.cz>
+
+top_srcdir ?= ../../..
+
+include $(top_srcdir)/include/mk/env_pre.mk
+include $(top_srcdir)/include/mk/generic_trunk_target.mk
diff --git a/testcases/kernel/sysfs/power/.gitignore b/testcases/kernel/sysfs/power/.gitignore
new file mode 100644
index 000000000..835842cd0
--- /dev/null
+++ b/testcases/kernel/sysfs/power/.gitignore
@@ -0,0 +1 @@
+/sys_power01
diff --git a/testcases/kernel/sysfs/power/Makefile b/testcases/kernel/sysfs/power/Makefile
new file mode 100644
index 000000000..66e633f40
--- /dev/null
+++ b/testcases/kernel/sysfs/power/Makefile
@@ -0,0 +1,7 @@
+# SPDX-License-Identifier: GPL-2.0-or-later
+# Copyright (c) 2026 Cyril Hrubis <chrubis@suse.cz>
+
+top_srcdir ?= ../../../..
+
+include $(top_srcdir)/include/mk/testcases.mk
+include $(top_srcdir)/include/mk/generic_leaf_target.mk
diff --git a/testcases/kernel/sysfs/power/sys_power01.c b/testcases/kernel/sysfs/power/sys_power01.c
new file mode 100644
index 000000000..0c8430ca9
--- /dev/null
+++ b/testcases/kernel/sysfs/power/sys_power01.c
@@ -0,0 +1,70 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+ * Copyright (c) 2026 Cyril Hrubis <chrubis@suse.cz>
+ */
+
+/*\
+ * Sanity checks for the power management attributes exported under
+ * /sys/power/.
+ *
+ * The test verifies that:
+ *
+ * - pm_async, pm_debug_messages, pm_print_times and sync_on_suspend are
+ * booleans
+ * - pm_freeze_timeout and wakeup_count are non-negative
+ * - disk is a bracketed-choice file selecting one of platform, shutdown,
+ * reboot, suspend, test_resume or disabled. disk_show() in
+ * kernel/power/hibernate.c reports ``[disabled]`` as the sole token whenever
+ * hibernation_available() is false, e.g. because of the ``nohibernate`` boot
+ * parameter, kernel lockdown (common on Secure Boot enabled distributions)
+ * restricting LOCKDOWN_HIBERNATION, secretmem being in use, or CXL memory
+ * being active
+ * - mem_sleep is a bracketed-choice file selecting one of s2idle, shallow or
+ * deep
+ * - state lists only known sleep states (freeze, standby, mem, disk)
+ *
+ * Unlike disk and mem_sleep, state never marks a ``current`` value with
+ * brackets, it merely enumerates the sleep states the kernel supports, so it
+ * is validated as a plain token set rather than a bracketed choice.
+ *
+ * All checks skip gracefully with TCONF when a particular attribute is not
+ * present.
+ */
+
+#include <limits.h>
+#include "tst_test.h"
+#include "tst_sysfs_assert.h"
+#include "tst_path_defs.h"
+
+static const char *const disk_allowed[] = {
+ "platform", "shutdown", "reboot", "suspend", "test_resume",
+ "disabled", NULL
+};
+
+static const char *const mem_sleep_allowed[] = {
+ "s2idle", "shallow", "deep", NULL
+};
+
+static const char *const state_allowed[] = {
+ "freeze", "standby", "mem", "disk", NULL
+};
+
+static void do_test(void)
+{
+ TST_SYSFS_ASSERT_BOOL(PATH_SYS_POWER "/pm_async");
+ TST_SYSFS_ASSERT_BOOL(PATH_SYS_POWER "/pm_debug_messages");
+ TST_SYSFS_ASSERT_BOOL(PATH_SYS_POWER "/pm_print_times");
+ TST_SYSFS_ASSERT_BOOL(PATH_SYS_POWER "/sync_on_suspend");
+
+ TST_SYSFS_ASSERT_RANGELL(0, LONG_MAX, PATH_SYS_POWER "/pm_freeze_timeout");
+ TST_SYSFS_ASSERT_RANGELL(0, LONG_MAX, PATH_SYS_POWER "/wakeup_count");
+
+ TST_SYSFS_ASSERT_CHOICE(disk_allowed, NULL, 0, PATH_SYS_POWER "/disk");
+ TST_SYSFS_ASSERT_CHOICE(mem_sleep_allowed, NULL, 0, PATH_SYS_POWER "/mem_sleep");
+
+ TST_SYSFS_ASSERT_TOKENS(state_allowed, NULL, PATH_SYS_POWER "/state");
+}
+
+static struct tst_test test = {
+ .test_all = do_test,
+};
--
2.54.0
More information about the ltp
mailing list