Ejemplo n.º 1
0
 def create_pytest_bindings(self):
     sel_json = random_port()
     sel_smtp = random_port()
     bindings = {'JSON': (sel_json, sel_json), 'SMTP': (sel_smtp, sel_smtp)}
     self.env_details['JSON'] = sel_json
     self.env_details['SMTP'] = sel_smtp
     return bindings
Ejemplo n.º 2
0
 def create_pytest_bindings(self):
     sel_json = random_port()
     sel_smtp = random_port()
     bindings = {'JSON': (sel_json, sel_json), 'SMTP': (sel_smtp, sel_smtp)}
     self.env_details['JSON'] = sel_json
     self.env_details['SMTP'] = sel_smtp
     return bindings
Ejemplo n.º 3
0
def main(watch, vnc, webdriver, image, vncviewer, random_ports):
    """Main function for running"""

    ip = '127.0.0.1'

    print("Starting container...")
    vnc = random_port() if random_ports else vnc
    webdriver = random_port() if random_ports else webdriver

    dkb = SeleniumDocker(bindings={
        'VNC_PORT': (5999, vnc),
        'WEBDRIVER': (4444, webdriver)
    },
                         image=image)
    dkb.run()

    if watch:
        print("")
        print("  Waiting for VNC port to open...")
        try:
            wait_for(lambda: vnc_ready(ip, vnc),
                     num_sec=60,
                     delay=2,
                     message="Wait for VNC Port")
        except TimedOutError:
            print("   Could not wait for VNC port, terminating...")
            dkb.kill()
            dkb.remove()
            sys.exit(127)

        print("  Initiating VNC watching...")
        if vncviewer:
            viewer = vncviewer
            if '%I' in viewer or '%P' in viewer:
                viewer = viewer.replace('%I', ip).replace('%P', str(vnc))
                ipport = None
            else:
                ipport = f'{ip}:{vnc}'
            cmd = viewer.split()
            if ipport:
                cmd.append(ipport)
        else:
            cmd = ['xdg-open', f'vnc://{ip}:{vnc}']
        subprocess.Popen(cmd)

    print(" Hit Ctrl+C to end container")
    try:
        dkb.wait()
    except KeyboardInterrupt:
        print(" Killing Container.....please wait...")
    dkb.kill()
    dkb.remove()
Ejemplo n.º 4
0
 def parse_config(self):
     """
     Reads the config data and sets up values
     """
     if not self.config:
         return False
     self.log_dir = local(self.config.get("log_dir", log_path))
     self.log_dir.ensure(dir=True)
     self.artifact_dir = local(self.config.get("artifact_dir", log_path.join("artifacts")))
     self.artifact_dir.ensure(dir=True)
     self.logger = create_logger("artifactor", self.log_dir.join("artifactor.log").strpath)
     self.squash_exceptions = self.config.get("squash_exceptions", False)
     if not self.log_dir:
         print("!!! Log dir must be specified in yaml")
         sys.exit(127)
     if not self.artifact_dir:
         print("!!! Artifact dir must be specified in yaml")
         sys.exit(127)
     self.config["zmq_socket_address"] = "tcp://127.0.0.1:{}".format(random_port())
     self.setup_plugin_instances()
     self.start_server()
     self.global_data = {
         "artifactor_config": self.config,
         "log_dir": self.log_dir.strpath,
         "artifact_dir": self.artifact_dir.strpath,
         "artifacts": dict(),
         "old_artifacts": dict(),
     }
Ejemplo n.º 5
0
 def parse_config(self):
     """
     Reads the config data and sets up values
     """
     if not self.config:
         return False
     self.log_dir = local(self.config.get('log_dir', log_path))
     self.log_dir.ensure(dir=True)
     self.artifact_dir = local(self.config.get('artifact_dir', log_path.join('artifacts')))
     self.artifact_dir.ensure(dir=True)
     self.logger = create_logger('artifactor', self.log_dir.join('artifactor.log').strpath)
     self.squash_exceptions = self.config.get('squash_exceptions', False)
     if not self.log_dir:
         print("!!! Log dir must be specified in yaml")
         sys.exit(127)
     if not self.artifact_dir:
         print("!!! Artifact dir must be specified in yaml")
         sys.exit(127)
     self.config['zmq_socket_address'] = 'tcp://127.0.0.1:{}'.format(random_port())
     self.setup_plugin_instances()
     self.start_server()
     self.global_data = {
         'artifactor_config': self.config,
         'log_dir': self.log_dir.strpath,
         'artifact_dir': self.artifact_dir.strpath,
         'artifacts': dict(),
         'old_artifacts': dict()
     }
