Example #1
0
 def setUp(self):
     """Test case setup function called automatically prior to each test."""
     self.helper = QEMUImg()
     super(TestQEMUImg, self).setUp()
Example #2
0
class TestQEMUImg(HelperTestCase):
    """Test cases for QEMUImg helper class."""

    def setUp(self):
        """Test case setup function called automatically prior to each test."""
        self.helper = QEMUImg()
        super(TestQEMUImg, self).setUp()

    @mock.patch('COT.helpers.helper.check_output')
    def test_older_version(self, mock_check_output):
        """Test .version getter logic for older versions."""
        mock_check_output.return_value = """
qemu-img version 1.4.2, Copyright (c) 2004-2008 Fabrice Bellard
usage: qemu-img command [command options]
QEMU disk image utility

Command syntax:
..."""
        self.helper._installed = True
        version = self.helper.version
        self.assertSubprocessCalls(mock_check_output,
                                   [['qemu-img', '--version']])
        self.assertEqual(version, StrictVersion("1.4.2"))

        # Output should be cached rather than re-invoking qemu-img
        mock_check_output.reset_mock()
        version = self.helper.version
        mock_check_output.assert_not_called()
        self.assertEqual(version, StrictVersion("1.4.2"))

    @mock.patch('COT.helpers.helper.check_output')
    def test_newer_version(self, mock_check_output):
        """Test .version getter logic for newer versions."""
        self.helper._installed = True
        mock_check_output.return_value = \
            "qemu-img version 2.1.2, Copyright (c) 2004-2008 Fabrice Bellard"
        self.assertEqual(self.helper.version,
                         StrictVersion("2.1.2"))

    @mock.patch('COT.helpers.helper.check_output')
    def test_invalid_version(self, mock_check_output):
        """Negative test for .version getter logic."""
        self.helper._installed = True
        mock_check_output.return_value = \
            "qemu-img: error: unknown argument --version"
        with self.assertRaises(RuntimeError):
            assert self.helper.version

    @mock.patch('subprocess.check_call')
    def test_install_already_present(self, mock_check_call):
        """Do nothing when trying to re-install."""
        self.helper._installed = True
        self.helper.install()
        mock_check_call.assert_not_called()

    def test_install_apt_get(self):
        """Test installation via 'apt-get'."""
        self.apt_install_test('qemu-utils', 'qemu-img')

    def test_install_brew(self):
        """Test installation via 'brew'."""
        self.brew_install_test('qemu')

    def test_install_port(self):
        """Test installation via 'port'."""
        self.port_install_test('qemu')

    def test_install_yum(self):
        """Test installation via 'yum'."""
        self.yum_install_test('qemu-img')
Example #3
0
class TestQEMUImg(HelperTestCase):
    """Test cases for QEMUImg helper class."""
    def setUp(self):
        """Test case setup function called automatically prior to each test."""
        self.helper = QEMUImg()
        super(TestQEMUImg, self).setUp()

    @mock.patch('COT.helpers.helper.check_output')
    def test_older_version(self, mock_check_output):
        """Test .version getter logic for older versions."""
        mock_check_output.return_value = """
qemu-img version 1.4.2, Copyright (c) 2004-2008 Fabrice Bellard
usage: qemu-img command [command options]
QEMU disk image utility

Command syntax:
..."""
        self.helper._installed = True
        version = self.helper.version
        self.assertSubprocessCalls(mock_check_output,
                                   [['qemu-img', '--version']])
        self.assertEqual(version, StrictVersion("1.4.2"))

        # Output should be cached rather than re-invoking qemu-img
        mock_check_output.reset_mock()
        version = self.helper.version
        mock_check_output.assert_not_called()
        self.assertEqual(version, StrictVersion("1.4.2"))

    @mock.patch('COT.helpers.helper.check_output')
    def test_newer_version(self, mock_check_output):
        """Test .version getter logic for newer versions."""
        self.helper._installed = True
        mock_check_output.return_value = \
            "qemu-img version 2.1.2, Copyright (c) 2004-2008 Fabrice Bellard"
        self.assertEqual(self.helper.version, StrictVersion("2.1.2"))

    @mock.patch('COT.helpers.helper.check_output')
    def test_invalid_version(self, mock_check_output):
        """Negative test for .version getter logic."""
        self.helper._installed = True
        mock_check_output.return_value = \
            "qemu-img: error: unknown argument --version"
        with self.assertRaises(RuntimeError):
            assert self.helper.version

    @mock.patch('subprocess.check_call')
    def test_install_already_present(self, mock_check_call):
        """Do nothing when trying to re-install."""
        self.helper._installed = True
        self.helper.install()
        mock_check_call.assert_not_called()

    def test_install_apt_get(self):
        """Test installation via 'apt-get'."""
        self.apt_install_test('qemu-utils', 'qemu-img')

    def test_install_brew(self):
        """Test installation via 'brew'."""
        self.brew_install_test('qemu')

    def test_install_port(self):
        """Test installation via 'port'."""
        self.port_install_test('qemu')

    def test_install_yum(self):
        """Test installation via 'yum'."""
        self.yum_install_test('qemu-img')
