master
sh 307 lines 9.02 KB
Raw
1 #!/usr/bin/env bash
2 #
3 # Copyright (c) 2014 Christian Couder
4 # MIT Licensed; see the LICENSE file in this repository.
5 #
6
7 test_description="Test block command"
8
9 . lib/test-lib.sh
10
11 test_init_ipfs
12
13 HASH="bafkreibmlvvgdyihetgocpof6xk64kjjzdeq2e4c7hqs3krdheosk4tgj4"
14 HASHB="bafkreihfsphazrk2ilejpekyltjeh5k4yvwgjuwg26ueafohqioeo3sdca"
15
16 HASHV0="QmRKqGMAM6EZngbpjSqrvYzq5Qd8b1bSWymjSUY9zQSNDk"
17 HASHBV0="QmdnpnsaEj69isdw5sNzp3h3HkaDz7xKq7BmvFFBzNr5e7"
18
19 # "block put tests"
20 #
21
22 test_expect_success "'ipfs block put' succeeds" '
23 echo "Hello Mars!" >expected_in &&
24 ipfs block put <expected_in | tee actual_out
25 '
26
27 test_expect_success "'ipfs block put' output looks good" '
28 echo "$HASH" >expected_out &&
29 test_cmp expected_out actual_out
30 '
31
32 test_expect_success "'ipfs block put' with 2 files succeeds" '
33 echo "Hello Mars!" > a &&
34 echo "Hello Venus!" > b &&
35 ipfs block put a b | tee actual_out
36 '
37
38 test_expect_success "'ipfs block put' output looks good" '
39 echo "$HASH" >expected_out &&
40 echo "$HASHB" >>expected_out &&
41 test_cmp expected_out actual_out
42 '
43
44 test_expect_success "can set cid codec on block put" '
45 CODEC_HASH=$(ipfs block put --cid-codec=dag-pb ../t0050-block-data/testPut.pb)
46 '
47
48 test_expect_success "block get output looks right" '
49 ipfs block get $CODEC_HASH > pb_block_out &&
50 test_cmp pb_block_out ../t0050-block-data/testPut.pb
51 '
52
53 #
54 # "block get" tests
55 #
56
57 test_expect_success "'ipfs block get' succeeds" '
58 ipfs block get $HASH >actual_in
59 '
60
61 test_expect_success "'ipfs block get' output looks good" '
62 test_cmp expected_in actual_in
63 '
64
65 #
66 # "block stat" tests
67 #
68
69 test_expect_success "'ipfs block stat' succeeds" '
70 ipfs block stat $HASH >actual_stat
71 '
72
73 test_expect_success "'ipfs block stat' output looks good" '
74 echo "Key: $HASH" >expected_stat &&
75 echo "Size: 12" >>expected_stat &&
76 test_cmp expected_stat actual_stat
77 '
78
79 #
80 # "block rm" tests
81 #
82
83 test_expect_success "'ipfs block rm' succeeds" '
84 ipfs block rm $HASH >actual_rm
85 '
86
87 test_expect_success "'ipfs block rm' output looks good" '
88 echo "removed $HASH" > expected_rm &&
89 test_cmp expected_rm actual_rm
90 '
91
92 test_expect_success "'ipfs block rm' block actually removed" '
93 test_must_fail ipfs block stat $HASH
94 '
95
96 RANDOMHASH=QmRKqGMAM6EbngbZjSqrvYzq5Qd8b1bSWymjSUY9zQSNDq
97 DIRHASH=QmdWmVmM6W2abTgkEfpbtA1CJyTWS2rhuUB9uP1xV8Uwtf
98 FILE1HASH=Qmae3RedM7SNkWGsdzYzsr6svmsFdsva4WoTvYYsWhUSVz
99 FILE2HASH=QmUtkGLvPf63NwVzLPKPUYgwhn8ZYPWF6vKWN3fZ2amfJF
100 FILE3HASH=Qmesmmf1EEG1orJb6XdK6DabxexsseJnCfw8pqWgonbkoj
101 TESTHASH=QmeomffUNfmQy76CQGy9NdmqEnnHU9soCexBnGU3ezPHVH
102
103 test_expect_success "add and pin directory" '
104 echo "test" | ipfs add --pin=false &&
105 mkdir adir &&
106 echo "file1" > adir/file1 &&
107 echo "file2" > adir/file2 &&
108 echo "file3" > adir/file3 &&
109 ipfs add -r adir
110 ipfs pin add -r $DIRHASH
111 '
112
113 test_expect_success "can't remove pinned block" '
114 test_must_fail ipfs block rm $DIRHASH 2> block_rm_err
115 '
116
117 test_expect_success "can't remove pinned block: output looks good" '
118 grep -q "$DIRHASH: pinned: recursive" block_rm_err
119 '
120
121 test_expect_success "can't remove indirectly pinned block" '
122 test_must_fail ipfs block rm $FILE1HASH 2> block_rm_err
123 '
124
125 test_expect_success "can't remove indirectly pinned block: output looks good" '
126 grep -q "$FILE1HASH: pinned via $DIRHASH" block_rm_err
127 '
128
129 test_expect_success "remove pin" '
130 ipfs pin rm -r $DIRHASH
131 '
132
133 test_expect_success "multi-block 'ipfs block rm' succeeds" '
134 ipfs block rm $FILE1HASH $FILE2HASH $FILE3HASH > actual_rm
135 '
136
137 test_expect_success "multi-block 'ipfs block rm' output looks good" '
138 grep -F -q "removed $FILE1HASH" actual_rm &&
139 grep -F -q "removed $FILE2HASH" actual_rm &&
140 grep -F -q "removed $FILE3HASH" actual_rm
141 '
142
143 test_expect_success "multi-block 'ipfs block rm <invalid> <valid> <invalid>'" '
144 test_must_fail ipfs block rm $RANDOMHASH $TESTHASH $RANDOMHASH &> actual_mixed_rm
145 '
146
147 test_expect_success "multi-block 'ipfs block rm <invalid> <valid> <invalid>' output looks good" '
148 echo "cannot remove $RANDOMHASH: ipld: could not find $RANDOMHASH" >> expect_mixed_rm &&
149 echo "removed $TESTHASH" >> expect_mixed_rm &&
150 echo "cannot remove $RANDOMHASH: ipld: could not find $RANDOMHASH" >> expect_mixed_rm &&
151 echo "Error: some blocks not removed" >> expect_mixed_rm
152 test_cmp actual_mixed_rm expect_mixed_rm
153 '
154
155 test_expect_success "'add some blocks' succeeds" '
156 echo "Hello Mars!" | ipfs block put &&
157 echo "Hello Venus!" | ipfs block put
158 '
159
160 test_expect_success "add and pin directory" '
161 ipfs add -r adir
162 ipfs pin add -r $DIRHASH
163 '
164
165 HASH=QmRKqGMAM6EZngbpjSqrvYzq5Qd8b1bSWymjSUY9zQSNDk
166 HASH2=QmdnpnsaEj69isdw5sNzp3h3HkaDz7xKq7BmvFFBzNr5e7
167
168 test_expect_success "multi-block 'ipfs block rm' mixed" '
169 test_must_fail ipfs block rm $FILE1HASH $DIRHASH $HASH $FILE3HASH $RANDOMHASH $HASH2 2> block_rm_err
170 '
171
172 test_expect_success "pinned block not removed" '
173 ipfs block stat $FILE1HASH &&
174 ipfs block stat $FILE3HASH
175 '
176
177 test_expect_success "non-pinned blocks removed" '
178 test_must_fail ipfs block stat $HASH &&
179 test_must_fail ipfs block stat $HASH2
180 '
181
182 test_expect_success "error reported on removing non-existent block" '
183 grep -q "cannot remove $RANDOMHASH" block_rm_err
184 '
185
186 test_expect_success "'add some blocks' succeeds" '
187 echo "Hello Mars!" | ipfs block put &&
188 echo "Hello Venus!" | ipfs block put
189 '
190
191 test_expect_success "multi-block 'ipfs block rm -f' with non existent blocks succeed" '
192 ipfs block rm -f $HASH $RANDOMHASH $HASH2
193 '
194
195 test_expect_success "existent blocks removed" '
196 test_must_fail ipfs block stat $HASH &&
197 test_must_fail ipfs block stat $HASH2
198 '
199
200 test_expect_success "'add some blocks' succeeds" '
201 echo "Hello Mars!" | ipfs block put &&
202 echo "Hello Venus!" | ipfs block put
203 '
204
205 test_expect_success "multi-block 'ipfs block rm -q' produces no output" '
206 ipfs block rm -q $HASH $HASH2 > block_rm_out &&
207 test ! -s block_rm_out
208 '
209
210 # --format used 'protobuf' for 'dag-pb' which was invalid, but we keep
211 # for backward-compatibility
212 test_expect_success "can set deprecated --format=protobuf on block put" '
213 HASH=$(ipfs block put --format=protobuf ../t0050-block-data/testPut.pb)
214 '
215
216 test_expect_success "created an object correctly!" '
217 ipfs dag get $HASH > obj_out &&
218 echo -n "{\"Data\":{\"/\":{\"bytes\":\"dGVzdCBqc29uIGZvciBzaGFybmVzcyB0ZXN0\"}},\"Links\":[]}" > obj_exp &&
219 test_cmp obj_out obj_exp
220 '
221
222 test_expect_success "block get output looks right" '
223 ipfs block get $HASH > pb_block_out &&
224 test_cmp pb_block_out ../t0050-block-data/testPut.pb
225 '
226
227 test_expect_success "can set --cid-codec=dag-pb on block put" '
228 HASH=$(ipfs block put --cid-codec=dag-pb ../t0050-block-data/testPut.pb)
229 '
230
231 test_expect_success "created an object correctly!" '
232 ipfs dag get $HASH > obj_out &&
233 echo -n "{\"Data\":{\"/\":{\"bytes\":\"dGVzdCBqc29uIGZvciBzaGFybmVzcyB0ZXN0\"}},\"Links\":[]}" > obj_exp &&
234 test_cmp obj_out obj_exp
235 '
236
237 test_expect_success "block get output looks right" '
238 ipfs block get $HASH > pb_block_out &&
239 test_cmp pb_block_out ../t0050-block-data/testPut.pb
240 '
241
242 test_expect_success "can set multihash type and length on block put with --format=raw (deprecated)" '
243 HASH=$(echo "foooo" | ipfs block put --format=raw --mhtype=sha3 --mhlen=20)
244 '
245
246 test_expect_success "output looks good" '
247 test "bafkrifctrq4xazzixy2v4ezymjcvzpskqdwlxra" = "$HASH"
248 '
249
250 test_expect_success "can't use both legacy format and custom cid-codec at the same time" '
251 test_expect_code 1 ipfs block put --format=dag-cbor --cid-codec=dag-json < ../t0050-block-data/testPut.pb 2> output &&
252 test_should_contain "unable to use \"format\" (deprecated) and a custom \"cid-codec\" at the same time" output
253 '
254
255 test_expect_success "can read block with different hash" '
256 ipfs block get $HASH > blk_get_out &&
257 echo "foooo" > blk_get_exp &&
258 test_cmp blk_get_exp blk_get_out
259 '
260 #
261 # Misc tests
262 #
263
264 test_expect_success "'ipfs block stat' with nothing from stdin doesn't crash" '
265 test_expect_code 1 ipfs block stat < /dev/null 2> stat_out
266 '
267
268 # lol
269 test_expect_success "no panic in output" '
270 test_expect_code 1 grep "panic" stat_out
271 '
272
273 test_expect_success "can set multihash type and length on block put without format or cid-codec" '
274 HASH=$(echo "foooo" | ipfs block put --mhtype=sha3 --mhlen=20)
275 '
276
277 test_expect_success "output looks good" '
278 test "bafkrifctrq4xazzixy2v4ezymjcvzpskqdwlxra" = "$HASH"
279 '
280
281 test_expect_success "can set multihash type and length on block put with cid-codec=dag-pb" '
282 HASH=$(echo "foooo" | ipfs block put --mhtype=sha3 --mhlen=20 --cid-codec=dag-pb)
283 '
284
285 test_expect_success "output looks good" '
286 test "bafybifctrq4xazzixy2v4ezymjcvzpskqdwlxra" = "$HASH"
287 '
288
289 test_expect_success "put with sha3 and cidv0 fails" '
290 echo "foooo" | test_must_fail ipfs block put --mhtype=sha3 --mhlen=20 --format=v0
291 '
292
293 test_expect_success "'ipfs block put' check block size" '
294 dd if=/dev/zero bs=2097153 count=1 > over-2MiB-file &&
295 test_expect_code 1 ipfs block put over-2MiB-file >block_put_out 2>&1
296 '
297
298 test_expect_success "ipfs block put output has the correct error" '
299 grep "produced block is over 2MiB" block_put_out
300 '
301
302 test_expect_success "ipfs block put --allow-big-block=true works" '
303 test_expect_code 0 ipfs block put over-2MiB-file --allow-big-block=true &&
304 rm over-2MiB-file
305 '
306
307 test_done