]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
hardlink: add first simple tests
authorRuediger Meier <ruediger.meier@ga-group.nl>
Mon, 12 Nov 2018 19:27:52 +0000 (20:27 +0100)
committerRuediger Meier <ruediger.meier@ga-group.nl>
Thu, 15 Nov 2018 20:26:14 +0000 (21:26 +0100)
The test still fails without pcre2 and may also make problems on
exotic file systems.

Signed-off-by: Ruediger Meier <ruediger.meier@ga-group.nl>
tests/commands.sh
tests/expected/hardlink/options-content [new file with mode: 0644]
tests/expected/hardlink/options-dryrun [new file with mode: 0644]
tests/expected/hardlink/options-nargs [new file with mode: 0644]
tests/expected/hardlink/options-noregex [new file with mode: 0644]
tests/expected/hardlink/options-orig [new file with mode: 0644]
tests/expected/hardlink/options-regex-escapes [new file with mode: 0644]
tests/ts/hardlink/options [new file with mode: 0755]
tests/ts/hardlink/testdir1.tar.xz [new file with mode: 0644]

index 1be2d25b43fd47187009ba96e90753315934eb24..6f31393515207fd7d451bd677b0db2ff83f80ad0 100644 (file)
@@ -61,6 +61,7 @@ TS_CMD_FINDMNT=${TS_CMD_FINDMNT-"$top_builddir/findmnt"}
 TS_CMD_FSCKCRAMFS=${TS_CMD_FSCKCRAMFS:-"$top_builddir/fsck.cramfs"}
 TS_CMD_FSCKMINIX=${TS_CMD_FSCKMINIX:-"$top_builddir/fsck.minix"}
 TS_CMD_GETOPT=${TS_CMD_GETOPT-"$top_builddir/getopt"}
+TS_CMD_HARDLINK=${TS_CMD_HARDLINK-"$top_builddir/hardlink"}
 TS_CMD_HEXDUMP=${TS_CMD_HEXDUMP-"$top_builddir/hexdump"}
 TS_CMD_HWCLOCK=${TS_CMD_HWCLOCK-"$top_builddir/hwclock"}
 TS_CMD_IONICE=${TS_CMD_IONICE-"$top_builddir/ionice"}
