예제 #1
0
class TestInstallation(BaseProductTestCase):

    def setUp(self):
        super(TestInstallation, self).setUp()
        self.pa_installer = PrestoadminInstaller(self)
        self.setup_cluster(NoHadoopBareImageProvider(), STANDALONE_BARE_CLUSTER)
        dist_dir = self.pa_installer._build_dist_if_necessary(self.cluster)
        self.pa_installer._copy_dist_to_host(self.cluster, dist_dir, self.cluster.master)

    @attr('smoketest')
    @docker_only
    def test_install_non_root(self):
        install_dir = '/home/app-admin'
        script = """
            set -e
            cp {mount_dir}/prestoadmin-*.tar.gz {install_dir}
            chown app-admin {install_dir}/prestoadmin-*.tar.gz
            cd {install_dir}
            sudo -u app-admin tar zxf prestoadmin-*.tar.gz
            cd prestoadmin
            sudo -u app-admin ./install-prestoadmin.sh
        """.format(mount_dir=self.cluster.mount_dir, install_dir=install_dir)

        self.cluster.run_script_on_host(script, self.cluster.master)

        pa_config_dir = '/home/app-admin/.prestoadmin'
        catalog_dir = os.path.join(pa_config_dir, 'catalog')
        self.assert_path_exists(self.cluster.master, catalog_dir)

        coordinator_dir = os.path.join(pa_config_dir, 'coordinator')
        self.assert_path_exists(self.cluster.master, coordinator_dir)

        workers_dir = os.path.join(pa_config_dir, 'workers')
        self.assert_path_exists(self.cluster.master, workers_dir)

    @attr('smoketest')
    def test_cert_arg_to_installation_nonexistent_file(self):
        install_dir = '~'
        script = """
            set -e
            cp {mount_dir}/prestoadmin-*.tar.gz {install_dir}
            cd {install_dir}
            tar zxf prestoadmin-*.tar.gz
            cd prestoadmin
             ./install-prestoadmin.sh dummy_cert.cert
        """.format(mount_dir=self.cluster.mount_dir,
                   install_dir=install_dir)
        output = self.cluster.run_script_on_host(script, self.cluster.master)
        self.assertRegexpMatches(output, r'Adding pypi.python.org as '
                                 'trusted\-host. Cannot find certificate '
                                 'file: dummy_cert.cert')

    @attr('smoketest')
    def test_cert_arg_to_installation_real_cert(self):
        self.cluster.copy_to_host(certifi.where(), self.cluster.master)
        install_dir = '~'
        cert_file = os.path.basename(certifi.where())
        script = """
            set -e
            cp {mount_dir}/prestoadmin-*.tar.gz {install_dir}
            cd {install_dir}
            tar zxf prestoadmin-*.tar.gz
            cd prestoadmin
             ./install-prestoadmin.sh {mount_dir}/{cacert}
        """.format(mount_dir=self.cluster.mount_dir,
                   install_dir=install_dir,
                   cacert=cert_file)
        output = self.cluster.run_script_on_host(script, self.cluster.master)
        self.assertTrue('Adding pypi.python.org as trusted-host. Cannot find'
                        ' certificate file: %s' % cert_file not in output,
                        'Unable to find cert file; output: %s' % output)

    def test_additional_dirs_created(self):
        install_dir = '~'
        script = """
            set -e
            cp {mount_dir}/prestoadmin-*.tar.gz {install_dir}
            cd {install_dir}
            tar zxf prestoadmin-*.tar.gz
            cd prestoadmin
             ./install-prestoadmin.sh
        """.format(mount_dir=self.cluster.mount_dir,
                   install_dir=install_dir)
        self.cluster.run_script_on_host(script, self.cluster.master)

        self.assert_path_exists(self.cluster.master, get_catalog_directory())
        self.assert_path_exists(self.cluster.master, get_coordinator_directory())
        self.assert_path_exists(self.cluster.master, get_workers_directory())
