summaryrefslogtreecommitdiffstats
path: root/nova/tests
diff options
context:
space:
mode:
authorJoshua Harlow <harlowja@yahoo-inc.com>2012-09-17 14:53:12 -0700
committerJoshua Harlow <harlowja@yahoo-inc.com>2012-10-31 20:09:31 -0700
commitb04213f5dc75b507ee5bc7fe16af7f7b8a3b0c3a (patch)
tree4932ab8555ffea8989af4f1f90d7ef5be7ee8c63 /nova/tests
parent33825bea5bccab26542e0db649932ba8da3de27f (diff)
Move to a more canonicalized output from qemu-img info.
Move to a form that is all lower cased, dashes->underscores, underscores instead of spaces which allows for better integration with python. Also make the parser more robust to failures when encountering new fields such as snapshot lists. Provide a new qemu img info object that can be used to do the parsing and access the underlying attributes. Change-Id: Ie098dbd9f06dd4ef966768e2caa128f1d09b019c
Diffstat (limited to 'nova/tests')
-rw-r--r--nova/tests/test_image_utils.py100
-rw-r--r--nova/tests/test_utils.py35
2 files changed, 118 insertions, 17 deletions
diff --git a/nova/tests/test_image_utils.py b/nova/tests/test_image_utils.py
index 711f1c202..fac0422bf 100644
--- a/nova/tests/test_image_utils.py
+++ b/nova/tests/test_image_utils.py
@@ -21,7 +21,7 @@ from nova.virt import images
class ImageUtilsTestCase(test.TestCase):
- def test_qemu_info(self):
+ def test_qemu_info_canon(self):
path = "disk.config"
example_output = """image: disk.config
file format: raw
@@ -35,14 +35,35 @@ blah BLAH: bb
'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'])
+ self.assertEquals('disk.config', image_info.image)
+ self.assertEquals('raw', image_info.file_format)
+ self.assertEquals(67108864, image_info.virtual_size)
+ self.assertEquals(98304, image_info.disk_size)
+ self.assertEquals(65536, image_info.cluster_size)
- def test_qemu_info_snap(self):
+ def test_qemu_info_canon2(self):
+ path = "disk.config"
+ example_output = """image: disk.config
+file format: QCOW2
+virtual size: 67108844
+cluster_size: 65536
+disk size: 963434
+backing file: /var/lib/nova/a328c7998805951a_2
+"""
+ 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('qcow2', image_info.file_format)
+ self.assertEquals(67108844, image_info.virtual_size)
+ self.assertEquals(963434, image_info.disk_size)
+ self.assertEquals(65536, image_info.cluster_size)
+ self.assertEquals('/var/lib/nova/a328c7998805951a_2',
+ image_info.backing_file)
+
+ def test_qemu_backing_file_actual(self):
path = "disk.config"
example_output = """image: disk.config
file format: raw
@@ -52,18 +73,63 @@ 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
+backing file: /var/lib/nova/a328c7998805951a_2 (actual path: /b/3a988059e51a_2)
+"""
+ 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(67108864, image_info.virtual_size)
+ self.assertEquals(98304, image_info.disk_size)
+ self.assertEquals(1, len(image_info.snapshots))
+ self.assertEquals('/b/3a988059e51a_2',
+ image_info.backing_file)
+
+ def test_qemu_info_convert(self):
+ path = "disk.config"
+ example_output = """image: disk.config
+file format: raw
+virtual size: 64M
+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
+3 d9a9784a500742a7bb95627bb3aace38 0 2012-08-20 10:52:46 00:00:00.000
+4 d9a9784a500742a7bb95627bb3aace38 0 2012-08-20 10:52:46 00:00:00.000
+junk stuff: bbb
+"""
+ 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(67108864, image_info.virtual_size)
+ self.assertEquals(98304, image_info.disk_size)
+
+ def test_qemu_info_snaps(self):
+ path = "disk.config"
+ example_output = """image: disk.config
+file format: raw
+virtual size: 64M (67108864 bytes)
+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
+3 d9a9784a500742a7bb95627bb3aace38 0 2012-08-20 10:52:46 00:00:00.000
+4 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)
+ self.assertEquals('disk.config', image_info.image)
+ self.assertEquals('raw', image_info.file_format)
+ self.assertEquals(67108864, image_info.virtual_size)
+ self.assertEquals(98304, image_info.disk_size)
+ self.assertEquals(3, len(image_info.snapshots))
diff --git a/nova/tests/test_utils.py b/nova/tests/test_utils.py
index f97d6eeb7..1b84b858d 100644
--- a/nova/tests/test_utils.py
+++ b/nova/tests/test_utils.py
@@ -37,6 +37,41 @@ from nova import utils
FLAGS = flags.FLAGS
+class ByteConversionTest(test.TestCase):
+ def test_string_conversions(self):
+ working_examples = {
+ '1024KB': 1048576,
+ '1024TB': 1125899906842624,
+ '1024K': 1048576,
+ '1024T': 1125899906842624,
+ '1TB': 1099511627776,
+ '1T': 1099511627776,
+ '1KB': 1024,
+ '1K': 1024,
+ '1B': 1,
+ '1B': 1,
+ '1': 1,
+ '1MB': 1048576,
+ '7MB': 7340032,
+ '0MB': 0,
+ '0KB': 0,
+ '0TB': 0,
+ '': 0,
+ }
+ for (in_value, expected_value) in working_examples.items():
+ b_value = utils.to_bytes(in_value)
+ self.assertEquals(expected_value, b_value)
+ if len(in_value):
+ in_value = "-" + in_value
+ b_value = utils.to_bytes(in_value)
+ self.assertEquals(expected_value * -1, b_value)
+ breaking_examples = [
+ 'junk1KB', '1023BBBB',
+ ]
+ for v in breaking_examples:
+ self.assertRaises(TypeError, utils.to_bytes, v)
+
+
class ExecuteTestCase(test.TestCase):
def test_retry_on_failure(self):
fd, tmpfilename = tempfile.mkstemp()