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:
Jens Langhammer 2021-10-03 23:04:59 +02:00
parent 036a4e86e2
commit 8a791c4eac
3 changed files with 17 additions and 19 deletions

View file

@ -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,

View file

@ -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,

View file

@ -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