예제 #2
0
class TestInstallation(BaseProductTestCase):
    def setUp(self):
        super(TestInstallation, self).setUp()
        self.pa_installer = PrestoadminInstaller(self)
        self.setup_cluster(NoHadoopBareImageProvider(), self.BARE_CLUSTER)
        dist_dir = self.pa_installer._build_dist_if_necessary(self.cluster)
        self.pa_installer._copy_dist_to_host(self.cluster, dist_dir,
                                             self.cluster.master)

    @attr('smoketest')
    @docker_only
    def test_install_non_root(self):
        install_dir = '/home/app-admin'
        script = """
            set -e
            cp {mount_dir}/prestoadmin-*.tar.bz2 {install_dir}
            chown app-admin {install_dir}/prestoadmin-*.tar.bz2
            cd {install_dir}
            sudo -u app-admin tar jxf prestoadmin-*.tar.bz2
            cd prestoadmin
            sudo -u app-admin ./install-prestoadmin.sh
        """.format(mount_dir=self.cluster.mount_dir, install_dir=install_dir)

        self.assertRaisesRegexp(
            OSError, 'mkdir: cannot create directory '
            '`/var/log/prestoadmin\': Permission denied',
            self.cluster.run_script_on_host, script, self.cluster.master)

    @attr('smoketest')
    def test_install_from_different_dir(self):
        install_dir = '/opt'
        script = """
            set -e
            cp {mount_dir}/prestoadmin-*.tar.bz2 {install_dir}
            cd {install_dir}
            tar jxf prestoadmin-*.tar.bz2
             ./prestoadmin/install-prestoadmin.sh
        """.format(mount_dir=self.cluster.mount_dir, install_dir=install_dir)

        self.assertRaisesRegexp(
            OSError, r'IOError: \[Errno 2\] No such file or directory: '
            r'\'/opt/prestoadmin-1.2-py2-none-any.whl\'',
            self.cluster.run_script_on_host, script, self.cluster.master)

    @attr('smoketest')
    @docker_only
    def test_install_on_wrong_os_offline_installer(self):
        image = 'ubuntu'
        tag = '14.04'
        host = image + '-master'
        ubuntu_container = DockerCluster(host, [], DEFAULT_LOCAL_MOUNT_POINT,
                                         DEFAULT_DOCKER_MOUNT_POINT)
        try:
            ubuntu_container.fetch_image_if_not_present(image, tag)
            ubuntu_container.start_containers(
                image + ':' + tag, cmd='tail -f /var/log/bootstrap.log')

            self.retry(lambda: ubuntu_container.run_script_on_host(
                install_py26_script, ubuntu_container.master))

            ubuntu_container.exec_cmd_on_host(ubuntu_container.master,
                                              'sudo apt-get -y install wget')

            self.assertRaisesRegexp(
                OSError, r'ERROR\n'
                r'Paramiko could not be imported. This usually means that',
                self.pa_installer.install,
                cluster=ubuntu_container)
        finally:
            ubuntu_container.tear_down()

    @attr('smoketest')
    def test_cert_arg_to_installation_nonexistent_file(self):
        install_dir = '/opt'
        script = """
            set -e
            cp {mount_dir}/prestoadmin-*.tar.bz2 {install_dir}
            cd {install_dir}
            tar jxf prestoadmin-*.tar.bz2
            cd prestoadmin
             ./install-prestoadmin.sh dummy_cert.cert
        """.format(mount_dir=self.cluster.mount_dir, install_dir=install_dir)
        output = self.cluster.run_script_on_host(script, self.cluster.master)
        self.assertRegexpMatches(
            output, r'Adding pypi.python.org as '
            'trusted\-host. Cannot find certificate '
            'file: dummy_cert.cert')

    @attr('smoketest')
    def test_cert_arg_to_installation_real_cert(self):
        self.cluster.copy_to_host(certifi.where(), self.cluster.master)
        install_dir = '/opt'
        cert_file = os.path.basename(certifi.where())
        script = """
            set -e
            cp {mount_dir}/prestoadmin-*.tar.bz2 {install_dir}
            cd {install_dir}
            tar jxf prestoadmin-*.tar.bz2
            cd prestoadmin
             ./install-prestoadmin.sh {mount_dir}/{cacert}
        """.format(mount_dir=self.cluster.mount_dir,
                   install_dir=install_dir,
                   cacert=cert_file)
        output = self.cluster.run_script_on_host(script, self.cluster.master)
        self.assertTrue(
            'Adding pypi.python.org as trusted-host. Cannot find'
            ' certificate file: %s' % cert_file not in output,
            'Unable to find cert file; output: %s' % output)

    def test_additional_dirs_created(self):
        install_dir = '/opt'
        script = """
            set -e
            cp {mount_dir}/prestoadmin-*.tar.bz2 {install_dir}
            cd {install_dir}
            tar jxf prestoadmin-*.tar.bz2
            cd prestoadmin
             ./install-prestoadmin.sh
        """.format(mount_dir=self.cluster.mount_dir, install_dir=install_dir)
        self.cluster.run_script_on_host(script, self.cluster.master)

        pa_etc_dir = '/etc/opt/prestoadmin'
        connectors_dir = pa_etc_dir + '/connectors'
        self.assert_path_exists(self.cluster.master, connectors_dir)

        coordinator_dir = pa_etc_dir + '/coordinator'
        self.assert_path_exists(self.cluster.master, coordinator_dir)

        workers_dir = pa_etc_dir + '/workers'
        self.assert_path_exists(self.cluster.master, workers_dir)
