diff mbox

[10/10] iotests: Add test for the JSON protocol

Message ID 1393860533-2063-11-git-send-email-mreitz@redhat.com
State New
Headers show

Commit Message

Max Reitz March 3, 2014, 3:28 p.m. UTC
Add a test for the JSON protocol driver.

Signed-off-by: Max Reitz <mreitz@redhat.com>
---
 tests/qemu-iotests/084     | 114 +++++++++++++++++++++++++++++++++++++++++++++
 tests/qemu-iotests/084.out |  39 ++++++++++++++++
 tests/qemu-iotests/group   |   1 +
 3 files changed, 154 insertions(+)
 create mode 100755 tests/qemu-iotests/084
 create mode 100644 tests/qemu-iotests/084.out

Comments

Eric Blake March 5, 2014, 5:27 p.m. UTC | #1
On 03/03/2014 08:28 AM, Max Reitz wrote:
> Add a test for the JSON protocol driver.
> 
> Signed-off-by: Max Reitz <mreitz@redhat.com>
> ---
>  tests/qemu-iotests/084     | 114 +++++++++++++++++++++++++++++++++++++++++++++

> +
> +# Taken from test 072

The comment is okay, but...

> +echo
> +echo "=== Testing nested image formats (072) ==="

...maybe this echo should be updated to mention test 084.

> +$QEMU_IO -c 'read -P 42 0 512' -c 'read -P 23 512 512' \
> +         -c 'read -P 66 1024 512' "json:{
> +    \"driver\": \"$IMGFMT\",
> +    \"file\": {
> +        \"driver\": \"$IMGFMT\",
> +        \"file\": {
> +            \"filename\": \"$TEST_IMG\"

Are we guaranteed that $TEST_IMG will not contain any " which would
render this invalid JSON?

> +
> +# Taken from test 071
> +echo
> +echo "=== Testing blkdebug (071) ==="

Hmm - now you're mentioning yet another test id different than 084.  So
I guess this was just a hint that you are reproducing earlier tests but
now with the context of a json: protocol.  Still, doesn't "Testing
blkdebug" convey sufficient information, without also needing "(071)"
for confusion?  At any rate, I don't think this affects the coverage of
the test.

Reviewed-by: Eric Blake <eblake@redhat.com>
Max Reitz March 5, 2014, 8:15 p.m. UTC | #2
On 05.03.2014 18:27, Eric Blake wrote:
> On 03/03/2014 08:28 AM, Max Reitz wrote:
>> Add a test for the JSON protocol driver.
>>
>> Signed-off-by: Max Reitz <mreitz@redhat.com>
>> ---
>>   tests/qemu-iotests/084     | 114 +++++++++++++++++++++++++++++++++++++++++++++
>> +
>> +# Taken from test 072
> The comment is okay, but...
>
>> +echo
>> +echo "=== Testing nested image formats (072) ==="
> ...maybe this echo should be updated to mention test 084.
>
>> +$QEMU_IO -c 'read -P 42 0 512' -c 'read -P 23 512 512' \
>> +         -c 'read -P 66 1024 512' "json:{
>> +    \"driver\": \"$IMGFMT\",
>> +    \"file\": {
>> +        \"driver\": \"$IMGFMT\",
>> +        \"file\": {
>> +            \"filename\": \"$TEST_IMG\"
> Are we guaranteed that $TEST_IMG will not contain any " which would
> render this invalid JSON?

Probably not, but do you have an idea to circumvent this?

>> +
>> +# Taken from test 071
>> +echo
>> +echo "=== Testing blkdebug (071) ==="
> Hmm - now you're mentioning yet another test id different than 084.  So
> I guess this was just a hint that you are reproducing earlier tests but
> now with the context of a json: protocol.  Still, doesn't "Testing
> blkdebug" convey sufficient information, without also needing "(071)"
> for confusion?

Probably, yes. I think I'll leave it in the comments for reference and 
remove it from the echoes.


Max

> At any rate, I don't think this affects the coverage of
> the test.
>
> Reviewed-by: Eric Blake <eblake@redhat.com>
Eric Blake March 5, 2014, 8:27 p.m. UTC | #3
On 03/05/2014 01:15 PM, Max Reitz wrote:

>>> +            \"filename\": \"$TEST_IMG\"
>> Are we guaranteed that $TEST_IMG will not contain any " which would
>> render this invalid JSON?
> 
> Probably not, but do you have an idea to circumvent this?

If nothing else, we can at least be paranoid with something like:

case $TEST_IMG in
 *'"'*) skip the test... ;;
esac
diff mbox

Patch

