blob: 389d5675fab949416da4c82ee99f4791433e4aad [file] [log] [blame]
Philippe Mathieu-Daudé11a82d12019-03-07 15:58:38 +01001#!/usr/bin/env bash
Stefan Hajnoczi05560fc2014-03-26 13:05:24 +01002#
3# cloop format input validation tests
4#
5# Copyright (C) 2013 Red Hat, Inc.
6#
7# This program is free software; you can redistribute it and/or modify
8# it under the terms of the GNU General Public License as published by
9# the Free Software Foundation; either version 2 of the License, or
10# (at your option) any later version.
11#
12# This program is distributed in the hope that it will be useful,
13# but WITHOUT ANY WARRANTY; without even the implied warranty of
14# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15# GNU General Public License for more details.
16#
17# You should have received a copy of the GNU General Public License
18# along with this program. If not, see <http://www.gnu.org/licenses/>.
19#
20
21# creator
22owner=stefanha@redhat.com
23
24seq=`basename $0`
25echo "QA output created by $seq"
26
Stefan Hajnoczi05560fc2014-03-26 13:05:24 +010027status=1 # failure is the default!
28
29_cleanup()
30{
31 _cleanup_test_img
32}
33trap "_cleanup; exit \$status" 0 1 2 3 15
34
35# get standard environment, filters and checks
36. ./common.rc
37. ./common.filter
38
39_supported_fmt cloop
Peter Lievenc5f7c0a2014-10-20 13:47:11 +020040_supported_proto file
Stefan Hajnoczi05560fc2014-03-26 13:05:24 +010041_supported_os Linux
42
Stefan Hajnoczid65f97a2014-03-26 13:05:25 +010043block_size_offset=128
Stefan Hajnoczi509a41b2014-03-26 13:05:26 +010044n_blocks_offset=132
Stefan Hajnoczif56b9bc2014-03-26 13:05:28 +010045offsets_offset=136
Stefan Hajnoczid65f97a2014-03-26 13:05:25 +010046
Stefan Hajnoczi05560fc2014-03-26 13:05:24 +010047echo
48echo "== check that the first sector can be read =="
49_use_sample_img simple-pattern.cloop.bz2
John Snow45f18822017-11-21 19:16:56 -050050$QEMU_IO -r -c "read 0 512" $TEST_IMG 2>&1 | _filter_qemu_io | _filter_testdir
Stefan Hajnoczi05560fc2014-03-26 13:05:24 +010051
Stefan Hajnoczid65f97a2014-03-26 13:05:25 +010052echo
Stefan Hajnoczi42d43d32014-03-26 13:05:29 +010053echo "== check that the last sector can be read =="
54_use_sample_img simple-pattern.cloop.bz2
John Snow45f18822017-11-21 19:16:56 -050055$QEMU_IO -r -c "read $((1024 * 1024 - 512)) 512" $TEST_IMG 2>&1 | _filter_qemu_io | _filter_testdir
Stefan Hajnoczi42d43d32014-03-26 13:05:29 +010056
57echo
Stefan Hajnoczid65f97a2014-03-26 13:05:25 +010058echo "== block_size must be a multiple of 512 =="
59_use_sample_img simple-pattern.cloop.bz2
60poke_file "$TEST_IMG" "$block_size_offset" "\x00\x00\x02\x01"
John Snow45f18822017-11-21 19:16:56 -050061$QEMU_IO -r -c "read 0 512" $TEST_IMG 2>&1 | _filter_qemu_io | _filter_testdir
Stefan Hajnoczid65f97a2014-03-26 13:05:25 +010062
63echo
64echo "== block_size cannot be zero =="
65_use_sample_img simple-pattern.cloop.bz2
66poke_file "$TEST_IMG" "$block_size_offset" "\x00\x00\x00\x00"
John Snow45f18822017-11-21 19:16:56 -050067$QEMU_IO -r -c "read 0 512" $TEST_IMG 2>&1 | _filter_qemu_io | _filter_testdir
Stefan Hajnoczid65f97a2014-03-26 13:05:25 +010068
69echo
70echo "== huge block_size ==="
71_use_sample_img simple-pattern.cloop.bz2
72poke_file "$TEST_IMG" "$block_size_offset" "\xff\xff\xfe\x00"
John Snow45f18822017-11-21 19:16:56 -050073$QEMU_IO -r -c "read 0 512" $TEST_IMG 2>&1 | _filter_qemu_io | _filter_testdir
Stefan Hajnoczid65f97a2014-03-26 13:05:25 +010074
Stefan Hajnoczi509a41b2014-03-26 13:05:26 +010075echo
76echo "== offsets_size overflow ==="
77_use_sample_img simple-pattern.cloop.bz2
78poke_file "$TEST_IMG" "$n_blocks_offset" "\xff\xff\xff\xff"
John Snow45f18822017-11-21 19:16:56 -050079$QEMU_IO -r -c "read 0 512" $TEST_IMG 2>&1 | _filter_qemu_io | _filter_testdir
Stefan Hajnoczi509a41b2014-03-26 13:05:26 +010080
Stefan Hajnoczi7b103b32014-03-26 13:05:27 +010081echo
82echo "== refuse images that require too many offsets ==="
83_use_sample_img simple-pattern.cloop.bz2
84poke_file "$TEST_IMG" "$n_blocks_offset" "\x04\x00\x00\x01"
John Snow45f18822017-11-21 19:16:56 -050085$QEMU_IO -r -c "read 0 512" $TEST_IMG 2>&1 | _filter_qemu_io | _filter_testdir
Stefan Hajnoczi7b103b32014-03-26 13:05:27 +010086
Stefan Hajnoczif56b9bc2014-03-26 13:05:28 +010087echo
88echo "== refuse images with non-monotonically increasing offsets =="
89_use_sample_img simple-pattern.cloop.bz2
90poke_file "$TEST_IMG" "$offsets_offset" "\x00\x00\x00\x00\xff\xff\xff\xff"
91poke_file "$TEST_IMG" $((offsets_offset + 8)) "\x00\x00\x00\x00\xff\xfe\x00\x00"
John Snow45f18822017-11-21 19:16:56 -050092$QEMU_IO -r -c "read 0 512" $TEST_IMG 2>&1 | _filter_qemu_io | _filter_testdir
Stefan Hajnoczif56b9bc2014-03-26 13:05:28 +010093
94echo
95echo "== refuse images with invalid compressed block size =="
96_use_sample_img simple-pattern.cloop.bz2
97poke_file "$TEST_IMG" "$offsets_offset" "\x00\x00\x00\x00\x00\x00\x00\x00"
98poke_file "$TEST_IMG" $((offsets_offset + 8)) "\xff\xff\xff\xff\xff\xff\xff\xff"
John Snow45f18822017-11-21 19:16:56 -050099$QEMU_IO -r -c "read 0 512" $TEST_IMG 2>&1 | _filter_qemu_io | _filter_testdir
Stefan Hajnoczif56b9bc2014-03-26 13:05:28 +0100100
Stefan Hajnoczi05560fc2014-03-26 13:05:24 +0100101# success, all done
102echo "*** done"
103rm -f $seq.full
104status=0