aboutsummaryrefslogtreecommitdiff
path: root/tests/tar.test
blob: 75e14700314b3226a096b6333a15d6aa1795bf9c (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
#!/bin/bash

[ -f testing.sh ] && . testing.sh

#testing "name" "command" "result" "infile" "stdin"

# For reproducibility: UTC and umask 0002

OLDTZ="$TZ"
TZ=utc
OLDUMASK=$(umask)
umask 0002

# Reproducible tarballs: override ownership and timestamp. Also amount of
# trailing NUL padding varies (1024 bytes is minimum, gnu/dammit does more)
# so look at first 3 512-byte frames when analyzing header content.

TAR='tar c --owner root --group root --mtime @1234567890'
SUM='head -c $((3*512)) | sha1sum | sed "s/ .*//"'
[ -n "$TARHD" ] && SUM="tee >(hd >&2) | $SUM"
SPC='sed "s/[ \t][ \t]*/ /g"'

touch file
testing "create file" "$TAR file | $SUM" \
  "fecaecba936e604bb115627a6ef4db7c7a3a8f81\n" "" ""

mkdir dir
testing "create dir" "$TAR dir | $SUM" \
  "05739c423d7d4a7f12b3dbb7c94149acb2bb4f8d\n" "" ""

# note: does _not_ include dir entry in archive, just file
touch dir/file
testing "create dir and file" "$TAR dir/file | $SUM" \
  "2d7b96c7025987215f5a41f10eaa84311160afdb\n" "" ""

# Tests recursion without worrying about content order
testing "create dir/file 2" "$TAR dir | $SUM" \
  "0bcc8005a3e07eb63c9b735267aecc5b774795d7\n" "" ""

# / and .. only stripped from name, not symlink target.
ln -s ../name.././.. dir/link
testing "create symlink" "$TAR dir/link | $SUM" \
  "7324cafbd9aeec5036b6efc54d741f11528aeb10\n" "" ""

# Also two explicit targets
ln dir/file dir/hardlink
testing "create hardlink" "$TAR dir/file dir/hardlink | $SUM" \
  "c5383651f8c03ec0fe15e8a9e28a4e8e5273990d\n" "" ""

ln dir/link dir/hlink
testing "create hardlink to symlink" "$TAR dir/link dir/hlink | $SUM" \
  "3bc16f8fb6fc8b05f691da8caf989a70ee99284a\n" "" ""

skipnot mkfifo dir/fifo
testing "create dir/fifo" "$TAR dir/fifo | $SUM" \
  "bd1365db6e8ead4c813333f9666994c1899924d9\n" "" ""

# this expects devtmpfs values

TZ=utc testing "pass /dev/null" \
  "tar c --mtime @0 /dev/null 2>/dev/null | tar tv | $SPC" \
  "crw-rw-rw- root/root 1,3 1970-01-01 00:00 dev/null\n" "" ""

TZ=utc testing "pass /dev/loop0" \
  "tar c --numeric-owner --mtime @0 /dev/loop0 2>/dev/null | tar tv | $SPC" \
  "brw-rw---- 0/6 7,0 1970-01-01 00:00 dev/loop0\n" "" ""

skipnot mknod dir/char c 12 34
testing "create char2" "$TAR /dev/null | $SUM" \
  "" "" ""

#testing "create block" "$TAR /dev/

skipnot mknod dir/block b 56 78
testing "create dir/block" "$TAR dir/block | $SUM" \
  "" "" ""

skipnot chown nobody dir/file
testing "ownership" "$TAR dir/block | $SUM" \
  "blat" "" ""