From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:55746) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YQoDF-0006du-MG for qemu-devel@nongnu.org; Wed, 25 Feb 2015 21:30:08 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1YQoDC-0003vR-S7 for qemu-devel@nongnu.org; Wed, 25 Feb 2015 21:30:05 -0500 Date: Thu, 26 Feb 2015 10:29:52 +0800 From: Fam Zheng Message-ID: <20150226022952.GE10137@ad.nay.redhat.com> References: <1424792164-2130-1-git-send-email-mreitz@redhat.com> <1424792164-2130-3-git-send-email-mreitz@redhat.com> <20150225070421.GF5293@ad.nay.redhat.com> <54EDD5D7.2080504@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <54EDD5D7.2080504@redhat.com> Subject: Re: [Qemu-devel] [PATCH v3 02/11] iotests: Do not redirect qemu's stderr List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Max Reitz Cc: Kevin Wolf , qemu-block@nongnu.org, qemu-devel@nongnu.org, Markus Armbruster , Stefan Hajnoczi , Paolo Bonzini On Wed, 02/25 09:01, Max Reitz wrote: > On 2015-02-25 at 02:04, Fam Zheng wrote: > >On Tue, 02/24 10:35, Max Reitz wrote: > >>Redirecting qemu's stderr to stdout makes working with the stderr output > >>difficult due to the other file descriptor magic performed in > >>_launch_qemu ("ambiguous redirect"). > >> > >>There is no harm in leaving stderr on stderr, so do it. > >> > >>Signed-off-by: Max Reitz > >>--- > >>If someone has a better solution, especially regarding the redirection > >>to a subshell here (tests 091 and 109) and in the next patch, I'd be > >>very grateful. All of my efforts to pipe the output of the _launch_qemu > >>function resulted in said error ("ambiguous redirect"), so I had to keep > >>it on stderr and I did not find another way to pipe stderr to another > >>program. > >It will be much less hacky if we compare to a separate stderr reference > >(tests/qemu-iotests/109.err), similiar to QAPI tests, or just ignore stderr > >where we don't really care. > > Hm, I'll take a shot at it. I hope it'll work; but even if it does, it > doesn't feel really right. I'd rather like having stdout and stderr mixed > because that gives us context for the stderr messages (without having to add > a ton of echo 1>&2 into the tests); also, doing so will probably result in a > lot of tests needing to be fixed (because then it won't only potentially > break tests using common.qemu, but every test which outputs something to > stderr). So in the end I'm not sure whether this is a better solution... It can be optional and only used where it makes our life easier. But in this case I don't mind simply dropping the friendly warning about implicit raw format probe - the test script does this intentionally. Are you sure the process substitution "2> >(grep ...)" in this patch produces deterministic output? Because two processes at both ends of the pipe write to stdout... Fam > > Max > > >>--- > >> tests/qemu-iotests/091 | 3 +- > >> tests/qemu-iotests/109 | 3 +- > >> tests/qemu-iotests/109.out | 66 +++++++++++++++++++++--------------------- > >> tests/qemu-iotests/common.qemu | 1 - > >> 4 files changed, 37 insertions(+), 36 deletions(-) > >> > >>diff --git a/tests/qemu-iotests/091 b/tests/qemu-iotests/091 > >>index 32bbd56..caea1ce 100755 > >>--- a/tests/qemu-iotests/091 > >>+++ b/tests/qemu-iotests/091 > >>@@ -68,7 +68,8 @@ echo > >> echo === Starting QEMU VM2 === > >> echo > >> _launch_qemu -drive file="${TEST_IMG}",cache=${CACHEMODE},id=disk \ > >>- -incoming "exec: cat '${MIG_FIFO}'" > >>+ -incoming "exec: cat '${MIG_FIFO}'" \ > >>+ 2> >(grep -v 'cat: write error') > >> h2=$QEMU_HANDLE > >> echo > >>diff --git a/tests/qemu-iotests/109 b/tests/qemu-iotests/109 > >>index 0b668da..5a23862 100755 > >>--- a/tests/qemu-iotests/109 > >>+++ b/tests/qemu-iotests/109 > >>@@ -53,7 +53,8 @@ function run_qemu() > >> local qmp_format="$3" > >> local qmp_event="$4" > >>- _launch_qemu -drive file="${source_img}",format=raw,cache=${CACHEMODE},id=src > >>+ _launch_qemu -drive file="${source_img}",format=raw,cache=${CACHEMODE},id=src \ > >>+ 2> >(_filter_testdir | _filter_imgfmt) > >> _send_qemu_cmd $QEMU_HANDLE "{ 'execute': 'qmp_capabilities' }" "return" > >> _send_qemu_cmd $QEMU_HANDLE \ > >>diff --git a/tests/qemu-iotests/109.out b/tests/qemu-iotests/109.out > >>index 7db92c9..9dd1d19 100644 > >>--- a/tests/qemu-iotests/109.out > >>+++ b/tests/qemu-iotests/109.out > >>@@ -5,13 +5,13 @@ QA output created by 109 > >> Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 > >> Formatting 'TEST_DIR/t.raw.src', fmt=IMGFMT size=67108864 > >> {"return": {}} > >>-WARNING: Image format was not specified for 'TEST_DIR/t.raw' and probing guessed raw. > >>-Automatically detecting the format is dangerous for raw images, write operations on block 0 will be restricted. > >>-Specify the 'raw' format explicitly to remove the restrictions. > >> {"return": {}} > >> {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "BLOCK_JOB_ERROR", "data": {"device": "src", "operation": "write", "action": "report"}} > >> {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "BLOCK_JOB_COMPLETED", "data": {"device": "src", "len": 1024, "offset": 0, "speed": 0, "type": "mirror", "error": "Operation not permitted"}} > >> {"return": []} > >>+WARNING: Image format was not specified for 'TEST_DIR/t.IMGFMT' and probing guessed IMGFMT. > >>+ Automatically detecting the format is dangerous for IMGFMT images, write operations on block 0 will be restricted. > >>+ Specify the 'IMGFMT' format explicitly to remove the restrictions. > >> read 65536/65536 bytes at offset 0 > >> 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) > >> {"return": {}} > >>@@ -26,13 +26,13 @@ Images are identical. > >> Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 > >> Formatting 'TEST_DIR/t.raw.src', fmt=IMGFMT size=67108864 > >> {"return": {}} > >>-WARNING: Image format was not specified for 'TEST_DIR/t.raw' and probing guessed raw. > >>-Automatically detecting the format is dangerous for raw images, write operations on block 0 will be restricted. > >>-Specify the 'raw' format explicitly to remove the restrictions. > >> {"return": {}} > >> {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "BLOCK_JOB_ERROR", "data": {"device": "src", "operation": "write", "action": "report"}} > >> {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "BLOCK_JOB_COMPLETED", "data": {"device": "src", "len": 197120, "offset": 0, "speed": 0, "type": "mirror", "error": "Operation not permitted"}} > >> {"return": []} > >>+WARNING: Image format was not specified for 'TEST_DIR/t.IMGFMT' and probing guessed IMGFMT. > >>+ Automatically detecting the format is dangerous for IMGFMT images, write operations on block 0 will be restricted. > >>+ Specify the 'IMGFMT' format explicitly to remove the restrictions. > >> read 65536/65536 bytes at offset 0 > >> 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) > >> {"return": {}} > >>@@ -47,13 +47,13 @@ Images are identical. > >> Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 > >> Formatting 'TEST_DIR/t.raw.src', fmt=IMGFMT size=67108864 > >> {"return": {}} > >>-WARNING: Image format was not specified for 'TEST_DIR/t.raw' and probing guessed raw. > >>-Automatically detecting the format is dangerous for raw images, write operations on block 0 will be restricted. > >>-Specify the 'raw' format explicitly to remove the restrictions. > >> {"return": {}} > >> {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "BLOCK_JOB_ERROR", "data": {"device": "src", "operation": "write", "action": "report"}} > >> {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "BLOCK_JOB_COMPLETED", "data": {"device": "src", "len": 327680, "offset": 0, "speed": 0, "type": "mirror", "error": "Operation not permitted"}} > >> {"return": []} > >>+WARNING: Image format was not specified for 'TEST_DIR/t.IMGFMT' and probing guessed IMGFMT. > >>+ Automatically detecting the format is dangerous for IMGFMT images, write operations on block 0 will be restricted. > >>+ Specify the 'IMGFMT' format explicitly to remove the restrictions. > >> read 65536/65536 bytes at offset 0 > >> 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) > >> {"return": {}} > >>@@ -68,13 +68,13 @@ Images are identical. > >> Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 > >> Formatting 'TEST_DIR/t.raw.src', fmt=IMGFMT size=67108864 > >> {"return": {}} > >>-WARNING: Image format was not specified for 'TEST_DIR/t.raw' and probing guessed raw. > >>-Automatically detecting the format is dangerous for raw images, write operations on block 0 will be restricted. > >>-Specify the 'raw' format explicitly to remove the restrictions. > >> {"return": {}} > >> {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "BLOCK_JOB_ERROR", "data": {"device": "src", "operation": "write", "action": "report"}} > >> {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "BLOCK_JOB_COMPLETED", "data": {"device": "src", "len": 1024, "offset": 0, "speed": 0, "type": "mirror", "error": "Operation not permitted"}} > >> {"return": []} > >>+WARNING: Image format was not specified for 'TEST_DIR/t.IMGFMT' and probing guessed IMGFMT. > >>+ Automatically detecting the format is dangerous for IMGFMT images, write operations on block 0 will be restricted. > >>+ Specify the 'IMGFMT' format explicitly to remove the restrictions. > >> read 65536/65536 bytes at offset 0 > >> 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) > >> {"return": {}} > >>@@ -89,13 +89,13 @@ Images are identical. > >> Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 > >> Formatting 'TEST_DIR/t.raw.src', fmt=IMGFMT size=67108864 > >> {"return": {}} > >>-WARNING: Image format was not specified for 'TEST_DIR/t.raw' and probing guessed raw. > >>-Automatically detecting the format is dangerous for raw images, write operations on block 0 will be restricted. > >>-Specify the 'raw' format explicitly to remove the restrictions. > >> {"return": {}} > >> {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "BLOCK_JOB_ERROR", "data": {"device": "src", "operation": "write", "action": "report"}} > >> {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "BLOCK_JOB_COMPLETED", "data": {"device": "src", "len": 65536, "offset": 0, "speed": 0, "type": "mirror", "error": "Operation not permitted"}} > >> {"return": []} > >>+WARNING: Image format was not specified for 'TEST_DIR/t.IMGFMT' and probing guessed IMGFMT. > >>+ Automatically detecting the format is dangerous for IMGFMT images, write operations on block 0 will be restricted. > >>+ Specify the 'IMGFMT' format explicitly to remove the restrictions. > >> read 65536/65536 bytes at offset 0 > >> 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) > >> {"return": {}} > >>@@ -110,13 +110,13 @@ Images are identical. > >> Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 > >> Formatting 'TEST_DIR/t.raw.src', fmt=IMGFMT size=67108864 > >> {"return": {}} > >>-WARNING: Image format was not specified for 'TEST_DIR/t.raw' and probing guessed raw. > >>-Automatically detecting the format is dangerous for raw images, write operations on block 0 will be restricted. > >>-Specify the 'raw' format explicitly to remove the restrictions. > >> {"return": {}} > >> {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "BLOCK_JOB_ERROR", "data": {"device": "src", "operation": "write", "action": "report"}} > >> {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "BLOCK_JOB_COMPLETED", "data": {"device": "src", "len": 2560, "offset": 0, "speed": 0, "type": "mirror", "error": "Operation not permitted"}} > >> {"return": []} > >>+WARNING: Image format was not specified for 'TEST_DIR/t.IMGFMT' and probing guessed IMGFMT. > >>+ Automatically detecting the format is dangerous for IMGFMT images, write operations on block 0 will be restricted. > >>+ Specify the 'IMGFMT' format explicitly to remove the restrictions. > >> read 65536/65536 bytes at offset 0 > >> 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) > >> {"return": {}} > >>@@ -130,13 +130,13 @@ Images are identical. > >> Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 > >> {"return": {}} > >>-WARNING: Image format was not specified for 'TEST_DIR/t.raw' and probing guessed raw. > >>-Automatically detecting the format is dangerous for raw images, write operations on block 0 will be restricted. > >>-Specify the 'raw' format explicitly to remove the restrictions. > >> {"return": {}} > >> {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "BLOCK_JOB_ERROR", "data": {"device": "src", "operation": "write", "action": "report"}} > >> {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "BLOCK_JOB_COMPLETED", "data": {"device": "src", "len": 2560, "offset": 0, "speed": 0, "type": "mirror", "error": "Operation not permitted"}} > >> {"return": []} > >>+WARNING: Image format was not specified for 'TEST_DIR/t.IMGFMT' and probing guessed IMGFMT. > >>+ Automatically detecting the format is dangerous for IMGFMT images, write operations on block 0 will be restricted. > >>+ Specify the 'IMGFMT' format explicitly to remove the restrictions. > >> read 65536/65536 bytes at offset 0 > >> 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) > >> {"return": {}} > >>@@ -151,13 +151,13 @@ Images are identical. > >> Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 > >> {"return": {}} > >>-WARNING: Image format was not specified for 'TEST_DIR/t.raw' and probing guessed raw. > >>-Automatically detecting the format is dangerous for raw images, write operations on block 0 will be restricted. > >>-Specify the 'raw' format explicitly to remove the restrictions. > >> {"return": {}} > >> {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "BLOCK_JOB_ERROR", "data": {"device": "src", "operation": "write", "action": "report"}} > >> {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "BLOCK_JOB_COMPLETED", "data": {"device": "src", "len": 31457280, "offset": 0, "speed": 0, "type": "mirror", "error": "Operation not permitted"}} > >> {"return": []} > >>+WARNING: Image format was not specified for 'TEST_DIR/t.IMGFMT' and probing guessed IMGFMT. > >>+ Automatically detecting the format is dangerous for IMGFMT images, write operations on block 0 will be restricted. > >>+ Specify the 'IMGFMT' format explicitly to remove the restrictions. > >> read 65536/65536 bytes at offset 0 > >> 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) > >> {"return": {}} > >>@@ -172,13 +172,13 @@ Images are identical. > >> Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 > >> {"return": {}} > >>-WARNING: Image format was not specified for 'TEST_DIR/t.raw' and probing guessed raw. > >>-Automatically detecting the format is dangerous for raw images, write operations on block 0 will be restricted. > >>-Specify the 'raw' format explicitly to remove the restrictions. > >> {"return": {}} > >> {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "BLOCK_JOB_ERROR", "data": {"device": "src", "operation": "write", "action": "report"}} > >> {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "BLOCK_JOB_COMPLETED", "data": {"device": "src", "len": 327680, "offset": 0, "speed": 0, "type": "mirror", "error": "Operation not permitted"}} > >> {"return": []} > >>+WARNING: Image format was not specified for 'TEST_DIR/t.IMGFMT' and probing guessed IMGFMT. > >>+ Automatically detecting the format is dangerous for IMGFMT images, write operations on block 0 will be restricted. > >>+ Specify the 'IMGFMT' format explicitly to remove the restrictions. > >> read 65536/65536 bytes at offset 0 > >> 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) > >> {"return": {}} > >>@@ -193,13 +193,13 @@ Images are identical. > >> Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 > >> {"return": {}} > >>-WARNING: Image format was not specified for 'TEST_DIR/t.raw' and probing guessed raw. > >>-Automatically detecting the format is dangerous for raw images, write operations on block 0 will be restricted. > >>-Specify the 'raw' format explicitly to remove the restrictions. > >> {"return": {}} > >> {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "BLOCK_JOB_ERROR", "data": {"device": "src", "operation": "write", "action": "report"}} > >> {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "BLOCK_JOB_COMPLETED", "data": {"device": "src", "len": 2048, "offset": 0, "speed": 0, "type": "mirror", "error": "Operation not permitted"}} > >> {"return": []} > >>+WARNING: Image format was not specified for 'TEST_DIR/t.IMGFMT' and probing guessed IMGFMT. > >>+ Automatically detecting the format is dangerous for IMGFMT images, write operations on block 0 will be restricted. > >>+ Specify the 'IMGFMT' format explicitly to remove the restrictions. > >> read 65536/65536 bytes at offset 0 > >> 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) > >> {"return": {}} > >>@@ -214,12 +214,12 @@ Images are identical. > >> Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 > >> {"return": {}} > >>-WARNING: Image format was not specified for 'TEST_DIR/t.raw' and probing guessed raw. > >>-Automatically detecting the format is dangerous for raw images, write operations on block 0 will be restricted. > >>-Specify the 'raw' format explicitly to remove the restrictions. > >> {"return": {}} > >> {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "BLOCK_JOB_READY", "data": {"device": "src", "len": 512, "offset": 512, "speed": 0, "type": "mirror"}} > >> {"return": [{"io-status": "ok", "device": "src", "busy": false, "len": 512, "offset": 512, "paused": false, "speed": 0, "ready": true, "type": "mirror"}]} > >>+WARNING: Image format was not specified for 'TEST_DIR/t.IMGFMT' and probing guessed IMGFMT. > >>+ Automatically detecting the format is dangerous for IMGFMT images, write operations on block 0 will be restricted. > >>+ Specify the 'IMGFMT' format explicitly to remove the restrictions. > >> Warning: Image size mismatch! > >> Images are identical. > >> {"return": {}} > >>diff --git a/tests/qemu-iotests/common.qemu b/tests/qemu-iotests/common.qemu > >>index 4e1996c..5f10c1e 100644 > >>--- a/tests/qemu-iotests/common.qemu > >>+++ b/tests/qemu-iotests/common.qemu > >>@@ -155,7 +155,6 @@ function _launch_qemu() > >> "${QEMU}" -nographic -serial none ${comm} -machine accel=qtest "${@}" \ > >> >"${fifo_out}" \ > >>- 2>&1 \ > >> <"${fifo_in}" & > >> QEMU_PID[${_QEMU_HANDLE}]=$! > >>-- > >>2.1.0 > >> > >> >