예제 #3
0
class TestInstallation(BaseProductTestCase):

    def setUp(self):
        super(TestInstallation, self).setUp()
        self.pa_installer = PrestoadminInstaller(self)
        self.setup_cluster(NoHadoopBareImageProvider, STANDALONE_BARE_CLUSTER)
        dist_dir = self.pa_installer._build_dist_if_necessary(self.cluster)
        self.pa_installer._copy_dist_to_host(self.cluster, dist_dir,
                                             self.cluster.master)

    @attr('smoketest')
    @docker_only
    def test_install_non_root(self):
        install_dir = '/home/app-admin'
        script = """
            set -e
            cp {mount_dir}/prestoadmin-*.tar.bz2 {install_dir}
            chown app-admin {install_dir}/prestoadmin-*.tar.bz2
            cd {install_dir}
            sudo -u app-admin tar jxf prestoadmin-*.tar.bz2
            cd prestoadmin
            sudo -u app-admin ./install-prestoadmin.sh
        """.format(mount_dir=self.cluster.mount_dir,
                   install_dir=install_dir)

        self.assertRaisesRegexp(OSError, 'mkdir: cannot create directory '
                                '`/var/log/prestoadmin\': Permission denied',
                                self.cluster.run_script_on_host, script,
                                self.cluster.master)

    @attr('smoketest')
    def test_install_from_different_dir(self):
        install_dir = '/opt'
        script = """
            set -e
            cp {mount_dir}/prestoadmin-*.tar.bz2 {install_dir}
            cd {install_dir}
            tar jxf prestoadmin-*.tar.bz2
             ./prestoadmin/install-prestoadmin.sh
        """.format(mount_dir=self.cluster.mount_dir,
                   install_dir=install_dir)

        self.assertRaisesRegexp(
            OSError,
            r'IOError: \[Errno 2\] No such file or directory: '
            r'\'/opt/prestoadmin-.*-py2-none-any.whl\'',
            self.cluster.run_script_on_host,
            script,
            self.cluster.master
        )

    @attr('smoketest', 'offline_installer')
    @docker_only
    def test_install_on_wrong_os_offline_installer(self):
        image = 'teradatalabs/ubuntu-trusty-python2.6'
        tag = BASE_IMAGES_TAG
        host = 'wrong-os-master'
        ubuntu_container = DockerCluster(host, [], DEFAULT_LOCAL_MOUNT_POINT,
                                         DEFAULT_DOCKER_MOUNT_POINT)

        if not DockerCluster._check_for_images(image, image, tag):
            raise RuntimeError("Docker images have not been created")

        try:
            ubuntu_container.start_containers(
                image + ':' + tag, cmd='tail -f /var/log/bootstrap.log')

            self.assertRaisesRegexp(
                OSError,
                r'ERROR\n'
                r'Paramiko could not be imported. This usually means that',
                self.pa_installer.install,
                cluster=ubuntu_container
            )
        finally:
            ubuntu_container.tear_down()

    @attr('smoketest')
    def test_cert_arg_to_installation_nonexistent_file(self):
        install_dir = '/opt'
        script = """
            set -e
            cp {mount_dir}/prestoadmin-*.tar.bz2 {install_dir}
            cd {install_dir}
            tar jxf prestoadmin-*.tar.bz2
            cd prestoadmin
             ./install-prestoadmin.sh dummy_cert.cert
        """.format(mount_dir=self.cluster.mount_dir,
                   install_dir=install_dir)
        output = self.cluster.run_script_on_host(script, self.cluster.master)
        self.assertRegexpMatches(output, r'Adding pypi.python.org as '
                                 'trusted\-host. Cannot find certificate '
                                 'file: dummy_cert.cert')

    @attr('smoketest')
    def test_cert_arg_to_installation_real_cert(self):
        self.cluster.copy_to_host(certifi.where(), self.cluster.master)
        install_dir = '/opt'
        cert_file = os.path.basename(certifi.where())
        script = """
            set -e
            cp {mount_dir}/prestoadmin-*.tar.bz2 {install_dir}
            cd {install_dir}
            tar jxf prestoadmin-*.tar.bz2
            cd prestoadmin
             ./install-prestoadmin.sh {mount_dir}/{cacert}
        """.format(mount_dir=self.cluster.mount_dir,
                   install_dir=install_dir,
                   cacert=cert_file)
        output = self.cluster.run_script_on_host(script, self.cluster.master)
        self.assertTrue('Adding pypi.python.org as trusted-host. Cannot find'
                        ' certificate file: %s' % cert_file not in output,
                        'Unable to find cert file; output: %s' % output)

    def test_additional_dirs_created(self):
        install_dir = '/opt'
        script = """
            set -e
            cp {mount_dir}/prestoadmin-*.tar.bz2 {install_dir}
            cd {install_dir}
            tar jxf prestoadmin-*.tar.bz2
            cd prestoadmin
             ./install-prestoadmin.sh
        """.format(mount_dir=self.cluster.mount_dir,
                   install_dir=install_dir)
        self.cluster.run_script_on_host(script, self.cluster.master)

        pa_etc_dir = '/etc/opt/prestoadmin'
        connectors_dir = pa_etc_dir + '/connectors'
        self.assert_path_exists(self.cluster.master, connectors_dir)

        coordinator_dir = pa_etc_dir + '/coordinator'
        self.assert_path_exists(self.cluster.master, coordinator_dir)

        workers_dir = pa_etc_dir + '/workers'
        self.assert_path_exists(self.cluster.master, workers_dir)
