From: Plato Kiorpelidis <kioplato@gmail.com>
To: git@vger.kernel.org
Cc: phillip.wood123@gmail.com, avarab@gmail.com,
Plato Kiorpelidis <kioplato@gmail.com>
Subject: [PATCH v2 07/15] t0066: better test coverage for dir-iterator
Date: Mon, 9 May 2022 20:51:51 +0300 [thread overview]
Message-ID: <20220509175159.2948802-8-kioplato@gmail.com> (raw)
In-Reply-To: <20220509175159.2948802-1-kioplato@gmail.com>
dir-iterator is lacking test coverage for some cases:
* root directory and/or subdirectories w/o perms
* pedantic runs on directories with cyclical symlinks
* more thorough tests without sorting expected and actual outputs
Improve test coverage by introducing tests that test ELOOP and EACCES
errno and various directory hierarchies that cover most cases.
Signed-off-by: Plato Kiorpelidis <kioplato@gmail.com>
---
t/t0066-dir-iterator.sh | 290 +++++++++++++++++++++++++++++++++++++++-
1 file changed, 289 insertions(+), 1 deletion(-)
diff --git a/t/t0066-dir-iterator.sh b/t/t0066-dir-iterator.sh
index 61b02423d5..932b1f291c 100755
--- a/t/t0066-dir-iterator.sh
+++ b/t/t0066-dir-iterator.sh
@@ -5,6 +5,97 @@ test_description='Test the dir-iterator functionality'
TEST_PASSES_SANITIZE_LEAK=true
. ./test-lib.sh
+test_expect_success 'setup -- dir with a single file' '
+ mkdir dir1 &&
+ >dir1/a
+'
+test_expect_success 'iteration of dir with a file' '
+ cat >expected-out <<-EOF &&
+ [f] (a) [a] ./dir1/a
+ EOF
+
+ test-tool dir-iterator ./dir1 >actual-out &&
+ test_cmp expected-out actual-out
+'
+
+test_expect_success 'setup -- dir with a single dir' '
+ mkdir -p dir6/a
+'
+test_expect_success 'iteration of dir with a single dir' '
+ cat >expected-out <<-EOF &&
+ [d] (a) [a] ./dir6/a
+ EOF
+
+ test-tool dir-iterator ./dir6 >actual-out &&
+ test_cmp expected-out actual-out
+'
+
+test_expect_success POSIXPERM,SANITY 'setup -- dir w/ single dir w/o perms' '
+ mkdir -p dir13/a
+'
+test_expect_success POSIXPERM,SANITY 'iteration of dir w/ dir w/o perms' '
+ cat >expected-out <<-EOF &&
+ [d] (a) [a] ./dir13/a
+ EOF
+
+ chmod 0 dir13/a &&
+
+ test-tool dir-iterator ./dir13/ >actual-out &&
+ test_cmp expected-out actual-out &&
+
+ chmod 755 dir13/a
+'
+test_expect_success POSIXPERM,SANITY 'pedantic iteration of dir w/ dir w/o perms' '
+ cat >expected-out <<-EOF &&
+ [d] (a) [a] ./dir13/a
+ dir_iterator_advance failure: EACCES
+ EOF
+
+ chmod 0 dir13/a &&
+
+ test_must_fail test-tool dir-iterator --pedantic ./dir13/ >actual-out &&
+ test_cmp expected-out actual-out &&
+
+ chmod 755 dir13/a
+'
+
+test_expect_success 'setup -- dir w/ five files' '
+ mkdir dir14 &&
+ >dir14/a &&
+ >dir14/b &&
+ >dir14/c &&
+ >dir14/d &&
+ >dir14/e
+'
+test_expect_success 'iteration of dir w/ five files' '
+ cat >expected-sorted-out <<-EOF &&
+ [f] (a) [a] ./dir14/a
+ [f] (b) [b] ./dir14/b
+ [f] (c) [c] ./dir14/c
+ [f] (d) [d] ./dir14/d
+ [f] (e) [e] ./dir14/e
+ EOF
+
+ test-tool dir-iterator ./dir14 >actual-out &&
+ sort actual-out >actual-sorted-out &&
+
+ test_cmp expected-sorted-out actual-sorted-out
+'
+
+test_expect_success 'setup -- dir w/ dir w/ a file' '
+ mkdir -p dir15/a &&
+ >dir15/a/b
+'
+test_expect_success 'iteration of dir w/ dir w/ a file' '
+ cat >expected-out <<-EOF &&
+ [d] (a) [a] ./dir15/a
+ [f] (a/b) [b] ./dir15/a/b
+ EOF
+
+ test-tool dir-iterator ./dir15 >actual-out &&
+ test_cmp expected-out actual-out
+'
+
test_expect_success 'setup -- dir w/ complex structure' '
mkdir -p dir &&
mkdir -p dir/a/b/c/ &&
@@ -49,10 +140,178 @@ test_expect_success 'dir-iterator should list files in the correct order' '
EOF
test-tool dir-iterator ./dir2 >actual-out &&
-
test_cmp expected-out actual-out
'
+test_expect_success POSIXPERM,SANITY \
+'setup -- dir w/ three nested dirs w/ file, second nested dir w/o perms' '
+
+ mkdir -p dir7/a/b/c &&
+ >dir7/a/b/c/d
+'
+test_expect_success POSIXPERM,SANITY \
+'iteration of dir w/ three nested dirs w/ file, second w/o perms' '
+
+ cat >expected-out <<-EOF &&
+ [d] (a) [a] ./dir7/a
+ [d] (a/b) [b] ./dir7/a/b
+ EOF
+
+ chmod 0 dir7/a/b &&
+
+ test-tool dir-iterator ./dir7 >actual-out &&
+ test_cmp expected-out actual-out &&
+
+ chmod 755 dir7/a/b
+'
+test_expect_success POSIXPERM,SANITY \
+'pedantic iteration of dir w/ three nested dirs w/ file, second w/o perms' '
+
+ cat >expected-out <<-EOF &&
+ [d] (a) [a] ./dir7/a
+ [d] (a/b) [b] ./dir7/a/b
+ dir_iterator_advance failure: EACCES
+ EOF
+
+ chmod 0 dir7/a/b &&
+
+ test_must_fail test-tool dir-iterator --pedantic ./dir7 >actual-out &&
+ test_cmp expected-out actual-out &&
+
+ chmod 755 dir7/a/b
+'
+
+test_expect_success 'setup -- dir w/ two dirs each w/ file' '
+ mkdir -p dir8/a &&
+ >dir8/a/b &&
+ mkdir dir8/c &&
+ >dir8/c/d
+'
+test_expect_success 'iteration of dir w/ two dirs each w/ file' '
+ cat >expected-out1 <<-EOF &&
+ [d] (a) [a] ./dir8/a
+ [f] (a/b) [b] ./dir8/a/b
+ [d] (c) [c] ./dir8/c
+ [f] (c/d) [d] ./dir8/c/d
+ EOF
+ cat >expected-out2 <<-EOF &&
+ [d] (c) [c] ./dir8/c
+ [f] (c/d) [d] ./dir8/c/d
+ [d] (a) [a] ./dir8/a
+ [f] (a/b) [b] ./dir8/a/b
+ EOF
+
+ test-tool dir-iterator ./dir8 >actual-out &&
+ (
+ test_cmp expected-out1 actual-out ||
+ test_cmp expected-out2 actual-out
+ )
+'
+
+test_expect_success 'setup -- dir w/ two dirs, one w/ two and one w/ one files' '
+ mkdir -p dir9/a &&
+ >dir9/a/b &&
+ >dir9/a/c &&
+ mkdir dir9/d &&
+ >dir9/d/e
+'
+test_expect_success \
+'iteration of dir w/ two dirs, one w/ two and one w/ one files' '
+
+ cat >expected-out1 <<-EOF &&
+ [d] (a) [a] ./dir9/a
+ [f] (a/b) [b] ./dir9/a/b
+ [f] (a/c) [c] ./dir9/a/c
+ [d] (d) [d] ./dir9/d
+ [f] (d/e) [e] ./dir9/d/e
+ EOF
+ cat >expected-out2 <<-EOF &&
+ [d] (a) [a] ./dir9/a
+ [f] (a/c) [c] ./dir9/a/c
+ [f] (a/b) [b] ./dir9/a/b
+ [d] (d) [d] ./dir9/d
+ [f] (d/e) [e] ./dir9/d/e
+ EOF
+ cat >expected-out3 <<-EOF &&
+ [d] (d) [d] ./dir9/d
+ [f] (d/e) [e] ./dir9/d/e
+ [d] (a) [a] ./dir9/a
+ [f] (a/b) [b] ./dir9/a/b
+ [f] (a/c) [c] ./dir9/a/c
+ EOF
+ cat >expected-out4 <<-EOF &&
+ [d] (d) [d] ./dir9/d
+ [f] (d/e) [e] ./dir9/d/e
+ [d] (a) [a] ./dir9/a
+ [f] (a/c) [c] ./dir9/a/c
+ [f] (a/b) [b] ./dir9/a/b
+ EOF
+
+ test-tool dir-iterator ./dir9 >actual-out &&
+ (
+ test_cmp expected-out1 actual-out ||
+ test_cmp expected-out2 actual-out ||
+ test_cmp expected-out3 actual-out ||
+ test_cmp expected-out4 actual-out
+ )
+'
+
+test_expect_success 'setup -- dir w/ two nested dirs, each w/ file' '
+ mkdir -p dir10/a &&
+ >dir10/a/b &&
+ mkdir dir10/a/c &&
+ >dir10/a/c/d
+'
+test_expect_success 'iteration of dir w/ two nested dirs, each w/ file' '
+ cat >expected-out1 <<-EOF &&
+ [d] (a) [a] ./dir10/a
+ [f] (a/b) [b] ./dir10/a/b
+ [d] (a/c) [c] ./dir10/a/c
+ [f] (a/c/d) [d] ./dir10/a/c/d
+ EOF
+ cat >expected-out2 <<-EOF &&
+ [d] (a) [a] ./dir10/a
+ [d] (a/c) [c] ./dir10/a/c
+ [f] (a/c/d) [d] ./dir10/a/c/d
+ [f] (a/b) [b] ./dir10/a/b
+ EOF
+
+ test-tool dir-iterator ./dir10/ >actual-out &&
+ (
+ test_cmp expected-out1 actual-out ||
+ test_cmp expected-out2 actual-out
+ )
+'
+
+test_expect_success POSIXPERM,SANITY 'setup -- dir w/o perms' '
+ mkdir -p dir12/a &&
+ >dir12/a/b
+'
+test_expect_success POSIXPERM,SANITY 'iteration of root dir w/o perms' '
+ cat >expected-out <<-EOF &&
+ dir_iterator_advance failure: EACCES
+ EOF
+
+ chmod 0 dir12 &&
+
+ test_must_fail test-tool dir-iterator ./dir12 >actual-out &&
+ test_cmp expected-out actual-out &&
+
+ chmod 755 dir12
+'
+test_expect_success POSIXPERM,SANITY 'pedantic iteration of root dir w/o perms' '
+ cat >expected-out <<-EOF &&
+ dir_iterator_advance failure: EACCES
+ EOF
+
+ chmod 0 dir12 &&
+
+ test_must_fail test-tool dir-iterator --pedantic ./dir12 >actual-out &&
+ test_cmp expected-out actual-out &&
+
+ chmod 755 dir12
+'
+
test_expect_success 'begin should fail upon inexistent paths' '
echo "dir_iterator_begin failure: ENOENT" >expected-out &&
@@ -147,5 +406,34 @@ test_expect_success SYMLINKS 'setup -- dir w/ symlinks w/ cycle' '
ln -s ../ dir5/a/b/e &&
ln -s ../../ dir5/a/b/f
'
+test_expect_success SYMLINKS 'iteration of dir w/ symlinks w/ cycle' '
+
+ cat >expected-sorted-out <<-EOF &&
+ [d] (a) [a] ./dir5/a
+ [d] (a/b) [b] ./dir5/a/b
+ [d] (a/c) [c] ./dir5/a/c
+ [s] (a/b/d) [d] ./dir5/a/b/d
+ [s] (a/b/e) [e] ./dir5/a/b/e
+ [s] (a/b/f) [f] ./dir5/a/b/f
+ EOF
+
+ test-tool dir-iterator ./dir5 >actual-out &&
+ sort actual-out >actual-sorted-out &&
+
+ test_cmp expected-sorted-out actual-sorted-out
+'
+test_expect_success SYMLINKS \
+'pedantic follow-symlinks iteration of dir w/ symlinks w/ cycle' '
+
+ cat >expected-tailed-out <<-EOF &&
+ dir_iterator_advance failure: ELOOP
+ EOF
+
+ test_must_fail test-tool dir-iterator \
+ --pedantic --follow-symlinks ./dir5 >actual-out &&
+ tail -n 1 actual-out >actual-tailed-out &&
+
+ test_cmp expected-tailed-out actual-tailed-out
+'
test_done
--
2.36.1
next prev parent reply other threads:[~2022-05-09 17:55 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-05-09 17:51 [PATCH v2 00/15][GSoC] iterate dirs before or after their contents Plato Kiorpelidis
2022-05-09 17:51 ` [PATCH v2 01/15] t0066: refactor dir-iterator tests Plato Kiorpelidis
2022-05-09 17:51 ` [PATCH v2 02/15] t0066: remove dependency between unrelated tests Plato Kiorpelidis
2022-05-09 17:51 ` [PATCH v2 03/15] t0066: shorter expected and actual output file names Plato Kiorpelidis
2022-05-09 17:51 ` [PATCH v2 04/15] test-dir-iterator: consistently return EXIT_FAILURE or EXIT_SUCCESS Plato Kiorpelidis
2022-05-09 21:03 ` Junio C Hamano
2022-05-18 14:13 ` Plato Kiorpelidis
2022-05-18 17:57 ` Junio C Hamano
2022-05-09 17:51 ` [PATCH v2 05/15] test-dir-iterator: print EACCES and ELOOP errno set by dir_iterator Plato Kiorpelidis
2022-05-09 17:51 ` [PATCH v2 06/15] test-dir-iterator: print errno name set by dir_iterator_advance Plato Kiorpelidis
2022-05-09 17:51 ` Plato Kiorpelidis [this message]
2022-05-09 17:51 ` [PATCH v2 08/15] t0066: reorder tests from simple to more complex Plato Kiorpelidis
2022-05-09 17:51 ` [PATCH v2 09/15] t0066: rename test directories Plato Kiorpelidis
2022-05-09 17:51 ` [PATCH v2 10/15] dir-iterator: refactor dir_iterator_advance() Plato Kiorpelidis
2022-05-09 21:16 ` Junio C Hamano
2022-05-18 15:39 ` Plato Kiorpelidis
2022-05-10 13:04 ` Phillip Wood
2022-05-09 17:51 ` [PATCH v2 11/15] dir-iterator: open root dir in dir_iterator_begin() Plato Kiorpelidis
2022-05-09 17:51 ` [PATCH v2 12/15] t0066: rename subtest descriptions Plato Kiorpelidis
2022-05-09 17:51 ` [PATCH v2 13/15] dir-iterator: option to iterate dirs in pre-order Plato Kiorpelidis
2022-05-10 13:07 ` Phillip Wood
2022-05-18 17:40 ` Plato Kiorpelidis
2022-05-18 17:47 ` rsbecker
2022-05-18 18:09 ` Junio C Hamano
2022-05-18 18:36 ` rsbecker
2022-05-09 17:51 ` [PATCH v2 14/15] dir-iterator: option to iterate dirs in post-order Plato Kiorpelidis
2022-05-09 17:51 ` [PATCH v2 15/15] entry.c: use dir-iterator to avoid explicit dir traversal Plato Kiorpelidis
2022-05-10 13:10 ` Phillip Wood
2022-05-10 13:13 ` [PATCH v2 00/15][GSoC] iterate dirs before or after their contents Phillip Wood
2022-05-10 16:31 ` Junio C Hamano
2022-05-20 17:43 ` Plato Kiorpelidis
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20220509175159.2948802-8-kioplato@gmail.com \
--to=kioplato@gmail.com \
--cc=avarab@gmail.com \
--cc=git@vger.kernel.org \
--cc=phillip.wood123@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.