diff --git a/tests/qemu-iotests/084 b/tests/qemu-iotests/084
new file mode 100755
index 0000000..46be241
--- /dev/null
+++ b/tests/qemu-iotests/084
@@ -0,0 +1,114 @@ 
+#!/bin/bash
+#
+# Test case for the JSON block protocol
+#
+# Copyright (C) 2014 Red Hat, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+
+# creator
+owner=mreitz@redhat.com
+
+seq="$(basename $0)"
+echo "QA output created by $seq"
+
+here="$PWD"
+tmp=/tmp/$$
+status=1	# failure is the default!
+
+_cleanup()
+{
+	_cleanup_test_img
+}
+trap "_cleanup; exit \$status" 0 1 2 3 15
+
+# get standard environment, filters and checks
+. ./common.rc
+. ./common.filter
+
+_supported_fmt qcow2
+_supported_proto file
+_supported_os Linux
+
+IMG_SIZE=64M
+
+# Taken from test 072
+echo
+echo "=== Testing nested image formats (072) ==="
+echo
+
+TEST_IMG="$TEST_IMG.base" _make_test_img $IMG_SIZE
+
+$QEMU_IO -c 'write -P 42 0 512' -c 'write -P 23 512 512' \
+         -c 'write -P 66 1024 512' "$TEST_IMG.base" | _filter_qemu_io
+
+$QEMU_IMG convert -f raw -O $IMGFMT "$TEST_IMG.base" "$TEST_IMG"
+
+$QEMU_IO -c 'read -P 42 0 512' -c 'read -P 23 512 512' \
+         -c 'read -P 66 1024 512' "json:{
+    \"driver\": \"$IMGFMT\",
+    \"file\": {
+        \"driver\": \"$IMGFMT\",
+        \"file\": {
+            \"filename\": \"$TEST_IMG\"
+        }
+    }
+}" | _filter_qemu_io
+
+# This should fail (see test 072)
+$QEMU_IO -c 'read -P 42 0 512' "$TEST_IMG" | _filter_qemu_io
+
+
+# Taken from test 071
+echo
+echo "=== Testing blkdebug (071) ==="
+echo
+
+_make_test_img $IMG_SIZE
+
+$QEMU_IO -c 'write -P 42 0x38000 512' "$TEST_IMG" | _filter_qemu_io
+
+# The "image.filename" part tests whether "a": { "b": "c" } and "a.b": "c" do
+# the same (which they should).
+# This has to use -g to force qemu-io to use BDRV_O_PROTOCOL, since it will try
+# to determine the format of the file otherwise; due to the complexity of the
+# filename, only raw (or json itself) will work and this will then result in an
+# error because of the blkdebug part. Thus, use -g.
+$QEMU_IO -c 'read -P 42 0x38000 512' -g "json:{
+    \"driver\": \"$IMGFMT\",
+    \"file\": {
+        \"driver\": \"blkdebug\",
+        \"inject-error\": [{
+            \"event\": \"l2_load\"
+        }],
+        \"image.filename\": \"$TEST_IMG\"
+    }
+}" | _filter_qemu_io
+
+
+echo
+echo "=== Testing qemu-img info output ==="
+echo
+
+# This should output information about the image itself, not about the JSON
+# block device.
+$QEMU_IMG info "json:{\"driver\":\"qcow2\",\"file.filename\":\"$TEST_IMG\"}" \
+    | _filter_testdir | _filter_imgfmt
+
+
+# success, all done
+echo "*** done"
+rm -f $seq.full
+status=0
diff --git a/tests/qemu-iotests/084.out b/tests/qemu-iotests/084.out
new file mode 100644
index 0000000..d475aec
--- /dev/null
+++ b/tests/qemu-iotests/084.out
@@ -0,0 +1,39 @@ 
+QA output created by 084
+
+=== Testing nested image formats (072) ===
+
+Formatting 'TEST_DIR/t.IMGFMT.base', fmt=IMGFMT size=67108864 
+wrote 512/512 bytes at offset 0
+512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 512/512 bytes at offset 512
+512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 512/512 bytes at offset 1024
+512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+read 512/512 bytes at offset 0
+512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+read 512/512 bytes at offset 512
+512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+read 512/512 bytes at offset 1024
+512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+Pattern verification failed at offset 0, 512 bytes
+read 512/512 bytes at offset 0
+512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+
+=== Testing blkdebug (071) ===
+
+Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 
+wrote 512/512 bytes at offset 229376
+512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+read failed: Input/output error
+
+=== Testing qemu-img info output ===
+
+image: TEST_DIR/t.IMGFMT
+file format: IMGFMT
+virtual size: 64M (67108864 bytes)
+disk size: 324K
+cluster_size: 65536
+Format specific information:
+    compat: 1.1
+    lazy refcounts: false
+*** done
diff --git a/tests/qemu-iotests/group b/tests/qemu-iotests/group
index db127d9..3b7d0e6 100644
--- a/tests/qemu-iotests/group
+++ b/tests/qemu-iotests/group
@@ -85,3 +85,4 @@ 
 079 rw auto
 081 rw auto
 082 rw auto quick
+084 rw auto quick