3
3
import asyncio
4
4
import gc
5
5
import pytest
6
+ import sys
6
7
import time
7
8
import uuid
8
- from docker import Client as DockerClient
9
+ from docker import from_env as docker_from_env
9
10
import socket
10
11
11
12
@@ -42,41 +43,45 @@ def session_id():
42
43
43
44
@pytest .fixture (scope = 'session' )
44
45
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
51
48
52
49
53
50
@pytest .fixture (scope = 'session' )
54
51
def redis_server (docker , session_id , loop , request ):
55
- if not request .config .option .no_pull :
56
- docker .pull ('redis:{}' .format ('latest' ))
57
52
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' )
64
54
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
70
59
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
+ )
72
72
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
74
79
75
- delay = 0.001
76
- for i in range (100 ):
80
+ delay = 0.1
81
+ for i in range (20 ):
77
82
try :
78
83
conn = loop .run_until_complete (
79
- aioredis .create_connection ((host , host_port ), loop = loop )
84
+ aioredis .create_connection ((host , port ), loop = loop )
80
85
)
81
86
loop .run_until_complete (conn .execute ('SET' , 'foo' , 'bar' ))
82
87
break
@@ -85,16 +90,18 @@ def redis_server(docker, session_id, loop, request):
85
90
delay *= 2
86
91
else :
87
92
pytest .fail ("Cannot start redis server" )
88
- container ['redis_params' ] = dict (address = (host , host_port ))
89
- yield container
90
93
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 )
93
100
94
101
95
102
@pytest .fixture
96
103
def redis_params (redis_server ):
97
- return dict (** redis_server ['redis_params' ] )
104
+ return dict (address = ( redis_server ['host' ], redis_server [ 'port' ]) )
98
105
99
106
100
107
@pytest .fixture
@@ -118,55 +125,58 @@ async def start(*args, no_loop=False, **kwargs):
118
125
119
126
@pytest .fixture (scope = 'session' )
120
127
def memcached_server (docker , session_id , loop , request ):
121
- if not request .config .option .no_pull :
122
- docker .pull ('memcached:{}' .format ('latest' ))
123
128
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' )
132
130
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 ,
137
138
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
+ },
138
147
)
139
148
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 ):
151
158
try :
152
- conn = aiomcache .Client (host , host_port , loop = loop )
159
+ conn = aiomcache .Client (host , port , loop = loop )
153
160
loop .run_until_complete (conn .set (b'foo' , b'bar' ))
154
161
break
155
162
except ConnectionRefusedError as e :
156
163
time .sleep (delay )
157
164
delay *= 2
158
165
else :
159
166
pytest .fail ("Cannot start memcached server" )
160
- container ['memcached_params' ] = dict (host = host , port = host_port )
161
- yield container
162
167
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 )
165
174
166
175
167
176
@pytest .fixture
168
177
def memcached_params (memcached_server ):
169
- return dict (** memcached_server ['memcached_params' ])
178
+ return dict (host = memcached_server ['host' ],
179
+ port = memcached_server ['port' ])
170
180
171
181
172
182
@pytest .fixture
0 commit comments