diff options
| author | Joshua Harlow <harlowja@yahoo-inc.com> | 2012-09-17 14:53:12 -0700 |
|---|---|---|
| committer | Joshua Harlow <harlowja@yahoo-inc.com> | 2012-10-31 20:09:31 -0700 |
| commit | b04213f5dc75b507ee5bc7fe16af7f7b8a3b0c3a (patch) | |
| tree | 4932ab8555ffea8989af4f1f90d7ef5be7ee8c63 /nova/tests | |
| parent | 33825bea5bccab26542e0db649932ba8da3de27f (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.py | 100 | ||||
| -rw-r--r-- | nova/tests/test_utils.py | 35 |
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() |
