Пример #1
0
    def test_package_validator_debian(self):
        cls = images.SaharaPackageValidator
        image_arguments = {"distro": 'ubuntu'}

        packages = [cls.Package("java", "8")]
        validator = images.SaharaPackageValidator(packages)
        remote = mock.Mock()
        validator.validate(remote,
                           test_only=True,
                           image_arguments=image_arguments)
        remote.execute_command.assert_called_with("dpkg -s java-8",
                                                  run_as_root=True)

        image_arguments = {"distro": 'ubuntu'}
        packages = [cls.Package("java", "8"), cls.Package("hadoop")]
        validator = images.SaharaPackageValidator(packages)
        remote = mock.Mock()
        remote.execute_command.side_effect = (
            ex.RemoteCommandException("So bad!"))
        try:
            validator.validate(remote,
                               test_only=True,
                               image_arguments=image_arguments)
        except p_ex.ImageValidationError as e:
            self.assertIn("So bad!", e.message)
        remote.execute_command.assert_called_with("dpkg -s java-8 hadoop",
                                                  run_as_root=True)
        self.assertEqual(remote.execute_command.call_count, 1)

        image_arguments = {"distro": 'ubuntu'}
        packages = [cls.Package("java", "8"), cls.Package("hadoop")]
        validator = images.SaharaPackageValidator(packages)
        remote = mock.Mock()
        remote.execute_command.side_effect = (
            ex.RemoteCommandException("So bad!"))
        try:
            validator.validate(remote,
                               test_only=False,
                               image_arguments=image_arguments)
        except p_ex.ImageValidationError as e:
            self.assertIn("So bad!", e.message)
        self.assertEqual(remote.execute_command.call_count, 2)
        calls = [
            mock.call("dpkg -s java-8 hadoop", run_as_root=True),
            mock.call("DEBIAN_FRONTEND=noninteractive " +
                      "apt-get -y install java-8 hadoop",
                      run_as_root=True)
        ]
        remote.execute_command.assert_has_calls(calls)
Пример #2
0
def _execute_command(cmd,
                     run_as_root=False,
                     get_stderr=False,
                     raise_when_error=True):
    global _ssh

    chan = _ssh.get_transport().open_session()
    if run_as_root:
        chan.exec_command('sudo bash -c "%s"' % _escape_quotes(cmd))
    else:
        chan.exec_command(cmd)

    # todo(dmitryme): that could hang if stderr buffer overflows
    stdout = _read_paramimko_stream(chan.recv)
    stderr = _read_paramimko_stream(chan.recv_stderr)

    ret_code = chan.recv_exit_status()

    if ret_code and raise_when_error:
        raise ex.RemoteCommandException(cmd=cmd,
                                        ret_code=ret_code,
                                        stdout=stdout,
                                        stderr=stderr)

    if get_stderr:
        return ret_code, stdout, stderr
    else:
        return ret_code, stdout
Пример #3
0
    def test_package_validator_debian(self):
        cls = images.SaharaPackageValidator
        env_map = {"SIV_DISTRO": 'ubuntu'}

        packages = [cls.Package("java", "8")]
        validator = images.SaharaPackageValidator(packages)
        remote = mock.Mock()
        validator.validate(remote, reconcile=False, env_map=env_map)
        remote.execute_command.assert_called_with("dpkg -s java-8",
                                                  run_as_root=True)

        env_map = {"SIV_DISTRO": 'ubuntu'}
        packages = [cls.Package("java", "8"), cls.Package("hadoop")]
        validator = images.SaharaPackageValidator(packages)
        remote = mock.Mock()
        remote.execute_command.side_effect = (
            ex.RemoteCommandException("So bad!"))
        try:
            validator.validate(remote, reconcile=False, env_map=env_map)
        except p_ex.ImageValidationError as e:
            self.assertIn("So bad!", e.message)
        remote.execute_command.assert_called_with("dpkg -s java-8 hadoop",
                                                  run_as_root=True)
        self.assertEqual(remote.execute_command.call_count, 1)

        env_map = {"SIV_DISTRO": 'ubuntu'}
        packages = [cls.Package("java", "8"), cls.Package("hadoop")]
        validator = images.SaharaPackageValidator(packages)
        remote = mock.Mock()
        remote.execute_command.side_effect = (
            ex.RemoteCommandException("So bad!"))
        try:
            validator.validate(remote, reconcile=True, env_map=env_map)
        except p_ex.ImageValidationError as e:
            self.assertIn("So bad!", e.message)
        self.assertEqual(remote.execute_command.call_count, 2)
        calls = [
            mock.call("dpkg -s java-8 hadoop", run_as_root=True),
            mock.call("apt-get -y install java-8 hadoop", run_as_root=True)
        ]
        remote.execute_command.assert_has_calls(calls)
Пример #4
0
    def test_mount_volume(self, p_get_username):
        p_get_username.return_value = 'root'

        instance = self._get_instance()
        execute_com = instance.remote().execute_command

        self.assertIsNone(volumes._mount_volume(instance, '123', '456'))
        self.assertEqual(execute_com.call_count, 3)

        execute_com.side_effect = ex.RemoteCommandException('cmd')
        self.assertRaises(ex.RemoteCommandException, volumes._mount_volume,
                          instance, '123', '456')
Пример #5
0
    def test_package_validator_redhat(self):
        cls = images.SaharaPackageValidator
        image_arguments = {"distro": 'centos'}

        packages = [cls.Package("java", "8")]
        validator = images.SaharaPackageValidator(packages)
        remote = mock.Mock()
        validator.validate(remote,
                           reconcile=False,
                           image_arguments=image_arguments)
        remote.execute_command.assert_called_with("rpm -q java-8",
                                                  run_as_root=True)

        image_arguments = {"distro": 'fedora'}
        packages = [cls.Package("java", "8"), cls.Package("hadoop")]
        validator = images.SaharaPackageValidator(packages)
        remote = mock.Mock()
        remote.execute_command.side_effect = (
            ex.RemoteCommandException("So bad!"))
        try:
            validator.validate(remote,
                               reconcile=False,
                               image_arguments=image_arguments)
        except p_ex.ImageValidationError as e:
            self.assertIn("So bad!", e.message)
        remote.execute_command.assert_called_with("rpm -q java-8 hadoop",
                                                  run_as_root=True)
        self.assertEqual(remote.execute_command.call_count, 1)

        image_arguments = {"distro": 'redhatenterpriseserver'}
        packages = [cls.Package("java", "8"), cls.Package("hadoop")]
        validator = images.SaharaPackageValidator(packages)
        remote = mock.Mock()

        def side_effect(call, run_as_root=False):
            if "rpm" in call:
                raise ex.RemoteCommandException("So bad!")

        remote.execute_command.side_effect = side_effect
        try:
            validator.validate(remote,
                               reconcile=True,
                               image_arguments=image_arguments)
        except p_ex.ImageValidationError as e:
            self.assertIn("So bad!", e.message)
        self.assertEqual(remote.execute_command.call_count, 3)
        calls = [
            mock.call("rpm -q java-8 hadoop", run_as_root=True),
            mock.call("yum install -y java-8 hadoop", run_as_root=True),
            mock.call("rpm -q java-8 hadoop", run_as_root=True)
        ]
        remote.execute_command.assert_has_calls(calls)
Пример #6
0
 def side_effect(call, run_as_root=False):
     if "rpm" in call:
         raise ex.RemoteCommandException("So bad!")