tests/e2e: fallback to gh-master if outpost docker image cannot be found for PR
Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org>
This commit is contained in:
parent
036a4e86e2
commit
8a791c4eac
|
@ -15,14 +15,7 @@ from authentik.flows.models import Flow
|
||||||
from authentik.outposts.managed import MANAGED_OUTPOST
|
from authentik.outposts.managed import MANAGED_OUTPOST
|
||||||
from authentik.outposts.models import Outpost, OutpostType
|
from authentik.outposts.models import Outpost, OutpostType
|
||||||
from authentik.providers.ldap.models import LDAPProvider
|
from authentik.providers.ldap.models import LDAPProvider
|
||||||
from tests.e2e.utils import (
|
from tests.e2e.utils import USER, SeleniumTestCase, apply_migration, object_manager, retry
|
||||||
USER,
|
|
||||||
SeleniumTestCase,
|
|
||||||
apply_migration,
|
|
||||||
get_docker_tag,
|
|
||||||
object_manager,
|
|
||||||
retry,
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
@skipUnless(platform.startswith("linux"), "requires local docker")
|
@skipUnless(platform.startswith("linux"), "requires local docker")
|
||||||
|
@ -40,7 +33,7 @@ class TestProviderLDAP(SeleniumTestCase):
|
||||||
"""Start ldap container based on outpost created"""
|
"""Start ldap container based on outpost created"""
|
||||||
client: DockerClient = from_env()
|
client: DockerClient = from_env()
|
||||||
container = client.containers.run(
|
container = client.containers.run(
|
||||||
image=f"beryju.org/authentik/outpost-ldap:{get_docker_tag()}",
|
image=self.get_container_image("beryju.org/authentik/outpost-ldap"),
|
||||||
detach=True,
|
detach=True,
|
||||||
network_mode="host",
|
network_mode="host",
|
||||||
auto_remove=True,
|
auto_remove=True,
|
||||||
|
|
|
@ -16,14 +16,7 @@ from authentik.flows.models import Flow
|
||||||
from authentik.outposts.models import DockerServiceConnection, Outpost, OutpostConfig, OutpostType
|
from authentik.outposts.models import DockerServiceConnection, Outpost, OutpostConfig, OutpostType
|
||||||
from authentik.outposts.tasks import outpost_local_connection
|
from authentik.outposts.tasks import outpost_local_connection
|
||||||
from authentik.providers.proxy.models import ProxyProvider
|
from authentik.providers.proxy.models import ProxyProvider
|
||||||
from tests.e2e.utils import (
|
from tests.e2e.utils import USER, SeleniumTestCase, apply_migration, object_manager, retry
|
||||||
USER,
|
|
||||||
SeleniumTestCase,
|
|
||||||
apply_migration,
|
|
||||||
get_docker_tag,
|
|
||||||
object_manager,
|
|
||||||
retry,
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
@skipUnless(platform.startswith("linux"), "requires local docker")
|
@skipUnless(platform.startswith("linux"), "requires local docker")
|
||||||
|
@ -49,7 +42,7 @@ class TestProviderProxy(SeleniumTestCase):
|
||||||
"""Start proxy container based on outpost created"""
|
"""Start proxy container based on outpost created"""
|
||||||
client: DockerClient = from_env()
|
client: DockerClient = from_env()
|
||||||
container = client.containers.run(
|
container = client.containers.run(
|
||||||
image=f"beryju.org/authentik/outpost-proxy:{get_docker_tag()}",
|
image=self.get_container_image("beryju.org/authentik/outpost-proxy"),
|
||||||
detach=True,
|
detach=True,
|
||||||
network_mode="host",
|
network_mode="host",
|
||||||
auto_remove=True,
|
auto_remove=True,
|
||||||
|
|
|
@ -14,6 +14,7 @@ from django.db.migrations.operations.special import RunPython
|
||||||
from django.test.testcases import TransactionTestCase
|
from django.test.testcases import TransactionTestCase
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
from docker import DockerClient, from_env
|
from docker import DockerClient, from_env
|
||||||
|
from docker.errors import DockerException
|
||||||
from docker.models.containers import Container
|
from docker.models.containers import Container
|
||||||
from selenium import webdriver
|
from selenium import webdriver
|
||||||
from selenium.common.exceptions import NoSuchElementException, TimeoutException, WebDriverException
|
from selenium.common.exceptions import NoSuchElementException, TimeoutException, WebDriverException
|
||||||
|
@ -66,9 +67,20 @@ class SeleniumTestCase(StaticLiveServerTestCase):
|
||||||
if specs := self.get_container_specs():
|
if specs := self.get_container_specs():
|
||||||
self.container = self._start_container(specs)
|
self.container = self._start_container(specs)
|
||||||
|
|
||||||
|
def get_container_image(self, base: str) -> str:
|
||||||
|
"""Try to pull docker image based on git branch, fallback to master if not found."""
|
||||||
|
client: DockerClient = from_env()
|
||||||
|
image = f"{base}:gh-master"
|
||||||
|
try:
|
||||||
|
branch_image = f"{base}:{get_docker_tag()}"
|
||||||
|
client.images.pull(branch_image)
|
||||||
|
return branch_image
|
||||||
|
except DockerException:
|
||||||
|
client.images.pull(image)
|
||||||
|
return image
|
||||||
|
|
||||||
def _start_container(self, specs: dict[str, Any]) -> Container:
|
def _start_container(self, specs: dict[str, Any]) -> Container:
|
||||||
client: DockerClient = from_env()
|
client: DockerClient = from_env()
|
||||||
client.images.pull(specs["image"])
|
|
||||||
container = client.containers.run(**specs)
|
container = client.containers.run(**specs)
|
||||||
if "healthcheck" not in specs:
|
if "healthcheck" not in specs:
|
||||||
return container
|
return container
|
||||||
|
|
Reference in a new issue