Handle the case where we encounter a snap shot correctly.
Fix the list in the qemu output and break out of the loop when we encounter that instead of failing to parse. Fixes bug 1070088. Change-Id: I5f501c599b94e0ac13892c97d60ec740ac7e641d
This commit is contained in:
69
nova/tests/test_image_utils.py
Normal file
69
nova/tests/test_image_utils.py
Normal file
@@ -0,0 +1,69 @@
|
|||||||
|
# vim: tabstop=4 shiftwidth=4 softtabstop=4
|
||||||
|
|
||||||
|
# Copyright (C) 2012 Yahoo! Inc. All Rights Reserved.
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||||
|
# not use this file except in compliance with the License. You may obtain
|
||||||
|
# a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||||
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
|
# License for the specific language governing permissions and limitations
|
||||||
|
# under the License.
|
||||||
|
|
||||||
|
from nova import test
|
||||||
|
from nova import utils
|
||||||
|
|
||||||
|
from nova.virt import images
|
||||||
|
|
||||||
|
|
||||||
|
class ImageUtilsTestCase(test.TestCase):
|
||||||
|
def test_qemu_info(self):
|
||||||
|
path = "disk.config"
|
||||||
|
example_output = """image: disk.config
|
||||||
|
file format: raw
|
||||||
|
virtual size: 64M (67108864 bytes)
|
||||||
|
cluster_size: 65536
|
||||||
|
disk size: 96K
|
||||||
|
blah BLAH: bb
|
||||||
|
"""
|
||||||
|
self.mox.StubOutWithMock(utils, 'execute')
|
||||||
|
utils.execute('env', 'LC_ALL=C', 'LANG=C',
|
||||||
|
'qemu-img', 'info', path).AndReturn((example_output, ''))
|
||||||
|
self.mox.ReplayAll()
|
||||||
|
image_info = images.qemu_img_info(path)
|
||||||
|
self.assertEquals('disk.config', image_info['image'])
|
||||||
|
self.assertEquals('raw', image_info['file format'])
|
||||||
|
self.assertEquals('64M (67108864 bytes)', image_info['virtual size'])
|
||||||
|
self.assertEquals('96K', image_info['disk size'])
|
||||||
|
self.assertEquals('bb', image_info['blah blah'])
|
||||||
|
self.assertEquals("65536", image_info['cluster_size'])
|
||||||
|
|
||||||
|
def test_qemu_info_snap(self):
|
||||||
|
path = "disk.config"
|
||||||
|
example_output = """image: disk.config
|
||||||
|
file format: raw
|
||||||
|
virtual size: 64M (67108864 bytes)
|
||||||
|
cluster_size: 65536
|
||||||
|
disk size: 96K
|
||||||
|
Snapshot list:
|
||||||
|
ID TAG VM SIZE DATE VM CLOCK
|
||||||
|
1 d9a9784a500742a7bb95627bb3aace38 0 2012-08-20 10:52:46 00:00:00.000
|
||||||
|
"""
|
||||||
|
self.mox.StubOutWithMock(utils, 'execute')
|
||||||
|
utils.execute('env', 'LC_ALL=C', 'LANG=C',
|
||||||
|
'qemu-img', 'info', path).AndReturn((example_output, ''))
|
||||||
|
self.mox.ReplayAll()
|
||||||
|
image_info = images.qemu_img_info(path)
|
||||||
|
self.assertEquals('disk.config', image_info['image'])
|
||||||
|
self.assertEquals('raw', image_info['file format'])
|
||||||
|
self.assertEquals('64M (67108864 bytes)', image_info['virtual size'])
|
||||||
|
self.assertEquals('96K', image_info['disk size'])
|
||||||
|
self.assertEquals("65536", image_info['cluster_size'])
|
||||||
|
# This would be triggered if the split encountered this section
|
||||||
|
self.assertNotIn('snapshot list', image_info)
|
||||||
|
bad_cap = '1 d9a9784a500742a7bb95627bb3aace38 0 2012-08-20 10'
|
||||||
|
self.assertNotIn(bad_cap, image_info)
|
||||||
Reference in New Issue
Block a user