]> arthur.barton.de Git - bup.git/blob - t/test-ls
7fb05cf29346257c17c5082c8d4188a8e528deb8
[bup.git] / t / test-ls
1 #!/usr/bin/env bash
2 . ./wvtest-bup.sh || exit $?
3 . t/lib.sh || exit $?
4
5 set -o pipefail
6
7 top="$(WVPASS pwd)" || exit $?
8 tmpdir="$(WVPASS wvmktempdir)" || exit $?
9
10 export BUP_DIR="$tmpdir/bup"
11 export GIT_DIR="$tmpdir/bup"
12
13 if test "$BUP_TEST_REMOTE_REPO"; then
14     ls_cmd_desc='ls -r'
15 else
16     ls_cmd_desc='ls'
17 fi
18     
19 bup() { "$top/bup" "$@"; }
20
21 bup-ls() {
22     if test "$BUP_TEST_REMOTE_REPO"; then
23         "$top/bup" ls -r "$BUP_DIR" "$@"
24     else
25         "$top/bup" ls "$@"
26     fi
27 }
28
29
30 export TZ=UTC
31
32 WVPASS bup init
33 WVPASS cd "$tmpdir"
34
35 WVPASS mkdir src
36 WVPASS touch src/.dotfile src/executable
37 WVPASS mkfifo src/fifo
38 WVPASS "$top"/t/mksock src/socket
39 WVPASS bup random 1k > src/file
40 WVPASS chmod u+x src/executable
41 WVPASS chmod -R u=rwX,g-rwx,o-rwx .
42 WVPASS touch -t 200910032348 src/.dotfile src/*
43 (WVPASS cd src; WVPASS ln -s file symlink) || exit $?
44 (WVPASS cd src; WVPASS ln -s not-there bad-symlink) || exit $?
45 WVPASS touch -t 200910032348 src
46 WVPASS touch -t 200910032348 .
47 WVPASS bup index src
48 WVPASS bup save -n src -d 242312160 --strip src
49 WVPASS bup tag some-tag src
50
51 uid="$(WVPASS id -u)" || exit $?
52 gid="$(WVPASS bup-python -c 'import os; print os.stat("src").st_gid')" || exit $?
53 user="$(WVPASS id -un)" || exit $?
54 group="$(WVPASS bup-python -c 'import grp, os;
55 print grp.getgrgid(os.stat("src").st_gid)[0]')" || exit $?
56 src_commit_hash=$(git log --format=%H -n1 src)
57 src_tree_hash=$(git log --format=%T -n1 src)
58
59
60 WVSTART "$ls_cmd_desc (short)"
61
62 (export BUP_FORCE_TTY=1; WVPASSEQ "$(WVPASS bup-ls | tr -d ' ')" src)
63
64 WVPASSEQ "$(WVPASS bup-ls /)" "src"
65
66 WVPASSEQ "$(WVPASS bup-ls -A /)" ".tag
67 src"
68
69 WVPASSEQ "$(WVPASS bup-ls -AF /)" ".tag/
70 src/"
71
72 WVPASSEQ "$(WVPASS bup-ls -a /)" ".
73 ..
74 .tag
75 src"
76
77 WVPASSEQ "$(WVPASS bup-ls -aF /)" "./
78 ../
79 .tag/
80 src/"
81
82 WVPASSEQ "$(WVPASS bup-ls /.tag)" "some-tag"
83
84 WVPASSEQ "$(WVPASS bup-ls /src)" \
85 "1977-09-05-125600
86 latest"
87
88 WVPASSEQ "$(WVPASS bup-ls src/latest)" "bad-symlink
89 executable
90 fifo
91 file
92 socket
93 symlink"
94
95 WVPASSEQ "$(WVPASS bup-ls -A src/latest)" ".dotfile
96 bad-symlink
97 executable
98 fifo
99 file
100 socket
101 symlink"
102
103 WVPASSEQ "$(WVPASS bup-ls -a src/latest)" ".
104 ..
105 .dotfile
106 bad-symlink
107 executable
108 fifo
109 file
110 socket
111 symlink"
112
113 WVPASSEQ "$(WVPASS bup-ls -F src/latest)" "bad-symlink@
114 executable*
115 fifo|
116 file
117 socket=
118 symlink@"
119
120 WVPASSEQ "$(WVPASS bup-ls --file-type src/latest)" "bad-symlink@
121 executable
122 fifo|
123 file
124 socket=
125 symlink@"
126
127 WVPASSEQ "$(WVPASS bup-ls -d src/latest)" "src/latest"
128
129
130 WVSTART "$ls_cmd_desc (long)"
131
132 WVPASSEQ "$(WVPASS bup-ls -l / | tr -s ' ' ' ')" \
133 "drwx------ $user/$group 0 2009-10-03 23:48 src"
134
135 WVPASSEQ "$(WVPASS bup-ls -lA / | tr -s ' ' ' ')" \
136 "drwxr-xr-x 0/0 0 1970-01-01 00:00 .tag
137 drwx------ $user/$group 0 2009-10-03 23:48 src"
138
139 WVPASSEQ "$(WVPASS bup-ls -lAF / | tr -s ' ' ' ')" \
140 "drwxr-xr-x 0/0 0 1970-01-01 00:00 .tag/
141 drwx------ $user/$group 0 2009-10-03 23:48 src/"
142
143 WVPASSEQ "$(WVPASS bup-ls -la / | tr -s ' ' ' ')" \
144 "drwxr-xr-x 0/0 0 1970-01-01 00:00 .
145 drwxr-xr-x 0/0 0 1970-01-01 00:00 ..
146 drwxr-xr-x 0/0 0 1970-01-01 00:00 .tag
147 drwx------ $user/$group 0 2009-10-03 23:48 src"
148
149 WVPASSEQ "$(WVPASS bup-ls -laF / | tr -s ' ' ' ')" \
150 "drwxr-xr-x 0/0 0 1970-01-01 00:00 ./
151 drwxr-xr-x 0/0 0 1970-01-01 00:00 ../
152 drwxr-xr-x 0/0 0 1970-01-01 00:00 .tag/
153 drwx------ $user/$group 0 2009-10-03 23:48 src/"
154
155 socket_mode="$(WVPASS ls -l src/socket | cut -b -10)" || exit $?
156
157
158 bad_symlink_mode="$(WVPASS ls -l src/bad-symlink | cut -b -10)" || exit $?
159
160 bad_symlink_bup_info="$(WVPASS bup-ls -l src/latest | grep bad-symlink)" \
161     || exit $?
162 bad_symlink_date="$(WVPASS echo "$bad_symlink_bup_info" \
163   | WVPASS perl -ne 'm/.*? (\d+) (\d\d\d\d-\d\d-\d\d \d\d:\d\d)/ and print $2')" \
164     || exit $?
165
166 test "$bad_symlink_date" || exit 1
167
168 if test "$(uname -s)" != NetBSD; then
169     bad_symlink_size="$(WVPASS bup-python -c "import os
170 print os.lstat('src/bad-symlink').st_size")" || exit $?
171 else
172     # NetBSD appears to return varying sizes, so for now, just ignore it.
173     bad_symlink_size="$(WVPASS echo "$bad_symlink_bup_info" \
174       | WVPASS perl -ne 'm/.*? (\d+) (\d\d\d\d-\d\d-\d\d \d\d:\d\d)/ and print $1')" \
175         || exit $?
176 fi
177
178
179 symlink_mode="$(WVPASS ls -l src/symlink | cut -b -10)" || exit $?
180
181 symlink_bup_info="$(WVPASS bup-ls -l src/latest | grep -E '[^-]symlink')" \
182     || exit $?
183 symlink_date="$(WVPASS echo "$symlink_bup_info" \
184   | WVPASS perl -ne 'm/.*? (\d+) (\d\d\d\d-\d\d-\d\d \d\d:\d\d)/ and print $2')" \
185     || exit $?
186
187 test "$symlink_date" || exit 1
188
189 if test "$(uname -s)" != NetBSD; then
190     symlink_size="$(WVPASS bup-python -c "import os
191 print os.lstat('src/symlink').st_size")" || exit $?
192 else
193     # NetBSD appears to return varying sizes, so for now, just ignore it.
194     symlink_size="$(WVPASS echo "$symlink_bup_info" \
195       | WVPASS perl -ne 'm/.*? (\d+) (\d\d\d\d-\d\d-\d\d \d\d:\d\d)/ and print $1')" \
196         || exit $?
197 fi
198
199 WVPASSEQ "$(bup-ls -l src/latest | tr -s ' ' ' ')" \
200 "$bad_symlink_mode $user/$group $bad_symlink_size $bad_symlink_date bad-symlink -> not-there
201 -rwx------ $user/$group 0 2009-10-03 23:48 executable
202 prw------- $user/$group 0 2009-10-03 23:48 fifo
203 -rw------- $user/$group 1024 2009-10-03 23:48 file
204 $socket_mode $user/$group 0 2009-10-03 23:48 socket
205 $symlink_mode $user/$group $symlink_size $symlink_date symlink -> file"
206
207 WVPASSEQ "$(bup-ls -la src/latest | tr -s ' ' ' ')" \
208 "drwx------ $user/$group 0 2009-10-03 23:48 .
209 drwx------ $user/$group 0 2009-10-03 23:48 ..
210 -rw------- $user/$group 0 2009-10-03 23:48 .dotfile
211 $bad_symlink_mode $user/$group $bad_symlink_size $bad_symlink_date bad-symlink -> not-there
212 -rwx------ $user/$group 0 2009-10-03 23:48 executable
213 prw------- $user/$group 0 2009-10-03 23:48 fifo
214 -rw------- $user/$group 1024 2009-10-03 23:48 file
215 $socket_mode $user/$group 0 2009-10-03 23:48 socket
216 $symlink_mode $user/$group $symlink_size $symlink_date symlink -> file"
217
218 WVPASSEQ "$(bup-ls -lA src/latest | tr -s ' ' ' ')" \
219 "-rw------- $user/$group 0 2009-10-03 23:48 .dotfile
220 $bad_symlink_mode $user/$group $bad_symlink_size $bad_symlink_date bad-symlink -> not-there
221 -rwx------ $user/$group 0 2009-10-03 23:48 executable
222 prw------- $user/$group 0 2009-10-03 23:48 fifo
223 -rw------- $user/$group 1024 2009-10-03 23:48 file
224 $socket_mode $user/$group 0 2009-10-03 23:48 socket
225 $symlink_mode $user/$group $symlink_size $symlink_date symlink -> file"
226
227 WVPASSEQ "$(bup-ls -lF src/latest | tr -s ' ' ' ')" \
228 "$bad_symlink_mode $user/$group $bad_symlink_size $bad_symlink_date bad-symlink@ -> not-there
229 -rwx------ $user/$group 0 2009-10-03 23:48 executable*
230 prw------- $user/$group 0 2009-10-03 23:48 fifo|
231 -rw------- $user/$group 1024 2009-10-03 23:48 file
232 $socket_mode $user/$group 0 2009-10-03 23:48 socket=
233 $symlink_mode $user/$group $symlink_size $symlink_date symlink@ -> file"
234
235 WVPASSEQ "$(bup-ls -l --file-type src/latest | tr -s ' ' ' ')" \
236 "$bad_symlink_mode $user/$group $bad_symlink_size $bad_symlink_date bad-symlink@ -> not-there
237 -rwx------ $user/$group 0 2009-10-03 23:48 executable
238 prw------- $user/$group 0 2009-10-03 23:48 fifo|
239 -rw------- $user/$group 1024 2009-10-03 23:48 file
240 $socket_mode $user/$group 0 2009-10-03 23:48 socket=
241 $symlink_mode $user/$group $symlink_size $symlink_date symlink@ -> file"
242
243 WVPASSEQ "$(bup-ls -ln src/latest | tr -s ' ' ' ')" \
244 "$bad_symlink_mode $uid/$gid $bad_symlink_size $bad_symlink_date bad-symlink -> not-there
245 -rwx------ $uid/$gid 0 2009-10-03 23:48 executable
246 prw------- $uid/$gid 0 2009-10-03 23:48 fifo
247 -rw------- $uid/$gid 1024 2009-10-03 23:48 file
248 $socket_mode $uid/$gid 0 2009-10-03 23:48 socket
249 $symlink_mode $uid/$gid $symlink_size $symlink_date symlink -> file"
250
251 WVPASSEQ "$(bup-ls -ld "src/latest" | tr -s ' ' ' ')" \
252 "drwx------ $user/$group 0 2009-10-03 23:48 src/latest"
253
254
255 WVSTART "$ls_cmd_desc (backup set - long)"
256 WVPASSEQ "$(bup-ls -l --numeric-ids src | cut -d' ' -f 1-2)" \
257 "drwx------ $uid/$gid
258 drwx------ $uid/$gid"
259
260 WVPASSEQ "$(bup-ls -ds "src/latest" | tr -s ' ' ' ')" \
261 "$src_tree_hash src/latest"
262
263 WVPASSEQ "$(bup-ls -ds --commit-hash "src/latest" | tr -s ' ' ' ')" \
264 "$src_commit_hash src/latest"
265
266
267 WVSTART "$ls_cmd_desc (dates TZ != UTC)"
268 export TZ=America/Chicago
269 bad_symlink_date_central="$(bup-ls -l src/latest | grep bad-symlink)"
270 bad_symlink_date_central="$(echo "$bad_symlink_date_central" \
271   | perl -ne 'm/.*? (\d+) (\d\d\d\d-\d\d-\d\d \d\d:\d\d)/ and print $2')"
272 symlink_date_central="$(bup-ls -l src/latest | grep -E '[^-]symlink')"
273 symlink_date_central="$(echo "$symlink_date_central" \
274   | perl -ne 'm/.*? (\d+) (\d\d\d\d-\d\d-\d\d \d\d:\d\d)/ and print $2')"
275 WVPASSEQ "$(bup-ls -ln src/latest | tr -s ' ' ' ')" \
276 "$bad_symlink_mode $uid/$gid $bad_symlink_size $bad_symlink_date_central bad-symlink -> not-there
277 -rwx------ $uid/$gid 0 2009-10-03 18:48 executable
278 prw------- $uid/$gid 0 2009-10-03 18:48 fifo
279 -rw------- $uid/$gid 1024 2009-10-03 18:48 file
280 $socket_mode $uid/$gid 0 2009-10-03 18:48 socket
281 $symlink_mode $uid/$gid $symlink_size $symlink_date_central symlink -> file"
282 export TZ=UTC
283
284
285 WVSTART "$ls_cmd_desc bad-symlink"
286 WVPASSEQ "$(bup-ls "src/latest/bad-symlink")" "src/latest/bad-symlink"
287
288 WVSTART "$ls_cmd_desc -l bad-symlink"
289 WVPASSEQ "$(bup-ls -l src/latest/bad-symlink | tr -s ' ' ' ')" \
290 "$bad_symlink_mode $user/$group $bad_symlink_size $bad_symlink_date src/latest/bad-symlink -> not-there"
291
292
293 WVPASS rm -rf "$tmpdir"