This requires some changes to keep iotests 104 and 207 working. qemu-img info in 104 will now return a filename including the user name and the port, which need to be filtered by adjusting REMOTE_TEST_DIR in common.rc. This additional information has to be marked optional, however (which is simple as REMOTE_TEST_DIR is a regex), because otherwise 197 and 215 would fail: They use it (indirectly) to filter qemu-img create output which contains a backing filename they have passed to it -- which probably does not contain a user name or port number. The problem in 207 is a nice one to have: qemu-img info used to return json:{} filenames, but with this patch it returns nice plain ones. We now need to adjust the filtering to hide the user name (and port number while we are at it). The simplest way to do this is to include both in iotests.remote_filename() so that bdrv_refresh_filename() will not change it, and then iotests.img_info_log() will filter it correctly automatically. Signed-off-by: Max Reitz <mreitz@redhat.com> Tested-by: Richard W.M. Jones <rjones@redhat.com> Message-id: 20190225190828.17726-2-mreitz@redhat.com Signed-off-by: Max Reitz <mreitz@redhat.com>
222 lines
7.6 KiB
Python
Executable file
222 lines
7.6 KiB
Python
Executable file
#!/usr/bin/env python
|
|
#
|
|
# Test ssh image creation
|
|
#
|
|
# Copyright (C) 2018 Red Hat, Inc.
|
|
#
|
|
# Creator/Owner: Kevin Wolf <kwolf@redhat.com>
|
|
#
|
|
# 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/>.
|
|
#
|
|
|
|
import iotests
|
|
import subprocess
|
|
import re
|
|
|
|
iotests.verify_image_format(supported_fmts=['raw'])
|
|
iotests.verify_protocol(supported=['ssh'])
|
|
|
|
def filter_hash(qmsg):
|
|
def _filter(key, value):
|
|
if key == 'hash' and re.match('[0-9a-f]+', value):
|
|
return 'HASH'
|
|
return value
|
|
return iotests.filter_qmp(qmsg, _filter)
|
|
|
|
def blockdev_create(vm, options):
|
|
result = vm.qmp_log('blockdev-create', job_id='job0', options=options,
|
|
filters=[iotests.filter_qmp_testfiles, filter_hash])
|
|
|
|
if 'return' in result:
|
|
assert result['return'] == {}
|
|
vm.run_job('job0')
|
|
iotests.log("")
|
|
|
|
with iotests.FilePath('t.img') as disk_path, \
|
|
iotests.VM() as vm:
|
|
|
|
remote_path = iotests.remote_filename(disk_path)
|
|
|
|
#
|
|
# Successful image creation (defaults)
|
|
#
|
|
iotests.log("=== Successful image creation (defaults) ===")
|
|
iotests.log("")
|
|
|
|
vm.launch()
|
|
blockdev_create(vm, { 'driver': 'ssh',
|
|
'location': {
|
|
'path': disk_path,
|
|
'server': {
|
|
'host': '127.0.0.1',
|
|
'port': '22'
|
|
}
|
|
},
|
|
'size': 4194304 })
|
|
vm.shutdown()
|
|
|
|
iotests.img_info_log(remote_path)
|
|
iotests.log("")
|
|
iotests.img_info_log(disk_path)
|
|
|
|
#
|
|
# Test host-key-check options
|
|
#
|
|
iotests.log("=== Test host-key-check options ===")
|
|
iotests.log("")
|
|
|
|
vm.launch()
|
|
blockdev_create(vm, { 'driver': 'ssh',
|
|
'location': {
|
|
'path': disk_path,
|
|
'server': {
|
|
'host': '127.0.0.1',
|
|
'port': '22'
|
|
},
|
|
'host-key-check': {
|
|
'mode': 'none'
|
|
}
|
|
},
|
|
'size': 8388608 })
|
|
vm.shutdown()
|
|
|
|
iotests.img_info_log(remote_path)
|
|
|
|
vm.launch()
|
|
blockdev_create(vm, { 'driver': 'ssh',
|
|
'location': {
|
|
'path': disk_path,
|
|
'server': {
|
|
'host': '127.0.0.1',
|
|
'port': '22'
|
|
},
|
|
'host-key-check': {
|
|
'mode': 'known_hosts'
|
|
}
|
|
},
|
|
'size': 4194304 })
|
|
vm.shutdown()
|
|
|
|
iotests.img_info_log(remote_path)
|
|
|
|
md5_key = subprocess.check_output(
|
|
'ssh-keyscan -t rsa 127.0.0.1 2>/dev/null | grep -v "\\^#" | ' +
|
|
'cut -d" " -f3 | base64 -d | md5sum -b | cut -d" " -f1',
|
|
shell=True).rstrip().decode('ascii')
|
|
|
|
vm.launch()
|
|
blockdev_create(vm, { 'driver': 'ssh',
|
|
'location': {
|
|
'path': disk_path,
|
|
'server': {
|
|
'host': '127.0.0.1',
|
|
'port': '22'
|
|
},
|
|
'host-key-check': {
|
|
'mode': 'hash',
|
|
'type': 'md5',
|
|
'hash': 'wrong',
|
|
}
|
|
},
|
|
'size': 2097152 })
|
|
blockdev_create(vm, { 'driver': 'ssh',
|
|
'location': {
|
|
'path': disk_path,
|
|
'server': {
|
|
'host': '127.0.0.1',
|
|
'port': '22'
|
|
},
|
|
'host-key-check': {
|
|
'mode': 'hash',
|
|
'type': 'md5',
|
|
'hash': md5_key,
|
|
}
|
|
},
|
|
'size': 8388608 })
|
|
vm.shutdown()
|
|
|
|
iotests.img_info_log(remote_path)
|
|
|
|
sha1_key = subprocess.check_output(
|
|
'ssh-keyscan -t rsa 127.0.0.1 2>/dev/null | grep -v "\\^#" | ' +
|
|
'cut -d" " -f3 | base64 -d | sha1sum -b | cut -d" " -f1',
|
|
shell=True).rstrip().decode('ascii')
|
|
|
|
vm.launch()
|
|
blockdev_create(vm, { 'driver': 'ssh',
|
|
'location': {
|
|
'path': disk_path,
|
|
'server': {
|
|
'host': '127.0.0.1',
|
|
'port': '22'
|
|
},
|
|
'host-key-check': {
|
|
'mode': 'hash',
|
|
'type': 'sha1',
|
|
'hash': 'wrong',
|
|
}
|
|
},
|
|
'size': 2097152 })
|
|
blockdev_create(vm, { 'driver': 'ssh',
|
|
'location': {
|
|
'path': disk_path,
|
|
'server': {
|
|
'host': '127.0.0.1',
|
|
'port': '22'
|
|
},
|
|
'host-key-check': {
|
|
'mode': 'hash',
|
|
'type': 'sha1',
|
|
'hash': sha1_key,
|
|
}
|
|
},
|
|
'size': 4194304 })
|
|
vm.shutdown()
|
|
|
|
iotests.img_info_log(remote_path)
|
|
|
|
#
|
|
# Invalid path and user
|
|
#
|
|
iotests.log("=== Invalid path and user ===")
|
|
iotests.log("")
|
|
|
|
vm.launch()
|
|
blockdev_create(vm, { 'driver': 'ssh',
|
|
'location': {
|
|
'path': '/this/is/not/an/existing/path',
|
|
'server': {
|
|
'host': '127.0.0.1',
|
|
'port': '22'
|
|
},
|
|
'host-key-check': {
|
|
'mode': 'none'
|
|
}
|
|
},
|
|
'size': 4194304 })
|
|
blockdev_create(vm, { 'driver': 'ssh',
|
|
'location': {
|
|
'path': disk_path,
|
|
'user': 'invalid user',
|
|
'server': {
|
|
'host': '127.0.0.1',
|
|
'port': '22'
|
|
},
|
|
'host-key-check': {
|
|
'mode': 'none'
|
|
}
|
|
},
|
|
'size': 4194304 })
|
|
vm.shutdown()
|