|
|
357786 |
From 4b3acf7f8a66928bd1aa3cf10879d925cdeadbb9 Mon Sep 17 00:00:00 2001
|
|
|
357786 |
From: Kevin Wolf <kwolf@redhat.com>
|
|
|
357786 |
Date: Tue, 26 Jun 2018 09:48:50 +0200
|
|
|
357786 |
Subject: [PATCH 81/89] qemu-iotests: Rewrite 212 for blockdev-create job
|
|
|
357786 |
|
|
|
357786 |
RH-Author: Kevin Wolf <kwolf@redhat.com>
|
|
|
357786 |
Message-id: <20180626094856.6924-68-kwolf@redhat.com>
|
|
|
357786 |
Patchwork-id: 81100
|
|
|
357786 |
O-Subject: [RHV-7.6 qemu-kvm-rhev PATCH v2 67/73] qemu-iotests: Rewrite 212 for blockdev-create job
|
|
|
357786 |
Bugzilla: 1513543
|
|
|
357786 |
RH-Acked-by: Jeffrey Cody <jcody@redhat.com>
|
|
|
357786 |
RH-Acked-by: Max Reitz <mreitz@redhat.com>
|
|
|
357786 |
RH-Acked-by: Fam Zheng <famz@redhat.com>
|
|
|
357786 |
|
|
|
357786 |
This rewrites the test case 212 to work with the new x-blockdev-create
|
|
|
357786 |
job rather than the old synchronous version of the command.
|
|
|
357786 |
|
|
|
357786 |
All of the test cases stay the same as before, but in order to be able
|
|
|
357786 |
to implement proper job handling, the test case is rewritten in Python.
|
|
|
357786 |
|
|
|
357786 |
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
|
|
|
357786 |
Reviewed-by: Max Reitz <mreitz@redhat.com>
|
|
|
357786 |
(cherry picked from commit 2d7abfbeb75fbe624a8b3a2ff253dbf5674ccb65)
|
|
|
357786 |
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
|
|
|
357786 |
Signed-off-by: Miroslav Rezanina <mrezanin@redhat.com>
|
|
|
357786 |
---
|
|
|
357786 |
tests/qemu-iotests/212 | 483 +++++++++++++++++----------------------------
|
|
|
357786 |
tests/qemu-iotests/212.out | 191 +++++++++++-------
|
|
|
357786 |
tests/qemu-iotests/group | 2 +-
|
|
|
357786 |
3 files changed, 295 insertions(+), 381 deletions(-)
|
|
|
357786 |
|
|
|
357786 |
diff --git a/tests/qemu-iotests/212 b/tests/qemu-iotests/212
|
|
|
357786 |
index e5a1ba7..03cf41d 100755
|
|
|
357786 |
--- a/tests/qemu-iotests/212
|
|
|
357786 |
+++ b/tests/qemu-iotests/212
|
|
|
357786 |
@@ -1,9 +1,11 @@
|
|
|
357786 |
-#!/bin/bash
|
|
|
357786 |
+#!/usr/bin/env python
|
|
|
357786 |
#
|
|
|
357786 |
# Test parallels and file image creation
|
|
|
357786 |
#
|
|
|
357786 |
# Copyright (C) 2018 Red Hat, Inc.
|
|
|
357786 |
#
|
|
|
357786 |
+# Creator/Owner: Kevin Wolf <kwolf@redhat.com>
|
|
|
357786 |
+#
|
|
|
357786 |
# This program is free software; you can redistribute it and/or modify
|
|
|
357786 |
# it under the terms of the GNU General Public License as published by
|
|
|
357786 |
# the Free Software Foundation; either version 2 of the License, or
|
|
|
357786 |
@@ -18,309 +20,176 @@
|
|
|
357786 |
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
357786 |
#
|
|
|
357786 |
|
|
|
357786 |
-# creator
|
|
|
357786 |
-owner=kwolf@redhat.com
|
|
|
357786 |
-
|
|
|
357786 |
-seq=`basename $0`
|
|
|
357786 |
-echo "QA output created by $seq"
|
|
|
357786 |
-
|
|
|
357786 |
-here=`pwd`
|
|
|
357786 |
-status=1 # failure is the default!
|
|
|
357786 |
-
|
|
|
357786 |
-# get standard environment, filters and checks
|
|
|
357786 |
-. ./common.rc
|
|
|
357786 |
-. ./common.filter
|
|
|
357786 |
-
|
|
|
357786 |
-_supported_fmt parallels
|
|
|
357786 |
-_supported_proto file
|
|
|
357786 |
-_supported_os Linux
|
|
|
357786 |
-
|
|
|
357786 |
-function do_run_qemu()
|
|
|
357786 |
-{
|
|
|
357786 |
- echo Testing: "$@"
|
|
|
357786 |
- $QEMU -nographic -qmp stdio -serial none "$@"
|
|
|
357786 |
- echo
|
|
|
357786 |
-}
|
|
|
357786 |
-
|
|
|
357786 |
-function run_qemu()
|
|
|
357786 |
-{
|
|
|
357786 |
- do_run_qemu "$@" 2>&1 | _filter_testdir | _filter_qmp \
|
|
|
357786 |
- | _filter_qemu | _filter_imgfmt \
|
|
|
357786 |
- | _filter_actual_image_size
|
|
|
357786 |
-}
|
|
|
357786 |
-
|
|
|
357786 |
-echo
|
|
|
357786 |
-echo "=== Successful image creation (defaults) ==="
|
|
|
357786 |
-echo
|
|
|
357786 |
-
|
|
|
357786 |
-size=$((128 * 1024 * 1024))
|
|
|
357786 |
-
|
|
|
357786 |
-run_qemu <
|
|
|
357786 |
-{ "execute": "qmp_capabilities" }
|
|
|
357786 |
-{ "execute": "x-blockdev-create",
|
|
|
357786 |
- "arguments": {
|
|
|
357786 |
- "driver": "file",
|
|
|
357786 |
- "filename": "$TEST_IMG",
|
|
|
357786 |
- "size": 0
|
|
|
357786 |
- }
|
|
|
357786 |
-}
|
|
|
357786 |
-{ "execute": "blockdev-add",
|
|
|
357786 |
- "arguments": {
|
|
|
357786 |
- "driver": "file",
|
|
|
357786 |
- "node-name": "imgfile",
|
|
|
357786 |
- "filename": "$TEST_IMG"
|
|
|
357786 |
- }
|
|
|
357786 |
-}
|
|
|
357786 |
-{ "execute": "x-blockdev-create",
|
|
|
357786 |
- "arguments": {
|
|
|
357786 |
- "driver": "$IMGFMT",
|
|
|
357786 |
- "file": "imgfile",
|
|
|
357786 |
- "size": $size
|
|
|
357786 |
- }
|
|
|
357786 |
-}
|
|
|
357786 |
-{ "execute": "quit" }
|
|
|
357786 |
-EOF
|
|
|
357786 |
-
|
|
|
357786 |
-_img_info --format-specific | _filter_img_info --format-specific
|
|
|
357786 |
-
|
|
|
357786 |
-echo
|
|
|
357786 |
-echo "=== Successful image creation (explicit defaults) ==="
|
|
|
357786 |
-echo
|
|
|
357786 |
-
|
|
|
357786 |
-# Choose a different size to show that we got a new image
|
|
|
357786 |
-size=$((64 * 1024 * 1024))
|
|
|
357786 |
-
|
|
|
357786 |
-run_qemu <
|
|
|
357786 |
-{ "execute": "qmp_capabilities" }
|
|
|
357786 |
-{ "execute": "x-blockdev-create",
|
|
|
357786 |
- "arguments": {
|
|
|
357786 |
- "driver": "file",
|
|
|
357786 |
- "filename": "$TEST_IMG",
|
|
|
357786 |
- "size": 0
|
|
|
357786 |
- }
|
|
|
357786 |
-}
|
|
|
357786 |
-{ "execute": "x-blockdev-create",
|
|
|
357786 |
- "arguments": {
|
|
|
357786 |
- "driver": "$IMGFMT",
|
|
|
357786 |
- "file": {
|
|
|
357786 |
- "driver": "file",
|
|
|
357786 |
- "filename": "$TEST_IMG"
|
|
|
357786 |
- },
|
|
|
357786 |
- "size": $size,
|
|
|
357786 |
- "cluster-size": 1048576
|
|
|
357786 |
- }
|
|
|
357786 |
-}
|
|
|
357786 |
-{ "execute": "quit" }
|
|
|
357786 |
-EOF
|
|
|
357786 |
-
|
|
|
357786 |
-_img_info --format-specific | _filter_img_info --format-specific
|
|
|
357786 |
-
|
|
|
357786 |
-echo
|
|
|
357786 |
-echo "=== Successful image creation (with non-default options) ==="
|
|
|
357786 |
-echo
|
|
|
357786 |
-
|
|
|
357786 |
-# Choose a different size to show that we got a new image
|
|
|
357786 |
-size=$((32 * 1024 * 1024))
|
|
|
357786 |
-
|
|
|
357786 |
-run_qemu <
|
|
|
357786 |
-{ "execute": "qmp_capabilities" }
|
|
|
357786 |
-{ "execute": "x-blockdev-create",
|
|
|
357786 |
- "arguments": {
|
|
|
357786 |
- "driver": "file",
|
|
|
357786 |
- "filename": "$TEST_IMG",
|
|
|
357786 |
- "size": 0
|
|
|
357786 |
- }
|
|
|
357786 |
-}
|
|
|
357786 |
-{ "execute": "x-blockdev-create",
|
|
|
357786 |
- "arguments": {
|
|
|
357786 |
- "driver": "$IMGFMT",
|
|
|
357786 |
- "file": {
|
|
|
357786 |
- "driver": "file",
|
|
|
357786 |
- "filename": "$TEST_IMG"
|
|
|
357786 |
- },
|
|
|
357786 |
- "size": $size,
|
|
|
357786 |
- "cluster-size": 65536
|
|
|
357786 |
- }
|
|
|
357786 |
-}
|
|
|
357786 |
-{ "execute": "quit" }
|
|
|
357786 |
-EOF
|
|
|
357786 |
-
|
|
|
357786 |
-_img_info --format-specific | _filter_img_info --format-specific
|
|
|
357786 |
-
|
|
|
357786 |
-echo
|
|
|
357786 |
-echo "=== Invalid BlockdevRef ==="
|
|
|
357786 |
-echo
|
|
|
357786 |
-
|
|
|
357786 |
-run_qemu <
|
|
|
357786 |
-{ "execute": "qmp_capabilities" }
|
|
|
357786 |
-{ "execute": "x-blockdev-create",
|
|
|
357786 |
- "arguments": {
|
|
|
357786 |
- "driver": "$IMGFMT",
|
|
|
357786 |
- "file": "this doesn't exist",
|
|
|
357786 |
- "size": $size
|
|
|
357786 |
- }
|
|
|
357786 |
-}
|
|
|
357786 |
-{ "execute": "quit" }
|
|
|
357786 |
-EOF
|
|
|
357786 |
-
|
|
|
357786 |
-echo
|
|
|
357786 |
-echo "=== Zero size ==="
|
|
|
357786 |
-echo
|
|
|
357786 |
-
|
|
|
357786 |
-run_qemu -blockdev driver=file,filename="$TEST_IMG",node-name=node0 <
|
|
|
357786 |
-{ "execute": "qmp_capabilities" }
|
|
|
357786 |
-{ "execute": "x-blockdev-create",
|
|
|
357786 |
- "arguments": {
|
|
|
357786 |
- "driver": "$IMGFMT",
|
|
|
357786 |
- "file": "node0",
|
|
|
357786 |
- "size": 0
|
|
|
357786 |
- }
|
|
|
357786 |
-}
|
|
|
357786 |
-{ "execute": "quit" }
|
|
|
357786 |
-EOF
|
|
|
357786 |
-
|
|
|
357786 |
-_img_info | _filter_img_info
|
|
|
357786 |
-
|
|
|
357786 |
-echo
|
|
|
357786 |
-echo "=== Maximum size ==="
|
|
|
357786 |
-echo
|
|
|
357786 |
-
|
|
|
357786 |
-run_qemu -blockdev driver=file,filename="$TEST_IMG",node-name=node0 <
|
|
|
357786 |
-{ "execute": "qmp_capabilities" }
|
|
|
357786 |
-{ "execute": "x-blockdev-create",
|
|
|
357786 |
- "arguments": {
|
|
|
357786 |
- "driver": "$IMGFMT",
|
|
|
357786 |
- "file": "node0",
|
|
|
357786 |
- "size": 4503599627369984
|
|
|
357786 |
- }
|
|
|
357786 |
-}
|
|
|
357786 |
-{ "execute": "quit" }
|
|
|
357786 |
-EOF
|
|
|
357786 |
-
|
|
|
357786 |
-_img_info | _filter_img_info
|
|
|
357786 |
-
|
|
|
357786 |
-echo
|
|
|
357786 |
-echo "=== Invalid sizes ==="
|
|
|
357786 |
-echo
|
|
|
357786 |
-
|
|
|
357786 |
-# TODO Negative image sizes aren't handled correctly, but this is a problem
|
|
|
357786 |
-# with QAPI's implementation of the 'size' type and affects other commands as
|
|
|
357786 |
-# well. Once this is fixed, we may want to add a test case here.
|
|
|
357786 |
-
|
|
|
357786 |
-# 1. Misaligned image size
|
|
|
357786 |
-# 2. 2^64 - 512
|
|
|
357786 |
-# 3. 2^63 = 8 EB (qemu-img enforces image sizes less than this)
|
|
|
357786 |
-# 4. 2^63 - 512 (generally valid, but with the image header the file will
|
|
|
357786 |
-# exceed 63 bits)
|
|
|
357786 |
-# 5. 2^52 (512 bytes more than maximum image size)
|
|
|
357786 |
-
|
|
|
357786 |
-run_qemu -blockdev driver=file,filename="$TEST_IMG",node-name=node0 <
|
|
|
357786 |
-{ "execute": "qmp_capabilities" }
|
|
|
357786 |
-{ "execute": "x-blockdev-create",
|
|
|
357786 |
- "arguments": {
|
|
|
357786 |
- "driver": "$IMGFMT",
|
|
|
357786 |
- "file": "node0",
|
|
|
357786 |
- "size": 1234
|
|
|
357786 |
- }
|
|
|
357786 |
-}
|
|
|
357786 |
-{ "execute": "x-blockdev-create",
|
|
|
357786 |
- "arguments": {
|
|
|
357786 |
- "driver": "$IMGFMT",
|
|
|
357786 |
- "file": "node0",
|
|
|
357786 |
- "size": 18446744073709551104
|
|
|
357786 |
- }
|
|
|
357786 |
-}
|
|
|
357786 |
-{ "execute": "x-blockdev-create",
|
|
|
357786 |
- "arguments": {
|
|
|
357786 |
- "driver": "$IMGFMT",
|
|
|
357786 |
- "file": "node0",
|
|
|
357786 |
- "size": 9223372036854775808
|
|
|
357786 |
- }
|
|
|
357786 |
-}
|
|
|
357786 |
-{ "execute": "x-blockdev-create",
|
|
|
357786 |
- "arguments": {
|
|
|
357786 |
- "driver": "$IMGFMT",
|
|
|
357786 |
- "file": "node0",
|
|
|
357786 |
- "size": 9223372036854775296
|
|
|
357786 |
- }
|
|
|
357786 |
-}
|
|
|
357786 |
-{ "execute": "x-blockdev-create",
|
|
|
357786 |
- "arguments": {
|
|
|
357786 |
- "driver": "$IMGFMT",
|
|
|
357786 |
- "file": "node0",
|
|
|
357786 |
- "size": 4503599627370497
|
|
|
357786 |
- }
|
|
|
357786 |
-}
|
|
|
357786 |
-{ "execute": "quit" }
|
|
|
357786 |
-EOF
|
|
|
357786 |
-
|
|
|
357786 |
-echo
|
|
|
357786 |
-echo "=== Invalid cluster size ==="
|
|
|
357786 |
-echo
|
|
|
357786 |
-
|
|
|
357786 |
-run_qemu -blockdev driver=file,filename="$TEST_IMG",node-name=node0 <
|
|
|
357786 |
-{ "execute": "qmp_capabilities" }
|
|
|
357786 |
-{ "execute": "x-blockdev-create",
|
|
|
357786 |
- "arguments": {
|
|
|
357786 |
- "driver": "$IMGFMT",
|
|
|
357786 |
- "file": "node0",
|
|
|
357786 |
- "size": 67108864,
|
|
|
357786 |
- "cluster-size": 1234
|
|
|
357786 |
- }
|
|
|
357786 |
-}
|
|
|
357786 |
-{ "execute": "x-blockdev-create",
|
|
|
357786 |
- "arguments": {
|
|
|
357786 |
- "driver": "$IMGFMT",
|
|
|
357786 |
- "file": "node0",
|
|
|
357786 |
- "size": 67108864,
|
|
|
357786 |
- "cluster-size": 128
|
|
|
357786 |
- }
|
|
|
357786 |
-}
|
|
|
357786 |
-{ "execute": "x-blockdev-create",
|
|
|
357786 |
- "arguments": {
|
|
|
357786 |
- "driver": "$IMGFMT",
|
|
|
357786 |
- "file": "node0",
|
|
|
357786 |
- "size": 67108864,
|
|
|
357786 |
- "cluster-size": 4294967296
|
|
|
357786 |
- }
|
|
|
357786 |
-}
|
|
|
357786 |
-{ "execute": "x-blockdev-create",
|
|
|
357786 |
- "arguments": {
|
|
|
357786 |
- "driver": "$IMGFMT",
|
|
|
357786 |
- "file": "node0",
|
|
|
357786 |
- "size": 67108864,
|
|
|
357786 |
- "cluster-size": 9223372036854775808
|
|
|
357786 |
- }
|
|
|
357786 |
-}
|
|
|
357786 |
-{ "execute": "x-blockdev-create",
|
|
|
357786 |
- "arguments": {
|
|
|
357786 |
- "driver": "$IMGFMT",
|
|
|
357786 |
- "file": "node0",
|
|
|
357786 |
- "size": 67108864,
|
|
|
357786 |
- "cluster-size": 18446744073709551104
|
|
|
357786 |
- }
|
|
|
357786 |
-}
|
|
|
357786 |
-{ "execute": "x-blockdev-create",
|
|
|
357786 |
- "arguments": {
|
|
|
357786 |
- "driver": "$IMGFMT",
|
|
|
357786 |
- "file": "node0",
|
|
|
357786 |
- "size": 67108864,
|
|
|
357786 |
- "cluster-size": 0
|
|
|
357786 |
- }
|
|
|
357786 |
-}
|
|
|
357786 |
-{ "execute": "x-blockdev-create",
|
|
|
357786 |
- "arguments": {
|
|
|
357786 |
- "driver": "$IMGFMT",
|
|
|
357786 |
- "file": "node0",
|
|
|
357786 |
- "size": 281474976710656,
|
|
|
357786 |
- "cluster-size": 512
|
|
|
357786 |
- }
|
|
|
357786 |
-}
|
|
|
357786 |
-{ "execute": "quit" }
|
|
|
357786 |
-EOF
|
|
|
357786 |
-
|
|
|
357786 |
-
|
|
|
357786 |
-# success, all done
|
|
|
357786 |
-echo "*** done"
|
|
|
357786 |
-rm -f $seq.full
|
|
|
357786 |
-status=0
|
|
|
357786 |
+import iotests
|
|
|
357786 |
+from iotests import imgfmt
|
|
|
357786 |
+
|
|
|
357786 |
+iotests.verify_image_format(supported_fmts=['parallels'])
|
|
|
357786 |
+iotests.verify_protocol(supported=['file'])
|
|
|
357786 |
+
|
|
|
357786 |
+def blockdev_create(vm, options):
|
|
|
357786 |
+ result = vm.qmp_log('x-blockdev-create', job_id='job0', options=options)
|
|
|
357786 |
+
|
|
|
357786 |
+ if 'return' in result:
|
|
|
357786 |
+ assert result['return'] == {}
|
|
|
357786 |
+ vm.run_job('job0')
|
|
|
357786 |
+ iotests.log("")
|
|
|
357786 |
+
|
|
|
357786 |
+with iotests.FilePath('t.parallels') as disk_path, \
|
|
|
357786 |
+ iotests.VM() as vm:
|
|
|
357786 |
+
|
|
|
357786 |
+ #
|
|
|
357786 |
+ # Successful image creation (defaults)
|
|
|
357786 |
+ #
|
|
|
357786 |
+ iotests.log("=== Successful image creation (defaults) ===")
|
|
|
357786 |
+ iotests.log("")
|
|
|
357786 |
+
|
|
|
357786 |
+ size = 128 * 1024 * 1024
|
|
|
357786 |
+
|
|
|
357786 |
+ vm.launch()
|
|
|
357786 |
+ blockdev_create(vm, { 'driver': 'file',
|
|
|
357786 |
+ 'filename': disk_path,
|
|
|
357786 |
+ 'size': 0 })
|
|
|
357786 |
+
|
|
|
357786 |
+ vm.qmp_log('blockdev-add', driver='file', filename=disk_path,
|
|
|
357786 |
+ node_name='imgfile')
|
|
|
357786 |
+
|
|
|
357786 |
+ blockdev_create(vm, { 'driver': imgfmt,
|
|
|
357786 |
+ 'file': 'imgfile',
|
|
|
357786 |
+ 'size': size })
|
|
|
357786 |
+ vm.shutdown()
|
|
|
357786 |
+
|
|
|
357786 |
+ iotests.img_info_log(disk_path)
|
|
|
357786 |
+
|
|
|
357786 |
+ #
|
|
|
357786 |
+ # Successful image creation (explicit defaults)
|
|
|
357786 |
+ #
|
|
|
357786 |
+ iotests.log("=== Successful image creation (explicit defaults) ===")
|
|
|
357786 |
+ iotests.log("")
|
|
|
357786 |
+
|
|
|
357786 |
+ # Choose a different size to show that we got a new image
|
|
|
357786 |
+ size = 64 * 1024 * 1024
|
|
|
357786 |
+
|
|
|
357786 |
+ vm.launch()
|
|
|
357786 |
+ blockdev_create(vm, { 'driver': 'file',
|
|
|
357786 |
+ 'filename': disk_path,
|
|
|
357786 |
+ 'size': 0 })
|
|
|
357786 |
+ blockdev_create(vm, { 'driver': imgfmt,
|
|
|
357786 |
+ 'file': {
|
|
|
357786 |
+ 'driver': 'file',
|
|
|
357786 |
+ 'filename': disk_path,
|
|
|
357786 |
+ },
|
|
|
357786 |
+ 'size': size,
|
|
|
357786 |
+ 'cluster-size': 1048576 })
|
|
|
357786 |
+ vm.shutdown()
|
|
|
357786 |
+
|
|
|
357786 |
+ iotests.img_info_log(disk_path)
|
|
|
357786 |
+
|
|
|
357786 |
+ #
|
|
|
357786 |
+ # Successful image creation (with non-default options)
|
|
|
357786 |
+ #
|
|
|
357786 |
+ iotests.log("=== Successful image creation (with non-default options) ===")
|
|
|
357786 |
+ iotests.log("")
|
|
|
357786 |
+
|
|
|
357786 |
+ # Choose a different size to show that we got a new image
|
|
|
357786 |
+ size = 32 * 1024 * 1024
|
|
|
357786 |
+
|
|
|
357786 |
+ vm.launch()
|
|
|
357786 |
+ blockdev_create(vm, { 'driver': 'file',
|
|
|
357786 |
+ 'filename': disk_path,
|
|
|
357786 |
+ 'size': 0 })
|
|
|
357786 |
+ blockdev_create(vm, { 'driver': imgfmt,
|
|
|
357786 |
+ 'file': {
|
|
|
357786 |
+ 'driver': 'file',
|
|
|
357786 |
+ 'filename': disk_path,
|
|
|
357786 |
+ },
|
|
|
357786 |
+ 'size': size,
|
|
|
357786 |
+ 'cluster-size': 65536 })
|
|
|
357786 |
+ vm.shutdown()
|
|
|
357786 |
+
|
|
|
357786 |
+ iotests.img_info_log(disk_path)
|
|
|
357786 |
+
|
|
|
357786 |
+ #
|
|
|
357786 |
+ # Invalid BlockdevRef
|
|
|
357786 |
+ #
|
|
|
357786 |
+ iotests.log("=== Invalid BlockdevRef ===")
|
|
|
357786 |
+ iotests.log("")
|
|
|
357786 |
+
|
|
|
357786 |
+ vm.launch()
|
|
|
357786 |
+ blockdev_create(vm, { 'driver': imgfmt,
|
|
|
357786 |
+ 'file': "this doesn't exist",
|
|
|
357786 |
+ 'size': size })
|
|
|
357786 |
+ vm.shutdown()
|
|
|
357786 |
+
|
|
|
357786 |
+ #
|
|
|
357786 |
+ # Zero size
|
|
|
357786 |
+ #
|
|
|
357786 |
+ iotests.log("=== Zero size ===")
|
|
|
357786 |
+ iotests.log("")
|
|
|
357786 |
+
|
|
|
357786 |
+ vm.add_blockdev('driver=file,filename=%s,node-name=node0' % (disk_path))
|
|
|
357786 |
+ vm.launch()
|
|
|
357786 |
+ blockdev_create(vm, { 'driver': imgfmt,
|
|
|
357786 |
+ 'file': 'node0',
|
|
|
357786 |
+ 'size': 0 })
|
|
|
357786 |
+ vm.shutdown()
|
|
|
357786 |
+
|
|
|
357786 |
+ iotests.img_info_log(disk_path)
|
|
|
357786 |
+
|
|
|
357786 |
+ #
|
|
|
357786 |
+ # Maximum size
|
|
|
357786 |
+ #
|
|
|
357786 |
+ iotests.log("=== Maximum size ===")
|
|
|
357786 |
+ iotests.log("")
|
|
|
357786 |
+
|
|
|
357786 |
+ vm.launch()
|
|
|
357786 |
+ blockdev_create(vm, { 'driver': imgfmt,
|
|
|
357786 |
+ 'file': 'node0',
|
|
|
357786 |
+ 'size': 4503599627369984})
|
|
|
357786 |
+ vm.shutdown()
|
|
|
357786 |
+
|
|
|
357786 |
+ iotests.img_info_log(disk_path)
|
|
|
357786 |
+
|
|
|
357786 |
+ #
|
|
|
357786 |
+ # Invalid sizes
|
|
|
357786 |
+ #
|
|
|
357786 |
+
|
|
|
357786 |
+ # TODO Negative image sizes aren't handled correctly, but this is a problem
|
|
|
357786 |
+ # with QAPI's implementation of the 'size' type and affects other commands
|
|
|
357786 |
+ # as well. Once this is fixed, we may want to add a test case here.
|
|
|
357786 |
+
|
|
|
357786 |
+ # 1. Misaligned image size
|
|
|
357786 |
+ # 2. 2^64 - 512
|
|
|
357786 |
+ # 3. 2^63 = 8 EB (qemu-img enforces image sizes less than this)
|
|
|
357786 |
+ # 4. 2^63 - 512 (generally valid, but with the image header the file will
|
|
|
357786 |
+ # exceed 63 bits)
|
|
|
357786 |
+ # 5. 2^52 (512 bytes more than maximum image size)
|
|
|
357786 |
+
|
|
|
357786 |
+ iotests.log("=== Invalid sizes ===")
|
|
|
357786 |
+ iotests.log("")
|
|
|
357786 |
+
|
|
|
357786 |
+ vm.launch()
|
|
|
357786 |
+ for size in [ 1234, 18446744073709551104, 9223372036854775808,
|
|
|
357786 |
+ 9223372036854775296, 4503599627370497 ]:
|
|
|
357786 |
+ blockdev_create(vm, { 'driver': imgfmt,
|
|
|
357786 |
+ 'file': 'node0',
|
|
|
357786 |
+ 'size': size })
|
|
|
357786 |
+ vm.shutdown()
|
|
|
357786 |
+
|
|
|
357786 |
+ #
|
|
|
357786 |
+ # Invalid cluster size
|
|
|
357786 |
+ #
|
|
|
357786 |
+ iotests.log("=== Invalid cluster size ===")
|
|
|
357786 |
+ iotests.log("")
|
|
|
357786 |
+
|
|
|
357786 |
+ vm.launch()
|
|
|
357786 |
+ for csize in [ 1234, 128, 4294967296, 9223372036854775808,
|
|
|
357786 |
+ 18446744073709551104, 0 ]:
|
|
|
357786 |
+ blockdev_create(vm, { 'driver': imgfmt,
|
|
|
357786 |
+ 'file': 'node0',
|
|
|
357786 |
+ 'size': 67108864,
|
|
|
357786 |
+ 'cluster-size': csize })
|
|
|
357786 |
+ blockdev_create(vm, { 'driver': imgfmt,
|
|
|
357786 |
+ 'file': 'node0',
|
|
|
357786 |
+ 'size': 281474976710656,
|
|
|
357786 |
+ 'cluster-size': 512 })
|
|
|
357786 |
+ vm.shutdown()
|
|
|
357786 |
diff --git a/tests/qemu-iotests/212.out b/tests/qemu-iotests/212.out
|
|
|
357786 |
index 587de6f..780bc30 100644
|
|
|
357786 |
--- a/tests/qemu-iotests/212.out
|
|
|
357786 |
+++ b/tests/qemu-iotests/212.out
|
|
|
357786 |
@@ -1,111 +1,156 @@
|
|
|
357786 |
-QA output created by 212
|
|
|
357786 |
-
|
|
|
357786 |
=== Successful image creation (defaults) ===
|
|
|
357786 |
|
|
|
357786 |
-Testing:
|
|
|
357786 |
-QMP_VERSION
|
|
|
357786 |
-{"return": {}}
|
|
|
357786 |
-{"return": {}}
|
|
|
357786 |
-{"return": {}}
|
|
|
357786 |
-{"return": {}}
|
|
|
357786 |
-{"return": {}}
|
|
|
357786 |
-{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false}}
|
|
|
357786 |
+{'execute': 'x-blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'size': 0, 'driver': 'file', 'filename': 'TEST_DIR/PID-t.parallels'}}}
|
|
|
357786 |
+{u'return': {}}
|
|
|
357786 |
+{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
|
|
|
357786 |
+{u'return': {}}
|
|
|
357786 |
+
|
|
|
357786 |
+{'execute': 'blockdev-add', 'arguments': {'node_name': 'imgfile', 'driver': 'file', 'filename': 'TEST_DIR/PID-t.parallels'}}
|
|
|
357786 |
+{u'return': {}}
|
|
|
357786 |
+{'execute': 'x-blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'driver': 'parallels', 'file': 'imgfile', 'size': 134217728}}}
|
|
|
357786 |
+{u'return': {}}
|
|
|
357786 |
+{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
|
|
|
357786 |
+{u'return': {}}
|
|
|
357786 |
|
|
|
357786 |
-image: TEST_DIR/t.IMGFMT
|
|
|
357786 |
+image: TEST_IMG
|
|
|
357786 |
file format: IMGFMT
|
|
|
357786 |
virtual size: 128M (134217728 bytes)
|
|
|
357786 |
|
|
|
357786 |
=== Successful image creation (explicit defaults) ===
|
|
|
357786 |
|
|
|
357786 |
-Testing:
|
|
|
357786 |
-QMP_VERSION
|
|
|
357786 |
-{"return": {}}
|
|
|
357786 |
-{"return": {}}
|
|
|
357786 |
-{"return": {}}
|
|
|
357786 |
-{"return": {}}
|
|
|
357786 |
-{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false}}
|
|
|
357786 |
+{'execute': 'x-blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'size': 0, 'driver': 'file', 'filename': 'TEST_DIR/PID-t.parallels'}}}
|
|
|
357786 |
+{u'return': {}}
|
|
|
357786 |
+{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
|
|
|
357786 |
+{u'return': {}}
|
|
|
357786 |
|
|
|
357786 |
-image: TEST_DIR/t.IMGFMT
|
|
|
357786 |
+{'execute': 'x-blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'cluster-size': 1048576, 'driver': 'parallels', 'file': {'driver': 'file', 'filename': 'TEST_DIR/PID-t.parallels'}, 'size': 67108864}}}
|
|
|
357786 |
+{u'return': {}}
|
|
|
357786 |
+{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
|
|
|
357786 |
+{u'return': {}}
|
|
|
357786 |
+
|
|
|
357786 |
+image: TEST_IMG
|
|
|
357786 |
file format: IMGFMT
|
|
|
357786 |
virtual size: 64M (67108864 bytes)
|
|
|
357786 |
|
|
|
357786 |
=== Successful image creation (with non-default options) ===
|
|
|
357786 |
|
|
|
357786 |
-Testing:
|
|
|
357786 |
-QMP_VERSION
|
|
|
357786 |
-{"return": {}}
|
|
|
357786 |
-{"return": {}}
|
|
|
357786 |
-{"return": {}}
|
|
|
357786 |
-{"return": {}}
|
|
|
357786 |
-{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false}}
|
|
|
357786 |
+{'execute': 'x-blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'size': 0, 'driver': 'file', 'filename': 'TEST_DIR/PID-t.parallels'}}}
|
|
|
357786 |
+{u'return': {}}
|
|
|
357786 |
+{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
|
|
|
357786 |
+{u'return': {}}
|
|
|
357786 |
+
|
|
|
357786 |
+{'execute': 'x-blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'cluster-size': 65536, 'driver': 'parallels', 'file': {'driver': 'file', 'filename': 'TEST_DIR/PID-t.parallels'}, 'size': 33554432}}}
|
|
|
357786 |
+{u'return': {}}
|
|
|
357786 |
+{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
|
|
|
357786 |
+{u'return': {}}
|
|
|
357786 |
|
|
|
357786 |
-image: TEST_DIR/t.IMGFMT
|
|
|
357786 |
+image: TEST_IMG
|
|
|
357786 |
file format: IMGFMT
|
|
|
357786 |
virtual size: 32M (33554432 bytes)
|
|
|
357786 |
|
|
|
357786 |
=== Invalid BlockdevRef ===
|
|
|
357786 |
|
|
|
357786 |
-Testing:
|
|
|
357786 |
-QMP_VERSION
|
|
|
357786 |
-{"return": {}}
|
|
|
357786 |
-{"error": {"class": "GenericError", "desc": "Cannot find device=this doesn't exist nor node_name=this doesn't exist"}}
|
|
|
357786 |
-{"return": {}}
|
|
|
357786 |
-{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false}}
|
|
|
357786 |
-
|
|
|
357786 |
+{'execute': 'x-blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'driver': 'parallels', 'file': "this doesn't exist", 'size': 33554432}}}
|
|
|
357786 |
+{u'return': {}}
|
|
|
357786 |
+Job failed: Cannot find device=this doesn't exist nor node_name=this doesn't exist
|
|
|
357786 |
+{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
|
|
|
357786 |
+{u'return': {}}
|
|
|
357786 |
|
|
|
357786 |
=== Zero size ===
|
|
|
357786 |
|
|
|
357786 |
-Testing: -blockdev driver=file,filename=TEST_DIR/t.IMGFMT,node-name=node0
|
|
|
357786 |
-QMP_VERSION
|
|
|
357786 |
-{"return": {}}
|
|
|
357786 |
-{"return": {}}
|
|
|
357786 |
-{"return": {}}
|
|
|
357786 |
-{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false}}
|
|
|
357786 |
+{'execute': 'x-blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'driver': 'parallels', 'file': 'node0', 'size': 0}}}
|
|
|
357786 |
+{u'return': {}}
|
|
|
357786 |
+{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
|
|
|
357786 |
+{u'return': {}}
|
|
|
357786 |
|
|
|
357786 |
-image: TEST_DIR/t.IMGFMT
|
|
|
357786 |
+image: TEST_IMG
|
|
|
357786 |
file format: IMGFMT
|
|
|
357786 |
virtual size: 0 (0 bytes)
|
|
|
357786 |
|
|
|
357786 |
=== Maximum size ===
|
|
|
357786 |
|
|
|
357786 |
-Testing: -blockdev driver=file,filename=TEST_DIR/t.IMGFMT,node-name=node0
|
|
|
357786 |
-QMP_VERSION
|
|
|
357786 |
-{"return": {}}
|
|
|
357786 |
-{"return": {}}
|
|
|
357786 |
-{"return": {}}
|
|
|
357786 |
-{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false}}
|
|
|
357786 |
+{'execute': 'x-blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'driver': 'parallels', 'file': 'node0', 'size': 4503599627369984}}}
|
|
|
357786 |
+{u'return': {}}
|
|
|
357786 |
+{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
|
|
|
357786 |
+{u'return': {}}
|
|
|
357786 |
|
|
|
357786 |
-image: TEST_DIR/t.IMGFMT
|
|
|
357786 |
+image: TEST_IMG
|
|
|
357786 |
file format: IMGFMT
|
|
|
357786 |
virtual size: 4096T (4503599627369984 bytes)
|
|
|
357786 |
|
|
|
357786 |
=== Invalid sizes ===
|
|
|
357786 |
|
|
|
357786 |
-Testing: -blockdev driver=file,filename=TEST_DIR/t.IMGFMT,node-name=node0
|
|
|
357786 |
-QMP_VERSION
|
|
|
357786 |
-{"return": {}}
|
|
|
357786 |
-{"error": {"class": "GenericError", "desc": "Image size must be a multiple of 512 bytes"}}
|
|
|
357786 |
-{"error": {"class": "GenericError", "desc": "Image size is too large for this cluster size"}}
|
|
|
357786 |
-{"error": {"class": "GenericError", "desc": "Image size is too large for this cluster size"}}
|
|
|
357786 |
-{"error": {"class": "GenericError", "desc": "Image size is too large for this cluster size"}}
|
|
|
357786 |
-{"error": {"class": "GenericError", "desc": "Image size is too large for this cluster size"}}
|
|
|
357786 |
-{"return": {}}
|
|
|
357786 |
-{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false}}
|
|
|
357786 |
-
|
|
|
357786 |
+{'execute': 'x-blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'driver': 'parallels', 'file': 'node0', 'size': 1234}}}
|
|
|
357786 |
+{u'return': {}}
|
|
|
357786 |
+Job failed: Image size must be a multiple of 512 bytes
|
|
|
357786 |
+{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
|
|
|
357786 |
+{u'return': {}}
|
|
|
357786 |
+
|
|
|
357786 |
+{'execute': 'x-blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'driver': 'parallels', 'file': 'node0', 'size': 18446744073709551104L}}}
|
|
|
357786 |
+{u'return': {}}
|
|
|
357786 |
+Job failed: Image size is too large for this cluster size
|
|
|
357786 |
+{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
|
|
|
357786 |
+{u'return': {}}
|
|
|
357786 |
+
|
|
|
357786 |
+{'execute': 'x-blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'driver': 'parallels', 'file': 'node0', 'size': 9223372036854775808L}}}
|
|
|
357786 |
+{u'return': {}}
|
|
|
357786 |
+Job failed: Image size is too large for this cluster size
|
|
|
357786 |
+{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
|
|
|
357786 |
+{u'return': {}}
|
|
|
357786 |
+
|
|
|
357786 |
+{'execute': 'x-blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'driver': 'parallels', 'file': 'node0', 'size': 9223372036854775296}}}
|
|
|
357786 |
+{u'return': {}}
|
|
|
357786 |
+Job failed: Image size is too large for this cluster size
|
|
|
357786 |
+{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
|
|
|
357786 |
+{u'return': {}}
|
|
|
357786 |
+
|
|
|
357786 |
+{'execute': 'x-blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'driver': 'parallels', 'file': 'node0', 'size': 4503599627370497}}}
|
|
|
357786 |
+{u'return': {}}
|
|
|
357786 |
+Job failed: Image size is too large for this cluster size
|
|
|
357786 |
+{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
|
|
|
357786 |
+{u'return': {}}
|
|
|
357786 |
|
|
|
357786 |
=== Invalid cluster size ===
|
|
|
357786 |
|
|
|
357786 |
-Testing: -blockdev driver=file,filename=TEST_DIR/t.IMGFMT,node-name=node0
|
|
|
357786 |
-QMP_VERSION
|
|
|
357786 |
-{"return": {}}
|
|
|
357786 |
-{"error": {"class": "GenericError", "desc": "Cluster size must be a multiple of 512 bytes"}}
|
|
|
357786 |
-{"error": {"class": "GenericError", "desc": "Cluster size must be a multiple of 512 bytes"}}
|
|
|
357786 |
-{"error": {"class": "GenericError", "desc": "Cluster size is too large"}}
|
|
|
357786 |
-{"error": {"class": "GenericError", "desc": "Cluster size is too large"}}
|
|
|
357786 |
-{"error": {"class": "GenericError", "desc": "Cluster size is too large"}}
|
|
|
357786 |
-{"error": {"class": "GenericError", "desc": "Image size is too large for this cluster size"}}
|
|
|
357786 |
-{"error": {"class": "GenericError", "desc": "Image size is too large for this cluster size"}}
|
|
|
357786 |
-{"return": {}}
|
|
|
357786 |
-{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false}}
|
|
|
357786 |
-
|
|
|
357786 |
-*** done
|
|
|
357786 |
+{'execute': 'x-blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'cluster-size': 1234, 'driver': 'parallels', 'file': 'node0', 'size': 67108864}}}
|
|
|
357786 |
+{u'return': {}}
|
|
|
357786 |
+Job failed: Cluster size must be a multiple of 512 bytes
|
|
|
357786 |
+{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
|
|
|
357786 |
+{u'return': {}}
|
|
|
357786 |
+
|
|
|
357786 |
+{'execute': 'x-blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'cluster-size': 128, 'driver': 'parallels', 'file': 'node0', 'size': 67108864}}}
|
|
|
357786 |
+{u'return': {}}
|
|
|
357786 |
+Job failed: Cluster size must be a multiple of 512 bytes
|
|
|
357786 |
+{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
|
|
|
357786 |
+{u'return': {}}
|
|
|
357786 |
+
|
|
|
357786 |
+{'execute': 'x-blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'cluster-size': 4294967296, 'driver': 'parallels', 'file': 'node0', 'size': 67108864}}}
|
|
|
357786 |
+{u'return': {}}
|
|
|
357786 |
+Job failed: Cluster size is too large
|
|
|
357786 |
+{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
|
|
|
357786 |
+{u'return': {}}
|
|
|
357786 |
+
|
|
|
357786 |
+{'execute': 'x-blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'cluster-size': 9223372036854775808L, 'driver': 'parallels', 'file': 'node0', 'size': 67108864}}}
|
|
|
357786 |
+{u'return': {}}
|
|
|
357786 |
+Job failed: Cluster size is too large
|
|
|
357786 |
+{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
|
|
|
357786 |
+{u'return': {}}
|
|
|
357786 |
+
|
|
|
357786 |
+{'execute': 'x-blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'cluster-size': 18446744073709551104L, 'driver': 'parallels', 'file': 'node0', 'size': 67108864}}}
|
|
|
357786 |
+{u'return': {}}
|
|
|
357786 |
+Job failed: Cluster size is too large
|
|
|
357786 |
+{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
|
|
|
357786 |
+{u'return': {}}
|
|
|
357786 |
+
|
|
|
357786 |
+{'execute': 'x-blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'cluster-size': 0, 'driver': 'parallels', 'file': 'node0', 'size': 67108864}}}
|
|
|
357786 |
+{u'return': {}}
|
|
|
357786 |
+Job failed: Image size is too large for this cluster size
|
|
|
357786 |
+{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
|
|
|
357786 |
+{u'return': {}}
|
|
|
357786 |
+
|
|
|
357786 |
+{'execute': 'x-blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'cluster-size': 512, 'driver': 'parallels', 'file': 'node0', 'size': 281474976710656}}}
|
|
|
357786 |
+{u'return': {}}
|
|
|
357786 |
+Job failed: Image size is too large for this cluster size
|
|
|
357786 |
+{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
|
|
|
357786 |
+{u'return': {}}
|
|
|
357786 |
+
|
|
|
357786 |
diff --git a/tests/qemu-iotests/group b/tests/qemu-iotests/group
|
|
|
357786 |
index b920097..3753b13 100644
|
|
|
357786 |
--- a/tests/qemu-iotests/group
|
|
|
357786 |
+++ b/tests/qemu-iotests/group
|
|
|
357786 |
@@ -210,9 +210,9 @@
|
|
|
357786 |
209 rw auto quick
|
|
|
357786 |
210 rw auto
|
|
|
357786 |
211 rw auto quick
|
|
|
357786 |
+212 rw auto quick
|
|
|
357786 |
# TODO The following commented out tests need to be reworked to work
|
|
|
357786 |
# with the x-blockdev-create job
|
|
|
357786 |
-#212 rw auto quick
|
|
|
357786 |
#213 rw auto quick
|
|
|
357786 |
214 rw auto
|
|
|
357786 |
215 rw auto quick
|
|
|
357786 |
--
|
|
|
357786 |
1.8.3.1
|
|
|
357786 |
|