e2e: use dockercontroller to test proxy

This commit is contained in:
Jens Langhammer 2020-10-17 17:03:10 +02:00
parent f9cede7b31
commit 69f7b41044
3 changed files with 18 additions and 31 deletions

View File

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

View File

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

View File

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