diff --git a/tests/expected/hardlink/options-content b/tests/expected/hardlink/options-content
new file mode 100644 (file)
index 0000000..a1bfede
--- /dev/null
@@ -0,0 +1,26 @@
+dir-1/sdir-1/file-a-1  10      8192    1540236xxx      perm
+dir-1/sdir-1/file-a-2  10      8192    1540236xxx      perm
+dir-1/sdir-1/file-a-3  10      8192    1540236xxx      perm
+dir-1/sdir-1/file-b-1  10      8192    1540236xxx      perm
+dir-1/sdir-1/file-b-2  10      8192    1540236xxx      perm
+dir-1/sdir-1/file-b-3  10      8192    1540236xxx      perm
+dir-1/sdir-1/file-c-1  6       8192    1540236xxx      perm
+dir-1/sdir-1/file-c-2  6       8192    1540236xxx      perm
+dir-1/sdir-1/file-c-3  6       8192    1540236xxx      perm
+dir-1/sdir-2/file-a-1-abcdefghijklmnopqrstxyz-"§$%&()=?*+     10      8192    1540236xxx      perm
+dir-2/sdir-2/file-a-5  10      8192    1540236xxx      perm
+dir-2/sdir-2/file-b-5  10      8192    1540236xxx      perm
+dir-2/sdir-3/file-b-4  10      8192    1540236xxx      perm
+file-a-1       10      8192    1540236xxx      perm
+file-a-2       10      8192    1540236xxx      perm
+file-a-3       10      8192    1540236xxx      perm
+file-a-4       10      8192    1540236xxx      perm
+file-a-5       10      8192    1540236xxx      perm
+file-b-1       10      8192    1540236xxx      perm
+file-b-2       10      8192    1540236xxx      perm
+file-b-3       10      8192    1540236xxx      perm
+file-b-4       10      8192    1540236xxx      perm
+file-b-5       10      8192    1540236xxx      perm
+file-c-1       6       8192    1540236xxx      perm
+file-c-2       6       8192    1540236xxx      perm
+file-c-3       6       8192    1540236xxx      perm
diff --git a/tests/expected/hardlink/options-dryrun b/tests/expected/hardlink/options-dryrun
new file mode 100644 (file)
index 0000000..4e9d65d
--- /dev/null
@@ -0,0 +1,34 @@
+
+
+Directories 7
+Objects 33
+IFREG 26
+Comparisons 18
+Would link 18
+Would save 147456
+dir-1/sdir-1/file-a-1  1       8192    1540236330      644
+dir-1/sdir-1/file-a-2  1       8192    1540236330      644
+dir-1/sdir-1/file-a-3  1       8192    1540236423      644
+dir-1/sdir-1/file-b-1  1       8192    1540236383      644
+dir-1/sdir-1/file-b-2  1       8192    1540236383      644
+dir-1/sdir-1/file-b-3  1       8192    1540236430      644
+dir-1/sdir-1/file-c-1  1       8192    1540236330      644
+dir-1/sdir-1/file-c-2  1       8192    1540236330      644
+dir-1/sdir-1/file-c-3  1       8192    1540236548      644
+dir-1/sdir-2/file-a-1-abcdefghijklmnopqrstxyz-"§$%&()=?*+     1       8192    1540236330      644
+dir-2/sdir-2/file-a-5  1       8192    1540236330      600
+dir-2/sdir-2/file-b-5  1       8192    1540236383      640
+dir-2/sdir-3/file-b-4  1       8192    1540236383      640
+file-a-1       1       8192    1540236330      644
+file-a-2       1       8192    1540236330      644
+file-a-3       1       8192    1540236423      644
+file-a-4       1       8192    1540236330      600
+file-a-5       1       8192    1540236330      600
+file-b-1       1       8192    1540236383      644
+file-b-2       1       8192    1540236383      644
+file-b-3       1       8192    1540236430      644
+file-b-4       1       8192    1540236383      640
+file-b-5       1       8192    1540236383      640
+file-c-1       1       8192    1540236330      644
+file-c-2       1       8192    1540236330      644
+file-c-3       1       8192    1540236548      644
diff --git a/tests/expected/hardlink/options-nargs b/tests/expected/hardlink/options-nargs
new file mode 100644 (file)
index 0000000..7705bba
--- /dev/null
@@ -0,0 +1,34 @@
+
+
+Directories 1
+Objects 16
+IFREG 15
+Comparisons 9
+Linked 9
+saved 73728
+dir-1/sdir-1/file-a-1  4       8192    1540236330      644
+dir-1/sdir-1/file-a-2  4       8192    1540236330      644
+dir-1/sdir-1/file-a-3  1       8192    1540236423      644
+dir-1/sdir-1/file-b-1  4       8192    1540236383      644
+dir-1/sdir-1/file-b-2  4       8192    1540236383      644
+dir-1/sdir-1/file-b-3  1       8192    1540236430      644
+dir-1/sdir-1/file-c-1  4       8192    1540236330      644
+dir-1/sdir-1/file-c-2  4       8192    1540236330      644
+dir-1/sdir-1/file-c-3  1       8192    1540236548      644
+dir-1/sdir-2/file-a-1-abcdefghijklmnopqrstxyz-"§$%&()=?*+     1       8192    1540236330      644
+dir-2/sdir-2/file-a-5  1       8192    1540236330      600
+dir-2/sdir-2/file-b-5  1       8192    1540236383      640
+dir-2/sdir-3/file-b-4  1       8192    1540236383      640
+file-a-1       4       8192    1540236330      644
+file-a-2       4       8192    1540236330      644
+file-a-3       1       8192    1540236423      644
+file-a-4       1       8192    1540236330      600
+file-a-5       1       8192    1540236330      600
+file-b-1       4       8192    1540236383      644
+file-b-2       4       8192    1540236383      644
+file-b-3       1       8192    1540236430      644
+file-b-4       1       8192    1540236383      640
+file-b-5       1       8192    1540236383      640
+file-c-1       4       8192    1540236330      644
+file-c-2       4       8192    1540236330      644
+file-c-3       1       8192    1540236548      644
diff --git a/tests/expected/hardlink/options-noregex b/tests/expected/hardlink/options-noregex
new file mode 100644 (file)
index 0000000..93363ad
--- /dev/null
@@ -0,0 +1 @@
+hardlink: option -x not supported (built without pcre2)
diff --git a/tests/expected/hardlink/options-orig b/tests/expected/hardlink/options-orig
new file mode 100644 (file)
index 0000000..6b57823
--- /dev/null
@@ -0,0 +1,26 @@
+dir-1/sdir-1/file-a-1  1       8192    1540236330      644
+dir-1/sdir-1/file-a-2  1       8192    1540236330      644
+dir-1/sdir-1/file-a-3  1       8192    1540236423      644
+dir-1/sdir-1/file-b-1  1       8192    1540236383      644
+dir-1/sdir-1/file-b-2  1       8192    1540236383      644
+dir-1/sdir-1/file-b-3  1       8192    1540236430      644
+dir-1/sdir-1/file-c-1  1       8192    1540236330      644
+dir-1/sdir-1/file-c-2  1       8192    1540236330      644
+dir-1/sdir-1/file-c-3  1       8192    1540236548      644
+dir-1/sdir-2/file-a-1-abcdefghijklmnopqrstxyz-"§$%&()=?*+     1       8192    1540236330      644
+dir-2/sdir-2/file-a-5  1       8192    1540236330      600
+dir-2/sdir-2/file-b-5  1       8192    1540236383      640
+dir-2/sdir-3/file-b-4  1       8192    1540236383      640
+file-a-1       1       8192    1540236330      644
+file-a-2       1       8192    1540236330      644
+file-a-3       1       8192    1540236423      644
+file-a-4       1       8192    1540236330      600
+file-a-5       1       8192    1540236330      600
+file-b-1       1       8192    1540236383      644
+file-b-2       1       8192    1540236383      644
+file-b-3       1       8192    1540236430      644
+file-b-4       1       8192    1540236383      640
+file-b-5       1       8192    1540236383      640
+file-c-1       1       8192    1540236330      644
+file-c-2       1       8192    1540236330      644
+file-c-3       1       8192    1540236548      644
diff --git a/tests/expected/hardlink/options-regex-escapes b/tests/expected/hardlink/options-regex-escapes
new file mode 100644 (file)
index 0000000..afab5e3
--- /dev/null
@@ -0,0 +1,26 @@
+dir-1/sdir-1/file-a-1  4       8192    1540236330      644
+dir-1/sdir-1/file-a-2  4       8192    1540236330      644
+dir-1/sdir-1/file-a-3  2       8192    1540236423      644
+dir-1/sdir-1/file-b-1  4       8192    1540236383      644
+dir-1/sdir-1/file-b-2  4       8192    1540236383      644
+dir-1/sdir-1/file-b-3  2       8192    1540236430      644
+dir-1/sdir-1/file-c-1  4       8192    1540236330      644
+dir-1/sdir-1/file-c-2  4       8192    1540236330      644
+dir-1/sdir-1/file-c-3  2       8192    1540236548      644
+dir-1/sdir-2/file-a-1-abcdefghijklmnopqrstxyz-"§$%&()=?*+     1       8192    1540236330      644
+dir-2/sdir-2/file-a-5  3       8192    1540236330      600
+dir-2/sdir-2/file-b-5  4       8192    1540236383      640
+dir-2/sdir-3/file-b-4  4       8192    1540236383      640
+file-a-1       4       8192    1540236330      644
+file-a-2       4       8192    1540236330      644
+file-a-3       2       8192    1540236423      644
+file-a-4       3       8192    1540236330      600
+file-a-5       3       8192    1540236330      600
+file-b-1       4       8192    1540236383      644
+file-b-2       4       8192    1540236383      644
+file-b-3       2       8192    1540236430      644
+file-b-4       4       8192    1540236383      640
+file-b-5       4       8192    1540236383      640
+file-c-1       4       8192    1540236330      644
+file-c-2       4       8192    1540236330      644
+file-c-3       2       8192    1540236548      644
diff --git a/tests/ts/hardlink/options b/tests/ts/hardlink/options
new file mode 100755 (executable)
index 0000000..848ea16
--- /dev/null
@@ -0,0 +1,78 @@
+#!/bin/bash
+#
+# Copyright (C) 2018 Ruediger Meier <ruediger.meier@ga-group.nl>
+#
+# This file is part of util-linux.
+#
+# This file is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This file is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+
+TS_TOPDIR="${0%/*}/../.."
+TS_DESC="options"
+
+. $TS_TOPDIR/functions.sh
+
+ts_init "$*"
+
+ts_check_test_command "$TS_CMD_HARDLINK"
+
+SRCDIR="$TS_OUTDIR/testdir1"
+
+create_srcdir()
+{
+       rm -rf "$SRCDIR"
+       tar -C "$TS_OUTDIR" -xJf "$TS_SELF/testdir1.tar.xz"
+}
+
+show_srcdir()
+{
+       find "$SRCDIR" -type f -printf "%P\t%n\t%s\t%Ts\t%m\n" | sort
+}
+
+create_srcdir
+
+ts_init_subtest "orig" # just list original dir
+show_srcdir >>$TS_OUTPUT 2>&1
+ts_finalize_subtest
+
+ts_init_subtest "dryrun"
+$TS_CMD_HARDLINK -n -v "$SRCDIR" >>$TS_OUTPUT 2>&1
+show_srcdir >>$TS_OUTPUT 2>&1
+ts_finalize_subtest
+
+ts_init_subtest "nargs"
+$TS_CMD_HARDLINK -v "$SRCDIR"/dir-1/sdir-1 "$SRCDIR"/file-?-{1,2} >>$TS_OUTPUT 2>&1
+show_srcdir >>$TS_OUTPUT 2>&1
+ts_finalize_subtest
+
+# cases without and with -x support
+tmp=$($TS_CMD_HARDLINK -x pattern "$SRCDIR"/dir-1/sdir-2 2>&1)
+if test $? -ne 0; then
+       ts_init_subtest "noregex"
+       printf "%s\n" "$tmp" >>$TS_OUTPUT 2>&1
+       ts_finalize_subtest
+else
+       ts_init_subtest "regex-escapes"
+       $TS_CMD_HARDLINK -x '.*z-"§\$%&\(\)=\?\*\+$' "$SRCDIR" >>$TS_OUTPUT 2>&1
+       show_srcdir >>$TS_OUTPUT 2>&1
+       ts_finalize_subtest
+fi
+
+ts_init_subtest "content"
+$TS_CMD_HARDLINK -c "$SRCDIR" >>$TS_OUTPUT 2>&1
+# When using -c we need to cheat with sed because it's not deterministic which
+# file (i.e. which timestamp and perms) wins. TODO at least the choice of the
+# permissions should be sensitive by default and/or controllable by the user.
+show_srcdir | sed 's/\(1540236\).*/\1xxx\tperm/' >>$TS_OUTPUT 2>&1
+ts_finalize_subtest
+
+rm -rf "$SRCDIR"
+ts_finalize
diff --git a/tests/ts/hardlink/testdir1.tar.xz b/tests/ts/hardlink/testdir1.tar.xz
new file mode 100644 (file)
index 0000000..b9bc245
Binary files /dev/null and b/tests/ts/hardlink/testdir1.tar.xz differ