Esempio n. 1
0
def setup_package():
    global lc_fqdn, _daemons_running_externally
    conf = get_conf()

    if not 'BEAKER_LABCONTROLLER_HOSTNAME' in os.environ:
        # Need to start the lab controller daemons ourselves
        with session.begin():
            user = data_setup.create_user(user_name=conf.get('USERNAME').decode('utf8'), password=conf.get('PASSWORD'))
            lc = data_setup.create_labcontroller(fqdn=u'localhost', user=user)
        processes.extend([
            Process('beaker-proxy',
                    args=['python', '../LabController/src/bkr/labcontroller/main.py',
                          '-c', config_file, '-f'],
                    listen_port=8000,
                    stop_signal=signal.SIGTERM),
            Process('beaker-provision',
                    args=['python', '../LabController/src/bkr/labcontroller/provision.py',
                          '-c', config_file, '-f'],
                    stop_signal=signal.SIGTERM),
            Process('beaker-watchdog',
                    args=['python', '../LabController/src/bkr/labcontroller/watchdog.py',
                          '-c', config_file, '-f'],
                    stop_signal=signal.SIGTERM),
        ])
        lc_fqdn = u'localhost'
    else:
        _daemons_running_externally = True
        # We have been passed a space seperated list of LCs
        lab_controllers = os.environ.get('BEAKER_LABCONTROLLER_HOSTNAME').decode('utf8')
        lab_controllers_list = lab_controllers.split()
        # Just get the last one, it shouldn't matter to us
        lab_controller = lab_controllers_list.pop()
        # Make sure that the LC is in the DB
        data_setup.create_labcontroller(fqdn=lab_controller)
        lc_fqdn = lab_controller

    # Clear out any existing job logs, so that they are registered correctly 
    # when first created.
    # If we've been passed a remote hostname for the LC, we assume it's been 
    # freshly provisioned and the dir will already be empty.
    shutil.rmtree(conf.get('CACHEPATH'), ignore_errors=True)

    try:
        for process in processes:
            process.start()
    except:
        for process in processes:
            process.stop()
        raise
Esempio n. 2
0
    def test_on_error_warns_if_server_version_does_not_match(self):
        fake_server = Process(
            'http_server.py',
            args=[
                sys.executable,
                pkg_resources.resource_filename('bkr.inttest',
                                                'http_server.py'), '--base',
                '/notexist', '--add-response-header', 'X-Beaker-Version:999.3'
            ],
            listen_port=19998)
        fake_server.start()
        self.addCleanup(fake_server.stop)

        # use AUTH_METHOD=none because we can't authenticate to the fake server
        config = create_client_config(hub_url='http://localhost:19998',
                                      auth_method=u'none')
        try:
            run_client(['bkr', 'system-status', 'asdf.example.com'],
                       config=config)
            self.fail('should raise')
        except ClientError as e:
            self.assertEquals(
                e.stderr_output,
                'WARNING: client version is %s but server version is 999.3\n'
                'HTTP error: 404 Client Error: Not Found\n' % __version__)
Esempio n. 3
0
 def setUpClass(cls):
     cls.task_server = Process(
         'http_server.py',
         args=[sys.executable, _http_server, '--base', _sync_tasks_dir],
         listen_port=19998)
     cls.task_server.start()
     cls.task_url = 'http://localhost:19998/'
Esempio n. 4
0
 def setUp(self):
     # set up a directory for our dummy job logs, with an HTTP server
     self.logs_dir = tempfile.mkdtemp(prefix='beaker-client-test-job-logs')
     self.addCleanup(shutil.rmtree, self.logs_dir, ignore_errors=True)
     self.archive_server = Process('http_server.py', args=[sys.executable,
             pkg_resources.resource_filename('bkr.inttest', 'http_server.py'),
             '--base', self.logs_dir], listen_port=19998)
     self.archive_server.start()
     self.addCleanup(self.archive_server.stop)
     self.log_server_url = u'http://localhost:19998/'
     # job for testing
     with session.begin():
         self.job = data_setup.create_completed_job()
         self.recipe = self.job.recipesets[0].recipes[0]
         os.mkdir(os.path.join(self.logs_dir, 'R'))
         open(os.path.join(self.logs_dir, 'R', 'dummy.txt'), 'w').write('recipe\n')
         self.recipe.logs[:] = [LogRecipe(server=self.log_server_url,
                 path=u'R', filename=u'dummy.txt')]
         os.mkdir(os.path.join(self.logs_dir, 'T'))
         open(os.path.join(self.logs_dir, 'T', 'dummy.txt'), 'w').write('task\n')
         self.recipe.tasks[0].logs[:] = [LogRecipeTask(server=self.log_server_url,
                 path=u'T', filename=u'dummy.txt')]
         os.mkdir(os.path.join(self.logs_dir, 'TR'))
         open(os.path.join(self.logs_dir, 'TR', 'dummy.txt'), 'w').write('result\n')
         self.recipe.tasks[0].results[0].logs[:] = [LogRecipeTaskResult(
                 server=self.log_server_url,
                 path=u'TR', filename=u'dummy.txt')]