예제 #4
0
class TestInstallation(BaseProductTestCase):
    def setUp(self):
        super(TestInstallation, self).setUp()
        self.pa_installer = PrestoadminInstaller(self)
        self.setup_cluster(NoHadoopBareImageProvider, STANDALONE_BARE_CLUSTER)
        dist_dir = self.pa_installer._build_dist_if_necessary(self.cluster)
        self.pa_installer._copy_dist_to_host(self.cluster, dist_dir,
                                             self.cluster.master)

    @attr('smoketest')
    @docker_only
    def test_install_non_root(self):
        install_dir = '/home/app-admin'
        script = """
            set -e
            cp {mount_dir}/prestoadmin-*.tar.gz {install_dir}
            chown app-admin {install_dir}/prestoadmin-*.tar.gz
            cd {install_dir}
            sudo -u app-admin tar zxf prestoadmin-*.tar.gz
            cd prestoadmin
            sudo -u app-admin ./install-prestoadmin.sh
        """.format(mount_dir=self.cluster.mount_dir, install_dir=install_dir)

        self.cluster.run_script_on_host(script, self.cluster.master)

        pa_config_dir = '/home/app-admin/.prestoadmin'
        catalog_dir = os.path.join(pa_config_dir, 'catalog')
        self.assert_path_exists(self.cluster.master, catalog_dir)

        coordinator_dir = os.path.join(pa_config_dir, 'coordinator')
        self.assert_path_exists(self.cluster.master, coordinator_dir)

        workers_dir = os.path.join(pa_config_dir, 'workers')
        self.assert_path_exists(self.cluster.master, workers_dir)

    @attr('smoketest', 'offline_installer')
    @docker_only
    def test_install_on_wrong_os_offline_installer(self):
        image = 'teradatalabs/ubuntu-trusty-python2.6'
        tag = BASE_IMAGES_TAG
        host = 'wrong-os-master'
        ubuntu_container = DockerCluster(host, [], DEFAULT_LOCAL_MOUNT_POINT,
                                         DEFAULT_DOCKER_MOUNT_POINT)

        if not DockerCluster._check_for_images(image, image, tag):
            raise RuntimeError("Docker images have not been created")

        try:
            ubuntu_container.start_containers(
                image + ':' + tag, cmd='tail -f /var/log/bootstrap.log')

            self.assertRaisesRegexp(
                OSError, r'ERROR\n'
                r'Paramiko could not be imported. This usually means that',
                self.pa_installer.install,
                cluster=ubuntu_container)
        finally:
            ubuntu_container.tear_down()

    @attr('smoketest')
    def test_cert_arg_to_installation_nonexistent_file(self):
        install_dir = '~'
        script = """
            set -e
            cp {mount_dir}/prestoadmin-*.tar.gz {install_dir}
            cd {install_dir}
            tar zxf prestoadmin-*.tar.gz
            cd prestoadmin
             ./install-prestoadmin.sh dummy_cert.cert
        """.format(mount_dir=self.cluster.mount_dir, install_dir=install_dir)
        output = self.cluster.run_script_on_host(script, self.cluster.master)
        self.assertRegexpMatches(
            output, r'Adding pypi.python.org as '
            'trusted\-host. Cannot find certificate '
            'file: dummy_cert.cert')

    @attr('smoketest')
    def test_cert_arg_to_installation_real_cert(self):
        self.cluster.copy_to_host(certifi.where(), self.cluster.master)
        install_dir = '~'
        cert_file = os.path.basename(certifi.where())
        script = """
            set -e
            cp {mount_dir}/prestoadmin-*.tar.gz {install_dir}
            cd {install_dir}
            tar zxf prestoadmin-*.tar.gz
            cd prestoadmin
             ./install-prestoadmin.sh {mount_dir}/{cacert}
        """.format(mount_dir=self.cluster.mount_dir,
                   install_dir=install_dir,
                   cacert=cert_file)
        output = self.cluster.run_script_on_host(script, self.cluster.master)
        self.assertTrue(
            'Adding pypi.python.org as trusted-host. Cannot find'
            ' certificate file: %s' % cert_file not in output,
            'Unable to find cert file; output: %s' % output)

    def test_additional_dirs_created(self):
        install_dir = '~'
        script = """
            set -e
            cp {mount_dir}/prestoadmin-*.tar.gz {install_dir}
            cd {install_dir}
            tar zxf prestoadmin-*.tar.gz
            cd prestoadmin
             ./install-prestoadmin.sh
        """.format(mount_dir=self.cluster.mount_dir, install_dir=install_dir)
        self.cluster.run_script_on_host(script, self.cluster.master)

        self.assert_path_exists(self.cluster.master, get_catalog_directory())
        self.assert_path_exists(self.cluster.master,
                                get_coordinator_directory())
        self.assert_path_exists(self.cluster.master, get_workers_directory())
