qemu-irix/tests/qemu-iotests
Eric Blake 1104d83c72 nbd-client: Refuse read-only client with BDRV_O_RDWR
The NBD spec says that clients should not try to write/trim to
an export advertised as read-only by the server.  But we failed
to check that, and would allow the block layer to use NBD with
BDRV_O_RDWR even when the server is read-only, which meant we
were depending on the server sending a proper EPERM failure for
various commands, and also exposes a leaky abstraction: using
qemu-io in read-write mode would succeed on 'w -z 0 0' because
of local short-circuiting logic, but 'w 0 0' would send a
request over the wire (where it then depends on the server, and
fails at least for qemu-nbd but might pass for other NBD
implementations).

With this patch, a client MUST request read-only mode to access
a server that is doing a read-only export, or else it will get
a message like:

can't open device nbd://localhost:10809/foo: request for write access conflicts with read-only export

It is no longer possible to even attempt writes over the wire
(including the corner case of 0-length writes), because the block
layer enforces the explicit read-only request; this matches the
behavior of qcow2 when backed by a read-only POSIX file.

Fix several iotests to comply with the new behavior (since
qemu-nbd of an internal snapshot, as well as nbd-server-add over QMP,
default to a read-only export, we must tell blockdev-add/qemu-io to
set up a read-only client).