Esempio n. 5
0
 def setUpClass(cls):
     cls.distro_server = Process('http_server.py',
                                 args=[
                                     sys.executable,
                                     pkg_resources.resource_filename(
                                         'bkr.inttest', 'http_server.py'),
                                     '--base', '/notexist'
                                 ],
                                 listen_port=19998)
     cls.distro_server.start()
 def setUpClass(cls):
     # Need to populate a directory with a fake distro tree, and serve it over 
     # HTTP, so that beaker-expire-distros can expire other missing distros.
     cls.distro_dir = tempfile.mkdtemp()
     os.mkdir(os.path.join(cls.distro_dir, 'fakedistros'))
     open(os.path.join(cls.distro_dir, 'fakedistros/MattAwesomelinux9'), 'w').write('lol')
     cls.distro_server = Process('http_server.py', args=[sys.executable,
                 pkg_resources.resource_filename('bkr.inttest', 'http_server.py'),
                 '--base', cls.distro_dir],
             listen_port=19998)
     cls.distro_server.start()
Esempio n. 7
0
def setup_package():
    processes.extend([
        Process('Xvfb', args=['Xvfb', ':4', '-extension', 'GLX', '-noreset',
                '-listen', 'tcp', '-screen', '0', '1920x1200x24'], listen_port=6004),
    ])
    try:
        for process in processes:
            process.start()
    except:
        for process in processes:
            process.stop()
        raise
    os.environ['DISPLAY'] = ':4' # for WebDriver
Esempio n. 8
0
 def setUpClass(cls):
     # Need to populate a directory with fake images, and serve it over 
     # HTTP, so that beaker-pxemenu can download the images when it builds 
     # the menus.
     cls.distro_dir = tempfile.mkdtemp()
     os.mkdir(os.path.join(cls.distro_dir, 'pxeboot'))
     open(os.path.join(cls.distro_dir, 'pxeboot/vmlinuz'), 'w').write('lol')
     open(os.path.join(cls.distro_dir, 'pxeboot/initrd'), 'w').write('lol')
     cls.distro_server = Process('http_server.py', args=[sys.executable,
                 pkg_resources.resource_filename('bkr.inttest', 'http_server.py'),
                 '--base', cls.distro_dir],
             listen_port=19998)
     cls.distro_server.start()
     cls.tftp_dir = tempfile.mkdtemp()
Esempio n. 9
0
 def setUp(self):
     # We will point beaker-repo-update at this fake version of the
     # harness repos that we normally publish on
     # https://beaker-project.org/yum/harness/
     self.harness_repo_dir = tempfile.mkdtemp()
     self.addCleanup(shutil.rmtree, self.harness_repo_dir)
     self.harness_repo_server = Process('http_server.py',
             args=[sys.executable,
                   pkg_resources.resource_filename('bkr.inttest', 'http_server.py'),
                   '--base', self.harness_repo_dir],
             listen_port=19998)
     self.harness_repo_server.start()
     self.addCleanup(self.harness_repo_server.stop)
     self.harness_repo_url = 'http://localhost:19998/'
Esempio n. 10
0
 def setUp(self):
     self.product_docroot = tempfile.mkdtemp(
         prefix='beaker-fake-product-server')
     self.addCleanup(shutil.rmtree,
                     self.product_docroot,
                     ignore_errors=True)
     self.product_server = Process('http_server.py',
                                   args=[
                                       sys.executable,
                                       pkg_resources.resource_filename(
                                           'bkr.inttest', 'http_server.py'),
                                       '--base', self.product_docroot
                                   ],
                                   listen_port=19998)
     self.product_server.start()
     self.addCleanup(self.product_server.stop)
Esempio n. 11
0
    def setUp(self):
        # XXX We should eventually configure these redirect tests
        # to work with apache, until then, we do this...
        test_id = self.id()
        if test_id.endswith('test_301_redirect') or \
              test_id.endswith('test_302_redirect'):
            self.force_local_archive_server = True
        else:
            self.force_local_archive_server = False

        if 'BEAKER_LABCONTROLLER_HOSTNAME' in os.environ and not \
            self.force_local_archive_server:
            self.logs_dir = config.get('basepath.logs')
            self.recipe_logs_dir = os.path.join(self.logs_dir, 'recipe')
            self.log_server = os.environ['BEAKER_LABCONTROLLER_HOSTNAME']
            self.log_server_url = 'http://%s/logs' % self.log_server
            self.addCleanup(shutil.rmtree,
                            self.recipe_logs_dir,
                            ignore_errors=True)
        else:
            self.logs_dir = tempfile.mkdtemp(prefix='beaker-test-log-delete')
            self.recipe_logs_dir = os.path.join(self.logs_dir, 'recipe')
            self.archive_server = Process('http_server.py',
                                          args=[
                                              sys.executable,
                                              pkg_resources.resource_filename(
                                                  'bkr.inttest',
                                                  'http_server.py'), '--base',
                                              self.logs_dir, '--writable'
                                          ],
                                          listen_port=19998)
            self.archive_server.start()
            self.log_server = 'localhost:19998'
            self.log_server_url = 'http://%s' % self.log_server
            self.addCleanup(shutil.rmtree, self.logs_dir, ignore_errors=True)
            self.addCleanup(self.archive_server.stop)
        try:
            os.mkdir(self.recipe_logs_dir)
        except OSError, e:
            if e.errno == errno.EEXIST:
                # perhaps something else created it and did not clean it up
                pass
            else:
                raise