Skip to content

Commit

Permalink
test: validating env var usage when creating client (#42)
Browse files Browse the repository at this point in the history
  • Loading branch information
adilansari committed Jun 1, 2023
1 parent eef942f commit 6de2dd4
Show file tree
Hide file tree
Showing 6 changed files with 196 additions and 71 deletions.
143 changes: 76 additions & 67 deletions poetry.lock

Large diffs are not rendered by default.

5 changes: 3 additions & 2 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -19,14 +19,15 @@ include = ["api/generated/**/*"]
[tool.poetry.dependencies]
python = ">=3.8,<4.0"
protobuf = "^4.22.3"
grpcio-tools = "^1.54.0"
grpcio-tools = ">=1.46.0"

[tool.poetry.group.dev]
optional = true

[tool.poetry.group.dev.dependencies]
pre-commit = "^3.3.0"
coverage = { version = "^7.2.5", extras = ["toml"] }
tomli = "^2.0.1"

[tool.poetry.scripts]
make = "scripts.proto:main"
Expand All @@ -37,7 +38,7 @@ branch = true
command_line = "-m unittest discover -s tests -p 'test_*.py'"

[tool.coverage.report]
fail_under = 70
fail_under = 90

[build-system]
requires = ["poetry-core"]
Expand Down
87 changes: 87 additions & 0 deletions tests/test_client.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
import os
from unittest import TestCase
from unittest.mock import MagicMock, patch

import grpc

from tigrisdb.client import TigrisClient
from tigrisdb.types import ClientConfig


@patch("grpc.channel_ready_future")
class TigrisClientTest(TestCase):
def setUp(self) -> None:
self.done_future = MagicMock(grpc.Future)

def test_without_config(self, ready_future):
ready_future.return_value = self.done_future
client = TigrisClient()
self.assertEqual("localhost:8081", client.config.server_url)
self.assertIsNone(client.config.client_id)
self.assertIsNone(client.config.client_secret)
self.assertIsNone(client.config.project_name)
self.assertEqual("", client.config.branch)

@patch.dict(
os.environ,
{
"TIGRIS_URI": "uri_env",
"TIGRIS_PROJECT": "project_env",
"TIGRIS_CLIENT_ID": "client_env",
"TIGRIS_CLIENT_SECRET": "secret_env",
"TIGRIS_DB_BRANCH": "branch_env",
},
)
def test_with_config(self, ready_future):
ready_future.return_value = self.done_future
client = TigrisClient(
config=ClientConfig(
server_url="test_url",
project_name="test_project",
client_id="test_client_id",
client_secret="test_client_secret",
branch="test_branch",
)
)
self.assertEqual("test_url:443", client.config.server_url)
self.assertEqual("test_client_id", client.config.client_id)
self.assertEqual("test_client_secret", client.config.client_secret)
self.assertEqual("test_project", client.config.project_name)
self.assertEqual("test_branch", client.config.branch)

@patch.dict(
os.environ,
{
"TIGRIS_URI": "uri_env",
"TIGRIS_PROJECT": "project_env",
"TIGRIS_CLIENT_ID": "client_env",
"TIGRIS_CLIENT_SECRET": "secret_env",
"TIGRIS_DB_BRANCH": "branch_env",
},
)
def test_with_env_vars(self, ready_future):
ready_future.return_value = self.done_future
client = TigrisClient()
self.assertEqual("uri_env:443", client.config.server_url)
self.assertEqual("client_env", client.config.client_id)
self.assertEqual("secret_env", client.config.client_secret)
self.assertEqual("project_env", client.config.project_name)
self.assertEqual("branch_env", client.config.branch)

def test_strip_https(self, ready_future):
ready_future.return_value = self.done_future
client = TigrisClient(config=ClientConfig(server_url="https://my.tigris.dev"))
self.assertEqual("my.tigris.dev:443", client.config.server_url)
client = TigrisClient(config=ClientConfig(server_url="http://my.tigris.dev"))
self.assertEqual("my.tigris.dev:443", client.config.server_url)

def test_get_db(self, ready_future):
ready_future.return_value = self.done_future
client = TigrisClient()
self.assertEqual(client.config.branch, client.get_db().branch)
self.assertEqual(client.config.project_name, client.get_db().project)

def test_get_search(self, ready_future):
ready_future.return_value = self.done_future
client = TigrisClient()
self.assertEqual(client.config.project_name, client.get_search().project)
24 changes: 24 additions & 0 deletions tests/test_dependencies.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
import os.path
from unittest import TestCase

import tomli

HERE = os.path.dirname(os.path.realpath(__file__))
PYPROJECT_TOML = os.path.join(HERE, "..", "pyproject.toml")


class DependenciesTest(TestCase):
def setUp(self) -> None:
with open(PYPROJECT_TOML, "rb") as f:
self.poetry_conf = tomli.load(f)["tool"]["poetry"]

def test_required_dependencies(self):
deps = self.poetry_conf["dependencies"].keys()
self.assertCountEqual(
["python", "protobuf", "grpcio-tools"],
deps,
)

def test_dev_dependencies(self):
deps = self.poetry_conf["group"]["dev"]["dependencies"].keys()
self.assertCountEqual(["pre-commit", "coverage", "tomli"], deps)
6 changes: 5 additions & 1 deletion tigrisdb/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ class TigrisClient(object):
__search_client: SearchStub
__config: ClientConfig

def __init__(self, config: Optional[ClientConfig]):
def __init__(self, config: Optional[ClientConfig] = None):
os.environ["PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION"] = "python"

if not config:
Expand Down Expand Up @@ -70,6 +70,10 @@ def __init__(self, config: Optional[ClientConfig]):
self.__tigris_client = TigrisStub(channel)
self.__search_client = SearchStub(channel)

@property
def config(self):
return self.__config

def get_db(self):
return Database(self.__tigris_client, self.__config)

Expand Down
2 changes: 1 addition & 1 deletion tigrisdb/types/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ class ClientConfig:
client_id: Optional[str] = None
client_secret: Optional[str] = None
branch: str = ""
server_url: str = "localhost:8081"
server_url: str = ""


class Serializable(abc.ABC):
Expand Down

0 comments on commit 6de2dd4

Please sign in to comment.