예제 #5
0
class TestInstallation(BaseProductTestCase):
    def setUp(self):
        super(TestInstallation, self).setUp()
        self.pa_installer = PrestoadminInstaller(self)
        self.setup_cluster(NoHadoopBareImageProvider(),
                           STANDALONE_BARE_CLUSTER)
        dist_dir = self.pa_installer._build_dist_if_necessary(self.cluster)
        self.pa_installer._copy_dist_to_host(self.cluster, dist_dir,
                                             self.cluster.master)

    @attr('smoketest')
    @docker_only
    def test_install_non_root(self):
        install_dir = '/home/app-admin'
        script = """
            set -e
            cp {mount_dir}/prestoadmin-*.tar.gz {install_dir}
            chown app-admin {install_dir}/prestoadmin-*.tar.gz
            cd {install_dir}
            sudo -u app-admin tar zxf prestoadmin-*.tar.gz
            cd prestoadmin
            sudo -u app-admin ./install-prestoadmin.sh
        """.format(mount_dir=self.cluster.mount_dir, install_dir=install_dir)

        self.cluster.run_script_on_host(script, self.cluster.master)

        pa_config_dir = '/home/app-admin/.prestoadmin'
        catalog_dir = os.path.join(pa_config_dir, 'catalog')
        self.assert_path_exists(self.cluster.master, catalog_dir)

        coordinator_dir = os.path.join(pa_config_dir, 'coordinator')
        self.assert_path_exists(self.cluster.master, coordinator_dir)

        workers_dir = os.path.join(pa_config_dir, 'workers')
        self.assert_path_exists(self.cluster.master, workers_dir)

    @attr('smoketest')
    def test_cert_arg_to_installation_nonexistent_file(self):
        install_dir = '~'
        script = """
            set -e
            cp {mount_dir}/prestoadmin-*.tar.gz {install_dir}
            cd {install_dir}
            tar zxf prestoadmin-*.tar.gz
            cd prestoadmin
             ./install-prestoadmin.sh dummy_cert.cert
        """.format(mount_dir=self.cluster.mount_dir, install_dir=install_dir)
        output = self.cluster.run_script_on_host(script, self.cluster.master)
        self.assertRegexpMatches(
            output, r'Adding pypi.python.org as '
            'trusted\-host. Cannot find certificate '
            'file: dummy_cert.cert')

    @attr('smoketest')
    def test_cert_arg_to_installation_real_cert(self):
        self.cluster.copy_to_host(certifi.where(), self.cluster.master)
        install_dir = '~'
        cert_file = os.path.basename(certifi.where())
        script = """
            set -e
            cp {mount_dir}/prestoadmin-*.tar.gz {install_dir}
            cd {install_dir}
            tar zxf prestoadmin-*.tar.gz
            cd prestoadmin
             ./install-prestoadmin.sh {mount_dir}/{cacert}
        """.format(mount_dir=self.cluster.mount_dir,
                   install_dir=install_dir,
                   cacert=cert_file)
        output = self.cluster.run_script_on_host(script, self.cluster.master)
        self.assertTrue(
            'Adding pypi.python.org as trusted-host. Cannot find'
            ' certificate file: %s' % cert_file not in output,
            'Unable to find cert file; output: %s' % output)

    def test_additional_dirs_created(self):
        install_dir = '~'
        script = """
            set -e
            cp {mount_dir}/prestoadmin-*.tar.gz {install_dir}
            cd {install_dir}
            tar zxf prestoadmin-*.tar.gz
            cd prestoadmin
             ./install-prestoadmin.sh
        """.format(mount_dir=self.cluster.mount_dir, install_dir=install_dir)
        self.cluster.run_script_on_host(script, self.cluster.master)

        self.assert_path_exists(self.cluster.master, get_catalog_directory())
        self.assert_path_exists(self.cluster.master,
                                get_coordinator_directory())
        self.assert_path_exists(self.cluster.master, get_workers_directory())
