Skip to content

Commit af98214

Browse files
committed
Tune docker commands
1 parent c0194a5 commit af98214

File tree

3 files changed

+73
-63
lines changed

3 files changed

+73
-63
lines changed

requirements-dev.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ pep257==0.7.0
55
-e .
66
aioredis==1.0.0
77
cryptography==2.1.4
8-
docker-py==1.10.6
8+
docker==2.5.1
99
pynacl==1.2.1
1010
pytest==3.4.0
1111
pytest-aiohttp==0.3.0

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
def read(f):
1616
return open(os.path.join(os.path.dirname(__file__), f)).read().strip()
1717

18-
install_requires = ['aiohttp>=2.3.0']
18+
install_requires = ['aiohttp>=3.0.1']
1919
extras_require = {
2020
'aioredis': ['aioredis>=1.0.0'],
2121
'aiomcache': ['aiomcache>=0.5.2'],

tests/conftest.py

Lines changed: 71 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,10 @@
33
import asyncio
44
import gc
55
import pytest
6+
import sys
67
import time
78
import uuid
8-
from docker import Client as DockerClient
9+
from docker import from_env as docker_from_env
910
import socket
1011

1112

@@ -42,41 +43,45 @@ def session_id():
4243

4344
@pytest.fixture(scope='session')
4445
def docker():
45-
return DockerClient(version='auto')
46-
47-
48-
def pytest_addoption(parser):
49-
parser.addoption("--no-pull", action="store_true", default=False,
50-
help="Don't perform docker images pulling")
46+
client = docker_from_env(version='auto')
47+
return client
5148

5249

5350
@pytest.fixture(scope='session')
5451
def redis_server(docker, session_id, loop, request):
55-
if not request.config.option.no_pull:
56-
docker.pull('redis:{}'.format('latest'))
5752

58-
container_args = dict(
59-
image='redis:{}'.format('latest'),
60-
name='redis-test-server-{}-{}'.format('latest', session_id),
61-
ports=[6379],
62-
detach=True,
63-
)
53+
image = 'redis:{}'.format('latest')
6454

65-
# bound IPs do not work on OSX
66-
host = "127.0.0.1"
67-
host_port = unused_port()
68-
container_args['host_config'] = docker.create_host_config(
69-
port_bindings={6379: (host, host_port)})
55+
if sys.platform.startswith('darwin'):
56+
port = unused_port()
57+
else:
58+
port = None
7059

71-
container = docker.create_container(**container_args)
60+
container = docker.containers.run(
61+
image=image,
62+
detach=True,
63+
name='redis-test-server-{}-{}'.format('latest', session_id),
64+
ports={
65+
'6379/tcp': port,
66+
},
67+
environment={
68+
'http.host': '0.0.0.0',
69+
'transport.host': '127.0.0.1',
70+
},
71+
)
7272

73-
docker.start(container=container['Id'])
73+
if sys.platform.startswith('darwin'):
74+
host = '0.0.0.0'
75+
else:
76+
inspection = docker.api.inspect_container(container.id)
77+
host = inspection['NetworkSettings']['IPAddress']
78+
port = 6379
7479

75-
delay = 0.001
76-
for i in range(100):
80+
delay = 0.1
81+
for i in range(20):
7782
try:
7883
conn = loop.run_until_complete(
79-
aioredis.create_connection((host, host_port), loop=loop)
84+
aioredis.create_connection((host, port), loop=loop)
8085
)
8186
loop.run_until_complete(conn.execute('SET', 'foo', 'bar'))
8287
break
@@ -85,16 +90,18 @@ def redis_server(docker, session_id, loop, request):
8590
delay *= 2
8691
else:
8792
pytest.fail("Cannot start redis server")
88-
container['redis_params'] = dict(address=(host, host_port))
89-
yield container
9093

91-
docker.kill(container=container['Id'])
92-
docker.remove_container(container['Id'])
94+
yield {'host': host,
95+
'port': port,
96+
'container': container}
97+
98+
container.kill(signal=9)
99+
container.remove(force=True)
93100

94101

95102
@pytest.fixture
96103
def redis_params(redis_server):
97-
return dict(**redis_server['redis_params'])
104+
return dict(address=(redis_server['host'], redis_server['port']))
98105

99106

100107
@pytest.fixture
@@ -118,55 +125,58 @@ async def start(*args, no_loop=False, **kwargs):
118125

119126
@pytest.fixture(scope='session')
120127
def memcached_server(docker, session_id, loop, request):
121-
if not request.config.option.no_pull:
122-
docker.pull('memcached:{}'.format('latest'))
123128

124-
"""
125-
container = docker.create_container(
126-
image='memcached:{}'.format('latest'),
127-
name='memcached-test-server-{}-{}'.format('latest', session_id),
128-
ports=[11211],
129-
detach=True,
130-
)
131-
"""
129+
image = 'memcached:{}'.format('latest')
132130

133-
container_args = dict(
134-
image='memcached:{}'.format('latest'),
135-
name='memcached-test-server-{}-{}'.format('latest', session_id),
136-
ports=[11211],
131+
if sys.platform.startswith('darwin'):
132+
port = unused_port()
133+
else:
134+
port = None
135+
136+
container = docker.containers.run(
137+
image=image,
137138
detach=True,
139+
name='memcached-test-server-{}-{}'.format('latest', session_id),
140+
ports={
141+
'11211/tcp': port,
142+
},
143+
environment={
144+
'http.host': '0.0.0.0',
145+
'transport.host': '127.0.0.1',
146+
},
138147
)
139148

140-
# bound IPs do not work on OSX
141-
host = "127.0.0.1"
142-
host_port = unused_port()
143-
container_args['host_config'] = docker.create_host_config(
144-
port_bindings={11211: (host, host_port)})
145-
container = docker.create_container(**container_args)
146-
docker.start(container=container['Id'])
147-
# inspection = docker.inspect_container(container['Id'])
148-
# host = inspection['NetworkSettings']['IPAddress']
149-
delay = 0.001
150-
for i in range(100):
149+
if sys.platform.startswith('darwin'):
150+
host = '0.0.0.0'
151+
else:
152+
inspection = docker.api.inspect_container(container.id)
153+
host = inspection['NetworkSettings']['IPAddress']
154+
port = 11211
155+
156+
delay = 0.1
157+
for i in range(20):
151158
try:
152-
conn = aiomcache.Client(host, host_port, loop=loop)
159+
conn = aiomcache.Client(host, port, loop=loop)
153160
loop.run_until_complete(conn.set(b'foo', b'bar'))
154161
break
155162
except ConnectionRefusedError as e:
156163
time.sleep(delay)
157164
delay *= 2
158165
else:
159166
pytest.fail("Cannot start memcached server")
160-
container['memcached_params'] = dict(host=host, port=host_port)
161-
yield container
162167

163-
docker.kill(container=container['Id'])
164-
docker.remove_container(container['Id'])
168+
yield {'host': host,
169+
'port': port,
170+
'container': container}
171+
172+
container.kill(signal=9)
173+
container.remove(force=True)
165174

166175

167176
@pytest.fixture
168177
def memcached_params(memcached_server):
169-
return dict(**memcached_server['memcached_params'])
178+
return dict(host=memcached_server['host'],
179+
port=memcached_server['port'])
170180

171181

172182
@pytest.fixture

0 commit comments

Comments
 (0)