Ejemplo n.º 6
0
 def parse_config(self):
     """
     Reads the config data and sets up values
     """
     if not self.config:
         return False
     self.log_dir = local(self.config.get('log_dir', log_path))
     self.log_dir.ensure(dir=True)
     self.artifact_dir = local(
         self.config.get('artifact_dir', log_path.join('artifacts')))
     self.artifact_dir.ensure(dir=True)
     self.logger = create_logger(
         'artifactor',
         self.log_dir.join('artifactor.log').strpath)
     self.squash_exceptions = self.config.get('squash_exceptions', False)
     if not self.log_dir:
         print("!!! Log dir must be specified in yaml")
         sys.exit(127)
     if not self.artifact_dir:
         print("!!! Artifact dir must be specified in yaml")
         sys.exit(127)
     self.config['zmq_socket_address'] = 'tcp://127.0.0.1:{}'.format(
         random_port())
     self.setup_plugin_instances()
     self.start_server()
     self.global_data = {
         'artifactor_config': self.config,
         'log_dir': self.log_dir.strpath,
         'artifact_dir': self.artifact_dir.strpath,
         'artifacts': dict(),
         'old_artifacts': dict()
     }
Ejemplo n.º 7
0
def main(watch, vnc, webdriver, image, vncviewer, random_ports):
    """Main function for running"""

    ip = '127.0.0.1'

    print("Starting container...")
    vnc = random_port() if random_ports else vnc
    webdriver = random_port() if random_ports else webdriver

    dkb = SeleniumDocker(bindings={'VNC_PORT': (5999, vnc),
                                   'WEBDRIVER': (4444, webdriver)},
                         image=image)
    dkb.run()

    if watch:
        print("")
        print("  Waiting for VNC port to open...")
        try:
            wait_for(lambda: vnc_ready(ip, vnc), num_sec=60, delay=2, message="Wait for VNC Port")
        except TimedOutError:
            print("   Could not wait for VNC port, terminating...")
            dkb.kill()
            dkb.remove()
            sys.exit(127)

        print("  Initiating VNC watching...")
        if vncviewer:
            viewer = vncviewer
            if '%I' in viewer or '%P' in viewer:
                viewer = viewer.replace('%I', ip).replace('%P', str(vnc))
                ipport = None
            else:
                ipport = '{}:{}'.format(ip, vnc)
            cmd = viewer.split()
            if ipport:
                cmd.append(ipport)
        else:
            cmd = ['xdg-open', 'vnc://{}:{}'.format(ip, vnc)]
        subprocess.Popen(cmd)

    print(" Hit Ctrl+C to end container")
    try:
        dkb.wait()
    except KeyboardInterrupt:
        print(" Killing Container.....please wait...")
    dkb.kill()
    dkb.remove()
Ejemplo n.º 8
0
    def __init__(self, **args):
        links = []
        self.args = args
        self.base_branch = 'master'
        self.validate_args()
        self.display_banner()
        self.process_appliance()
        self.cache_files()
        self.create_pytest_command()
        if not self.args['use_wharf']:
            self.sel_vnc_port = random_port()
            sel = SeleniumDocker(
                bindings={'VNC_PORT': (5999, self.sel_vnc_port)},
                image=self.args['selff'],
                dry_run=self.args['dry_run'])
            sel.run()
            sel_container_name = sel.sel_name
            links = [(sel_container_name, 'selff')]
        self.pytest_name = self.args['test_id']
        self.create_pytest_envvars()
        self.handle_pr()
        self.log_path = self.create_log_path()
        self.pytest_bindings = self.create_pytest_bindings()

        if self.args['dry_run']:
            for i in self.env_details:
                print('export {}="{}"'.format(i, self.env_details[i]))
            print(self.env_details)

        pytest = PytestDocker(name=self.pytest_name,
                              bindings=self.pytest_bindings,
                              env=self.env_details,
                              log_path=self.log_path,
                              links=links,
                              pytest_con=self.args['pytest_con'],
                              artifactor_dir=self.args['artifactor_dir'],
                              dry_run=self.args['dry_run'])
        pytest.run()

        if not self.args['nowait']:
            self.handle_watch()
            if self.args['dry_run']:
                with open(os.path.join(self.log_path, 'setup.txt'), "w") as f:
                    f.write("finshed")

            try:
                pytest.wait()
            except KeyboardInterrupt:
                print("  TEST INTERRUPTED....KILLING ALL THE THINGS")
                pass
            pytest.kill()
            pytest.remove()
            if not self.args['use_wharf']:
                sel.kill()
                sel.remove()
            self.handle_output()