Example #4
0
 def setUp(self):
     """Test case setup function called automatically prior to each test."""
     self.helper = QEMUImg()
     super(TestQEMUImg, self).setUp()
Example #5
0
class TestQEMUImg(HelperUT):

    """Test cases for QEMUImg helper class."""

    def setUp(self):
        """Test case setup function called automatically prior to each test."""
        self.helper = QEMUImg()
        super(TestQEMUImg, self).setUp()

    def test_older_version(self):
        """Test .version getter logic for older versions."""
        self.fake_output = """
qemu-img version 1.4.2, Copyright (c) 2004-2008 Fabrice Bellard
usage: qemu-img command [command options]
QEMU disk image utility

Command syntax:
..."""
        version = self.helper.version
        self.assertEqual(self.last_argv[0], ['qemu-img', '--version'])
        self.assertEqual(version, StrictVersion("1.4.2"))

        # Output should be cached rather than re-invoking qemu-img
        self.last_argv = []
        self.fake_output = "Gotcha!"
        version = self.helper.version
        self.assertEqual(self.last_argv, [])
        self.assertEqual(version, StrictVersion("1.4.2"))

    def test_newer_version(self):
        """Test .version getter logic for newer versions."""
        self.fake_output = \
            "qemu-img version 2.1.2, Copyright (c) 2004-2008 Fabrice Bellard"
        self.assertEqual(self.helper.version,
                         StrictVersion("2.1.2"))

    def test_invalid_version(self):
        """Negative test for .version getter logic."""
        self.fake_output = "qemu-img: error: unknown argument --version"
        with self.assertRaises(RuntimeError):
            self.helper.version

    def test_install_helper_already_present(self):
        """Do nothing when trying to re-install."""
        self.helper.install_helper()
        self.assertEqual([], self.last_argv)
        self.assertLogged(**self.ALREADY_INSTALLED)

    def test_install_helper_apt_get(self):
        """Test installation via 'apt-get'."""
        Helper.find_executable = self.stub_find_executable
        Helper.PACKAGE_MANAGERS['apt-get'] = True
        Helper.PACKAGE_MANAGERS['port'] = False
        Helper.PACKAGE_MANAGERS['yum'] = False
        Helper._apt_updated = False
        self.helper.install_helper()
        self.assertEqual([['sudo', 'apt-get', '-q', 'update'],
                          ['sudo', 'apt-get', '-q', 'install', 'qemu-utils']],
                         self.last_argv)
        self.assertTrue(Helper._apt_updated)
        # Make sure we don't call apt-get update again unnecessarily
        self.last_argv = []
        self.helper.install_helper()
        self.assertEqual([['sudo', 'apt-get', '-q', 'install', 'qemu-utils']],
                         self.last_argv)

    def test_install_helper_port(self):
        """Test installation via 'port'."""
        Helper.find_executable = self.stub_find_executable
        Helper.PACKAGE_MANAGERS['apt-get'] = False
        Helper.PACKAGE_MANAGERS['port'] = True
        Helper.PACKAGE_MANAGERS['yum'] = False
        Helper._port_updated = False
        self.helper.install_helper()
        self.assertEqual([['sudo', 'port', 'selfupdate'],
                          ['sudo', 'port', 'install', 'qemu']],
                         self.last_argv)
        self.assertTrue(Helper._port_updated)
        # Make sure we don't call port selfupdate again unnecessarily
        self.last_argv = []
        self.helper.install_helper()
        self.assertEqual([['sudo', 'port', 'install', 'qemu']],
                         self.last_argv)

    def test_install_helper_yum(self):
        """Test installation via 'yum'."""
        Helper.find_executable = self.stub_find_executable
        Helper.PACKAGE_MANAGERS['apt-get'] = False
        Helper.PACKAGE_MANAGERS['port'] = False
        Helper.PACKAGE_MANAGERS['yum'] = True
        self.helper.install_helper()
        self.assertEqual([['sudo', 'yum', '--quiet', 'install', 'qemu-img']],
                         self.last_argv)

    def test_install_helper_unsupported(self):
        """Installation fails without a package manager."""
        Helper.find_executable = self.stub_find_executable
        Helper.PACKAGE_MANAGERS['apt-get'] = False
        Helper.PACKAGE_MANAGERS['port'] = False
        Helper.PACKAGE_MANAGERS['yum'] = False
        with self.assertRaises(NotImplementedError):
            self.helper.install_helper()

    def test_get_disk_format(self):
        """Get format of various disk images."""
        self.assertEqual('vmdk', self.helper.get_disk_format(self.blank_vmdk))

        temp_disk = os.path.join(self.temp_dir, 'foo.img')
        self.helper.create_blank_disk(temp_disk, capacity="16M")
        self.assertEqual('raw', self.helper.get_disk_format(temp_disk))

        temp_disk = os.path.join(self.temp_dir, 'foo.qcow2')
        self.helper.create_blank_disk(temp_disk, capacity="1G")
        self.assertEqual('qcow2', self.helper.get_disk_format(temp_disk))

    def test_get_disk_format_no_file(self):
        """Negative test for get_disk_format() - no such file."""
        self.assertRaises(HelperError, self.helper.get_disk_format, "")
        self.assertRaises(HelperError, self.helper.get_disk_format,
                          "/foo/bar/baz")

    def test_get_disk_format_not_available(self):
        """Negative test for get_disk_format() - bad command output."""
        # Haven't found a way yet to make qemu-img actually fail here
        # without returning a non-zero RC and triggering a HelperError,
        # so we'll have to fake it
        self.fake_output = "qemu-img info: unsupported command"
        self.assertRaises(RuntimeError, self.helper.get_disk_format,
                          "/foo/bar")

    def test_get_disk_capacity(self):
        """Test the get_disk_capacity() method."""
        self.assertEqual("536870912",
                         self.helper.get_disk_capacity(self.blank_vmdk))

        self.assertEqual("1073741824",
                         self.helper.get_disk_capacity(self.input_vmdk))

    def test_get_disk_capacity_no_file(self):
        """Negative test for get_disk_capacity() - no such file."""
        self.assertRaises(HelperError, self.helper.get_disk_capacity, "")
        self.assertRaises(HelperError, self.helper.get_disk_capacity,
                          "/foo/bar/baz")

    def test_get_disk_capacity_not_available(self):
        """Negative test for get_disk_capacity() - bad command output."""
        # Haven't found a way yet to make qemu-img actually fail here
        # without returning a non-zero RC and triggering a HelperError,
        # so we'll have to fake it
        self.fake_output = "qemu-img info: unsupported command"
        self.assertRaises(RuntimeError, self.helper.get_disk_capacity,
                          "/foo/bar")

    def test_create_invalid(self):
        """Invalid arguments."""
        # If extension not given, cannot guess file format
        self.assertRaises(RuntimeError,
                          self.helper.create_blank_disk,
                          os.path.join(self.temp_dir, "out"),
                          capacity="1M")

    def test_convert_unsupported(self):
        """Negative test for convert_disk_image() - unsupported formats."""
        with self.assertRaises(NotImplementedError):
            self.helper.convert_disk_image(self.blank_vmdk, self.temp_dir,
                                           'vhd')
        with self.assertRaises(NotImplementedError):
            self.helper._version = StrictVersion("2.0.99")
            self.helper.convert_disk_image(self.blank_vmdk, self.temp_dir,
                                           'vmdk', 'streamOptimized')