* [PATCH 0/3] test: test recent regressions/features
@ 2025-06-23 6:26 Ahmad Fatoum
2025-06-23 6:26 ` [PATCH 1/3] test: self: idr: add test for idr_remove in idr_for_each_entry Ahmad Fatoum
` (3 more replies)
0 siblings, 4 replies; 7+ messages in thread
From: Ahmad Fatoum @ 2025-06-23 6:26 UTC (permalink / raw)
To: barebox
We had a couple of regressions around unmounting, for which fixes are
already in master or in-flight.
This series adds tests for that and also a new test for bootchooser.
They are combined just for convenience as they share dependencies.
This series depends on the patches in following series:
- 20250623062032.3527006-1-a.fatoum@barebox.org
- 20250623062253.3528292-1-a.fatoum@barebox.org
Ahmad Fatoum (3):
test: self: idr: add test for idr_remove in idr_for_each_entry
test: py: test mount/unmount of pstore file system
test: py: add bootchooser attempt decrement and locking test
arch/arm/configs/multi_v5_v6_defconfig | 1 +
arch/arm/configs/multi_v7_defconfig | 1 +
arch/arm/configs/multi_v8_defconfig | 1 +
common/boards/qemu-virt/qemu-virt-flash.dtso | 5 +
test/arm/virt@multi_v7_defconfig.yaml | 1 +
test/arm/virt@multi_v8_defconfig.yaml | 1 +
test/py/helper.py | 63 ++++++++
test/py/test_bootchooser.py | 158 +++++++++++++++++++
test/py/test_mount.py | 21 +++
test/riscv/qemu-virt64@rv64i_defconfig.yaml | 1 +
test/riscv/qemu@virt32_defconfig.yaml | 1 +
test/self/idr.c | 8 +
12 files changed, 262 insertions(+)
create mode 100644 test/py/test_bootchooser.py
create mode 100644 test/py/test_mount.py
--
2.39.5
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH 1/3] test: self: idr: add test for idr_remove in idr_for_each_entry
2025-06-23 6:26 [PATCH 0/3] test: test recent regressions/features Ahmad Fatoum
@ 2025-06-23 6:26 ` Ahmad Fatoum
2025-06-23 6:26 ` [PATCH 2/3] test: py: test mount/unmount of pstore file system Ahmad Fatoum
` (2 subsequent siblings)
3 siblings, 0 replies; 7+ messages in thread
From: Ahmad Fatoum @ 2025-06-23 6:26 UTC (permalink / raw)
To: barebox; +Cc: Ahmad Fatoum
If we have had this test earlier, it would have caught that
idr_for_each_entry didn't guarantee safe iteration while freeing.
Add a test, so we may catach future issues of this sort.
Signed-off-by: Ahmad Fatoum <a.fatoum@barebox.org>
---
test/self/idr.c | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/test/self/idr.c b/test/self/idr.c
index cc3217bb06e4..bc68a84be4ce 100644
--- a/test/self/idr.c
+++ b/test/self/idr.c
@@ -73,9 +73,17 @@ static void test_idr(void)
id = idr_alloc_one(&idr, &cmp[2], cmp[2]);
expect(id == cmp[2]);
+ id = idr_alloc_one(&idr, NULL, 4);
+ expect(id == 4);
+
count = 0;
idr_for_each_entry(&idr, ptr, id) {
+ if (id == 4) {
+ idr_remove(&idr, 4);
+ continue;
+ }
+
expect(id == sorted_cmp[count]);
expect(*(int *)ptr == sorted_cmp[count]);
--
2.39.5
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH 2/3] test: py: test mount/unmount of pstore file system
2025-06-23 6:26 [PATCH 0/3] test: test recent regressions/features Ahmad Fatoum
2025-06-23 6:26 ` [PATCH 1/3] test: self: idr: add test for idr_remove in idr_for_each_entry Ahmad Fatoum
@ 2025-06-23 6:26 ` Ahmad Fatoum
2025-06-23 8:37 ` Ahmad Fatoum
2025-06-23 6:26 ` [PATCH 3/3] test: py: add bootchooser attempt decrement and locking test Ahmad Fatoum
2025-06-23 8:35 ` [PATCH 0/3] test: test recent regressions/features Sascha Hauer
3 siblings, 1 reply; 7+ messages in thread
From: Ahmad Fatoum @ 2025-06-23 6:26 UTC (permalink / raw)
To: barebox; +Cc: Ahmad Fatoum
The file system internals were recently touched to enable easier porting
of the 9P file system. This led to regressions[1][2] that broke
unmounting a volumes.
Add a simple regression test that would have caught the two described
issues.
[1]: a3ef153fdf26 ("fs: unreference path on file close")
[2]: aef3b0134519 ("fs: unreference path in canonicalize_path()")
Signed-off-by: Ahmad Fatoum <a.fatoum@barebox.org>
---
arch/arm/configs/multi_v5_v6_defconfig | 1 +
arch/arm/configs/multi_v7_defconfig | 1 +
arch/arm/configs/multi_v8_defconfig | 1 +
test/py/test_mount.py | 21 +++++++++++++++++++++
4 files changed, 24 insertions(+)
create mode 100644 test/py/test_mount.py
diff --git a/arch/arm/configs/multi_v5_v6_defconfig b/arch/arm/configs/multi_v5_v6_defconfig
index 2afc072e129c..91d3a63e85ab 100644
--- a/arch/arm/configs/multi_v5_v6_defconfig
+++ b/arch/arm/configs/multi_v5_v6_defconfig
@@ -38,6 +38,7 @@ CONFIG_CMD_GO=y
CONFIG_CMD_RESET=y
CONFIG_CMD_UIMAGE=y
CONFIG_CMD_PARTITION=y
+CONFIG_CMD_FINDMNT=y
CONFIG_CMD_UBIFORMAT=y
CONFIG_CMD_EXPORT=y
CONFIG_CMD_LOADENV=y
diff --git a/arch/arm/configs/multi_v7_defconfig b/arch/arm/configs/multi_v7_defconfig
index 4fb696a10626..726afe8ce6c5 100644
--- a/arch/arm/configs/multi_v7_defconfig
+++ b/arch/arm/configs/multi_v7_defconfig
@@ -143,6 +143,7 @@ CONFIG_CMD_RESET=y
CONFIG_CMD_UIMAGE=y
CONFIG_CMD_BOOTCHOOSER=y
CONFIG_CMD_PARTITION=y
+CONFIG_CMD_FINDMNT=y
CONFIG_CMD_UBIFORMAT=y
CONFIG_CMD_EXPORT=y
CONFIG_CMD_DEFAULTENV=y
diff --git a/arch/arm/configs/multi_v8_defconfig b/arch/arm/configs/multi_v8_defconfig
index 3d3f3254df20..a487d331d04e 100644
--- a/arch/arm/configs/multi_v8_defconfig
+++ b/arch/arm/configs/multi_v8_defconfig
@@ -89,6 +89,7 @@ CONFIG_CMD_RESET=y
CONFIG_CMD_UIMAGE=y
CONFIG_CMD_BOOTCHOOSER=y
CONFIG_CMD_PARTITION=y
+CONFIG_CMD_FINDMNT=y
CONFIG_CMD_EXPORT=y
CONFIG_CMD_DEFAULTENV=y
CONFIG_CMD_LOADENV=y
diff --git a/test/py/test_mount.py b/test/py/test_mount.py
new file mode 100644
index 000000000000..33608a3b6ddb
--- /dev/null
+++ b/test/py/test_mount.py
@@ -0,0 +1,21 @@
+# SPDX-License-Identifier: GPL-2.0-only
+
+from .helper import skip_disabled
+
+
+def test_findmnt_umount(barebox, barebox_config):
+ skip_disabled(barebox_config, "CONFIG_CMD_FINDMNT")
+
+ barebox.run_check("mount -t ramfs none /tmp")
+ findmnt_out1 = barebox.run_check("findmnt /tmp")
+ barebox.run_check("umount /tmp")
+
+ assert len(findmnt_out1) == 2
+
+
+def test_echo_umount(barebox):
+ barebox.run_check("mount -t ramfs none /tmp")
+ barebox.run_check("echo -o /tmp/file test")
+ barebox.run_check("umount /tmp")
+
+ # Nothing to assert, we are happy if this is reached without exception
--
2.39.5
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH 3/3] test: py: add bootchooser attempt decrement and locking test
2025-06-23 6:26 [PATCH 0/3] test: test recent regressions/features Ahmad Fatoum
2025-06-23 6:26 ` [PATCH 1/3] test: self: idr: add test for idr_remove in idr_for_each_entry Ahmad Fatoum
2025-06-23 6:26 ` [PATCH 2/3] test: py: test mount/unmount of pstore file system Ahmad Fatoum
@ 2025-06-23 6:26 ` Ahmad Fatoum
2025-06-23 8:35 ` [PATCH 0/3] test: test recent regressions/features Sascha Hauer
3 siblings, 0 replies; 7+ messages in thread
From: Ahmad Fatoum @ 2025-06-23 6:26 UTC (permalink / raw)
To: barebox; +Cc: Lars Schmidt, Ahmad Fatoum
Add a test to verify that counting down attempts work and that the new
locking feature indeed inhibits it.
Cc: Lars Schmidt <l.schmidt@pengutronix.de>
Signed-off-by: Ahmad Fatoum <a.fatoum@barebox.org>
---
common/boards/qemu-virt/qemu-virt-flash.dtso | 5 +
test/arm/virt@multi_v7_defconfig.yaml | 1 +
test/arm/virt@multi_v8_defconfig.yaml | 1 +
test/py/helper.py | 63 ++++++++
test/py/test_bootchooser.py | 158 +++++++++++++++++++
test/riscv/qemu-virt64@rv64i_defconfig.yaml | 1 +
test/riscv/qemu@virt32_defconfig.yaml | 1 +
7 files changed, 230 insertions(+)
create mode 100644 test/py/test_bootchooser.py
diff --git a/common/boards/qemu-virt/qemu-virt-flash.dtso b/common/boards/qemu-virt/qemu-virt-flash.dtso
index 087568a26d2a..77b17456496d 100644
--- a/common/boards/qemu-virt/qemu-virt-flash.dtso
+++ b/common/boards/qemu-virt/qemu-virt-flash.dtso
@@ -94,6 +94,11 @@ last_chosen@10 {
reg = <0x10 0x4>;
type = "uint32";
};
+
+ attempts_locked@14 {
+ reg = <0x14 0x4>;
+ type = "uint32";
+ };
};
};
};
diff --git a/test/arm/virt@multi_v7_defconfig.yaml b/test/arm/virt@multi_v7_defconfig.yaml
index 637d132d3967..2f68e35d69a8 100644
--- a/test/arm/virt@multi_v7_defconfig.yaml
+++ b/test/arm/virt@multi_v7_defconfig.yaml
@@ -15,6 +15,7 @@ targets:
features:
- virtio-mmio
- testfs
+ - barebox-state
images:
barebox-dt-2nd.img: !template "$LG_BUILDDIR/images/barebox-dt-2nd.img"
imports:
diff --git a/test/arm/virt@multi_v8_defconfig.yaml b/test/arm/virt@multi_v8_defconfig.yaml
index d018af06aa53..f49dbce1b631 100644
--- a/test/arm/virt@multi_v8_defconfig.yaml
+++ b/test/arm/virt@multi_v8_defconfig.yaml
@@ -16,6 +16,7 @@ targets:
- virtio-mmio
- network
- testfs
+ - barebox-state
runner:
tuxmake_arch: arm64
images:
diff --git a/test/py/helper.py b/test/py/helper.py
index cfcc9c337fec..04c2de9bc0da 100644
--- a/test/py/helper.py
+++ b/test/py/helper.py
@@ -1,6 +1,8 @@
from labgrid.driver import BareboxDriver
import pytest
import os
+import re
+import shlex
from itertools import filterfalse
@@ -45,6 +47,67 @@ def of_get_property(barebox, path):
return False
+def devinfo(barebox, device):
+ info = {}
+ section = None
+ pattern = r'^\s*([^:]+):\s*(.*)$'
+
+ for line in barebox.run_check(f"devinfo {device}"):
+ line = line.rstrip()
+ if match := re.match(r"^([^: ]+):$", line):
+ section = match.group(1)
+ if section in ["Parameters"]:
+ info[section] = {}
+ else:
+ info[section] = []
+ continue
+
+ line = line.strip()
+ if section is None or isinstance(info[section], dict):
+ if match := re.match(pattern, line):
+ key = match.group(1).strip()
+ value = match.group(2).strip()
+ # TODO: coerce to type?
+ if section is None:
+ info[section] = line
+ else:
+ info[section][key] = value
+ elif section:
+ info[section].append(line)
+
+ return info
+
+
+def format_dict_with_prefix(varset: dict, prefix: str) -> str:
+ parts = []
+ for k, v in varset.items():
+ escaped_val = shlex.quote(str(v))
+ parts.append(f"{prefix}{k}={escaped_val}")
+ return " ".join(parts)
+
+
+def globalvars_set(barebox, varset: dict, create=True):
+ cmd, prefix = ("global ", "") if create else ("", "global.")
+ barebox.run_check(cmd + format_dict_with_prefix(varset, prefix))
+
+
+def nvvars_set(barebox, varset: dict, create=True):
+ cmd, prefix = ("nv ", "") if create else ("", "nv.")
+ barebox.run_check(cmd + format_dict_with_prefix(varset, prefix))
+
+
+def getenv_int(barebox, var):
+ return int(barebox.run_check(f"echo ${var}")[0])
+
+
+def getstate_int(barebox, var, prefix="state.bootstate"):
+ return getenv_int(barebox, f"{prefix}.{var}")
+
+
+def getparam_int(info, var):
+ return int(info["Parameters"][var].split()[0])
+
+
def skip_disabled(config, *options):
if bool(config):
undefined = list(filterfalse(config.__contains__, options))
diff --git a/test/py/test_bootchooser.py b/test/py/test_bootchooser.py
new file mode 100644
index 000000000000..a5f2b25d6550
--- /dev/null
+++ b/test/py/test_bootchooser.py
@@ -0,0 +1,158 @@
+# SPDX-License-Identifier: GPL-2.0-or-later
+
+import pytest
+from .helper import globalvars_set, devinfo, getparam_int, \
+ getstate_int, getenv_int
+
+
+def fit_name(suffix):
+ return f"/mnt/9p/testfs/barebox-{suffix}.fit"
+
+
+def generate_bootscript(barebox, command, name="test"):
+ barebox.run_check(f"echo -o /env/boot/{name} '#!/bin/sh'")
+ barebox.run_check(f"echo -a /env/boot/{name} '{command}'")
+ return name
+
+
+def assert_state(barebox, s0p, s0a, s1p, s1a):
+ info = devinfo(barebox, "state")
+
+ assert getparam_int(info, "bootstate.system0.priority") == s0p
+ assert getparam_int(info, "bootstate.system0.remaining_attempts") == s0a
+ assert getparam_int(info, "bootstate.system1.priority") == s1p
+ assert getparam_int(info, "bootstate.system1.remaining_attempts") == s1a
+
+
+def assert_boot(barebox, system_num, s0p, s0a, s1p, s1a):
+ expected = system_num
+ unexpected = system_num ^ 1
+
+ stdout, _, _ = barebox.run("boot bootchooser")
+ assert f"Test is booting system{expected}" in stdout
+ assert f"Test is booting system{unexpected}" not in stdout
+
+ assert_state(barebox, s0p, s0a, s1p, s1a)
+
+
+@pytest.fixture(scope="function")
+def bootchooser(barebox, env):
+ if 'barebox-state' not in env.get_target_features():
+ return None
+
+ system0 = generate_bootscript(barebox, "echo Test is booting system0",
+ "system0")
+ system1 = generate_bootscript(barebox, "echo Test is booting system1",
+ "system1")
+
+ globals_chg = {
+ "bootchooser.default_attempts": "3",
+ "bootchooser.retry": "0",
+ "bootchooser.state_prefix": "state.bootstate",
+ "bootchooser.targets": "system0 system1",
+ }
+
+ globals_new = {
+ "bootchooser.system0.boot": system0,
+ "bootchooser.system0.default_priority": "20",
+ "bootchooser.system1.boot": system1,
+ "bootchooser.system1.default_priority": "21"
+ }
+
+ globalvars_set(barebox, globals_chg)
+ globalvars_set(barebox, globals_new, create=True)
+
+ barebox.run_check("bootchooser -a default -p default")
+ return True
+
+
+def test_bootchooser(barebox, env, bootchooser):
+ if bootchooser is None:
+ pytest.xfail("barebox-state feature not specified")
+
+ assert_state(barebox, s0p=20, s0a=3, s1p=21, s1a=3)
+
+ assert_boot(barebox, 1, s0p=20, s0a=3, s1p=21, s1a=2)
+ assert_boot(barebox, 1, s0p=20, s0a=3, s1p=21, s1a=1)
+ assert_boot(barebox, 1, s0p=20, s0a=3, s1p=21, s1a=0)
+ assert_boot(barebox, 0, s0p=20, s0a=2, s1p=21, s1a=0)
+ assert_boot(barebox, 0, s0p=20, s0a=1, s1p=21, s1a=0)
+ assert_boot(barebox, 0, s0p=20, s0a=0, s1p=21, s1a=0)
+
+ barebox.run_check("bootchooser -a default -p default")
+
+ assert_boot(barebox, 1, s0p=20, s0a=3, s1p=21, s1a=2)
+ assert_boot(barebox, 1, s0p=20, s0a=3, s1p=21, s1a=1)
+ assert_boot(barebox, 1, s0p=20, s0a=3, s1p=21, s1a=0)
+ assert_boot(barebox, 0, s0p=20, s0a=2, s1p=21, s1a=0)
+ assert_boot(barebox, 0, s0p=20, s0a=1, s1p=21, s1a=0)
+ assert_boot(barebox, 0, s0p=20, s0a=0, s1p=21, s1a=0)
+
+
+def test_bootchooser_lock_command(barebox, env, bootchooser):
+ if bootchooser is None:
+ pytest.xfail("barebox-state feature not specified")
+
+ assert_boot(barebox, 1, s0p=20, s0a=3, s1p=21, s1a=2)
+
+ stdout = barebox.run_check("bootchooser -i")
+ assert 'Locking of boot attempt counter: disabled' in stdout[-3:]
+ assert getstate_int(barebox, "attempts_locked") == 0
+
+ barebox.run_check("bootchooser -l")
+
+ stdout = barebox.run_check("bootchooser -i")
+ assert 'Locking of boot attempt counter: enabled' in stdout[-3:]
+ assert getstate_int(barebox, "attempts_locked") == 0
+
+ for i in range(4):
+ assert_boot(barebox, 1, s0p=20, s0a=3, s1p=21, s1a=2)
+
+ barebox.run_check("bootchooser -L")
+
+ stdout = barebox.run_check("bootchooser -i")
+ assert 'Locking of boot attempt counter: disabled' in stdout[-3:]
+ assert getstate_int(barebox, "attempts_locked") == 0
+
+ assert_boot(barebox, 1, s0p=20, s0a=3, s1p=21, s1a=1)
+ assert_boot(barebox, 1, s0p=20, s0a=3, s1p=21, s1a=0)
+ assert_boot(barebox, 0, s0p=20, s0a=2, s1p=21, s1a=0)
+ assert_boot(barebox, 0, s0p=20, s0a=1, s1p=21, s1a=0)
+ assert_boot(barebox, 0, s0p=20, s0a=0, s1p=21, s1a=0)
+
+
+def test_bootchooser_lock_state(barebox, env, bootchooser):
+ if bootchooser is None:
+ pytest.xfail("barebox-state feature not specified")
+
+ assert_boot(barebox, 1, s0p=20, s0a=3, s1p=21, s1a=2)
+
+ stdout = barebox.run_check("bootchooser -i")
+ assert 'Locking of boot attempt counter: disabled' in stdout[-3:]
+ assert getstate_int(barebox, "attempts_locked") == 0
+
+ barebox.run_check("state.bootstate.attempts_locked=1")
+ assert getenv_int(barebox, "state.dirty") == 1
+ stdout = barebox.run_check("state -s")
+ assert getenv_int(barebox, "state.dirty") == 0
+
+ stdout = barebox.run_check("bootchooser -i")
+ assert 'Locking of boot attempt counter: enabled' in stdout[-3:]
+ assert getstate_int(barebox, "attempts_locked") == 1
+
+ for i in range(4):
+ assert_boot(barebox, 1, s0p=20, s0a=3, s1p=21, s1a=2)
+
+ assert getenv_int(barebox, "state.dirty") == 0
+
+ barebox.run_check("state.bootstate.attempts_locked=0")
+
+ stdout = barebox.run_check("bootchooser -i")
+ assert 'Locking of boot attempt counter: disabled' in stdout[-3:]
+ assert getstate_int(barebox, "attempts_locked") == 0
+
+ assert_boot(barebox, 1, s0p=20, s0a=3, s1p=21, s1a=1)
+ assert_boot(barebox, 1, s0p=20, s0a=3, s1p=21, s1a=0)
+ assert_boot(barebox, 0, s0p=20, s0a=2, s1p=21, s1a=0)
+ assert_boot(barebox, 0, s0p=20, s0a=1, s1p=21, s1a=0)
+ assert_boot(barebox, 0, s0p=20, s0a=0, s1p=21, s1a=0)
diff --git a/test/riscv/qemu-virt64@rv64i_defconfig.yaml b/test/riscv/qemu-virt64@rv64i_defconfig.yaml
index c920413a17bf..83cdac6c8b9d 100644
--- a/test/riscv/qemu-virt64@rv64i_defconfig.yaml
+++ b/test/riscv/qemu-virt64@rv64i_defconfig.yaml
@@ -14,6 +14,7 @@ targets:
BareboxTestStrategy: {}
features:
- virtio-mmio
+ - barebox-state
images:
barebox-dt-2nd.img: !template "$LG_BUILDDIR/images/barebox-dt-2nd.img"
imports:
diff --git a/test/riscv/qemu@virt32_defconfig.yaml b/test/riscv/qemu@virt32_defconfig.yaml
index da1bb5bddd3e..03d5ef281592 100644
--- a/test/riscv/qemu@virt32_defconfig.yaml
+++ b/test/riscv/qemu@virt32_defconfig.yaml
@@ -15,6 +15,7 @@ targets:
BareboxTestStrategy: {}
features:
- virtio-mmio
+ - barebox-state
runner:
download:
opensbi-riscv32-generic-fw_dynamic.bin: https://github.com/qemu/qemu/blob/v5.2.0/pc-bios/opensbi-riscv32-generic-fw_dynamic.bin?raw=true
--
2.39.5
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 0/3] test: test recent regressions/features
2025-06-23 6:26 [PATCH 0/3] test: test recent regressions/features Ahmad Fatoum
` (2 preceding siblings ...)
2025-06-23 6:26 ` [PATCH 3/3] test: py: add bootchooser attempt decrement and locking test Ahmad Fatoum
@ 2025-06-23 8:35 ` Sascha Hauer
3 siblings, 0 replies; 7+ messages in thread
From: Sascha Hauer @ 2025-06-23 8:35 UTC (permalink / raw)
To: barebox, Ahmad Fatoum
On Mon, 23 Jun 2025 08:26:38 +0200, Ahmad Fatoum wrote:
> We had a couple of regressions around unmounting, for which fixes are
> already in master or in-flight.
>
> This series adds tests for that and also a new test for bootchooser.
> They are combined just for convenience as they share dependencies.
>
> This series depends on the patches in following series:
> - 20250623062032.3527006-1-a.fatoum@barebox.org
> - 20250623062253.3528292-1-a.fatoum@barebox.org
>
> [...]
Applied, thanks!
[1/3] test: self: idr: add test for idr_remove in idr_for_each_entry
https://git.pengutronix.de/cgit/barebox/commit/?id=bbfd9fd63578 (link may not be stable)
[2/3] test: py: test mount/unmount of pstore file system
https://git.pengutronix.de/cgit/barebox/commit/?id=37b601f9d0ad (link may not be stable)
[3/3] test: py: add bootchooser attempt decrement and locking test
https://git.pengutronix.de/cgit/barebox/commit/?id=3e5fcec2105f (link may not be stable)
Best regards,
--
Sascha Hauer <s.hauer@pengutronix.de>
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 2/3] test: py: test mount/unmount of pstore file system
2025-06-23 6:26 ` [PATCH 2/3] test: py: test mount/unmount of pstore file system Ahmad Fatoum
@ 2025-06-23 8:37 ` Ahmad Fatoum
2025-06-23 9:26 ` Sascha Hauer
0 siblings, 1 reply; 7+ messages in thread
From: Ahmad Fatoum @ 2025-06-23 8:37 UTC (permalink / raw)
To: Ahmad Fatoum, barebox
Hi,
On 6/23/25 08:26, Ahmad Fatoum wrote:
> The file system internals were recently touched to enable easier porting
> of the 9P file system. This led to regressions[1][2] that broke
> unmounting a volumes.
I pivoted from testing with pstore to ramfs as I needed to create a
file. Sascha, could you s/pstore/ramfs/ in the commit message title?
Thanks,
Ahmad
>
> Add a simple regression test that would have caught the two described
> issues.
>
> [1]: a3ef153fdf26 ("fs: unreference path on file close")
> [2]: aef3b0134519 ("fs: unreference path in canonicalize_path()")
>
> Signed-off-by: Ahmad Fatoum <a.fatoum@barebox.org>
> ---
> arch/arm/configs/multi_v5_v6_defconfig | 1 +
> arch/arm/configs/multi_v7_defconfig | 1 +
> arch/arm/configs/multi_v8_defconfig | 1 +
> test/py/test_mount.py | 21 +++++++++++++++++++++
> 4 files changed, 24 insertions(+)
> create mode 100644 test/py/test_mount.py
>
> diff --git a/arch/arm/configs/multi_v5_v6_defconfig b/arch/arm/configs/multi_v5_v6_defconfig
> index 2afc072e129c..91d3a63e85ab 100644
> --- a/arch/arm/configs/multi_v5_v6_defconfig
> +++ b/arch/arm/configs/multi_v5_v6_defconfig
> @@ -38,6 +38,7 @@ CONFIG_CMD_GO=y
> CONFIG_CMD_RESET=y
> CONFIG_CMD_UIMAGE=y
> CONFIG_CMD_PARTITION=y
> +CONFIG_CMD_FINDMNT=y
> CONFIG_CMD_UBIFORMAT=y
> CONFIG_CMD_EXPORT=y
> CONFIG_CMD_LOADENV=y
> diff --git a/arch/arm/configs/multi_v7_defconfig b/arch/arm/configs/multi_v7_defconfig
> index 4fb696a10626..726afe8ce6c5 100644
> --- a/arch/arm/configs/multi_v7_defconfig
> +++ b/arch/arm/configs/multi_v7_defconfig
> @@ -143,6 +143,7 @@ CONFIG_CMD_RESET=y
> CONFIG_CMD_UIMAGE=y
> CONFIG_CMD_BOOTCHOOSER=y
> CONFIG_CMD_PARTITION=y
> +CONFIG_CMD_FINDMNT=y
> CONFIG_CMD_UBIFORMAT=y
> CONFIG_CMD_EXPORT=y
> CONFIG_CMD_DEFAULTENV=y
> diff --git a/arch/arm/configs/multi_v8_defconfig b/arch/arm/configs/multi_v8_defconfig
> index 3d3f3254df20..a487d331d04e 100644
> --- a/arch/arm/configs/multi_v8_defconfig
> +++ b/arch/arm/configs/multi_v8_defconfig
> @@ -89,6 +89,7 @@ CONFIG_CMD_RESET=y
> CONFIG_CMD_UIMAGE=y
> CONFIG_CMD_BOOTCHOOSER=y
> CONFIG_CMD_PARTITION=y
> +CONFIG_CMD_FINDMNT=y
> CONFIG_CMD_EXPORT=y
> CONFIG_CMD_DEFAULTENV=y
> CONFIG_CMD_LOADENV=y
> diff --git a/test/py/test_mount.py b/test/py/test_mount.py
> new file mode 100644
> index 000000000000..33608a3b6ddb
> --- /dev/null
> +++ b/test/py/test_mount.py
> @@ -0,0 +1,21 @@
> +# SPDX-License-Identifier: GPL-2.0-only
> +
> +from .helper import skip_disabled
> +
> +
> +def test_findmnt_umount(barebox, barebox_config):
> + skip_disabled(barebox_config, "CONFIG_CMD_FINDMNT")
> +
> + barebox.run_check("mount -t ramfs none /tmp")
> + findmnt_out1 = barebox.run_check("findmnt /tmp")
> + barebox.run_check("umount /tmp")
> +
> + assert len(findmnt_out1) == 2
> +
> +
> +def test_echo_umount(barebox):
> + barebox.run_check("mount -t ramfs none /tmp")
> + barebox.run_check("echo -o /tmp/file test")
> + barebox.run_check("umount /tmp")
> +
> + # Nothing to assert, we are happy if this is reached without exception
--
Pengutronix e.K. | |
Steuerwalder Str. 21 | http://www.pengutronix.de/ |
31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 2/3] test: py: test mount/unmount of pstore file system
2025-06-23 8:37 ` Ahmad Fatoum
@ 2025-06-23 9:26 ` Sascha Hauer
0 siblings, 0 replies; 7+ messages in thread
From: Sascha Hauer @ 2025-06-23 9:26 UTC (permalink / raw)
To: Ahmad Fatoum; +Cc: Ahmad Fatoum, barebox
On Mon, Jun 23, 2025 at 10:37:39AM +0200, Ahmad Fatoum wrote:
> Hi,
>
> On 6/23/25 08:26, Ahmad Fatoum wrote:
> > The file system internals were recently touched to enable easier porting
> > of the 9P file system. This led to regressions[1][2] that broke
> > unmounting a volumes.
>
> I pivoted from testing with pstore to ramfs as I needed to create a
> file. Sascha, could you s/pstore/ramfs/ in the commit message title?
Did that.
Sascha
--
Pengutronix e.K. | |
Steuerwalder Str. 21 | http://www.pengutronix.de/ |
31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2025-06-23 9:35 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-06-23 6:26 [PATCH 0/3] test: test recent regressions/features Ahmad Fatoum
2025-06-23 6:26 ` [PATCH 1/3] test: self: idr: add test for idr_remove in idr_for_each_entry Ahmad Fatoum
2025-06-23 6:26 ` [PATCH 2/3] test: py: test mount/unmount of pstore file system Ahmad Fatoum
2025-06-23 8:37 ` Ahmad Fatoum
2025-06-23 9:26 ` Sascha Hauer
2025-06-23 6:26 ` [PATCH 3/3] test: py: add bootchooser attempt decrement and locking test Ahmad Fatoum
2025-06-23 8:35 ` [PATCH 0/3] test: test recent regressions/features Sascha Hauer
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox