blob: 90ef066206226678f1a442bad79f6b2e643a1ce2 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
|
#!/bin/bash
# Like a mythical touch -p
function touchp() {
install -Dm644 /dev/null "$1"
}
# Creates a simple file+directory structure for tests
function basic_structure() {
touchp "$1/a"
touchp "$1/b"
touchp "$1/c/d"
touchp "$1/e/f"
mkdir -p "$1/g/h"
mkdir -p "$1/i"
touchp "$1/j/foo"
touchp "$1/k/foo/bar"
touchp "$1/l/foo/bar/baz"
}
# Creates a file+directory structure with various permissions for tests
function perms_structure() {
install -Dm444 /dev/null "$1/r"
install -Dm222 /dev/null "$1/w"
install -Dm644 /dev/null "$1/rw"
install -Dm555 /dev/null "$1/rx"
install -Dm311 /dev/null "$1/wx"
install -Dm755 /dev/null "$1/rwx"
}
# Checks for any (order-independent) differences between bfs and find
function find_diff() {
diff -u <(./bfs "$@" | sort) <(find "$@" | sort)
}
# Test cases
function test_0001() {
basic_structure "$1"
find_diff "$1"
}
function test_0002() {
basic_structure "$1"
find_diff "$1" -type d
}
function test_0003() {
basic_structure "$1"
find_diff "$1" -type f
}
function test_0004() {
basic_structure "$1"
find_diff "$1" -mindepth 1
}
function test_0005() {
basic_structure "$1"
find_diff "$1" -maxdepth 1
}
function test_0006() {
basic_structure "$1"
find_diff "$1" -mindepth 1 -depth
}
function test_0007() {
basic_structure "$1"
find_diff "$1" -mindepth 2 -depth
}
function test_0008() {
basic_structure "$1"
find_diff "$1" -maxdepth 1 -depth
}
function test_0009() {
basic_structure "$1"
find_diff "$1" -maxdepth 2 -depth
}
function test_0010() {
basic_structure "$1"
find_diff "$1" -name '*f*'
}
function test_0011() {
basic_structure "$1"
find_diff "$1" -path "$1/*f*"
}
function test_0012() {
perms_structure "$1"
find_diff "$1" -executable
}
function test_0013() {
perms_structure "$1"
find_diff "$1" -readable
}
function test_0014() {
perms_structure "$1"
find_diff "$1" -writable
}
for i in {1..14}; do
dir="$(mktemp -d "${TMPDIR:-/tmp}"/bfs.XXXXXXXXXX)"
test="test_$(printf '%04d' $i)"
"$test" "$dir"
status=$?
rm -rf "$dir"
if [ $status -ne 0 ]; then
echo "$test failed!" >&2
exit $status
fi
done
|