e2e: use dockercontroller to test proxy
This commit is contained in:
parent
f9cede7b31
commit
69f7b41044
|
@ -1,4 +1,5 @@
|
||||||
"""Proxy and Outpost e2e tests"""
|
"""Proxy and Outpost e2e tests"""
|
||||||
|
from dataclasses import asdict
|
||||||
from sys import platform
|
from sys import platform
|
||||||
from time import sleep
|
from time import sleep
|
||||||
from typing import Any, Dict, Optional
|
from typing import Any, Dict, Optional
|
||||||
|
@ -14,7 +15,14 @@ from e2e.utils import USER, SeleniumTestCase
|
||||||
from passbook import __version__
|
from passbook import __version__
|
||||||
from passbook.core.models import Application
|
from passbook.core.models import Application
|
||||||
from passbook.flows.models import Flow
|
from passbook.flows.models import Flow
|
||||||
from passbook.outposts.models import Outpost, OutpostDeploymentType, OutpostType
|
from passbook.outposts.models import (
|
||||||
|
Outpost,
|
||||||
|
OutpostConfig,
|
||||||
|
OutpostDeploymentType,
|
||||||
|
OutpostType,
|
||||||
|
default_outpost_config,
|
||||||
|
)
|
||||||
|
from passbook.providers.proxy.controllers.docker import ProxyDockerController
|
||||||
from passbook.providers.proxy.models import ProxyProvider
|
from passbook.providers.proxy.models import ProxyProvider
|
||||||
|
|
||||||
|
|
||||||
|
@ -104,27 +112,6 @@ class TestProviderProxy(SeleniumTestCase):
|
||||||
class TestProviderProxyConnect(ChannelsLiveServerTestCase):
|
class TestProviderProxyConnect(ChannelsLiveServerTestCase):
|
||||||
"""Test Proxy connectivity over websockets"""
|
"""Test Proxy connectivity over websockets"""
|
||||||
|
|
||||||
proxy_container: Container
|
|
||||||
|
|
||||||
def tearDown(self) -> None:
|
|
||||||
self.proxy_container.kill()
|
|
||||||
super().tearDown()
|
|
||||||
|
|
||||||
def start_proxy(self, outpost: Outpost) -> Container:
|
|
||||||
"""Start proxy container based on outpost created"""
|
|
||||||
client: DockerClient = from_env()
|
|
||||||
container = client.containers.run(
|
|
||||||
image=f"beryju/passbook-proxy:{__version__}",
|
|
||||||
detach=True,
|
|
||||||
network_mode="host",
|
|
||||||
auto_remove=True,
|
|
||||||
environment={
|
|
||||||
"PASSBOOK_HOST": self.live_server_url,
|
|
||||||
"PASSBOOK_TOKEN": outpost.token.token_uuid.hex,
|
|
||||||
},
|
|
||||||
)
|
|
||||||
return container
|
|
||||||
|
|
||||||
def test_proxy_connectivity(self):
|
def test_proxy_connectivity(self):
|
||||||
"""Test proxy connectivity over websocket"""
|
"""Test proxy connectivity over websocket"""
|
||||||
SeleniumTestCase().apply_default_data()
|
SeleniumTestCase().apply_default_data()
|
||||||
|
@ -144,13 +131,14 @@ class TestProviderProxyConnect(ChannelsLiveServerTestCase):
|
||||||
outpost: Outpost = Outpost.objects.create(
|
outpost: Outpost = Outpost.objects.create(
|
||||||
name="proxy_outpost",
|
name="proxy_outpost",
|
||||||
type=OutpostType.PROXY,
|
type=OutpostType.PROXY,
|
||||||
deployment_type=OutpostDeploymentType.CUSTOM,
|
deployment_type=OutpostDeploymentType.DOCKER,
|
||||||
|
_config=asdict(
|
||||||
|
OutpostConfig(passbook_host=self.live_server_url, log_level="debug")
|
||||||
|
),
|
||||||
)
|
)
|
||||||
outpost.providers.add(proxy)
|
outpost.providers.add(proxy)
|
||||||
outpost.save()
|
outpost.save()
|
||||||
|
|
||||||
self.proxy_container = self.start_proxy(outpost)
|
|
||||||
|
|
||||||
# Wait until outpost healthcheck succeeds
|
# Wait until outpost healthcheck succeeds
|
||||||
healthcheck_retries = 0
|
healthcheck_retries = 0
|
||||||
while healthcheck_retries < 50:
|
while healthcheck_retries < 50:
|
||||||
|
@ -164,3 +152,6 @@ class TestProviderProxyConnect(ChannelsLiveServerTestCase):
|
||||||
state = outpost.state
|
state = outpost.state
|
||||||
self.assertTrue(len(state), 1)
|
self.assertTrue(len(state), 1)
|
||||||
self.assertEqual(state[0].version, __version__)
|
self.assertEqual(state[0].version, __version__)
|
||||||
|
|
||||||
|
# Make sure to delete the outpost to remove the container
|
||||||
|
outpost.delete()
|
||||||
|
|
|
@ -35,11 +35,7 @@ class BaseController:
|
||||||
"""Call .up() but capture all log output and return it."""
|
"""Call .up() but capture all log output and return it."""
|
||||||
with capture_logs() as logs:
|
with capture_logs() as logs:
|
||||||
self.up()
|
self.up()
|
||||||
log_messages = []
|
return [f"{x['controller']}: {x['event']}" for x in logs]
|
||||||
for log in logs:
|
|
||||||
self.logger.debug(**log)
|
|
||||||
log_messages.append(f"{log['controller']}: {log['event']}")
|
|
||||||
return log_messages
|
|
||||||
|
|
||||||
def down(self):
|
def down(self):
|
||||||
"""Handler to delete everything we've created"""
|
"""Handler to delete everything we've created"""
|
||||||
|
|
|
@ -118,7 +118,7 @@ class DockerController(BaseController):
|
||||||
try:
|
try:
|
||||||
container, _ = self._get_container()
|
container, _ = self._get_container()
|
||||||
container.kill()
|
container.kill()
|
||||||
container.remove(force=True)
|
container.remove()
|
||||||
except DockerException as exc:
|
except DockerException as exc:
|
||||||
raise ControllerException from exc
|
raise ControllerException from exc
|
||||||
|
|
||||||
|
|
Reference in a new issue