commit: 249c3c4d49660400f7112733015f72c3c2fed312 parent 19c387aa62dc66647da6b3ded8f9c255cab086e8 Author: Haelwenn (lanodan) Monnier <contact@hacktivis.me> Date: Mon, 29 Dec 2025 23:25:34 +0100 test-cmd/chown: move to tap.shDiffstat:
| A | test-cmd/chown.sh | 70 | ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
| D | test-cmd/chown.t | 68 | -------------------------------------------------------------------- |
2 files changed, 70 insertions(+), 68 deletions(-)diff --git a/test-cmd/chown.sh b/test-cmd/chown.sh@@ -0,0 +1,70 @@ +#!/bin/sh +# SPDX-FileCopyrightText: 2017 Haelwenn (lanodan) Monnier <contact+utils@hacktivis.me> +# SPDX-License-Identifier: MPL-2.0 + +plans=20 +WD="$(dirname "$0")/../" +target="${WD}/cmd/chown" +. "${WD}/test-cmd/tap.sh" + +tmpfile="${TMPDIR-/tmp}/test_chown_$(date +%s)" +ref_file="${TMPDIR-/tmp}/test_chown_$(date +%s).ref" +loopdir="${TMPDIR-/tmp}/test_chown_$(date +%s).d/loop.d" + +uid=$(id -u) +gid=$(id -g) +uname=$(id -un) +gname=$(id -gn) + +t_cmd touch '' touch "$tmpfile" "$ref_file" +t_cmd mkdir_tmpdir '' mkdir -p "$loopdir" + +t_args --exit=1 enoent "chown: error: Failed getting status for '/var/empty/enoent': No such file or directory +" -v nobody:nobody /var/empty/enoent + +t_args ids_normalize '' "${uid}:${gid}" "$tmpfile" "$ref_file" "$loopdir" + +t_args ids_unchanged "chown: Ownership already set to ${uid}:${gid} for '${tmpfile}' +" -v "${uid}:${gid}" "$tmpfile" + +t_args uid_unchanged "chown: Ownership already set to ${uid}:${gid} for '${tmpfile}' +" -v "${uid}" "$tmpfile" + +t_args gid_unchanged "chown: Ownership already set to ${uid}:${gid} for '${tmpfile}' +" -v ":${gid}" "$tmpfile" + + +t_args names_unchanged "chown: Ownership already set to ${uid}:${gid} for '${tmpfile}' +" -v "${uname}:${gname}" "$tmpfile" + +t_args uname_unchanged "chown: Ownership already set to ${uid}:${gid} for '${tmpfile}' +" -v "${uname}" "$tmpfile" + +t_args gname_unchanged "chown: Ownership already set to ${uid}:${gid} for '${tmpfile}' +" -v ":${gname}" "$tmpfile" + +t_args ref_unchanged "chown: Ownership already set to ${uid}:${gid} for '${tmpfile}' +" -v --reference "$ref_file" "$tmpfile" + + +t_cmd loop_symlink '' ln -s "../loop.d/" "$loopdir/loop" + +t_args loop_normalize '' "${uid}:${gid}" "$loopdir/loop" + +t_args loop0 "chown: Ownership already set to ${uid}:${gid} for '${loopdir}' +" -v "$uid:$gid" "$loopdir" +t_args loop1 "chown: Ownership already set to ${uid}:${gid} for '${loopdir}/loop' +" -v "$uid:$gid" "$loopdir/loop" +t_args loop2 "chown: Ownership already set to ${uid}:${gid} for '${loopdir}/loop/loop' +" -v "$uid:$gid" "$loopdir/loop/loop" +t_args --exit=0 loop_RH "\ +chown: Ownership already set to ${uid}:${gid} for '${loopdir}/loop' +chown: Ownership already set to ${uid}:${gid} for '${loopdir}/loop/loop' +" -v -R -H "$uid:$gid" "$loopdir/loop" +t_args --exit=1 loop_RL "\ +chown: error: Maximum levels of recursion (100) reached at file '${loopdir}/loop/loop/loop/loop/loop/loop/loop/loop/loop/loop/loop/loop/loop/loop/loop/loop/loop/loop/loop/loop/loop/loop/loop/loop/loop/loop/loop/loop/loop/loop/loop/loop/loop/loop/loop/loop/loop/loop/loop/loop/loop/loop/loop/loop/loop/loop/loop/loop/loop/loop/loop/loop/loop/loop/loop/loop/loop/loop/loop/loop/loop/loop/loop/loop/loop/loop/loop/loop/loop/loop/loop/loop/loop/loop/loop/loop/loop/loop/loop/loop/loop/loop/loop/loop/loop/loop/loop/loop/loop/loop/loop/loop/loop/loop/loop/loop/loop/loop/loop/loop/loop' +" -R -L "$uid:$gid" "$loopdir/loop" +t_args --exit=0 loop_RP "chown: Ownership already set to ${uid}:${gid} for '${loopdir}/loop' +" -v -R -P "$uid:$gid" "$loopdir/loop" + +t_cmd cleanup '' rm -fr "$tmpfile" "$ref_file" "$loopdir/loop" "$loopdir"diff --git a/test-cmd/chown.t b/test-cmd/chown.t@@ -1,68 +0,0 @@ -#!/usr/bin/env cram -# SPDX-FileCopyrightText: 2017 Haelwenn (lanodan) Monnier <contact+utils@hacktivis.me> -# SPDX-License-Identifier: MPL-2.0 - - $ export PATH="$TESTDIR/../cmd:$PATH" - - $ test "$(command -v chown)" = "$TESTDIR/../cmd/chown" - - $ test ! -f enoent - $ chown "nobody:$(id -Gn nobody)" enoent - chown: error: Failed getting status for 'enoent': No such file or directory - [1] - - $ touch id_unchanged - $ chown -v $(ls -ld id_unchanged | awk '{print $3}') id_unchanged - chown: Ownership already set to \d+:\d+ for 'id_unchanged' (re) - $ rm id_unchanged - - $ touch uid_unchanged - $ chown -v $(ls -lnd uid_unchanged | awk '{print $3}') uid_unchanged - chown: Ownership already set to \d+:\d+ for 'uid_unchanged' (re) - $ rm uid_unchanged - - $ touch name_unchanged - $ chown -v $(ls -ld name_unchanged | awk '{print $3":"$4}') name_unchanged - chown: Ownership already set to \d+:\d+ for 'name_unchanged' (re) - $ rm name_unchanged - - $ touch uname_unchanged - $ chown -v $(ls -ld uname_unchanged | awk '{print $3}') uname_unchanged - chown: Ownership already set to \d+:\d+ for 'uname_unchanged' (re) - $ rm uname_unchanged - - $ mkdir loop.d - $ ln -s ../loop.d/ loop.d/loop - $ chown -v $(ls -lnd loop.d | awk '{print $3}') loop.d - chown: Ownership already set to \d+:\d+ for 'loop.d' (re) - $ chown -v $(ls -lnd loop.d/loop | awk '{print $3}') loop.d/loop - chown: Ownership already set to \d+:\d+ for 'loop.d/loop' (re) - $ chown -v -h $(ls -lnd loop.d/loop | awk '{print $3}') loop.d/loop - chown: Ownership already set to \d+:\d+ for 'loop.d/loop' (re) - $ chown -v -R $(ls -lnd loop.d/ | awk '{print $3}') loop.d - chown: Ownership already set to \d+:\d+ for 'loop.d' (re) - chown: Ownership already set to \d+:\d+ for 'loop.d/loop' (re) - $ chown -v -R $(ls -lnd loop.d/loop | awk '{print $3}') loop.d/loop - chown: Ownership already set to \d+:\d+ for 'loop.d/loop' (re) - $ chown -v -R -P $(ls -lnd loop.d/loop | awk '{print $3}') loop.d/loop - chown: Ownership already set to \d+:\d+ for 'loop.d/loop' (re) - $ chown -v -R -H $(ls -lnd loop.d/loop | awk '{print $3}') loop.d/loop - chown: Ownership already set to \d+:\d+ for 'loop.d/loop' (re) - chown: Ownership already set to \d+:\d+ for 'loop.d/loop/loop' (re) - Non-portable, meanwhile adding a depth limit on chown itself could be rather limiting… - $ chown -v -R -L $(ls -lnd loop.d/loop | awk '{print $3}') loop.d/loop >/dev/null 2>/dev/null - [1] - $ rm -r loop.d - - $ touch grp_unchanged - $ chown -v $(ls -ld grp_unchanged | awk '{print ":"$4}') grp_unchanged - chown: Ownership already set to \d+:\d+ for 'grp_unchanged' (re) - $ rm grp_unchanged - - $ touch ref_file ref_unchanged - $ chown -v --reference ref_file ref_unchanged - chown: Ownership already set to \d+:\d+ for 'ref_unchanged' (re) - $ rm ref_file ref_unchanged - - $ find . - .