CC: qemu-stable@nongnu.org
Signed-off-by: Eric Blake <eblake@redhat.com>
Message-Id: <20171108215703.9295-3-eblake@redhat.com>
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
2017-11-09 10:10:17 -06:00
..
sample_images
.gitignore
001
001.out
002
002.out
003
003.out
004
004.out
005
005.out
007
007.out
008
008.out
009
009.out
010
010.out
011
011.out
012
012.out
013
013.out
014
014.out
015
015.out
017 qemu-iotests: exclude vxhs from image creation via protocol 2017-04-24 15:09:33 -04:00
017.out
018
018.out
019
019.out qemu-io: Switch 'alloc' command to byte-based length 2017-05-11 14:28:05 +02:00
020 qemu-iotests: exclude vxhs from image creation via protocol 2017-04-24 15:09:33 -04:00
020.out
021
021.out
022
022.out
023
023.out
024
024.out
025 block: Drop unmaintained 'archipelago' driver 2017-03-13 12:49:33 +01:00
025.out
026 iotests: Fix typo in 026 2017-04-27 15:46:16 +02:00
026.out iotests: Fix typo in 026 2017-04-27 15:46:16 +02:00
026.out.nocache iotests: Fix typo in 026 2017-04-27 15:46:16 +02:00
027
027.out
028 qemu-iotests: _cleanup_qemu must be called on exit 2017-04-24 15:09:33 -04:00
028.out qemu-iotests: Filter HMP readline escape characters 2017-04-27 15:39:49 +02:00
029 qemu-iotests: exclude vxhs from image creation via protocol 2017-04-24 15:09:33 -04:00
029.out
030 commit: Remove overlay_bs 2017-10-06 16:28:58 +02:00
030.out qemu-iotests: Test streaming with missing job ID 2017-05-26 16:48:21 +02:00
031
031.out
032
032.out
033 iotests: fix remainining tests to work with LUKS 2017-07-11 17:44:59 +02:00
033.out
034
034.out
035
035.out
036
036.out
037
037.out
038
038.out
039
039.out qemu-iotests: limit non-_PROG-suffixed variables to common.rc 2017-10-06 16:28:58 +02:00
040 iotests: use -ccw on s390x for 040, 139, and 182 2017-09-26 14:46:23 +02:00
040.out block: Skip implicit nodes in query-block/blockstats 2017-07-24 15:06:04 +02:00
041 qemu-iotests/041: Fix leaked scratch images 2017-08-01 18:09:33 +02:00
041.out block: Skip implicit nodes in query-block/blockstats 2017-07-24 15:06:04 +02:00
042 iotests: skip 042 with qcow which dosn't support zero sized images 2017-07-11 17:44:55 +02:00
042.out
043
043.out
044
044.out block/qcow2: Add qcow2_refcount_area() 2017-07-11 17:45:02 +02:00
045
045.out
046 iotests: 046: Prepare for image locking 2017-05-11 11:08:40 +02:00
046.out
047
047.out
048 iotests: skip 048 with qcow which doesn't support resize 2017-07-11 17:44:55 +02:00
048.out
049 qcow2: convert QCow2 to use QCryptoBlock for encryption 2017-07-11 17:44:56 +02:00
049.out qcow2: convert QCow2 to use QCryptoBlock for encryption 2017-07-11 17:44:56 +02:00
050
050.out
051 iotests: use -ccw on s390x for 051 2017-09-26 14:46:23 +02:00
051.out iotests: use -ccw on s390x for 051 2017-09-26 14:46:23 +02:00
051.pc.out iotests: use -ccw on s390x for 051 2017-09-26 14:46:23 +02:00
052
052.out
053
053.out
054
054.out
055 qemu-iotests: Avoid unnecessary sleeps 2017-07-24 15:06:04 +02:00
055.out
056
056.out
057
057.out
058 nbd-client: Refuse read-only client with BDRV_O_RDWR 2017-11-09 10:10:17 -06:00
058.out
059 qemu-iotests/059: Fix leaked image files 2017-08-01 18:09:33 +02:00
059.out qemu-iotests/059: Fix leaked image files 2017-08-01 18:09:33 +02:00
060
060.out qemu-io: Don't die on second open 2017-07-10 13:18:05 +02:00
061
061.out qemu-iotests: limit non-_PROG-suffixed variables to common.rc 2017-10-06 16:28:58 +02:00
062
062.out
063 qemu-iotests/063: Fix leaked image 2017-08-01 18:09:33 +02:00
063.out
064
064.out
065
065.out
066 iotests: Extend test 066 2017-05-11 12:08:24 +02:00
066.out iotests: Extend test 066 2017-05-11 12:08:24 +02:00
067 iotests: Pull _filter_actual_image_size from 67/87 2017-10-26 15:01:13 +02:00
067.out iotests: use virtio aliases for 067 2017-09-26 14:46:23 +02:00
068 snapshot/tests: Try loadvm twice 2017-09-06 15:19:01 +01:00
068.out snapshot/tests: Try loadvm twice 2017-09-06 15:19:01 +01:00
069
069.out
070
070.out
071
071.out shutdown: Expose bool cause in SHUTDOWN and RESET events 2017-05-23 13:28:17 +02:00
072
072.out
073 qemu-iotests: exclude vxhs from image creation via protocol 2017-04-24 15:09:33 -04:00
073.out
074 qemu-iotests: Remove blkdebug.conf after tests 2017-08-01 18:09:33 +02:00
074.out qemu-img: Drop redundant error message in compare 2017-10-26 14:45:57 +02:00
075
075.out
076
076.out
077
077.out
078
078.out
079
079.out
080
080.out
081
081.out shutdown: Expose bool cause in SHUTDOWN and RESET events 2017-05-23 13:28:17 +02:00
082 qemu-img: Check for backing image if specified during create 2017-07-18 15:27:37 +02:00
082.out qemu-img: Check for backing image if specified during create 2017-07-18 15:27:37 +02:00
083 qemu-iotests: test NBD over UNIX domain sockets in 083 2017-08-30 13:00:38 -05:00
083.out nbd: Minimal structured read for client 2017-10-30 21:48:41 +01:00
084
084.out
085 block: Use JSON null instead of "" to disable backing file 2017-07-24 13:35:11 +02:00
085.out block: deprecate "encryption=on" in favor of "encrypt.format=aes" 2017-07-11 17:44:55 +02:00
086
086.out
087 iotests: Pull _filter_actual_image_size from 67/87 2017-10-26 15:01:13 +02:00
087.out qcow2: add iotests to cover LUKS encryption support 2017-07-11 17:44:56 +02:00
088
088.out
089
089.out
090
090.out
091 iotests: 091: Quit QEMU before checking image 2017-05-11 11:08:40 +02:00
091.out
092
092.out
093 qemu-iotests: step clock after each test iteration 2017-08-15 10:03:27 -05:00
093.out
094 qemu-iotests: _cleanup_qemu must be called on exit 2017-04-24 15:09:33 -04:00
094.out shutdown: Expose bool cause in SHUTDOWN and RESET events 2017-05-23 13:28:17 +02:00
095
095.out
096
096.out
097 iotests: Improve image-clear tests on non-aligned image 2017-04-03 17:11:40 +02:00
097.out iotests: Improve image-clear tests on non-aligned image 2017-04-03 17:11:40 +02:00
098
098.out
099
099.out
101
101.out
102 qemu-img: add --shrink flag for resize 2017-09-26 15:00:32 +02:00
102.out qemu-io: Switch 'map' output to byte-based reporting 2017-05-11 14:28:06 +02:00
103
103.out
104
104.out
105
105.out
106 qemu-img: add --shrink flag for resize 2017-09-26 15:00:32 +02:00
106.out iotests: Add preallocated resize test for raw 2017-07-11 17:45:02 +02:00
107
107.out
108
108.out
109 qemu-iotests/109: Fix lock race condition 2017-08-08 14:36:59 +02:00
109.out qemu-iotests/109: Fix lock race condition 2017-08-08 14:36:59 +02:00
110
110.out
111
111.out qemu-img: Check for backing image if specified during create 2017-07-18 15:27:37 +02:00
112
112.out
113
113.out
114 qemu-iotests: exclude vxhs from image creation via protocol 2017-04-24 15:09:33 -04:00
114.out qemu-io: Don't die on second open 2017-07-10 13:18:05 +02:00
115
115.out
116
116.out
117 qemu-iotests: _cleanup_qemu must be called on exit 2017-04-24 15:09:33 -04:00
117.out shutdown: Expose bool cause in SHUTDOWN and RESET events 2017-05-23 13:28:17 +02:00
118
118.out
119
119.out shutdown: Expose bool cause in SHUTDOWN and RESET events 2017-05-23 13:28:17 +02:00
120 iotests: fix remainining tests to work with LUKS 2017-07-11 17:44:59 +02:00
120.out shutdown: Expose bool cause in SHUTDOWN and RESET events 2017-05-23 13:28:17 +02:00
121
121.out
122
122.out iotests: Improve _filter_qemu_img_map 2017-05-11 14:28:07 +02:00
123
123.out
124 iotests: Check dirty bitmap statistics in 124 2017-08-01 18:09:33 +02:00
124.out
125 iotests: Add cluster_size=64k to 125 2017-10-26 15:01:14 +02:00
125.out iotests: Add cluster_size=64k to 125 2017-10-26 15:01:14 +02:00
126 iotests: Add test for colon handling 2017-07-11 17:45:00 +02:00
126.out iotests: Add test for colon handling 2017-07-11 17:45:00 +02:00
127 iotests: Add test for dataplane mirroring 2017-10-26 15:01:13 +02:00
127.out iotests: Add test for dataplane mirroring 2017-10-26 15:01:13 +02:00
128
128.out
129
129.out
130 qemu-iotests: _cleanup_qemu must be called on exit 2017-04-24 15:09:33 -04:00
130.out qemu-iotests: Filter HMP readline escape characters 2017-04-27 15:39:49 +02:00
131
131.out
132
132.out
133
133.out
134 iotests: enable tests 134 and 158 to work with qcow (v1) 2017-07-11 17:44:56 +02:00
134.out qcow2: convert QCow2 to use QCryptoBlock for encryption 2017-07-11 17:44:56 +02:00
135
135.out
136 block/null: Remove 'filename' option 2017-08-08 15:19:16 +02:00
136.out
137
137.out qemu-iotests: limit non-_PROG-suffixed variables to common.rc 2017-10-06 16:28:58 +02:00
138
138.out
139 iotests: use -ccw on s390x for 040, 139, and 182 2017-09-26 14:46:23 +02:00
139.out
140 nbd-client: Refuse read-only client with BDRV_O_RDWR 2017-11-09 10:10:17 -06:00
140.out nbd: Fix iotests failure due to changed client error message 2017-07-17 13:57:42 -05:00
141 qemu-iotests/141: Fix image cleanup 2017-08-01 18:09:33 +02:00
141.out mirror: Use real permissions in mirror/active commit block job 2017-02-28 20:47:46 +01:00
142 tests: Avoid non-portable 'echo -ARG' 2017-07-11 17:45:00 +02:00
142.out qemu-iotests: Filter HMP readline escape characters 2017-04-27 15:39:49 +02:00
143 qemu-iotests: _cleanup_qemu must be called on exit 2017-04-24 15:09:33 -04:00
143.out nbd: Fix iotests failure due to changed client error message 2017-07-17 13:57:42 -05:00
144
144.out block: deprecate "encryption=on" in favor of "encrypt.format=aes" 2017-07-11 17:44:55 +02:00
145 iotests: fix remainining tests to work with LUKS 2017-07-11 17:44:59 +02:00
145.out qemu-iotests: Filter HMP readline escape characters 2017-04-27 15:39:49 +02:00
146
146.out qemu-io: Switch 'map' output to byte-based reporting 2017-05-11 14:28:06 +02:00
147 nbd-client: Refuse read-only client with BDRV_O_RDWR 2017-11-09 10:10:17 -06:00
147.out
148
148.out
149 iotests: chown LUKS device before qemu-io launches 2017-07-11 17:45:00 +02:00
149.out iotests: chown LUKS device before qemu-io launches 2017-07-11 17:45:00 +02:00
150
150.out
152
152.out
153 qemu-iotests/153: Fix leaked scratch images 2017-08-01 18:09:33 +02:00
153.out qemu-io: Don't die on second open 2017-07-10 13:18:05 +02:00
154 block: Exploit BDRV_BLOCK_EOF for larger zero blocks 2017-06-30 21:48:06 +08:00
154.out block: Exploit BDRV_BLOCK_EOF for larger zero blocks 2017-06-30 21:48:06 +08:00
155
155.out
156 iotests: Fix test 156 2017-08-01 18:09:33 +02:00
156.out shutdown: Expose bool cause in SHUTDOWN and RESET events 2017-05-23 13:28:17 +02:00
157 iotests: fix remainining tests to work with LUKS 2017-07-11 17:44:59 +02:00
157.out iotests: fix remainining tests to work with LUKS 2017-07-11 17:44:59 +02:00
158 qemu-img: Check for backing image if specified during create 2017-07-18 15:27:37 +02:00
158.out qcow2: convert QCow2 to use QCryptoBlock for encryption 2017-07-11 17:44:56 +02:00
159 iotests: skip 159 & 170 with luks format 2017-07-11 17:44:59 +02:00
159.out
160
160.out
162 qemu-iotests/162: Fix leaked temporary files 2017-08-01 18:09:33 +02:00
162.out
163 qemu-iotests: add shrinking image test 2017-09-26 15:00:32 +02:00
163.out qemu-iotests: add shrinking image test 2017-09-26 15:00:32 +02:00
165 qcow2: Switch store_bitmap_data() to byte-based iteration 2017-10-06 16:28:58 +02:00
165.out iotests: test qcow2 persistent dirty bitmap 2017-07-11 17:44:59 +02:00
170 iotests: skip 159 & 170 with luks format 2017-07-11 17:44:59 +02:00
170.out
171 tests: Avoid non-portable 'echo -ARG' 2017-07-11 17:45:00 +02:00
171.out
172 qemu-iotests: Add missing -machine accel=qtest 2017-09-26 14:46:23 +02:00
172.out hw/block/fdc: Convert to realize 2017-09-18 19:43:38 -04:00
173
173.out
174 iotests: fix remainining tests to work with LUKS 2017-07-11 17:44:59 +02:00
174.out
175
175.out
176 iotests: Improve image-clear tests on non-aligned image 2017-04-03 17:11:40 +02:00
176.out iotests: Improve image-clear tests on non-aligned image 2017-04-03 17:11:40 +02:00
177 qemu-io: Relax 'alloc' now that block-status doesn't assert 2017-10-26 14:45:57 +02:00
177.out qemu-io: Relax 'alloc' now that block-status doesn't assert 2017-10-26 14:45:57 +02:00
178 iotests: add test 178 for qemu-img measure 2017-07-11 17:45:01 +02:00
178.out.qcow2 iotests: add test 178 for qemu-img measure 2017-07-11 17:45:01 +02:00
178.out.raw iotests: add test 178 for qemu-img measure 2017-07-11 17:45:01 +02:00
179 qemu-iotests: Remove blkdebug.conf after tests 2017-08-01 18:09:33 +02:00
179.out iotests: Add test 179 to cover write zeroes with unmap 2017-05-11 14:28:07 +02:00
181 iotests: fix 181: enable postcopy-ram capability on target 2017-09-26 14:46:23 +02:00
181.out iotests: fix 181: enable postcopy-ram capability on target 2017-09-26 14:46:23 +02:00
182 iotests: use -ccw on s390x for 040, 139, and 182 2017-09-26 14:46:23 +02:00
182.out tests: Add POSIX image locking test case 182 2017-05-11 12:08:20 +02:00
183 qemu-iotests: Block migration test 2017-06-09 11:45:03 +02:00
183.out qemu-iotests: Block migration test 2017-06-09 11:45:03 +02:00
184 iotests: Filter actual image size in 184 and 191 2017-10-26 15:01:13 +02:00
184.out iotests: Filter actual image size in 184 and 191 2017-10-26 15:01:13 +02:00
185 qemu-iotests: fix 185 2017-08-11 14:44:39 +02:00
185.out block: deprecate "encryption=on" in favor of "encrypt.format=aes" 2017-07-11 17:44:55 +02:00
186 qemu-iotests: Add missing -machine accel=qtest 2017-09-26 14:46:23 +02:00
186.out iotests: Redirect stderr to stdout in 186 2017-08-01 18:09:33 +02:00
187 qemu-iotests: Test reopen between read-only and read-write 2017-08-08 15:19:16 +02:00
187.out qemu-io: Drop write permissions before read-only reopen 2017-09-26 14:46:23 +02:00
188 qcow2: add iotests to cover LUKS encryption support 2017-07-11 17:44:56 +02:00
188.out qcow2: add iotests to cover LUKS encryption support 2017-07-11 17:44:56 +02:00
189 qemu-img: Check for backing image if specified during create 2017-07-18 15:27:37 +02:00
189.out qcow2: add iotests to cover LUKS encryption support 2017-07-11 17:44:56 +02:00
190 iotests: Add test of recent fix to 'qemu-img measure' 2017-08-01 18:09:33 +02:00
190.out iotests: Add test of recent fix to 'qemu-img measure' 2017-08-01 18:09:33 +02:00
191 iotests: Filter actual image size in 184 and 191 2017-10-26 15:01:13 +02:00
191.out iotests: Filter actual image size in 184 and 191 2017-10-26 15:01:13 +02:00
192 iotests: rewrite 192 to use _launch_qemu to fix LUKS support 2017-09-05 14:17:26 -05:00
192.out iotests: Add non-shared storage migration case 192 2017-08-15 10:03:28 -05:00
194 iotests: blacklist 194 with the luks driver 2017-09-05 14:17:26 -05:00
194.out qemu-iotests: Extend non-shared storage migration test (194) 2017-08-30 13:00:37 -05:00
195 iotests: Fix 195 if IMGFMT is part of TEST_DIR 2017-10-06 16:30:47 +02:00
195.out qemu-iotests: Test change-backing-file command 2017-09-26 14:46:23 +02:00
197 iotests: Add test 197 for covering copy-on-read 2017-10-06 16:28:58 +02:00
197.out iotests: Add test 197 for covering copy-on-read 2017-10-06 16:28:58 +02:00
COPYING
Makefile
README
check iotests: Restore stty settings on completion 2017-10-06 16:28:58 +02:00
common.config qemu-iotests: disintegrate more parts of common.config 2017-10-06 16:28:58 +02:00
common.filter iotests: Pull _filter_actual_image_size from 67/87 2017-10-26 15:01:13 +02:00
common.pattern qemu-io: Switch 'alloc' command to byte-based length 2017-05-11 14:28:05 +02:00
common.qemu qemu-iotests: Allow QMP pretty printing in common.qemu 2017-10-06 16:28:58 +02:00
common.rc qemu-iotests: get rid of $iam 2017-10-06 16:28:58 +02:00
group iotests: Add test for dataplane mirroring 2017-10-26 15:01:13 +02:00
iotests.py scripts: Remove debug parameter from QEMUMachine 2017-10-11 15:15:17 -03:00
nbd-fault-injector.py nbd: rename some simple-request related objects to be _simple_ 2017-10-12 16:27:34 -05:00
qcow2.py
qed.py
socket_scm_helper.c

README

=== This is the QEMU I/O test suite ===

* Intro

This package contains a simple test suite for the I/O layer of qemu.
It does not require a guest, but only the qemu, qemu-img and qemu-io
binaries.  This does limit it to exercise the low-level I/O path only
but no actual block drivers like ide, scsi or virtio.

* Usage

Just run ./check to run all tests for the raw image format, or ./check
-qcow2 to test the qcow2 image format.  The output of ./check -h explains
additional options to test further image formats or I/O methods.

* Feedback and patches

Please send improvements to the test suite, general feedback or just
reports of failing tests cases to qemu-devel@nongnu.org with a CC:
to qemu-block@nongnu.org.