From 15d84d30ba328276f29ab38c867c56e07908bfb1 Mon Sep 17 00:00:00 2001 From: "Jens L." Date: Tue, 27 May 2025 13:18:03 +0200 Subject: [PATCH] tests/e2e: fix flaky SAML Source test (#14708) --- authentik/root/test_runner.py | 7 +++++++ tests/e2e/docker-compose.yml | 1 + tests/e2e/utils.py | 23 ++++++++++++++--------- 3 files changed, 22 insertions(+), 9 deletions(-) diff --git a/authentik/root/test_runner.py b/authentik/root/test_runner.py index 867469d2b0..dd749dfbaa 100644 --- a/authentik/root/test_runner.py +++ b/authentik/root/test_runner.py @@ -31,6 +31,8 @@ class PytestTestRunner(DiscoverRunner): # pragma: no cover if kwargs.get("randomly_seed", None): self.args.append(f"--randomly-seed={kwargs['randomly_seed']}") + if kwargs.get("no_capture", False): + self.args.append("--capture=no") settings.TEST = True settings.CELERY["task_always_eager"] = True @@ -64,6 +66,11 @@ class PytestTestRunner(DiscoverRunner): # pragma: no cover "Default behaviour: use random.Random().getrandbits(32), so the seed is" "different on each run.", ) + parser.add_argument( + "--no-capture", + action="store_true", + help="Disable any capturing of stdout/stderr during tests.", + ) def run_tests(self, test_labels, extra_tests=None, **kwargs): """Run pytest and return the exitcode. diff --git a/tests/e2e/docker-compose.yml b/tests/e2e/docker-compose.yml index d0d1ecd171..25d0ade7b5 100644 --- a/tests/e2e/docker-compose.yml +++ b/tests/e2e/docker-compose.yml @@ -1,5 +1,6 @@ services: chrome: + platform: linux/x86_64 image: docker.io/selenium/standalone-chrome:136.0 volumes: - /dev/shm:/dev/shm diff --git a/tests/e2e/utils.py b/tests/e2e/utils.py index 3ed65d7a25..90db46e371 100644 --- a/tests/e2e/utils.py +++ b/tests/e2e/utils.py @@ -166,30 +166,35 @@ class SeleniumTestCase(DockerTestCase, StaticLiveServerTestCase): print("::group::authentik Logs", file=stderr) apps.get_app_config("authentik_tenants").ready() self.wait_timeout = 60 + self.logger = get_logger() self.driver = self._get_driver() self.driver.implicitly_wait(30) self.wait = WebDriverWait(self.driver, self.wait_timeout) - self.logger = get_logger() self.user = create_test_admin_user() super().setUp() def _get_driver(self) -> WebDriver: count = 0 - try: - opts = webdriver.ChromeOptions() - opts.add_argument("--disable-search-engine-choice-screen") - return webdriver.Chrome(options=opts) - except WebDriverException: - pass + opts = webdriver.ChromeOptions() + opts.add_argument("--disable-search-engine-choice-screen") + # This breaks selenium when running remotely...? + # opts.set_capability("goog:loggingPrefs", {"browser": "ALL"}) + opts.add_experimental_option( + "prefs", + { + "profile.password_manager_leak_detection": False, + }, + ) while count < RETRIES: try: driver = webdriver.Remote( command_executor="http://localhost:4444/wd/hub", - options=webdriver.ChromeOptions(), + options=opts, ) driver.maximize_window() return driver - except WebDriverException: + except WebDriverException as exc: + self.logger.warning("Failed to setup webdriver", exc=exc) count += 1 raise ValueError(f"Webdriver failed after {RETRIES}.")