예제 #6
0
class TestInstallation(BaseProductTestCase):

    def setUp(self):
        super(TestInstallation, self).setUp()
        self.pa_installer = PrestoadminInstaller(self)
        self.setup_cluster(NoHadoopBareImageProvider(), self.BARE_CLUSTER)
        dist_dir = self.pa_installer._build_dist_if_necessary(self.cluster)
        self.pa_installer._copy_dist_to_host(self.cluster, dist_dir,
                                             self.cluster.master)

    @attr('smoketest')
    @docker_only
    def test_install_non_root(self):
        install_dir = '/home/app-admin'
        script = """
            set -e
            cp {mount_dir}/prestoadmin-*.tar.bz2 {install_dir}
            chown app-admin {install_dir}/prestoadmin-*.tar.bz2
            cd {install_dir}
            sudo -u app-admin tar jxf prestoadmin-*.tar.bz2
            cd prestoadmin
            sudo -u app-admin ./install-prestoadmin.sh
        """.format(mount_dir=self.cluster.mount_dir,
                   install_dir=install_dir)

        self.assertRaisesRegexp(OSError, 'mkdir: cannot create directory '
                                '`/var/log/prestoadmin\': Permission denied',
                                self.cluster.run_script_on_host, script,
                                self.cluster.master)

    @attr('smoketest')
    def test_install_from_different_dir(self):
        install_dir = '/opt'
        script = """
            set -e
            cp {mount_dir}/prestoadmin-*.tar.bz2 {install_dir}
            cd {install_dir}
            tar jxf prestoadmin-*.tar.bz2
             ./prestoadmin/install-prestoadmin.sh
        """.format(mount_dir=self.cluster.mount_dir,
                   install_dir=install_dir)

        self.assertRaisesRegexp(
            OSError,
            r'IOError: \[Errno 2\] No such file or directory: '
            r'\'/opt/prestoadmin-1.2-py2-none-any.whl\'',
            self.cluster.run_script_on_host,
            script,
            self.cluster.master
        )

    @attr('smoketest')
    @docker_only
    def test_install_on_wrong_os_offline_installer(self):
        image = 'ubuntu'
        tag = '14.04'
        host = image + '-master'
        ubuntu_container = DockerCluster(host, [], DEFAULT_LOCAL_MOUNT_POINT,
                                         DEFAULT_DOCKER_MOUNT_POINT)
        try:
            ubuntu_container.fetch_image_if_not_present(image, tag)
            ubuntu_container.start_containers(
                image + ':' + tag, cmd='tail -f /var/log/bootstrap.log')

            ubuntu_container.run_script_on_host(install_py26_script,
                                                ubuntu_container.master)
            ubuntu_container.exec_cmd_on_host(
                ubuntu_container.master, 'sudo apt-get -y install wget')

            self.assertRaisesRegexp(
                OSError,
                r'ERROR\n'
                r'Paramiko could not be imported. This usually means that',
                self.pa_installer.install,
                cluster=ubuntu_container
            )
        finally:
            ubuntu_container.tear_down()

    @attr('smoketest')
    def test_cert_arg_to_installation_nonexistent_file(self):
        install_dir = '/opt'
        script = """
            set -e
            cp {mount_dir}/prestoadmin-*.tar.bz2 {install_dir}
            cd {install_dir}
            tar jxf prestoadmin-*.tar.bz2
            cd prestoadmin
             ./install-prestoadmin.sh dummy_cert.cert
        """.format(mount_dir=self.cluster.mount_dir,
                   install_dir=install_dir)
        output = self.cluster.run_script_on_host(script, self.cluster.master)
        self.assertRegexpMatches(output, r'Adding pypi.python.org as '
                                 'trusted\-host. Cannot find certificate '
                                 'file: dummy_cert.cert')

    @attr('smoketest')
    def test_cert_arg_to_installation_real_cert(self):
        self.cluster.copy_to_host(certifi.where(), self.cluster.master)
        install_dir = '/opt'
        cert_file = os.path.basename(certifi.where())
        script = """
            set -e
            cp {mount_dir}/prestoadmin-*.tar.bz2 {install_dir}
            cd {install_dir}
            tar jxf prestoadmin-*.tar.bz2
            cd prestoadmin
             ./install-prestoadmin.sh {mount_dir}/{cacert}
        """.format(mount_dir=self.cluster.mount_dir,
                   install_dir=install_dir,
                   cacert=cert_file)
        output = self.cluster.run_script_on_host(script, self.cluster.master)
        self.assertTrue('Adding pypi.python.org as trusted-host. Cannot find'
                        ' certificate file: %s' % cert_file not in output,
                        'Unable to find cert file; output: %s' % output)
