xref: /aosp_15_r20/external/toybox/tests/gunzip.test (revision cf5a6c84e2b8763fc1a7db14496fd4742913b199)
1*cf5a6c84SAndroid Build Coastguard Worker#!/bin/bash
2*cf5a6c84SAndroid Build Coastguard Worker
3*cf5a6c84SAndroid Build Coastguard Worker[ -f testing.sh ] && . testing.sh
4*cf5a6c84SAndroid Build Coastguard Worker
5*cf5a6c84SAndroid Build Coastguard Worker#testing "name" "command" "result" "infile" "stdin"
6*cf5a6c84SAndroid Build Coastguard Worker
7*cf5a6c84SAndroid Build Coastguard Worker# Decompress files.
8*cf5a6c84SAndroid Build Coastguard Worker# On success, the input files are removed and replaced by new
9*cf5a6c84SAndroid Build Coastguard Worker# files without the .gz suffix.
10*cf5a6c84SAndroid Build Coastguard Workerecho -n "foo " | gzip > f1.gz
11*cf5a6c84SAndroid Build Coastguard Workerecho "bar" | gzip > f2.gz
12*cf5a6c84SAndroid Build Coastguard Workertesting "with input files" "gunzip f1.gz f2.gz &&
13*cf5a6c84SAndroid Build Coastguard Worker    ! test -f f1.gz && ! test -f f2.gz &&
14*cf5a6c84SAndroid Build Coastguard Worker    test -f f1 && test -f f2 &&
15*cf5a6c84SAndroid Build Coastguard Worker    cat f1 f2" "foo bar\n" "" ""
16*cf5a6c84SAndroid Build Coastguard Workerrm -f f1 f2 f1.gz f2.gz
17*cf5a6c84SAndroid Build Coastguard Worker
18*cf5a6c84SAndroid Build Coastguard Worker# With no files, decompresses stdin to stdout.
19*cf5a6c84SAndroid Build Coastguard Workerecho "hello world" | gzip > f.gz
20*cf5a6c84SAndroid Build Coastguard Workertesting "no files (stdin to stdout)" "cat f.gz | gunzip > f &&
21*cf5a6c84SAndroid Build Coastguard Worker    test -f f.gz && cat f" "hello world\n" "" ""
22*cf5a6c84SAndroid Build Coastguard Workerrm -f f f.gz
23*cf5a6c84SAndroid Build Coastguard Worker
24*cf5a6c84SAndroid Build Coastguard Worker# test FEXTRA support
25*cf5a6c84SAndroid Build Coastguard Workerecho "1f8b08040000000000ff04000000ffff4bcbcfe70200a865327e04000000" | xxd -r -p > f1.gz
26*cf5a6c84SAndroid Build Coastguard Workertesting "FEXTRA flag skipped properly" "gunzip f1.gz &&
27*cf5a6c84SAndroid Build Coastguard Worker    ! test -f f1.gz && test -f f1 &&
28*cf5a6c84SAndroid Build Coastguard Worker    cat f1" "foo\n" "" ""
29*cf5a6c84SAndroid Build Coastguard Workerrm -f f1 f1.gz
30*cf5a6c84SAndroid Build Coastguard Worker
31*cf5a6c84SAndroid Build Coastguard Worker# -c	Output to stdout
32*cf5a6c84SAndroid Build Coastguard Workerecho -n "foo " | gzip > f1.gz
33*cf5a6c84SAndroid Build Coastguard Workerecho "bar" | gzip > f2.gz
34*cf5a6c84SAndroid Build Coastguard Workertesting "with input files and -c" "gunzip -c f1.gz f2.gz > out &&
35*cf5a6c84SAndroid Build Coastguard Worker    test -f f1.gz && test -f f2.gz &&
36*cf5a6c84SAndroid Build Coastguard Worker    ! test -f f1 && ! test -f f2 &&
37*cf5a6c84SAndroid Build Coastguard Worker    cat out" "foo bar\n" "" ""
38*cf5a6c84SAndroid Build Coastguard Workerrm -f f1.gz f2.gz out
39*cf5a6c84SAndroid Build Coastguard Worker
40*cf5a6c84SAndroid Build Coastguard Worker# TODO: how to test "gunzip -f"?
41*cf5a6c84SAndroid Build Coastguard Worker
42*cf5a6c84SAndroid Build Coastguard Worker# -k	Keep input files (don't remove)
43*cf5a6c84SAndroid Build Coastguard Workerecho "hello world" | gzip > f1.gz
44*cf5a6c84SAndroid Build Coastguard Workertesting "-k" "gunzip -k f1.gz && cat f1 && zcat f1.gz" \
45*cf5a6c84SAndroid Build Coastguard Worker    "hello world\nhello world\n" "" ""
46*cf5a6c84SAndroid Build Coastguard Workerrm -f f1 f1.gz
47*cf5a6c84SAndroid Build Coastguard Worker
48*cf5a6c84SAndroid Build Coastguard Worker# Test that gunzip preserves permissions and times.
49*cf5a6c84SAndroid Build Coastguard Workerexport TZ=UTC
50*cf5a6c84SAndroid Build Coastguard Workerecho "hello world" | gzip > f1.gz
51*cf5a6c84SAndroid Build Coastguard Workerchmod 0411 f1.gz
52*cf5a6c84SAndroid Build Coastguard Workertouch -a -t 197801020304 f1.gz
53*cf5a6c84SAndroid Build Coastguard Workertouch -m -t 198704030201 f1.gz
54*cf5a6c84SAndroid Build Coastguard Workertesting "permissions/times preservation" \
55*cf5a6c84SAndroid Build Coastguard Worker    "gunzip -k f1.gz && stat -c '%a %X %Y' f1 && stat -c '%a %Y' f1.gz" \
56*cf5a6c84SAndroid Build Coastguard Worker    "411 252558240 544413660\n411 544413660\n" "" ""
57*cf5a6c84SAndroid Build Coastguard Workerrm -f f1 f1.gz
58