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
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()
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(), }
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() }
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() }
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()
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()
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()
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()
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()
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)
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)
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
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