Ejemplo n.º 9
0
def get_client(art_config, pytest_config):
    if art_config and not UNDER_TEST:
        port = getattr(pytest_config.option, 'artifactor_port', None) or \
            art_config.get('server_port') or random_port()
        pytest_config.option.artifactor_port = port
        art_config['server_port'] = port
        return ArtifactorClient(art_config['server_address'],
                                art_config['server_port'])
    else:
        return DummyClient()
Ejemplo n.º 10
0
def get_client(art_config, pytest_config):
    if art_config and not UNDER_TEST:
        port = getattr(pytest_config.option, 'artifactor_port', None) or \
            art_config.get('server_port') or random_port()
        pytest_config.option.artifactor_port = port
        art_config['server_port'] = port
        return ArtifactorClient(
            art_config['server_address'], art_config['server_port'])
    else:
        return DummyClient()
Ejemplo n.º 11
0
    def __init__(self, **args):
        links = []
        self.args = args
        self.base_branch = 'master'
        self.validate_args()
        self.display_banner()
        self.process_appliance()
        self.cache_files()
        self.create_pytest_command()
        if not self.args['use_wharf']:
            self.sel_vnc_port = random_port()
            sel = SeleniumDocker(bindings={'VNC_PORT': (5999, self.sel_vnc_port)},
                                 image=self.args['selff'], dry_run=self.args['dry_run'])
            sel.run()
            sel_container_name = sel.sel_name
            links = [(sel_container_name, 'selff')]
        self.pytest_name = self.args['test_id']
        self.create_pytest_envvars()
        self.handle_pr()
        self.log_path = self.create_log_path()
        self.pytest_bindings = self.create_pytest_bindings()

        if self.args['dry_run']:
            for i in self.env_details:
                print('export {}="{}"'.format(i, self.env_details[i]))
            print(self.env_details)

        pytest = PytestDocker(name=self.pytest_name, bindings=self.pytest_bindings,
                              env=self.env_details, log_path=self.log_path,
                              links=links,
                              pytest_con=self.args['pytest_con'],
                              artifactor_dir=self.args['artifactor_dir'],
                              dry_run=self.args['dry_run'])
        pytest.run()

        if not self.args['nowait']:
            self.handle_watch()
            if self.args['dry_run']:
                with open(os.path.join(self.log_path, 'setup.txt'), "w") as f:
                    f.write("finshed")

            try:
                pytest.wait()
            except KeyboardInterrupt:
                print("  TEST INTERRUPTED....KILLING ALL THE THINGS")
                pass
            pytest.kill()
            pytest.remove()
            if not self.args['use_wharf']:
                sel.kill()
                sel.remove()
            self.handle_output()
Ejemplo n.º 12
0
def main(run_id, port):
    """Main function for running artifactor server"""
    port = port if port else random_port()
    try:
        run(port, run_id)
        print("Artifactor server running on port: ", port)
    except Exception as e:
        import traceback
        import sys
        with log_path.join('artifactor_crash.log').open('w') as f:
            print(e, file=f)
            print(e, file=sys.stderr)
            tb = '\n'.join(traceback.format_tb(sys.exc_traceback))
            print(tb, file=f)
            print(tb, file=sys.stderr)
Ejemplo n.º 13
0
def main(run_id, port):
    """Main function for running artifactor server"""
    port = port if port else random_port()
    try:
        run(port, run_id)
        print("Artifactor server running on port: ", port)
    except Exception as e:
        import traceback
        import sys

        with log_path.join("artifactor_crash.log").open("w") as f:
            print(e, file=f)
            print(e, file=sys.stderr)
            tb = "\n".join(traceback.format_tb(sys.exc_traceback))
            print(tb, file=f)
            print(tb, file=sys.stderr)