예제 #7
0
class TestInstallation(BaseProductTestCase):
    def setUp(self):
        super(TestInstallation, self).setUp()
        self.pa_installer = PrestoadminInstaller(self)
        self.setup_cluster(self.BARE_CLUSTER)
        dist_dir = self.pa_installer._build_dist_if_necessary(self.cluster)
        self.pa_installer._copy_dist_to_host(self.cluster, dist_dir, self.cluster.master)

    @attr("smoketest")
    @docker_only
    def test_install_non_root(self):
        install_dir = "/home/app-admin"
        script = """
            set -e
            cp {mount_dir}/prestoadmin-*.tar.bz2 {install_dir}
            chown app-admin {install_dir}/prestoadmin-*.tar.bz2
            cd {install_dir}
            sudo -u app-admin tar jxf prestoadmin-*.tar.bz2
            cd prestoadmin
            sudo -u app-admin ./install-prestoadmin.sh
        """.format(
            mount_dir=self.cluster.mount_dir, install_dir=install_dir
        )

        self.assertRaisesRegexp(
            OSError,
            "mkdir: cannot create directory " "`/var/log/prestoadmin': Permission denied",
            self.cluster.run_script_on_host,
            script,
            self.cluster.master,
        )

    @attr("smoketest")
    def test_install_from_different_dir(self):
        install_dir = "/opt"
        script = """
            set -e
            cp {mount_dir}/prestoadmin-*.tar.bz2 {install_dir}
            cd {install_dir}
            tar jxf prestoadmin-*.tar.bz2
             ./prestoadmin/install-prestoadmin.sh
        """.format(
            mount_dir=self.cluster.mount_dir, install_dir=install_dir
        )

        self.assertRaisesRegexp(
            OSError,
            r"IOError: \[Errno 2\] No such file or directory: " r"\'/opt/prestoadmin-1.1-py2-none-any.whl\'",
            self.cluster.run_script_on_host,
            script,
            self.cluster.master,
        )

    @attr("smoketest")
    @docker_only
    def test_install_on_wrong_os_offline_installer(self):
        image = "ubuntu"
        tag = "14.04"
        host = image + "-master"
        ubuntu_container = DockerCluster(host, [], DEFAULT_LOCAL_MOUNT_POINT, DEFAULT_DOCKER_MOUNT_POINT)
        try:
            ubuntu_container.fetch_image_if_not_present(image, tag)
            ubuntu_container.start_containers(image + ":" + tag, cmd="tail -f /var/log/bootstrap.log")

            ubuntu_container.run_script_on_host(install_py26_script, ubuntu_container.master)
            ubuntu_container.exec_cmd_on_host(ubuntu_container.master, "sudo apt-get -y install wget")

            self.assertRaisesRegexp(
                OSError,
                r"ERROR\n" r"Paramiko could not be imported. This usually means that",
                self.pa_installer.install,
                cluster=ubuntu_container,
            )
        finally:
            ubuntu_container.tear_down()

    @attr("smoketest")
    def test_cert_arg_to_installation_nonexistent_file(self):
        install_dir = "/opt"
        script = """
            set -e
            cp {mount_dir}/prestoadmin-*.tar.bz2 {install_dir}
            cd {install_dir}
            tar jxf prestoadmin-*.tar.bz2
            cd prestoadmin
             ./install-prestoadmin.sh dummy_cert.cert
        """.format(
            mount_dir=self.cluster.mount_dir, install_dir=install_dir
        )
        output = self.cluster.run_script_on_host(script, self.cluster.master)
        self.assertRegexpMatches(
            output, r"Adding pypi.python.org as " "trusted\-host. Cannot find certificate " "file: dummy_cert.cert"
        )

    @attr("smoketest")
    def test_cert_arg_to_installation_real_cert(self):
        self.cluster.copy_to_host(certifi.where(), self.cluster.master)
        install_dir = "/opt"
        cert_file = os.path.basename(certifi.where())
        script = """
            set -e
            cp {mount_dir}/prestoadmin-*.tar.bz2 {install_dir}
            cd {install_dir}
            tar jxf prestoadmin-*.tar.bz2
            cd prestoadmin
             ./install-prestoadmin.sh {mount_dir}/{cacert}
        """.format(
            mount_dir=self.cluster.mount_dir, install_dir=install_dir, cacert=cert_file
        )
        output = self.cluster.run_script_on_host(script, self.cluster.master)
        self.assertTrue(
            "Adding pypi.python.org as trusted-host. Cannot find" " certificate file: %s" % cert_file not in output,
            "Unable to find cert file; output: %s" % output,
        )