xref: /aosp_15_r20/system/libziparchive/cli-tests/unzip.test (revision adcb0a6279ea715828f9bc5e351569419e478774)
1*adcb0a62SAndroid Build Coastguard Worker# unzip tests.
2*adcb0a62SAndroid Build Coastguard Worker
3*adcb0a62SAndroid Build Coastguard Worker# Note: since "master key", Android uses libziparchive for all zip file
4*adcb0a62SAndroid Build Coastguard Worker# handling, and that scans the whole central directory immediately. Not only
5*adcb0a62SAndroid Build Coastguard Worker# lookups by name but also iteration is implemented using the resulting hash
6*adcb0a62SAndroid Build Coastguard Worker# table, meaning that any test that makes assumptions about iteration order
7*adcb0a62SAndroid Build Coastguard Worker# will fail on Android.
8*adcb0a62SAndroid Build Coastguard Worker
9*adcb0a62SAndroid Build Coastguard Workername: unzip -l
10*adcb0a62SAndroid Build Coastguard Workercommand: unzip -l $FILES/example.zip d1/d2/x.txt
11*adcb0a62SAndroid Build Coastguard Workerafter: [ ! -f d1/d2/x.txt ]
12*adcb0a62SAndroid Build Coastguard Workerexpected-stdout:
13*adcb0a62SAndroid Build Coastguard Worker	Archive:  $FILES/example.zip
14*adcb0a62SAndroid Build Coastguard Worker	  Length      Date    Time    Name
15*adcb0a62SAndroid Build Coastguard Worker	---------  ---------- -----   ----
16*adcb0a62SAndroid Build Coastguard Worker	     1024  2017-06-04 08:45   d1/d2/x.txt
17*adcb0a62SAndroid Build Coastguard Worker	---------                     -------
18*adcb0a62SAndroid Build Coastguard Worker	     1024                     1 file
19*adcb0a62SAndroid Build Coastguard Worker---
20*adcb0a62SAndroid Build Coastguard Worker
21*adcb0a62SAndroid Build Coastguard Workername: unzip -lq
22*adcb0a62SAndroid Build Coastguard Workercommand: unzip -lq $FILES/example.zip d1/d2/x.txt
23*adcb0a62SAndroid Build Coastguard Workerafter: [ ! -f d1/d2/x.txt ]
24*adcb0a62SAndroid Build Coastguard Workerexpected-stdout:
25*adcb0a62SAndroid Build Coastguard Worker	  Length      Date    Time    Name
26*adcb0a62SAndroid Build Coastguard Worker	---------  ---------- -----   ----
27*adcb0a62SAndroid Build Coastguard Worker	     1024  2017-06-04 08:45   d1/d2/x.txt
28*adcb0a62SAndroid Build Coastguard Worker	---------                     -------
29*adcb0a62SAndroid Build Coastguard Worker	     1024                     1 file
30*adcb0a62SAndroid Build Coastguard Worker---
31*adcb0a62SAndroid Build Coastguard Worker
32*adcb0a62SAndroid Build Coastguard Workername: unzip -lv
33*adcb0a62SAndroid Build Coastguard Workercommand: unzip -lv $FILES/example.zip d1/d2/x.txt
34*adcb0a62SAndroid Build Coastguard Workerafter: [ ! -f d1/d2/file ]
35*adcb0a62SAndroid Build Coastguard Workerexpected-stdout:
36*adcb0a62SAndroid Build Coastguard Worker	Archive:  $FILES/example.zip
37*adcb0a62SAndroid Build Coastguard Worker	 Length   Method    Size  Cmpr    Date    Time   CRC-32   Name
38*adcb0a62SAndroid Build Coastguard Worker	--------  ------  ------- ---- ---------- ----- --------  ----
39*adcb0a62SAndroid Build Coastguard Worker	    1024  Defl:N       11  99% 2017-06-04 08:45 48d7f063  d1/d2/x.txt
40*adcb0a62SAndroid Build Coastguard Worker	--------          -------  ---                            -------
41*adcb0a62SAndroid Build Coastguard Worker	    1024               11  99%                            1 file
42*adcb0a62SAndroid Build Coastguard Worker---
43*adcb0a62SAndroid Build Coastguard Worker
44*adcb0a62SAndroid Build Coastguard Workername: unzip -v
45*adcb0a62SAndroid Build Coastguard Workercommand: unzip -v $FILES/example.zip d1/d2/x.txt
46*adcb0a62SAndroid Build Coastguard Workerafter: [ ! -f d1/d2/file ]
47*adcb0a62SAndroid Build Coastguard Workerexpected-stdout:
48*adcb0a62SAndroid Build Coastguard Worker	Archive:  $FILES/example.zip
49*adcb0a62SAndroid Build Coastguard Worker	 Length   Method    Size  Cmpr    Date    Time   CRC-32   Name
50*adcb0a62SAndroid Build Coastguard Worker	--------  ------  ------- ---- ---------- ----- --------  ----
51*adcb0a62SAndroid Build Coastguard Worker	    1024  Defl:N       11  99% 2017-06-04 08:45 48d7f063  d1/d2/x.txt
52*adcb0a62SAndroid Build Coastguard Worker	--------          -------  ---                            -------
53*adcb0a62SAndroid Build Coastguard Worker	    1024               11  99%                            1 file
54*adcb0a62SAndroid Build Coastguard Worker---
55*adcb0a62SAndroid Build Coastguard Worker
56*adcb0a62SAndroid Build Coastguard Workername: unzip one file
57*adcb0a62SAndroid Build Coastguard Workercommand: unzip -q $FILES/example.zip d1/d2/a.txt && cat d1/d2/a.txt
58*adcb0a62SAndroid Build Coastguard Workerafter: [ ! -f d1/d2/b.txt ]
59*adcb0a62SAndroid Build Coastguard Workerexpected-stdout:
60*adcb0a62SAndroid Build Coastguard Worker	a
61*adcb0a62SAndroid Build Coastguard Worker---
62*adcb0a62SAndroid Build Coastguard Worker
63*adcb0a62SAndroid Build Coastguard Workername: unzip all files
64*adcb0a62SAndroid Build Coastguard Workercommand: unzip -q $FILES/example.zip
65*adcb0a62SAndroid Build Coastguard Workerafter: [ -f d1/d2/a.txt ]
66*adcb0a62SAndroid Build Coastguard Workerafter: [ -f d1/d2/b.txt ]
67*adcb0a62SAndroid Build Coastguard Workerafter: [ -f d1/d2/c.txt ]
68*adcb0a62SAndroid Build Coastguard Workerafter: [ -f d1/d2/empty.txt ]
69*adcb0a62SAndroid Build Coastguard Workerafter: [ -f d1/d2/x.txt ]
70*adcb0a62SAndroid Build Coastguard Workerafter: [ -d d1/d2/dir ]
71*adcb0a62SAndroid Build Coastguard Workerexpected-stdout:
72*adcb0a62SAndroid Build Coastguard Worker---
73*adcb0a62SAndroid Build Coastguard Worker
74*adcb0a62SAndroid Build Coastguard Workername: unzip -o
75*adcb0a62SAndroid Build Coastguard Workerbefore: mkdir -p d1/d2
76*adcb0a62SAndroid Build Coastguard Workerbefore: echo b > d1/d2/a.txt
77*adcb0a62SAndroid Build Coastguard Workercommand: unzip -q -o $FILES/example.zip d1/d2/a.txt && cat d1/d2/a.txt
78*adcb0a62SAndroid Build Coastguard Workerexpected-stdout:
79*adcb0a62SAndroid Build Coastguard Worker	a
80*adcb0a62SAndroid Build Coastguard Worker---
81*adcb0a62SAndroid Build Coastguard Worker
82*adcb0a62SAndroid Build Coastguard Workername: unzip -n
83*adcb0a62SAndroid Build Coastguard Workerbefore: mkdir -p d1/d2
84*adcb0a62SAndroid Build Coastguard Workerbefore: echo b > d1/d2/a.txt
85*adcb0a62SAndroid Build Coastguard Workercommand: unzip -q -n $FILES/example.zip d1/d2/a.txt && cat d1/d2/a.txt
86*adcb0a62SAndroid Build Coastguard Workerexpected-stdout:
87*adcb0a62SAndroid Build Coastguard Worker	b
88*adcb0a62SAndroid Build Coastguard Worker---
89*adcb0a62SAndroid Build Coastguard Worker
90*adcb0a62SAndroid Build Coastguard Worker# The reference implementation will create *one* level of missing directories,
91*adcb0a62SAndroid Build Coastguard Worker# so this succeeds.
92*adcb0a62SAndroid Build Coastguard Workername: unzip -d shallow non-existent
93*adcb0a62SAndroid Build Coastguard Workercommand: unzip -q -d will-be-created $FILES/example.zip d1/d2/a.txt
94*adcb0a62SAndroid Build Coastguard Workerafter: [ -d will-be-created ]
95*adcb0a62SAndroid Build Coastguard Workerafter: [ -f will-be-created/d1/d2/a.txt ]
96*adcb0a62SAndroid Build Coastguard Worker---
97*adcb0a62SAndroid Build Coastguard Worker
98*adcb0a62SAndroid Build Coastguard Worker# The reference implementation will *only* create one level of missing
99*adcb0a62SAndroid Build Coastguard Worker# directories, so this fails.
100*adcb0a62SAndroid Build Coastguard Workername: unzip -d deep non-existent
101*adcb0a62SAndroid Build Coastguard Workercommand: unzip -q -d oh-no/will-not-be-created $FILES/example.zip d1/d2/a.txt 2> stderr ; echo $? > status
102*adcb0a62SAndroid Build Coastguard Workerafter: [ ! -d oh-no ]
103*adcb0a62SAndroid Build Coastguard Workerafter: [ ! -d oh-no/will-not-be-created ]
104*adcb0a62SAndroid Build Coastguard Workerafter: [ ! -f oh-no/will-not-be-created/d1/d2/a.txt ]
105*adcb0a62SAndroid Build Coastguard Workerafter: grep -q "oh-no/will-not-be-created" stderr
106*adcb0a62SAndroid Build Coastguard Workerafter: grep -q "No such file or directory" stderr
107*adcb0a62SAndroid Build Coastguard Worker# The reference implementation has *lots* of non-zero exit values, but we stick to 0 and 1.
108*adcb0a62SAndroid Build Coastguard Workerafter: [ $(cat status) -gt 0 ]
109*adcb0a62SAndroid Build Coastguard Worker---
110*adcb0a62SAndroid Build Coastguard Worker
111*adcb0a62SAndroid Build Coastguard Workername: unzip -d exists
112*adcb0a62SAndroid Build Coastguard Workerbefore: mkdir dir
113*adcb0a62SAndroid Build Coastguard Workercommand: unzip -q -d dir $FILES/example.zip d1/d2/a.txt && cat dir/d1/d2/a.txt
114*adcb0a62SAndroid Build Coastguard Workerafter: [ ! -f d1/d2/a.txt ]
115*adcb0a62SAndroid Build Coastguard Workerexpected-stdout:
116*adcb0a62SAndroid Build Coastguard Worker	a
117*adcb0a62SAndroid Build Coastguard Worker---
118*adcb0a62SAndroid Build Coastguard Worker
119*adcb0a62SAndroid Build Coastguard Workername: unzip -p
120*adcb0a62SAndroid Build Coastguard Workercommand: unzip -p $FILES/example.zip d1/d2/a.txt
121*adcb0a62SAndroid Build Coastguard Workerafter: [ ! -f d1/d2/a.txt ]
122*adcb0a62SAndroid Build Coastguard Workerexpected-stdout:
123*adcb0a62SAndroid Build Coastguard Worker	a
124*adcb0a62SAndroid Build Coastguard Worker---
125*adcb0a62SAndroid Build Coastguard Worker
126*adcb0a62SAndroid Build Coastguard Workername: unzip -x FILE...
127*adcb0a62SAndroid Build Coastguard Worker# Note: the RI ignores -x DIR for some reason, but it's not obvious we should.
128*adcb0a62SAndroid Build Coastguard Workercommand: unzip -q $FILES/example.zip -x d1/d2/a.txt d1/d2/b.txt d1/d2/empty.txt d1/d2/x.txt && cat d1/d2/c.txt
129*adcb0a62SAndroid Build Coastguard Workerafter: [ ! -f d1/d2/a.txt ]
130*adcb0a62SAndroid Build Coastguard Workerafter: [ ! -f d1/d2/b.txt ]
131*adcb0a62SAndroid Build Coastguard Workerafter: [ ! -f d1/d2/empty.txt ]
132*adcb0a62SAndroid Build Coastguard Workerafter: [ ! -f d1/d2/x.txt ]
133*adcb0a62SAndroid Build Coastguard Workerafter: [ -d d1/d2/dir ]
134*adcb0a62SAndroid Build Coastguard Workerexpected-stdout:
135*adcb0a62SAndroid Build Coastguard Worker	ccc
136*adcb0a62SAndroid Build Coastguard Worker---
137*adcb0a62SAndroid Build Coastguard Worker
138*adcb0a62SAndroid Build Coastguard Workername: unzip FILE -x FILE...
139*adcb0a62SAndroid Build Coastguard Workercommand: unzip -q $FILES/example.zip d1/d2/a.txt d1/d2/b.txt -x d1/d2/a.txt && cat d1/d2/b.txt
140*adcb0a62SAndroid Build Coastguard Workerafter: [ ! -f d1/d2/a.txt ]
141*adcb0a62SAndroid Build Coastguard Workerafter: [ -f d1/d2/b.txt ]
142*adcb0a62SAndroid Build Coastguard Workerafter: [ ! -f d1/d2/c.txt ]
143*adcb0a62SAndroid Build Coastguard Workerafter: [ ! -f d1/d2/empty.txt ]
144*adcb0a62SAndroid Build Coastguard Workerafter: [ ! -f d1/d2/x.txt ]
145*adcb0a62SAndroid Build Coastguard Workerafter: [ ! -d d1/d2/dir ]
146*adcb0a62SAndroid Build Coastguard Workerexpected-stdout:
147*adcb0a62SAndroid Build Coastguard Worker	bb
148*adcb0a62SAndroid Build Coastguard Worker---
149*adcb0a62SAndroid Build Coastguard Worker
150*adcb0a62SAndroid Build Coastguard Workername: unzip -j
151*adcb0a62SAndroid Build Coastguard Worker# Note: the RI outputs a bunch of trailing whitespace for some reason.
152*adcb0a62SAndroid Build Coastguard Workercommand: unzip -j $FILES/example.zip d1/d2/x.txt | sed 's/ *$//'
153*adcb0a62SAndroid Build Coastguard Workerafter: [ ! -f d1/d2/x.txt ]
154*adcb0a62SAndroid Build Coastguard Workerafter: [ -f x.txt ]
155*adcb0a62SAndroid Build Coastguard Workerexpected-stdout:
156*adcb0a62SAndroid Build Coastguard Worker	Archive:  $FILES/example.zip
157*adcb0a62SAndroid Build Coastguard Worker	  inflating: x.txt
158*adcb0a62SAndroid Build Coastguard Worker---
159*adcb0a62SAndroid Build Coastguard Worker
160*adcb0a62SAndroid Build Coastguard Workername: unzip -t one
161*adcb0a62SAndroid Build Coastguard Workercommand: unzip -t $FILES/example.zip d1/d2/x.txt
162*adcb0a62SAndroid Build Coastguard Workerafter: [ ! -d d1 ]
163*adcb0a62SAndroid Build Coastguard Workerexpected-stdout:
164*adcb0a62SAndroid Build Coastguard Worker	Archive:  $FILES/example.zip
165*adcb0a62SAndroid Build Coastguard Worker	    testing: d1/d2/x.txt              OK
166*adcb0a62SAndroid Build Coastguard Worker	No errors detected in $FILES/example.zip for the 1 file tested.
167*adcb0a62SAndroid Build Coastguard Worker---
168*adcb0a62SAndroid Build Coastguard Worker
169*adcb0a62SAndroid Build Coastguard Workername: unzip -tq all
170*adcb0a62SAndroid Build Coastguard Workercommand: unzip -tq $FILES/example.zip
171*adcb0a62SAndroid Build Coastguard Workerafter: [ ! -f d1/d2/x.txt ]
172*adcb0a62SAndroid Build Coastguard Workerexpected-stdout:
173*adcb0a62SAndroid Build Coastguard Worker	No errors detected in compressed data of $FILES/example.zip.
174*adcb0a62SAndroid Build Coastguard Worker---
175*adcb0a62SAndroid Build Coastguard Worker
176*adcb0a62SAndroid Build Coastguard Workername: unzip -tq one
177*adcb0a62SAndroid Build Coastguard Workercommand: unzip -tq $FILES/example.zip d1/d2/x.txt
178*adcb0a62SAndroid Build Coastguard Workerafter: [ ! -f d1/d2/x.txt ]
179*adcb0a62SAndroid Build Coastguard Workerexpected-stdout:
180*adcb0a62SAndroid Build Coastguard Worker	No errors detected in $FILES/example.zip for the 1 file tested.
181*adcb0a62SAndroid Build Coastguard Worker
182*adcb0a62SAndroid Build Coastguard Worker---
183*adcb0a62SAndroid Build Coastguard Worker
184*adcb0a62SAndroid Build Coastguard Workername: unzip -tq two
185*adcb0a62SAndroid Build Coastguard Workercommand: unzip -tq $FILES/example.zip d1/d2/x.txt d1/d2/b.txt
186*adcb0a62SAndroid Build Coastguard Workerafter: [ ! -f d1/d2/x.txt ]
187*adcb0a62SAndroid Build Coastguard Workerexpected-stdout:
188*adcb0a62SAndroid Build Coastguard Worker	No errors detected in $FILES/example.zip for the 2 files tested.
189*adcb0a62SAndroid Build Coastguard Worker
190*adcb0a62SAndroid Build Coastguard Worker---
191*adcb0a62SAndroid Build Coastguard Worker
192*adcb0a62SAndroid Build Coastguard Workername: unzip -t one bad
193*adcb0a62SAndroid Build Coastguard Workercommand: unzip -t $FILES/bad_crc.zip a.txt
194*adcb0a62SAndroid Build Coastguard Workerafter: [ ! -f a.txt ]
195*adcb0a62SAndroid Build Coastguard Workerexpected-stdout:
196*adcb0a62SAndroid Build Coastguard Worker	Archive:  $FILES/bad_crc.zip
197*adcb0a62SAndroid Build Coastguard Worker	    testing: a.txt                    bad CRC 950821c5  (should be 950821e5)
198*adcb0a62SAndroid Build Coastguard Worker	At least one error was detected in $FILES/bad_crc.zip.
199*adcb0a62SAndroid Build Coastguard Workerexpected-exit-status: 2
200*adcb0a62SAndroid Build Coastguard Worker
201*adcb0a62SAndroid Build Coastguard Worker#---
202*adcb0a62SAndroid Build Coastguard Worker#
203*adcb0a62SAndroid Build Coastguard Worker# TODO: test requires file iteration order.
204*adcb0a62SAndroid Build Coastguard Worker#name: unzip -tq all bad
205*adcb0a62SAndroid Build Coastguard Worker#command: unzip -tq $FILES/bad_crc.zip
206*adcb0a62SAndroid Build Coastguard Worker#after: [ ! -f a.txt ]
207*adcb0a62SAndroid Build Coastguard Worker#after: [ ! -f b.txt ]
208*adcb0a62SAndroid Build Coastguard Worker#expected-stdout:
209*adcb0a62SAndroid Build Coastguard Worker#	a.txt                   bad CRC 950821c5  (should be 950821e5)
210*adcb0a62SAndroid Build Coastguard Worker#	b.txt                   bad CRC 5912b84d  (should be 5912b84e)
211*adcb0a62SAndroid Build Coastguard Worker#	At least one error was detected in $FILES/bad_crc.zip.
212*adcb0a62SAndroid Build Coastguard Worker#expected-exit-status: 2
213*adcb0a62SAndroid Build Coastguard Worker
214*adcb0a62SAndroid Build Coastguard Worker---
215*adcb0a62SAndroid Build Coastguard Worker
216*adcb0a62SAndroid Build Coastguard Workername: unzip -tq one bad
217*adcb0a62SAndroid Build Coastguard Workercommand: unzip -tq $FILES/bad_crc.zip a.txt
218*adcb0a62SAndroid Build Coastguard Workerafter: [ ! -f a.txt ]
219*adcb0a62SAndroid Build Coastguard Workerexpected-stdout:
220*adcb0a62SAndroid Build Coastguard Worker	a.txt                   bad CRC 950821c5  (should be 950821e5)
221*adcb0a62SAndroid Build Coastguard Worker	At least one error was detected in $FILES/bad_crc.zip.
222*adcb0a62SAndroid Build Coastguard Workerexpected-exit-status: 2
223*adcb0a62SAndroid Build Coastguard Worker
224*adcb0a62SAndroid Build Coastguard Worker#---
225*adcb0a62SAndroid Build Coastguard Worker#
226*adcb0a62SAndroid Build Coastguard Worker# TODO: test requires file iteration order.
227*adcb0a62SAndroid Build Coastguard Worker#name: unzip -tq two bad
228*adcb0a62SAndroid Build Coastguard Worker#command: unzip -tq $FILES/bad_crc.zip a.txt b.txt
229*adcb0a62SAndroid Build Coastguard Worker#after: [ ! -f a.txt ]
230*adcb0a62SAndroid Build Coastguard Worker#after: [ ! -f b.txt ]
231*adcb0a62SAndroid Build Coastguard Worker#expected-stdout:
232*adcb0a62SAndroid Build Coastguard Worker#	a.txt                   bad CRC 950821c5  (should be 950821e5)
233*adcb0a62SAndroid Build Coastguard Worker#	b.txt                   bad CRC 5912b84d  (should be 5912b84e)
234*adcb0a62SAndroid Build Coastguard Worker#	At least one error was detected in $FILES/bad_crc.zip.
235*adcb0a62SAndroid Build Coastguard Worker#expected-exit-status: 2
236*adcb0a62SAndroid Build Coastguard Worker
237*adcb0a62SAndroid Build Coastguard Worker---
238