Ejemplo n.º 14
0
def smtp_test(request, appliance):
    """Fixture, which prepares the appliance for e-mail capturing tests

    Returns: :py:class:`util.smtp_collector_client.SMTPCollectorClient` instance.
    """
    logger.info("Preparing start for e-mail collector")
    ports = env.get("mail_collector", {}).get("ports", {})
    mail_server_port = ports.get("smtp", False) or os.getenv(
        'SMTP', False) or random_port()
    mail_query_port = ports.get("json", False) or os.getenv(
        'JSON', False) or random_port()
    my_ip = my_ip_address()
    logger.info("Mind that it needs ports %s and %s open", mail_query_port,
                mail_server_port)
    appliance.server.settings.update_smtp_server({
        'host': my_ip,
        'port': str(mail_server_port),
        'auth': "none"
    })
    server_filename = scripts_path.join('smtp_collector.py').strpath
    server_command = server_filename + " --smtp-port {} --query-port {}".format(
        mail_server_port, mail_query_port)
    logger.info("Starting mail collector %s", server_command)
    collector = None

    def _finalize():
        if collector is None:
            return
        logger.info("Sending KeyboardInterrupt to collector")
        try:
            collector.send_signal(signal.SIGINT)
        except OSError as e:
            # TODO: Better logging.
            logger.exception(e)
            logger.error("Something happened to the e-mail collector!")
            return
        time.sleep(2)
        if collector.poll() is None:
            logger.info("Sending SIGTERM to collector")
            collector.send_signal(signal.SIGTERM)
            time.sleep(5)
            if collector.poll() is None:
                logger.info("Sending SIGKILL to collector")
                collector.send_signal(signal.SIGKILL)
        collector.wait()
        logger.info("Collector finished")
        logger.info("Cleaning up smtp setup in CFME")

    collector = subprocess.Popen(server_command, shell=True)
    request.addfinalizer(_finalize)
    logger.info("Collector pid %s", collector.pid)
    logger.info("Waiting for collector to become alive.")
    time.sleep(3)
    assert collector.poll(
    ) is None, "Collector has died. Something must be blocking selected ports"
    logger.info("Collector alive")
    query_port_open = net_check_remote(mail_query_port, my_ip, force=True)
    server_port_open = net_check_remote(mail_server_port, my_ip, force=True)
    assert query_port_open and server_port_open,\
        'Ports {} and {} on the machine executing the tests are closed.\n'\
        'The ports are randomly chosen -> turn firewall off.'\
        .format(mail_query_port, mail_server_port)
    client = SMTPCollectorClient(my_ip, mail_query_port)
    client.set_test_name(request.node.name)
    client.clear_database()
    return client
Ejemplo n.º 15
0
def smtp_test(request, appliance):
    """Fixture, which prepares the appliance for e-mail capturing tests

    Returns: :py:class:`util.smtp_collector_client.SMTPCollectorClient` instance.
    """
    logger.info("Preparing start for e-mail collector")
    ports = env.get("mail_collector", {}).get("ports", {})
    mail_server_port = ports.get("smtp", False) or os.getenv('SMTP', False) or random_port()
    mail_query_port = ports.get("json", False) or os.getenv('JSON', False) or random_port()
    my_ip = my_ip_address()
    logger.info("Mind that it needs ports %s and %s open", mail_query_port, mail_server_port)
    appliance.server.settings.update_smtp_server({
        'host': my_ip,
        'port': str(mail_server_port),
        'auth': "none"
    })
    server_filename = scripts_path.join('smtp_collector.py').strpath
    server_command = server_filename + " --smtp-port {} --query-port {}".format(
        mail_server_port,
        mail_query_port
    )
    logger.info("Starting mail collector %s", server_command)
    collector = None

    def _finalize():
        if collector is None:
            return
        logger.info("Sending KeyboardInterrupt to collector")
        try:
            collector.send_signal(signal.SIGINT)
        except OSError as e:
            # TODO: Better logging.
            logger.exception(e)
            logger.error("Something happened to the e-mail collector!")
            return
        time.sleep(2)
        if collector.poll() is None:
            logger.info("Sending SIGTERM to collector")
            collector.send_signal(signal.SIGTERM)
            time.sleep(5)
            if collector.poll() is None:
                logger.info("Sending SIGKILL to collector")
                collector.send_signal(signal.SIGKILL)
        collector.wait()
        logger.info("Collector finished")
        logger.info("Cleaning up smtp setup in CFME")
    collector = subprocess.Popen(server_command, shell=True)
    request.addfinalizer(_finalize)
    logger.info("Collector pid %s", collector.pid)
    logger.info("Waiting for collector to become alive.")
    time.sleep(3)
    assert collector.poll() is None, "Collector has died. Something must be blocking selected ports"
    logger.info("Collector alive")
    query_port_open = net_check_remote(mail_query_port, my_ip, force=True)
    server_port_open = net_check_remote(mail_server_port, my_ip, force=True)
    assert query_port_open and server_port_open,\
        'Ports {} and {} on the machine executing the tests are closed.\n'\
        'The ports are randomly chosen -> turn firewall off.'\
        .format(mail_query_port, mail_server_port)
    client = SMTPCollectorClient(
        my_ip,
        mail_query_port
    )
    client.set_test_name(request.node.name)
    client.clear_database()
    return client