@@ -205,16 +205,21 @@ def _format_loop_exception(self, context, n):
205
205
_default_cluster = None
206
206
207
207
208
- def _start_cluster (ClusterCls , cluster_kwargs , server_settings ,
209
- initdb_options = None ):
208
+ def _init_cluster (ClusterCls , cluster_kwargs , initdb_options = None ):
210
209
cluster = ClusterCls (** cluster_kwargs )
211
210
cluster .init (** (initdb_options or {}))
212
211
cluster .trust_local_connections ()
213
- cluster .start (port = 'dynamic' , server_settings = server_settings )
214
212
atexit .register (_shutdown_cluster , cluster )
215
213
return cluster
216
214
217
215
216
+ def _start_cluster (ClusterCls , cluster_kwargs , server_settings ,
217
+ initdb_options = None ):
218
+ cluster = _init_cluster (ClusterCls , cluster_kwargs , initdb_options )
219
+ cluster .start (port = 'dynamic' , server_settings = server_settings )
220
+ return cluster
221
+
222
+
218
223
def _get_initdb_options (initdb_options = None ):
219
224
if not initdb_options :
220
225
initdb_options = {}
@@ -228,7 +233,7 @@ def _get_initdb_options(initdb_options=None):
228
233
return initdb_options
229
234
230
235
231
- def _start_default_cluster ( server_settings = {}, initdb_options = None ):
236
+ def _init_default_cluster ( initdb_options = None ):
232
237
global _default_cluster
233
238
234
239
if _default_cluster is None :
@@ -237,9 +242,8 @@ def _start_default_cluster(server_settings={}, initdb_options=None):
237
242
# Using existing cluster, assuming it is initialized and running
238
243
_default_cluster = pg_cluster .RunningCluster ()
239
244
else :
240
- _default_cluster = _start_cluster (
245
+ _default_cluster = _init_cluster (
241
246
pg_cluster .TempCluster , cluster_kwargs = {},
242
- server_settings = server_settings ,
243
247
initdb_options = _get_initdb_options (initdb_options ))
244
248
245
249
return _default_cluster
@@ -248,7 +252,8 @@ def _start_default_cluster(server_settings={}, initdb_options=None):
248
252
def _shutdown_cluster (cluster ):
249
253
if cluster .get_status () == 'running' :
250
254
cluster .stop ()
251
- cluster .destroy ()
255
+ if cluster .get_status () != 'not-initialized' :
256
+ cluster .destroy ()
252
257
253
258
254
259
def create_pool (dsn = None , * ,
@@ -278,15 +283,40 @@ def get_server_settings(cls):
278
283
'log_connections' : 'on'
279
284
}
280
285
286
+ @classmethod
287
+ def new_cluster (cls , ClusterCls , * , cluster_kwargs = {}, initdb_options = {}):
288
+ cluster = _init_cluster (ClusterCls , cluster_kwargs ,
289
+ _get_initdb_options (initdb_options ))
290
+ cls ._clusters .append (cluster )
291
+ return cluster
292
+
293
+ @classmethod
294
+ def start_cluster (cls , cluster , * , server_settings = {}):
295
+ cluster .start (port = 'dynamic' , server_settings = server_settings )
296
+
281
297
@classmethod
282
298
def setup_cluster (cls ):
283
- cls .cluster = _start_default_cluster (cls .get_server_settings ())
299
+ cls .cluster = _init_default_cluster ()
300
+
301
+ if cls .cluster .get_status () != 'running' :
302
+ cls .cluster .start (
303
+ port = 'dynamic' , server_settings = cls .get_server_settings ())
284
304
285
305
@classmethod
286
306
def setUpClass (cls ):
287
307
super ().setUpClass ()
308
+ cls ._clusters = []
288
309
cls .setup_cluster ()
289
310
311
+ @classmethod
312
+ def tearDownClass (cls ):
313
+ super ().tearDownClass ()
314
+ for cluster in cls ._clusters :
315
+ if cluster is not _default_cluster :
316
+ cluster .stop ()
317
+ cluster .destroy ()
318
+ cls ._clusters = []
319
+
290
320
@classmethod
291
321
def get_connection_spec (cls , kwargs = {}):
292
322
conn_spec = cls .cluster .get_connection_spec ()
@@ -309,14 +339,6 @@ def connect(cls, **kwargs):
309
339
conn_spec = cls .get_connection_spec (kwargs )
310
340
return pg_connection .connect (** conn_spec , loop = cls .loop )
311
341
312
- @classmethod
313
- def start_cluster (cls , ClusterCls , * ,
314
- cluster_kwargs = {}, server_settings = {},
315
- initdb_options = {}):
316
- return _start_cluster (
317
- ClusterCls , cluster_kwargs ,
318
- server_settings , _get_initdb_options (initdb_options ))
319
-
320
342
321
343
class ProxiedClusterTestCase (ClusterTestCase ):
322
344
@classmethod
0 commit comments