Skip to content

Commit 12671d4

Browse files
committed
RDBC-790 Custom providers tests
1 parent c3c5f1a commit 12671d4

File tree

5 files changed

+81
-6
lines changed

5 files changed

+81
-6
lines changed

ravendb_embedded/provide.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ class CopyServerProvider(ProvideRavenDBServer):
1717
def __init__(self, server_files: str):
1818
self.server_files = server_files
1919

20-
def provide(self, target_directory: str) -> None: # todo: test
20+
def provide(self, target_directory: str) -> None:
2121
shutil.copytree(self.server_files, target_directory, dirs_exist_ok=True)
2222

2323

@@ -55,7 +55,7 @@ def unzip(source: Union[str, bytes], out: str) -> None:
5555

5656
class ExtractFromPkgResourceServerProvider(ProvideRavenDBServer):
5757
def provide(self, target_directory):
58-
resource_name = "/ravendb_server.zip"
58+
resource_name = "ravendb_server.zip"
5959

6060
# Get binary data from the resource
6161
resource_data = pkgutil.get_data(self.__class__.__module__, resource_name)
@@ -87,7 +87,7 @@ def __init__(self, server_location: str):
8787

8888
# Alternatively, it might be a directory - look for Raven.Server.exe inside
8989
if os.path.isdir(file_server_location) and os.path.exists(
90-
os.path.join(file_server_location, "Raven.Server.exe")
90+
os.path.join(file_server_location, self.SERVER_DLL_FILENAME)
9191
):
9292
self.inner_provider = CopyServerProvider(server_location)
9393
return

ravendb_embedded/raven_server_runner.py

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,22 @@ def run(options: ServerOptions) -> subprocess.Popen:
2828
if not options.logs_path.strip():
2929
raise ValueError("logs_path cannot be None or whitespace")
3030

31-
server_dll_path = os.path.join(options.target_server_location, "Raven.Server.dll")
32-
if not os.path.exists(server_dll_path):
33-
raise RavenException("Server file was not found: " + server_dll_path)
31+
server_paths = [
32+
"Raven.Server.dll",
33+
"Server/Raven.Server.dll",
34+
"contentFiles/any/any/RavenDBServer/Raven.Server.dll",
35+
]
36+
37+
server_dll_path = None
38+
39+
for path in server_paths:
40+
full_path = os.path.join(options.target_server_location, path)
41+
if os.path.exists(full_path):
42+
server_dll_path = full_path
43+
break
44+
45+
if server_dll_path is None:
46+
raise RavenException("Server file was not found in any of the expected locations.")
3447

3548
if not options.dot_net_path.strip():
3649
raise ValueError("dot_net_path cannot be None or whitespace")

setup.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ def run(self):
6565

6666
# Setup configuration
6767
setup(
68+
python_requires='>=3.8',
6869
cmdclass={"install": CustomInstall, "develop": CustomDevelop, "sdist": CustomSDist},
6970
name="ravendb-embedded",
7071
packages=["ravendb-embedded"],

tests/dir_utils.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import shutil
2+
import tempfile
3+
from typing import ContextManager
4+
5+
6+
class DirUtils:
7+
@staticmethod
8+
def temporary_dir() -> ContextManager[str]:
9+
temp_dir = tempfile.mkdtemp()
10+
try:
11+
yield temp_dir
12+
finally:
13+
shutil.rmtree(temp_dir)

tests/test_custom_provider.py

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
import tempfile
2+
from pathlib import Path
3+
from unittest import TestCase
4+
5+
from ravendb_embedded.embedded_server import EmbeddedServer
6+
from ravendb_embedded.options import ServerOptions, DatabaseOptions
7+
from ravendb_embedded.provide import CopyServerFromNugetProvider
8+
from tests import Person
9+
10+
11+
class TestCustomProvider(TestCase):
12+
@staticmethod
13+
def configure_server_options(temp_dir: str, server_options: ServerOptions) -> ServerOptions:
14+
server_options.target_server_location = str(Path(temp_dir, "RavenDBServer"))
15+
server_options.data_directory = str(Path(temp_dir, "RavenDB"))
16+
server_options.logs_path = str(Path(temp_dir, "Logs"))
17+
server_options.command_line_args = ["--Features.Availability=Experimental"]
18+
return server_options
19+
20+
def test_can_use_zip_as_external_server_source(self):
21+
with tempfile.TemporaryDirectory() as temp_dir:
22+
with EmbeddedServer() as embedded:
23+
server_options = ServerOptions()
24+
server_options = self.configure_server_options(temp_dir, server_options)
25+
server_options.with_external_server("target/ravendb-server.zip")
26+
embedded.start_server(server_options)
27+
28+
database_options = DatabaseOptions.from_database_name("Test")
29+
30+
with embedded.get_document_store_from_options(database_options) as store:
31+
with store.open_session() as session:
32+
loaded_person = session.load("no-such-person", Person)
33+
self.assertIsNone(loaded_person)
34+
35+
def test_can_use_directory_as_external_server_source(self):
36+
with tempfile.TemporaryDirectory() as temp_directory:
37+
with EmbeddedServer() as embedded:
38+
server_options = ServerOptions()
39+
server_options = self.configure_server_options(temp_directory, server_options)
40+
server_options.with_external_server(CopyServerFromNugetProvider.SERVER_FILES)
41+
embedded.start_server(server_options)
42+
43+
database_options = DatabaseOptions.from_database_name("Test")
44+
45+
with embedded.get_document_store_from_options(database_options) as store:
46+
with store.open_session() as session:
47+
loaded_person = session.load("no-such-person", Person)
48+
self.assertIsNone(loaded_person)

0 commit comments

Comments
 (0)