66import sys
77import os
88from enum import Enum
9- from subprocess import Popen
10- from typing import Iterable , List , Union , Optional , Set
9+ from typing import Iterable , List , Optional , Set
1110from datetime import timedelta
11+ from ravendb_embedded .embedded_server import EmbeddedServer
1212
1313from ravendb .documents .operations .revisions import (
1414 ConfigureRevisionsOperationResult ,
@@ -147,17 +147,20 @@ def __init__(self, patched):
147147
148148
149149class TestBase (unittest .TestCase , RavenTestDriver ):
150- __global_server : Union [ None , DocumentStore ] = None
151- __global_server_process : Union [ None , Popen ] = None
150+ _global_embedded_server : Optional [ EmbeddedServer ] = None
151+ _global_secured_embedded_server : Optional [ EmbeddedServer ] = None
152152
153- __global_secured_server : Union [ None , DocumentStore ] = None
154- __global_secured_server_process : Union [ None , Popen ] = None
153+ _global_server_store : Optional [ DocumentStore ] = None
154+ _global_secured_server_store : Optional [ DocumentStore ] = None
155155
156156 __run_server_lock = threading .Lock ()
157157
158158 index = 0
159159
160- class __TestServiceLocator (RavenServerLocator ):
160+ class TestServiceLocator (RavenServerLocator ):
161+ def get_server_path (self ) -> str :
162+ return super ().get_server_path ()
163+
161164 @property
162165 def server_path (self ) -> str :
163166 return super ().get_server_path ()
@@ -170,7 +173,7 @@ def command_arguments(self) -> List[str]:
170173 "--Features.Availability=Experimental" ,
171174 ]
172175
173- class __TestSecuredServiceLocator (RavenServerLocator ):
176+ class TestSecuredServiceLocator (RavenServerLocator ):
174177 ENV_CLIENT_CERTIFICATE_PATH = "RAVENDB_PYTHON_TEST_CLIENT_CERTIFICATE_PATH"
175178 ENV_SERVER_CERTIFICATE_PATH = "RAVENDB_PYTHON_TEST_SERVER_CERTIFICATE_PATH"
176179 ENV_TEST_CA_PATH = "RAVENDB_PYTHON_TEST_CA_PATH"
@@ -181,7 +184,7 @@ def get_server_path(self) -> str:
181184
182185 @property
183186 def command_arguments (self ) -> List [str ]:
184- https_server_url = self .__https_server_url
187+ https_server_url = self .https_server_url
185188 tcp_server_url = https_server_url .replace ("https" , "tcp" , 1 ).rsplit (":" , 1 )[0 ] + ":38882"
186189 return [
187190 f"--Security.Certificate.Path={ self .server_certificate_path } " ,
@@ -190,7 +193,7 @@ def command_arguments(self) -> List[str]:
190193 ]
191194
192195 @property
193- def __https_server_url (self ) -> str :
196+ def https_server_url (self ) -> str :
194197 https_server_url = os .environ [self .ENV_HTTPS_SERVER_URL ]
195198 if https_server_url .isspace ():
196199 raise ValueError (
@@ -226,27 +229,23 @@ def server_certificate_path(self) -> str:
226229 def server_ca_path (self ) -> str :
227230 return os .getenv (self .ENV_TEST_CA_PATH )
228231
229- def __get_locator (self , secured : bool ):
230- return self .__secured_locator if secured else self .__locator
232+ def _get_locator (self , secured : bool ):
233+ return self ._secured_locator if secured else self ._locator
231234
232- def __get_global_server (self , secured : bool ):
233- return self .__global_secured_server if secured else self .__global_server
235+ def _get_global_server_store (self , secured : bool ):
236+ return self ._global_secured_server_store if secured else self ._global_server_store
234237
235- def __run_server (self , secured : bool ):
236- def __configure_store (s : DocumentStore ) -> None :
237- if secured :
238- s .certificate_pem_path = self .test_client_certificate_url
239- s .trust_store_path = self .test_ca_certificate_url
240-
241- store , process = self ._run_server_internal (self .__get_locator (secured ), __configure_store )
242- self .__set_global_server_process (secured , process )
238+ def _run_embedded_server (self , secured : bool ):
239+ store , embedded_server = self ._run_embedded_server_internal (self ._get_locator (secured ))
243240
244241 if secured :
245- TestBase .__global_secured_server = store
242+ TestBase ._global_secured_server_store = store
243+ TestBase ._global_secured_embedded_server = embedded_server
246244 else :
247- TestBase .__global_server = store
245+ TestBase ._global_server_store = store
246+ TestBase ._global_embedded_server = embedded_server
248247
249- atexit .register (threading .Thread (target = self .__kill_global_server_process , args = [secured ]).run )
248+ atexit .register (threading .Thread (target = self ._discard_embedded_server , args = [secured ]).run )
250249 return store
251250
252251 def _customize_db_record (self , db_record : DatabaseRecord ) -> None :
@@ -264,11 +263,11 @@ def secured_document_store(self) -> DocumentStore:
264263
265264 @property
266265 def test_client_certificate_url (self ) -> str :
267- return self .__secured_locator .client_certificate_path
266+ return self ._secured_locator .client_certificate_path
268267
269268 @property
270269 def test_ca_certificate_url (self ) -> str :
271- return self .__secured_locator .server_ca_path
270+ return self ._secured_locator .server_ca_path
272271
273272 def get_document_store (
274273 self ,
@@ -280,12 +279,12 @@ def get_document_store(
280279 name = f"{ database } _{ TestBase .index } "
281280 TestBase ._report_info (f"get_document_store for db { database } ." )
282281
283- if self .__get_global_server (secured ) is None :
282+ if self ._get_global_server_store (secured ) is None :
284283 with self .__run_server_lock :
285- if self .__get_global_server (secured ) is None :
286- self .__run_server (secured )
284+ if self ._get_global_server_store (secured ) is None :
285+ self ._run_embedded_server (secured )
287286
288- document_store = self .__get_global_server (secured )
287+ document_store = self ._get_global_server_store (secured )
289288 database_record = DatabaseRecord (name )
290289
291290 self ._customize_db_record (database_record )
@@ -303,7 +302,7 @@ def get_document_store(
303302 store .initialize ()
304303
305304 def __after_close ():
306- if store not in self .__document_stores :
305+ if store not in self ._document_stores :
307306 return
308307
309308 try :
@@ -317,30 +316,21 @@ def __after_close():
317316 if wait_for_indexing_timeout is not None :
318317 self .wait_for_indexing (store , name , wait_for_indexing_timeout )
319318
320- self .__document_stores .add (store )
319+ self ._document_stores .add (store )
321320 return store
322321
323- @staticmethod
324- def __kill_global_server_process (secured : bool ) -> None :
325- if secured :
326- p = TestBase .__global_secured_server_process
327- TestBase .__global_secured_server_process = None
328- TestBase .__global_secured_server .close ()
329- TestBase .__global_secured_server = None
330- else :
331- p = TestBase .__global_server_process
332- TestBase .__global_server_process = None
333- TestBase .__global_server .close ()
334- TestBase .__global_server = None
335-
336- RavenTestDriver ._kill_process (p )
337-
338- @staticmethod
339- def __set_global_server_process (secured : bool , process : Popen ) -> None :
322+ @classmethod
323+ def _discard_embedded_server (cls , secured : bool ) -> None :
340324 if secured :
341- TestBase .__global_secured_server_process = process
325+ cls ._global_secured_server_store .close ()
326+ cls ._global_secured_server_store = None
327+ cls ._global_secured_embedded_server .close ()
328+ cls ._global_secured_embedded_server = None
342329 else :
343- TestBase .__global_server_process = process
330+ cls ._global_server_store .close ()
331+ cls ._global_server_store = None
332+ cls ._global_embedded_server .close ()
333+ cls ._global_embedded_server = None
344334
345335 @staticmethod
346336 def delete_all_topology_files ():
@@ -412,11 +402,10 @@ def setConvention(self, conventions):
412402 self .conventions = conventions
413403
414404 def setUp (self ):
415- # todo: investigate if line below is replaceable by more sophisticated code, we don't want to call TestCase init
416405 RavenTestDriver .__init__ (self )
417- self .__locator = TestBase .__TestServiceLocator ()
418- self .__secured_locator = TestBase .__TestSecuredServiceLocator ()
419- self .__document_stores : Set [DocumentStore ] = set ()
406+ self ._locator = TestBase .TestServiceLocator ()
407+ self ._secured_locator = TestBase .TestSecuredServiceLocator ()
408+ self ._document_stores : Set [DocumentStore ] = set ()
420409 conventions = getattr (self , "conventions" , None )
421410 self .default_urls = ["http://127.0.0.1:8080" ]
422411 self .default_database = "NorthWindTest"
@@ -435,7 +424,7 @@ def tearDown(self):
435424
436425 exceptions = []
437426
438- for document_store in self .__document_stores :
427+ for document_store in self ._document_stores :
439428 try :
440429 document_store .close ()
441430 except Exception as e :
0 commit comments