]> git.proxmox.com Git - mirror_qemu.git/blob - tests/qemu-iotests/207
qemu-iotests: Test qcow2 preallocation modes
[mirror_qemu.git] / tests / qemu-iotests / 207
1 #!/usr/bin/env python
2 #
3 # Test ssh image creation
4 #
5 # Copyright (C) 2018 Red Hat, Inc.
6 #
7 # Creator/Owner: Kevin Wolf <kwolf@redhat.com>
8 #
9 # This program is free software; you can redistribute it and/or modify
10 # it under the terms of the GNU General Public License as published by
11 # the Free Software Foundation; either version 2 of the License, or
12 # (at your option) any later version.
13 #
14 # This program is distributed in the hope that it will be useful,
15 # but WITHOUT ANY WARRANTY; without even the implied warranty of
16 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 # GNU General Public License for more details.
18 #
19 # You should have received a copy of the GNU General Public License
20 # along with this program. If not, see <http://www.gnu.org/licenses/>.
21 #
22
23 import iotests
24 import subprocess
25 import re
26
27 iotests.verify_image_format(supported_fmts=['raw'])
28 iotests.verify_protocol(supported=['ssh'])
29
30 def filter_hash(qmsg):
31 def _filter(key, value):
32 if key == 'hash' and re.match('[0-9a-f]+', value):
33 return 'HASH'
34 return value
35 return iotests.filter_qmp(qmsg, _filter)
36
37 def blockdev_create(vm, options):
38 result = vm.qmp_log('blockdev-create', job_id='job0', options=options,
39 filters=[iotests.filter_qmp_testfiles, filter_hash])
40
41 if 'return' in result:
42 assert result['return'] == {}
43 vm.run_job('job0')
44 iotests.log("")
45
46 with iotests.FilePath('t.img') as disk_path, \
47 iotests.VM() as vm:
48
49 remote_path = iotests.remote_filename(disk_path)
50
51 #
52 # Successful image creation (defaults)
53 #
54 iotests.log("=== Successful image creation (defaults) ===")
55 iotests.log("")
56
57 vm.launch()
58 blockdev_create(vm, { 'driver': 'ssh',
59 'location': {
60 'path': disk_path,
61 'server': {
62 'host': '127.0.0.1',
63 'port': '22'
64 }
65 },
66 'size': 4194304 })
67 vm.shutdown()
68
69 iotests.img_info_log(remote_path, filter_path=disk_path)
70 iotests.log("")
71 iotests.img_info_log(disk_path)
72
73 #
74 # Test host-key-check options
75 #
76 iotests.log("=== Test host-key-check options ===")
77 iotests.log("")
78
79 vm.launch()
80 blockdev_create(vm, { 'driver': 'ssh',
81 'location': {
82 'path': disk_path,
83 'server': {
84 'host': '127.0.0.1',
85 'port': '22'
86 },
87 'host-key-check': {
88 'mode': 'none'
89 }
90 },
91 'size': 8388608 })
92 vm.shutdown()
93
94 iotests.img_info_log(remote_path, filter_path=disk_path)
95
96 vm.launch()
97 blockdev_create(vm, { 'driver': 'ssh',
98 'location': {
99 'path': disk_path,
100 'server': {
101 'host': '127.0.0.1',
102 'port': '22'
103 },
104 'host-key-check': {
105 'mode': 'known_hosts'
106 }
107 },
108 'size': 4194304 })
109 vm.shutdown()
110
111 iotests.img_info_log(remote_path, filter_path=disk_path)
112
113 md5_key = subprocess.check_output(
114 'ssh-keyscan -t rsa 127.0.0.1 2>/dev/null | grep -v "\\^#" | ' +
115 'cut -d" " -f3 | base64 -d | md5sum -b | cut -d" " -f1',
116 shell=True).rstrip().decode('ascii')
117
118 vm.launch()
119 blockdev_create(vm, { 'driver': 'ssh',
120 'location': {
121 'path': disk_path,
122 'server': {
123 'host': '127.0.0.1',
124 'port': '22'
125 },
126 'host-key-check': {
127 'mode': 'hash',
128 'type': 'md5',
129 'hash': 'wrong',
130 }
131 },
132 'size': 2097152 })
133 blockdev_create(vm, { 'driver': 'ssh',
134 'location': {
135 'path': disk_path,
136 'server': {
137 'host': '127.0.0.1',
138 'port': '22'
139 },
140 'host-key-check': {
141 'mode': 'hash',
142 'type': 'md5',
143 'hash': md5_key,
144 }
145 },
146 'size': 8388608 })
147 vm.shutdown()
148
149 iotests.img_info_log(remote_path, filter_path=disk_path)
150
151 sha1_key = subprocess.check_output(
152 'ssh-keyscan -t rsa 127.0.0.1 2>/dev/null | grep -v "\\^#" | ' +
153 'cut -d" " -f3 | base64 -d | sha1sum -b | cut -d" " -f1',
154 shell=True).rstrip().decode('ascii')
155
156 vm.launch()
157 blockdev_create(vm, { 'driver': 'ssh',
158 'location': {
159 'path': disk_path,
160 'server': {
161 'host': '127.0.0.1',
162 'port': '22'
163 },
164 'host-key-check': {
165 'mode': 'hash',
166 'type': 'sha1',
167 'hash': 'wrong',
168 }
169 },
170 'size': 2097152 })
171 blockdev_create(vm, { 'driver': 'ssh',
172 'location': {
173 'path': disk_path,
174 'server': {
175 'host': '127.0.0.1',
176 'port': '22'
177 },
178 'host-key-check': {
179 'mode': 'hash',
180 'type': 'sha1',
181 'hash': sha1_key,
182 }
183 },
184 'size': 4194304 })
185 vm.shutdown()
186
187 iotests.img_info_log(remote_path, filter_path=disk_path)
188
189 #
190 # Invalid path and user
191 #
192 iotests.log("=== Invalid path and user ===")
193 iotests.log("")
194
195 vm.launch()
196 blockdev_create(vm, { 'driver': 'ssh',
197 'location': {
198 'path': '/this/is/not/an/existing/path',
199 'server': {
200 'host': '127.0.0.1',
201 'port': '22'
202 },
203 'host-key-check': {
204 'mode': 'none'
205 }
206 },
207 'size': 4194304 })
208 blockdev_create(vm, { 'driver': 'ssh',
209 'location': {
210 'path': disk_path,
211 'user': 'invalid user',
212 'server': {
213 'host': '127.0.0.1',
214 'port': '22'
215 },
216 'host-key-check': {
217 'mode': 'none'
218 }
219 },
220 'size': 4194304 })
221 vm.shutdown()