mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-09 02:24:58 -06:00

Test 162 recently started failing for me for no obvious reasons (I did not spot any suspicious commits in this area), but looking in the 162.out.bad log file, there was a suspicious message at the end: qemu-nbd: Cannot lock pid file: Resource temporarily unavailable And indeed, the test starts the NBD server two times, without stopping the first server before running the second one, so the second one can indeed fail to lock the PID file. Thus let's make sure to stop the first server before the test continues with the second one. With this change, the test works fine for me again. Signed-off-by: Thomas Huth <thuth@redhat.com> Message-ID: <20250225070650.387638-1-thuth@redhat.com> Reviewed-by: Eric Blake <eblake@redhat.com> Signed-off-by: Eric Blake <eblake@redhat.com>
114 lines
3.5 KiB
Bash
Executable file
114 lines
3.5 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
# group: quick
|
|
#
|
|
# Test case for specifying runtime options of the wrong type to some
|
|
# block drivers
|
|
#
|
|
# Copyright (C) 2016 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=hreitz@redhat.com
|
|
|
|
seq="$(basename $0)"
|
|
echo "QA output created by $seq"
|
|
|
|
status=1 # failure is the default!
|
|
|
|
_cleanup()
|
|
{
|
|
rm -f "${TEST_DIR}/qemu-nbd.pid"
|
|
rm -f 42
|
|
}
|
|
trap "_cleanup; exit \$status" 0 1 2 3 15
|
|
|
|
# get standard environment, filters and checks
|
|
. ./common.rc
|
|
. ./common.filter
|
|
|
|
_supported_fmt generic
|
|
_require_drivers ssh
|
|
|
|
echo
|
|
echo '=== NBD ==='
|
|
# NBD expects all of its arguments to be strings
|
|
|
|
# So this should not crash
|
|
$QEMU_IMG info 'json:{"driver": "nbd", "host": -1}'
|
|
|
|
# And this should not treat @port as if it had not been specified
|
|
# (We need to set up a server here, because the error message for "Connection
|
|
# refused" does not contain the destination port)
|
|
|
|
# Launching qemu-nbd is done in a loop: We try to set up an NBD server on some
|
|
# random port and continue until success, i.e. until we have found a port that
|
|
# is not in use yet.
|
|
while true; do
|
|
port=$((RANDOM + 32768))
|
|
if $QEMU_NBD -p $port -f raw --fork null-co:// 2> /dev/null; then
|
|
break
|
|
fi
|
|
done
|
|
|
|
$QEMU_IMG info "json:{'driver': 'nbd', 'host': 'localhost', 'port': $port}" \
|
|
| grep '^image' | sed -e "s/$port/PORT/"
|
|
_stop_nbd_server
|
|
|
|
# This is a test for NBD's bdrv_refresh_filename() implementation: It expects
|
|
# either host or path to be set, but it must not assume that they are set to
|
|
# strings in the options QDict
|
|
$QEMU_NBD -k "$PWD/42" -f raw --fork null-co://
|
|
$QEMU_IMG info 'json:{"driver": "nbd", "path": 42}' | grep '^image'
|
|
rm -f 42
|
|
|
|
|
|
echo
|
|
echo '=== SSH ==='
|
|
# SSH expects all of its arguments to be strings, except for @port, which is
|
|
# expected to be an integer
|
|
|
|
# So "0" should be converted to an integer here (instead of crashing)
|
|
$QEMU_IMG info 'json:{"driver": "ssh", "host": "localhost", "port": "0", "path": "/foo"}'
|
|
# The same, basically (all values for --image-opts are seen as strings in qemu)
|
|
$QEMU_IMG info --image-opts \
|
|
driver=ssh,host=localhost,port=0,path=/foo
|
|
|
|
# This, however, should fail because of the wrong type
|
|
$QEMU_IMG info 'json:{"driver": "ssh", "host": "localhost", "port": 0.42, "path": "/foo"}'
|
|
# Not really the same: Here, "0.42" will be passed instead of 0.42, but still,
|
|
# qemu should not try to convert "0.42" to an integer
|
|
$QEMU_IMG info --image-opts \
|
|
driver=ssh,host=localhost,port=0.42,path=/foo
|
|
|
|
|
|
echo
|
|
echo '=== blkdebug ==='
|
|
# blkdebug expects all of its arguments to be strings, but its
|
|
# bdrv_refresh_filename() implementation should not assume that they have been
|
|
# passed as strings in the original options QDict.
|
|
# So this should emit blkdebug:42:null-co:// as the filename:
|
|
touch 42
|
|
$QEMU_IMG info 'json:{"driver": "blkdebug", "config": 42,
|
|
"image.driver": "null-co"}' \
|
|
| grep '^image'
|
|
rm -f 42
|
|
|
|
|
|
# success, all done
|
|
echo
|
|
echo '*** done'
|
|
rm -f $seq.full
|
|
status=0
|