]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
test: introduce TEST-83-BTRFS 29179/head
authorMike Yuan <me@yhndnzj.com>
Mon, 18 Sep 2023 12:31:59 +0000 (20:31 +0800)
committerMike Yuan <me@yhndnzj.com>
Tue, 19 Sep 2023 13:45:27 +0000 (21:45 +0800)
The Ubuntu CIs are deny-listed because the shipped
btrfs-progs is too old, i.e. doesn't support the
recently-added 'filesystem mkswapfile' command.

src/test/meson.build
src/test/test-btrfs-physical-offset.c [new file with mode: 0644]
test/TEST-83-BTRFS/Makefile [new symlink]
test/TEST-83-BTRFS/deny-list-ubuntu-ci [new file with mode: 0644]
test/TEST-83-BTRFS/test.sh [new file with mode: 0755]
test/units/testsuite-83.service [new file with mode: 0644]
test/units/testsuite-83.sh [new file with mode: 0755]

index 6d39006d092d1190141043b322915841e05cb0b9..2b3fe83a9f101159ff7774417a1ef1f3faa8ed5c 100644 (file)
@@ -221,6 +221,10 @@ executables += [
                 'sources' : files('test-btrfs.c'),
                 'type' : 'manual',
         },
+        test_template + {
+                'sources' : files('test-btrfs-physical-offset.c'),
+                'type' : 'manual',
+        },
         test_template + {
                 'sources' : files('test-cap-list.c') +
                             generated_gperf_headers,
diff --git a/src/test/test-btrfs-physical-offset.c b/src/test/test-btrfs-physical-offset.c
new file mode 100644 (file)
index 0000000..bcc6252
--- /dev/null
@@ -0,0 +1,33 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include <fcntl.h>
+
+#include "btrfs-util.h"
+#include "fd-util.h"
+#include "format-util.h"
+#include "log.h"
+#include "memory-util.h"
+
+int main(int argc, char *argv[]) {
+        _cleanup_close_ int fd = -EBADF;
+        uint64_t offset;
+        int r;
+
+        assert(argc == 2);
+        assert(!isempty(argv[1]));
+
+        fd = open(argv[1], O_RDONLY|O_CLOEXEC|O_NOCTTY);
+        if (fd < 0) {
+                log_error_errno(fd, "Failed to open '%s': %m", argv[1]);
+                return EXIT_FAILURE;
+        }
+
+        r = btrfs_get_file_physical_offset_fd(fd, &offset);
+        if (r < 0) {
+                log_error_errno(r, "Failed to get physical offset of '%s': %m", argv[1]);
+                return EXIT_FAILURE;
+        }
+
+        printf("%" PRIu64 "\n", offset / page_size());
+        return EXIT_SUCCESS;
+}
diff --git a/test/TEST-83-BTRFS/Makefile b/test/TEST-83-BTRFS/Makefile
new file mode 120000 (symlink)
index 0000000..e9f93b1
--- /dev/null
@@ -0,0 +1 @@
+../TEST-01-BASIC/Makefile
\ No newline at end of file
diff --git a/test/TEST-83-BTRFS/deny-list-ubuntu-ci b/test/TEST-83-BTRFS/deny-list-ubuntu-ci
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/test/TEST-83-BTRFS/test.sh b/test/TEST-83-BTRFS/test.sh
new file mode 100755 (executable)
index 0000000..5c32c51
--- /dev/null
@@ -0,0 +1,25 @@
+#!/usr/bin/env bash
+# SPDX-License-Identifier: LGPL-2.1-or-later
+set -e
+
+TEST_DESCRIPTION="test btrfs-util"
+
+TEST_NO_NSPAWN=1
+FSTYPE=btrfs
+IMAGE_NAME="btrfs"
+TEST_FORCE_NEWIMAGE=1
+
+# shellcheck source=test/test-functions
+. "${TEST_BASE_DIR:?}/test-functions"
+
+if ! command -v btrfs >/dev/null || ! command -v mkfs.btrfs >/dev/null; then
+    echo "TEST: $TEST_DESCRIPTION [SKIPPED]: btrfs not supported by host" >&2
+    exit 0
+fi
+
+test_append_files() {
+    install_btrfs
+    image_install sync
+}
+
+do_test "$@"
diff --git a/test/units/testsuite-83.service b/test/units/testsuite-83.service
new file mode 100644 (file)
index 0000000..55ebb45
--- /dev/null
@@ -0,0 +1,8 @@
+# SPDX-License-Identifier: LGPL-2.1-or-later
+[Unit]
+Description=TEST-83-BTRFS
+
+[Service]
+ExecStartPre=rm -f /failed /testok
+ExecStart=/usr/lib/systemd/tests/testdata/units/%N.sh
+Type=oneshot
diff --git a/test/units/testsuite-83.sh b/test/units/testsuite-83.sh
new file mode 100755 (executable)
index 0000000..a722c79
--- /dev/null
@@ -0,0 +1,25 @@
+#!/usr/bin/env bash
+# SPDX-License-Identifier: LGPL-2.1-or-later
+set -eux
+set -o pipefail
+
+TEST_BTRFS_OFFSET=/usr/lib/systemd/tests/unit-tests/manual/test-btrfs-physical-offset
+
+SWAPFILE=/var/tmp/swapfile
+
+btrfs filesystem mkswapfile -s 10m "$SWAPFILE"
+sync -f "$SWAPFILE"
+
+offset_btrfs_progs="$(btrfs inspect-internal map-swapfile -r "$SWAPFILE")"
+echo "btrfs-progs: $offset_btrfs_progs"
+
+offset_btrfs_util="$("$TEST_BTRFS_OFFSET" "$SWAPFILE")"
+echo "btrfs-util: $offset_btrfs_util"
+
+(( offset_btrfs_progs == offset_btrfs_util ))
+
+rm -f "$SWAPFILE"
+
+/usr/lib/systemd/tests/unit-tests/manual/test-btrfs
+
+touch /testok