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