test: avoid false failure with setgid directories
[coreutils.git] / src / du-tests
blob67fb0ba6f924b49c0887d2649c14dad2f77da4a8
1 #!/bin/bash
3 # Copyright (C) 2003-2024 Free Software Foundation, Inc.
5 # This program is free software: you can redistribute it and/or modify
6 # it under the terms of the GNU General Public License as published by
7 # the Free Software Foundation, either version 3 of the License, or
8 # (at your option) any later version.
10 # This program is distributed in the hope that it will be useful,
11 # but WITHOUT ANY WARRANTY; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 # GNU General Public License for more details.
15 # You should have received a copy of the GNU General Public License
16 # along with this program. If not, see <https://www.gnu.org/licenses/>.
18 cat - <<\EOF > /dev/null
19 Invoke e.g., like this
20 VG_PATH_PREFIX=/cu/src/vg: DU1=/cu/src/du DU2=/usr/bin/du ./du-tests
21 Where /cu/src/vg/du is a valgrind wrapper around du,
22 and DU1 refers to the just-built du binary you want to test.
23 EOF
25 test -z "$DU1" && { echo DU1 envvar not set 1>&2; exit 1; }
26 test -z "$DU2" && { echo DU2 envvar not set 1>&2; exit 1; }
28 test -x "$DU1" || { echo $DU1 not executable 1>&2; exit 1; }
29 test -x "$DU2" || { echo $DU2 not executable 1>&2; exit 1; }
31 # Expects $DU1 and $DU2 to be the binaries to compare.
32 d1=$(mktemp -d)
33 cp -a $DU1 $d1/du
34 d2=$(mktemp -d)
35 cp -a $DU2 $d2/du
37 for args in \
38 '-Sa .' \
39 '-Sa ../..' \
40 '-Sa a' \
41 '-Sa /tmp /t' \
42 '-Sa /tmp' \
43 '/tmp /t' \
44 '-a /tmp /t' \
45 '-a a' \
46 '-ca .' \
47 '-ca ..' \
48 '-ca ../..' \
49 '-ca /tmp /t' \
50 '-ca /tmp' \
51 '-ca a' \
52 ; do
53 echo Args: $args ======================
54 diff -u --label=$DU1 --label=$DU2 \
55 <(PATH=$VG_PATH_PREFIX$d1 du $args 2>&1) <(PATH=$d2 du $args 2>&1)
56 done
57 rm -rf $d1 $d2