Imported Upstream version 2.6.1
[platform/upstream/cryptsetup.git] / tests / compat-args-test
1 #!/bin/bash
2
3 PS4='$LINENO:'
4 [ -z "$CRYPTSETUP_PATH" ] && CRYPTSETUP_PATH=".."
5 CRYPTSETUP=$CRYPTSETUP_PATH/cryptsetup
6
7 CRYPTSETUP_VALGRIND=../.libs/cryptsetup
8 CRYPTSETUP_LIB_VALGRIND=../.libs
9
10 TEST_UUID="12345678-1234-1234-1234-123456789abc"
11
12 TFILE=test-args.out
13
14 function cleanup()
15 {
16         rm -f $TFILE 2> /dev/null
17 }
18
19 function fail()
20 {
21         [ -n "$1" ] && echo "$1"
22         echo "FAILED backtrace:"
23         while caller $frame; do ((frame++)); done
24         cleanup
25         exit 2
26 }
27
28 function skip()
29 {
30         [ -n "$1" ] && echo "$1"
31         echo "Test skipped."
32         cleanup
33         exit 77
34 }
35
36 function valgrind_setup()
37 {
38         command -v valgrind >/dev/null || fail "Cannot find valgrind."
39         [ ! -f $CRYPTSETUP_VALGRIND ] && fail "Unable to get location of cryptsetup executable."
40         export LD_LIBRARY_PATH="$CRYPTSETUP_LIB_VALGRIND:$LD_LIBRARY_PATH"
41 }
42
43 function valgrind_run()
44 {
45         INFOSTRING="$(basename ${BASH_SOURCE[1]})-line-${BASH_LINENO[0]}" ./valg.sh ${CRYPTSETUP_VALGRIND} "$@"
46 }
47
48 function xxx()
49 {
50         $CRYPTSETUP --test-args $@ > $TFILE 2>&1
51         local ret=$?
52
53         grep -q -e ": unknown option\|Argument <action> missing" $TFILE && {
54                 echo "'$CRYPTSETUP --test-args $@' command:"
55                 cat $TFILE
56                 fail "Probably typo in test"
57         }
58         test $ret -ne 0 || fail
59 }
60
61 function exp_fail()
62 {
63         # xxx $@
64         $CRYPTSETUP --test-args $@ 2>/dev/null && fail
65 }
66
67 function exp_pass()
68 {
69         $CRYPTSETUP --test-args $@ >/dev/null || fail
70 }
71
72 export LANG=C
73 [ ! -x "$CRYPTSETUP" ] && skip "Cannot find $CRYPTSETUP, test skipped."
74 [ -n "$VALG" ] && valgrind_setup && CRYPTSETUP=valgrind_run
75
76 # initial test constructed according to current cryptsetup content
77 echo "[1] Current state"
78 exp_fail resize NAME --test-passphrase
79 exp_fail close NAME --test-passphrase
80 exp_pass open DEV NAME --test-passphrase --type bitlk
81 exp_pass open DEV NAME --test-passphrase --type luks
82 exp_pass open DEV NAME --test-passphrase --type luks1
83 exp_pass open DEV NAME --test-passphrase --type luks2
84 exp_fail open DEV NAME --test-passphrase --type plain
85
86 exp_fail open DEV NAME --deferred
87 exp_pass close NAME --deferred
88
89 exp_pass open DEV NAME --type plain --shared
90 exp_fail open DEV NAME --type luks1 --shared
91 exp_fail close NAME --shared
92
93 exp_pass open DEV NAME --allow-discards
94 exp_fail close NAME --allow-discards
95
96 exp_fail close NAME --persistent
97 exp_pass open DEV NAME --persistent
98 exp_fail open DEV NAME --persistent --test-passphrase
99
100 exp_fail luksFormat DEV --serialize-memory-hard-pbkdf
101 exp_pass open DEV NAME --serialize-memory-hard-pbkdf
102
103 exp_pass reencrypt DEV --key-size 32
104 exp_fail reencrypt DEV --key-size 31
105 exp_fail reencrypt DEV --key-size -32
106 exp_pass luksFormat DEV --key-size 32
107 exp_fail luksFormat DEV --key-size 31
108 exp_fail luksFormat DEV --key-size -32
109 exp_pass open DEV NAME --key-size 32 # --type plain -c aes-xts-plain64
110 exp_fail open DEV NAME --key-size 31 # --type plain -c aes-xts-plain64
111 exp_pass benchmark --key-size 32
112 exp_fail benchmark --key-size 31
113 exp_pass luksAddKey DEV --key-size 32 # --unbound
114 exp_fail luksAddKey DEV --key-size 31 # --unbound
115
116 exp_fail close NAME --key-size 32
117 exp_fail luksUUID DEV --key-size 32
118
119 # bug
120 # exp_fail luksFormat DEV --type luks1 --integrity hmac-sha256
121 exp_pass luksFormat DEV --type luks2 --integrity hmac-sha256
122 exp_fail open DEV NAME --integrity hmac-sha256
123
124 exp_pass luksFormat DEV --type luks2 --integrity hmac-sha256 --integrity-no-wipe
125 exp_fail luksFormat DEV --type luks2 --integrity-no-wipe
126 # bug
127 # exp_fail luksFormat DEV --type luks1 --integrity hmac-sha256 --integrity-no-wipe
128 exp_fail open DEV NAME --integrity-no-wipe
129 exp_fail open DEV NAME --integrity-no-wipe --integrity hmac-sha256
130
131 exp_pass luksFormat --label L --subsystem S DEV # --type luks2
132 exp_pass luksFormat --label L DEV # --type luks2
133 exp_pass luksFormat --subsystem S DEV # --type luks2
134 exp_pass config --label L --subsystem S DEV
135 exp_pass config --label L DEV
136 exp_pass config --subsystem S DEV
137 # bug
138 #exp_fail luksFormat --label L --subsystem S DEV --type luks1
139 #exp_fail luksFormat --label L DEV --type luks1
140 #exp_fail luksFormat --subsystem S DEV --type luks1
141 exp_fail open DEV NAME --label L --subsystem S
142 exp_fail open DEV NAME --label L
143 exp_fail open DEV NAME --subsystem S
144
145 exp_fail luksFormat DEV -S-2
146 # bug
147 # exp_fail luksFormat DEV -S-1
148
149 # prob. many bug: accepts --[new-]keyfile-size w/o --[new-]key-file
150 exp_pass luksFormat DEV --keyfile-size 42 --key-file F
151 exp_fail luksFormat DEV --keyfile-size -1 --key-file F
152 # bug (is it? e.g. empty passphrase)
153 # exp_fail luksFormat DEV --keyfile-size 0
154 exp_pass luksAddKey DEV --keyfile-size 42 --key-file F --new-keyfile-size 42 NF
155 exp_fail luksAddKey DEV --new-keyfile-size -42 NF
156 exp_fail luksAddKey DEV --keyfile-size 42 --key-file F --new-keyfile-size -42 NF
157 exp_fail luksFormat DEV --keyfile-size -1 --key-file F
158 # bug (is it? e.g. empty passphrase)
159 # exp_fail luksFormat DEV --keyfile-size 0
160
161 exp_fail open DEV NAME --key-file F0 --key-file F1
162 exp_pass open DEV NAME --key-file F0 --key-file F1 --type tcrypt
163
164 # why? (luksAddKey fail)
165 exp_fail luksAddKey DEV --use-random
166 exp_fail luksAddKey DEV --use-urandom
167 exp_fail luksAddKey DEV --use-urandom --use-random
168 exp_fail luksFormat DEV --use-urandom --use-random
169 exp_pass luksFormat DEV --use-random
170 exp_pass luksFormat DEV --use-urandom
171
172 exp_fail open DEV NAME --uuid $TEST_UUID
173 exp_pass luksFormat DEV --uuid $TEST_UUID
174 exp_pass luksUUID DEV --uuid $TEST_UUID
175
176 exp_fail open DEV NAME --align-payload 8192
177 exp_fail open DEV NAME --align-payload 8292 --type plain
178 exp_pass luksFormat DEV --align-payload 8192
179 exp_fail luksFormat DEV --align-payload 8192 --offset 16384
180 exp_fail luksFormat DEV --align-payload 8192 --offset 8192
181
182 exp_fail resize NAME --luks2-metadata-size 16k
183 exp_fail resize NAME --luks2-keyslots-size 16m
184 exp_pass luksFormat DEV --luks2-keyslots-size 16m
185 exp_pass luksFormat DEV --luks2-metadata-size 16k
186 exp_pass reencrypt DEV --luks2-keyslots-size 16m
187 exp_pass reencrypt DEV --luks2-metadata-size 16k
188
189 exp_fail luksFormat DEV --skip 8192
190 exp_fail open DEV NAME --skip 8192
191 exp_pass open DEV NAME --skip 8192 --type plain
192 exp_pass open DEV NAME --skip 8192 --type loopaes
193
194 exp_fail resize NAME --offset 8292
195 exp_pass luksFormat DEV --offset 16384
196 exp_fail open DEV NAME --offset 16384
197 exp_pass open DEV NAME --offset 16384 --type plain
198 exp_pass open DEV NAME --offset 16384 --type loopaes
199
200 exp_fail open DEV NAME --tcrypt-hidden
201 exp_fail open DEV NAME --tcrypt-system
202 exp_fail open DEV NAME --tcrypt-backup
203 # bug
204 # exp_fail open DEV NAME --tcrypt-hidden --tcrypt-system --tcrypt-backup --type tcrypt
205 exp_pass open DEV NAME --tcrypt-hidden --type tcrypt
206 exp_pass open DEV NAME --tcrypt-backup --type tcrypt
207 exp_pass open DEV NAME --tcrypt-system --type tcrypt
208 exp_pass tcryptDump DEV NAME --tcrypt-hidden --type tcrypt
209 exp_pass tcryptDump DEV NAME --tcrypt-backup --type tcrypt
210 exp_pass tcryptDump DEV NAME --tcrypt-system --type tcrypt
211 exp_fail tcryptDump DEV NAME --allow-discards --tcrypt-hidden --type tcrypt
212
213 # bug
214 # exp_fail close NAME --type tcrypt --veracrypt
215 exp_fail open DEV NAME --veracrypt
216 exp_pass open DEV NAME --type tcrypt --veracrypt
217 exp_pass open DEV NAME --type tcrypt --veracrypt --veracrypt-pim 1
218 exp_fail open DEV NAME --type tcrypt --veracrypt --veracrypt-pim -2
219 exp_fail open DEV NAME --type tcrypt --disable-veracrypt --veracrypt-pim 1
220 exp_fail open DEV NAME --type tcrypt --veracrypt --veracrypt-pim -1
221 exp_fail open DEV NAME --type tcrypt --disable-veracrypt --veracrypt-query-pim
222 exp_fail open DEV NAME --type tcrypt --disable-veracrypt --veracrypt-query-pim --veracrypt-pim 1
223 exp_fail open DEV NAME --disable-veracrypt --veracrypt-query-pim
224
225 # bug
226 # exp_fail open DEV NAME --priority normal
227 exp_fail config DEV --priority normal
228 exp_fail config DEV -S1 --priority norma
229 exp_pass config DEV -S1 --priority normal
230 exp_pass config DEV -S1 --priority ignore
231 exp_pass config DEV -S1 --priority prefer
232
233 # bug
234 # exp_fail open DEV NAME --pbkdf argon2i
235 exp_fail luksFormat DEV --pbkdf blah
236 exp_pass luksFormat DEV --pbkdf argon2i
237 exp_pass luksFormat DEV --pbkdf pbkdf2
238 exp_pass luksFormat DEV --pbkdf argon2id
239 exp_fail luksFormat DEV --type luks2 --pbkdf-force-iterations 4 -i1
240 exp_fail luksFormat DEV --type luks1 --pbkdf-force-iterations 1001 -i1
241
242 exp_fail open DEV NAME --sector-size 1024
243 exp_pass open DEV NAME --type plain --sector-size 1024
244 # bug
245 # exp_fail luksFormat DEV --sector-size 0
246 exp_fail luksFormat DEV --sector-size 511
247 exp_fail luksFormat DEV --sector-size 8192
248 exp_pass reencrypt DEV --sector-size 1024
249 exp_pass luksFormat DEV --sector-size 1024
250
251 exp_fail luksFormat DEV --iv-large-sectors
252 exp_fail open DEV --type tcrypt --iv-large-sectors
253 exp_fail open DEV --type plain --iv-large-sectors --sector-size 512
254 exp_pass open DEV --type plain --iv-large-sectors --sector-size 1024
255
256 exp_fail luksAddKey DEV --unbound
257 exp_fail luksAddKey DEV --unbound --key-size 0
258 exp_pass luksAddKey DEV --unbound --key-size 8
259 exp_pass luksDump DEV --unbound -S5
260 exp_fail luksDump DEV --unbound
261 exp_pass open DEV --unbound --test-passphrase
262 exp_pass open DEV --unbound --test-passphrase -S5
263 exp_fail open DEV --unbound NAME
264 exp_fail open DEV --unbound -S5 NAME
265
266 exp_fail resize NAME --refresh
267 exp_fail open DEV NAME --test-passphrase --refresh
268 exp_pass open DEV NAME --refresh
269 exp_pass refresh DEV NAME
270 exp_fail refresh DEV NAME --test-passphrase
271
272 # bug
273 # exp_fail luksFormat DEV --reduce-device-size 64m
274 exp_fail reencrypt DEV --reduce-device-size 2G # max 1g
275 exp_fail reencrypt DEV --reduce-device-size $((64*1024*1024+1))
276 exp_fail reencrypt DEV --reduce-device-size -64m
277 exp_pass reencrypt DEV --reduce-device-size 64m
278 exp_fail reencrypt DEV --reduce-device-size 64m --device-size 100g
279 # bugs
280 # exp_fail open DEV --decrypt --header H
281 # exp_fail open DEV --encrypt
282 # exp_fail open DEV NAME --device-size 32m
283 # exp_fail open DEV NAME --size 100
284 exp_pass open DEV NAME --device-size 32m --type plain
285 exp_fail open DEV NAME --device-size $((32*1024*1024+1)) --type plain
286 exp_pass open DEV NAME --size 100 --type plain
287 exp_fail open DEV NAME --size 100 --device-size $((512*100)) --type plain
288 exp_fail reencrypt DEV --device-size $((32*1024*1024+1))
289 exp_pass reencrypt DEV --device-size 32m
290
291 exp_fail luksFormat DEV NAME --keyslot-cipher ks
292 exp_fail luksFormat DEV NAME --keyslot-key-size 32
293 exp_pass luksFormat DEV NAME --keyslot-cipher ks --keyslot-key-size 32
294 # bugs
295 # exp_fail open DEV NAME --keyslot-cipher ks --keyslot-key-size 32
296 # exp_fail luksFormat --type luks1 DEV NAME --keyslot-cipher ks --keyslot-key-size 32
297
298 cleanup
299 exit 0