mirror of https://gitee.com/openkylin/libvirt.git
318 lines
9.9 KiB
Bash
Executable File
318 lines
9.9 KiB
Bash
Executable File
#!/bin/sh
|
|
# Ensure that virsh option parsing doesn't regress
|
|
|
|
# Copyright (C) 2011-2012, 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/>.
|
|
|
|
. "$(dirname $0)/test-lib.sh"
|
|
|
|
test_expensive
|
|
|
|
# If $abs_top_builddir/tools is not early in $PATH, put it there,
|
|
# so that we can safely invoke "virsh" simply with its name.
|
|
case $PATH in
|
|
$abs_top_builddir/tools/src:$abs_top_builddir/tools:*) ;;
|
|
$abs_top_builddir/tools:*) ;;
|
|
*) PATH=$abs_top_builddir/tools:$PATH; export PATH ;;
|
|
esac
|
|
|
|
if test "$VERBOSE" = yes; then
|
|
set -x
|
|
virsh --version
|
|
fi
|
|
|
|
cat <<\EOF > exp-out || framework_failure
|
|
|
|
setvcpus: <domain> trying as domain NAME
|
|
setvcpus: count(optdata): 2
|
|
setvcpus: domain(optdata): test
|
|
setvcpus: found option <domain>: test
|
|
EOF
|
|
|
|
fail=0
|
|
|
|
test_url=test:///default
|
|
|
|
for args in \
|
|
'test 2' \
|
|
'--domain test 2' \
|
|
'--domain=test 2' \
|
|
'test --count 2' \
|
|
'test --count=2' \
|
|
'--domain test --count 2' \
|
|
'--domain=test --count 2' \
|
|
'--domain test --count=2' \
|
|
'--domain=test --count=2' \
|
|
'--count 2 --domain test' \
|
|
'--count 2 --domain=test' \
|
|
'--count=2 --domain test' \
|
|
'--count=2 --domain=test' \
|
|
'--count 2 test' \
|
|
'--count=2 test' \
|
|
; do
|
|
virsh -k0 -d0 -c $test_url setvcpus $args >out 2>>err || fail=1
|
|
LC_ALL=C sort out | compare exp-out - || fail=1
|
|
done
|
|
|
|
# Another complex parsing example
|
|
cat <<\EOF > exp-out || framework_failure
|
|
<domainsnapshot>
|
|
<description>1<2</description>
|
|
<memory file='d,e'/>
|
|
<disks>
|
|
<disk name='vda' snapshot='external'>
|
|
<source file='a&b,c'/>
|
|
</disk>
|
|
<disk name='vdb'/>
|
|
</disks>
|
|
</domainsnapshot>
|
|
|
|
EOF
|
|
virsh -q -c $test_url snapshot-create-as --print-xml test \
|
|
--diskspec 'vda,file=a&b,,c,snapshot=external' --description '1<2' \
|
|
--diskspec vdb --memspec file=d,,e >out 2>>err || fail=1
|
|
compare exp-out out || fail=1
|
|
|
|
cat <<\EOF > exp-out || framework_failure
|
|
<domainsnapshot>
|
|
<name>name</name>
|
|
<description>vda</description>
|
|
<disks>
|
|
<disk name='vdb'/>
|
|
</disks>
|
|
</domainsnapshot>
|
|
|
|
EOF
|
|
virsh -q -c $test_url snapshot-create-as --print-xml test name vda vdb \
|
|
>out 2>>err || fail=1
|
|
compare exp-out out || fail=1
|
|
|
|
cat <<\EOF > exp-out || framework_failure
|
|
<domainsnapshot>
|
|
<name>name</name>
|
|
<description>desc</description>
|
|
<disks>
|
|
<disk name='vda'/>
|
|
<disk name='vdb'/>
|
|
</disks>
|
|
</domainsnapshot>
|
|
|
|
EOF
|
|
for args in \
|
|
'test name desc vda vdb' \
|
|
'test name desc --diskspec vda vdb' \
|
|
'test name desc --diskspec vda --diskspec vdb' \
|
|
'test name desc vda vdb' \
|
|
'test --diskspec vda name --diskspec vdb desc' \
|
|
'--description desc --name name --domain test vda vdb' \
|
|
'--description desc --diskspec vda --name name --domain test vdb' \
|
|
; do
|
|
virsh -q -c $test_url snapshot-create-as --print-xml $args \
|
|
>out 2>>err || fail=1
|
|
compare exp-out out || fail=1
|
|
done
|
|
|
|
test -s err && fail=1
|
|
|
|
# Test a required argv
|
|
cat <<\EOF > exp-err || framework_failure
|
|
error: this function is not supported by the connection driver: virDomainQemuMonitorCommand
|
|
EOF
|
|
virsh -q -c $test_url qemu-monitor-command test a >out 2>err && fail=1
|
|
test -s out && fail=1
|
|
compare exp-err err || fail=1
|
|
|
|
### Test a regular numeric option
|
|
|
|
# Non-numeric value
|
|
cat <<\EOF > exp-err || framework_failure
|
|
error: Numeric value 'abc' for <start> option is malformed or out of range
|
|
EOF
|
|
virsh -q -c $test_url cpu-stats test --start abc >out 2>err && fail=1
|
|
test -s out && fail=1
|
|
compare exp-err err || fail=1
|
|
|
|
# Numeric value with invalid suffix
|
|
cat <<\EOF > exp-err || framework_failure
|
|
error: Numeric value '42WB' for <start> option is malformed or out of range
|
|
EOF
|
|
virsh -q -c $test_url cpu-stats test --start 42WB >out 2>err && fail=1
|
|
test -s out && fail=1
|
|
compare exp-err err || fail=1
|
|
|
|
# Numeric value with valid suffix. Suffixes are not supported for
|
|
# regular numeric options, so this value is rejected
|
|
cat <<\EOF > exp-err || framework_failure
|
|
error: Numeric value '42MB' for <start> option is malformed or out of range
|
|
EOF
|
|
virsh -q -c $test_url cpu-stats test --start 42MB >out 2>err && fail=1
|
|
test -s out && fail=1
|
|
compare exp-err err || fail=1
|
|
|
|
# Numeric value bigger than INT_MAX
|
|
cat <<\EOF > exp-err || framework_failure
|
|
error: Numeric value '2147483648' for <start> option is malformed or out of range
|
|
EOF
|
|
virsh -q -c $test_url cpu-stats test --start 2147483648 >out 2>err && fail=1
|
|
test -s out && fail=1
|
|
compare exp-err err || fail=1
|
|
|
|
# Negative numeric value. The value is not valid for the command
|
|
# we're testing, but it has been parsed correctly
|
|
cat <<\EOF > exp-err || framework_failure
|
|
error: Invalid value for start CPU
|
|
EOF
|
|
virsh -q -c $test_url cpu-stats test --start -1 >out 2>err && fail=1
|
|
test -s out && fail=1
|
|
compare exp-err err || fail=1
|
|
|
|
# Zero. The test driver doesn't support the operation so the command
|
|
# fails, but the value has been parsed correctly
|
|
cat <<\EOF > exp-err || framework_failure
|
|
error: Failed to retrieve CPU statistics for domain 'test'
|
|
error: this function is not supported by the connection driver: virDomainGetCPUStats
|
|
EOF
|
|
virsh -q -c $test_url cpu-stats test --start 0 >out 2>err && fail=1
|
|
test -s out && fail=1
|
|
compare exp-err err || fail=1
|
|
|
|
# Valid numeric value. The test driver doesn't support the operation
|
|
# so the command fails, but the value has been parsed correctly
|
|
cat <<\EOF > exp-err || framework_failure
|
|
error: Failed to retrieve CPU statistics for domain 'test'
|
|
error: this function is not supported by the connection driver: virDomainGetCPUStats
|
|
EOF
|
|
virsh -q -c $test_url cpu-stats test --start 42 >out 2>err && fail=1
|
|
test -s out && fail=1
|
|
compare exp-err err || fail=1
|
|
|
|
### Test a scaled numeric option
|
|
|
|
# Non-numeric value
|
|
cat <<\EOF > exp-err || framework_failure
|
|
error: Scaled numeric value 'abc' for <size> option is malformed or out of range
|
|
EOF
|
|
virsh -q -c $test_url setmaxmem test abc >out 2>err && fail=1
|
|
test -s out && fail=1
|
|
compare exp-err err || fail=1
|
|
|
|
# Numeric value with invalid suffix
|
|
cat <<\EOF > exp-err || framework_failure
|
|
error: Scaled numeric value '42WB' for <size> option is malformed or out of range
|
|
EOF
|
|
virsh -q -c $test_url setmaxmem test 42WB >out 2>err && fail=1
|
|
test -s out && fail=1
|
|
compare exp-err err || fail=1
|
|
|
|
# Numeric value with valid suffix
|
|
virsh -q -c $test_url setmaxmem test 42MB >out 2>err || fail=1
|
|
test -s out && fail=1
|
|
test -s err && fail=1
|
|
|
|
# Numeric value bigger than INT_MAX. No failure here because
|
|
# scaled numeric values are unsigned long long
|
|
virsh -q -c $test_url setmaxmem test 2147483648 >out 2>err || fail=1
|
|
test -s out && fail=1
|
|
test -s err && fail=1
|
|
|
|
# Negative numeric value
|
|
cat <<\EOF > exp-err || framework_failure
|
|
error: Scaled numeric value '-1' for <size> option is malformed or out of range
|
|
EOF
|
|
virsh -q -c $test_url setmaxmem test -1 >out 2>err && fail=1
|
|
test -s out && fail=1
|
|
compare exp-err err || fail=1
|
|
|
|
# Zero. The value is not valid for the command we're testing, but
|
|
# it has been parsed correctly
|
|
cat <<\EOF > exp-err || framework_failure
|
|
error: Unable to change MaxMemorySize
|
|
error: memory in virDomainSetMaxMemory must not be zero
|
|
EOF
|
|
virsh -q -c $test_url setmaxmem test 0 >out 2>err && fail=1
|
|
test -s out && fail=1
|
|
compare exp-err err || fail=1
|
|
|
|
# Numeric value
|
|
virsh -q -c $test_url setmaxmem test 42 >out 2>err || fail=1
|
|
test -s out && fail=1
|
|
test -s err && fail=1
|
|
|
|
### Test the <timeout> option (numeric option converted to ms)
|
|
|
|
# Non-numeric value
|
|
cat <<\EOF > exp-err || framework_failure
|
|
error: Numeric value 'abc' for <timeout> option is malformed or out of range
|
|
EOF
|
|
virsh -q -c $test_url event --all --timeout abc >out 2>err && fail=1
|
|
test -s out && fail=1
|
|
compare exp-err err || fail=1
|
|
|
|
# Numeric value that's too big to be converted to ms and still
|
|
# fit inside an int
|
|
cat <<\EOF > exp-err || framework_failure
|
|
error: Numeric value '2147484' for <timeout> option is malformed or out of range
|
|
EOF
|
|
virsh -q -c $test_url event --all --timeout 2147484 >out 2>err && fail=1
|
|
test -s out && fail=1
|
|
compare exp-err err || fail=1
|
|
|
|
# Numeric value with invalid suffix
|
|
cat <<\EOF > exp-err || framework_failure
|
|
error: Numeric value '42WB' for <timeout> option is malformed or out of range
|
|
EOF
|
|
virsh -q -c $test_url event --all --timeout 42WB >out 2>err && fail=1
|
|
test -s out && fail=1
|
|
compare exp-err err || fail=1
|
|
|
|
# Numeric value with valid suffix. Suffixes are not supported for
|
|
# the <timeout> option, so this value is rejected
|
|
cat <<\EOF > exp-err || framework_failure
|
|
error: Numeric value '42MB' for <timeout> option is malformed or out of range
|
|
EOF
|
|
virsh -q -c $test_url event --all --timeout 42MB >out 2>err && fail=1
|
|
test -s out && fail=1
|
|
compare exp-err err || fail=1
|
|
|
|
# Negative value
|
|
cat <<\EOF > exp-err || framework_failure
|
|
error: Numeric value '-1' for <timeout> option is malformed or out of range
|
|
EOF
|
|
virsh -q -c $test_url event --all --timeout -1 >out 2>err && fail=1
|
|
test -s out && fail=1
|
|
compare exp-err err || fail=1
|
|
|
|
# Zero. This is not a valid timeout, but the value is parsed
|
|
# correctly
|
|
cat <<\EOF > exp-err || framework_failure
|
|
error: Numeric value '0' for <timeout> option is malformed or out of range
|
|
EOF
|
|
virsh -q -c $test_url event --all --timeout 0 >out 2>err && fail=1
|
|
test -s out && fail=1
|
|
compare exp-err err || fail=1
|
|
|
|
# Numeric value. No events will be received and the command will
|
|
# fail after a second, but the value has been parsed correctly
|
|
cat <<\EOF > exp-out || framework_failure
|
|
event loop timed out
|
|
events received: 0
|
|
EOF
|
|
virsh -q -c $test_url event --all --timeout 1 >out 2>err && fail=1
|
|
test -s err && fail=1
|
|
compare exp-out out || fail=1
|
|
|
|
(exit $fail); exit $fail
|