Commit b51e41ed authored by David Wilson's avatar David Wilson

Working DockerMixin for tests.

parent 5b4f9bd8
import os import os
import random
import sys import sys
import unittest import unittest
import urlparse
import mock import mock
import mitogen.master import mitogen.master
import docker
DATA_DIR = os.path.join(os.path.dirname(__file__), 'data') DATA_DIR = os.path.join(os.path.dirname(__file__), 'data')
...@@ -21,14 +24,51 @@ def data_path(suffix): ...@@ -21,14 +24,51 @@ def data_path(suffix):
return os.path.join(DATA_DIR, suffix) return os.path.join(DATA_DIR, suffix)
class BrokerMixin(object): class DockerizedSshDaemon(object):
def __init__(self):
self.docker = docker.from_env()
self.container_name = 'mitogen-test-%08x' % (random.getrandbits(64),)
self.container = self.docker.containers.run(
image='d2mw/mitogen-test',
detach=True,
remove=True,
publish_all_ports=True,
)
self.container.reload()
self.port = (self.container.attrs['NetworkSettings']['Ports']
['22/tcp'][0]['HostPort'])
self.host = self.get_host()
def get_host(self):
parsed = urlparse.urlparse(self.docker.api.base_url)
return parsed.netloc.partition(':')[0]
def close(self):
self.container.stop()
class RouterMixin(object):
broker_class = mitogen.master.Broker broker_class = mitogen.master.Broker
router_class = mitogen.master.Router
def setUp(self): def setUp(self):
super(BrokerMixin, self).setUp() super(RouterMixin, self).setUp()
self.broker = self.broker_class() self.broker = self.broker_class()
self.router = self.router_class(self.broker)
def tearDown(self): def tearDown(self):
self.broker.shutdown() self.broker.shutdown()
self.broker.join() self.broker.join()
super(BrokerMixin, self).tearDown() super(RouterMixin, self).tearDown()
class DockerMixin(RouterMixin):
@classmethod
def setUpClass(cls):
super(DockerMixin, cls).setUpClass()
cls.dockerized_ssh = DockerizedSshDaemon()
@classmethod
def tearDownClass(cls):
cls.dockerized_ssh.close()
super(DockerMixin, cls).tearDownClass()
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment