#!/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" "" ""