Skip to content

Commit 8a15f87

Browse files
committed
fixup: adding gherkin tests for evaluations, and fxing found issues
Signed-off-by: Simon Schrottner <[email protected]>
1 parent fb110bb commit 8a15f87

File tree

19 files changed

+404
-159
lines changed

19 files changed

+404
-159
lines changed

providers/openfeature-provider-flagd/pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ classifiers = [
1818
keywords = []
1919
dependencies = [
2020
"openfeature-sdk>=0.4.0",
21-
"grpcio>=1.60.0",
21+
"grpcio>=1.68.0",
2222
"protobuf>=4.25.2",
2323
"mmh3>=4.1.0",
2424
"panzi-json-logic>=1.0.1",

providers/openfeature-provider-flagd/src/openfeature/contrib/provider/flagd/resolvers/grpc.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020

2121
from ..config import Config
2222
from ..flag_type import FlagType
23-
from . import AbstractResolver
23+
from .protocol import AbstractResolver
2424

2525
T = typing.TypeVar("T")
2626

providers/openfeature-provider-flagd/src/openfeature/contrib/provider/flagd/resolvers/in_process.py

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -73,8 +73,6 @@ def resolve_float_details(
7373
evaluation_context: typing.Optional[EvaluationContext] = None,
7474
) -> FlagResolutionDetails[float]:
7575
result = self._resolve(key, default_value, evaluation_context)
76-
if not isinstance(result.value, float):
77-
result.value = float(result.value)
7876
return result
7977

8078
def resolve_integer_details(
@@ -84,8 +82,6 @@ def resolve_integer_details(
8482
evaluation_context: typing.Optional[EvaluationContext] = None,
8583
) -> FlagResolutionDetails[int]:
8684
result = self._resolve(key, default_value, evaluation_context)
87-
if not isinstance(result.value, int):
88-
result.value = int(result.value)
8985
return result
9086

9187
def resolve_object_details(

providers/openfeature-provider-flagd/src/openfeature/contrib/provider/flagd/resolvers/process/connector/grpc_watcher.py

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,16 @@
55
import typing
66

77
import grpc
8+
from schemas.protobuf.flagd.sync.v1 import ( # type:ignore[import-not-found]
9+
sync_pb2,
10+
sync_pb2_grpc,
11+
)
812

913
from openfeature.evaluation_context import EvaluationContext
1014
from openfeature.event import ProviderEventDetails
1115
from openfeature.exception import ErrorCode, ParseError, ProviderNotReadyError
1216

1317
from ....config import Config
14-
from ....proto.flagd.sync.v1 import sync_pb2, sync_pb2_grpc
1518
from ..connector import FlagStateConnector
1619
from ..flags import FlagStore
1720

@@ -30,7 +33,14 @@ def __init__(
3033
):
3134
self.flag_store = flag_store
3235
channel_factory = grpc.secure_channel if config.tls else grpc.insecure_channel
33-
self.channel = channel_factory(f"{config.host}:{config.port}")
36+
self.channel = channel_factory(
37+
f"{config.host}:{config.port}",
38+
options=(
39+
("grpc.max_reconnect_backoff_ms", 1000),
40+
("grpc.initial_reconnect_backoff_ms", 1000),
41+
("grpc.keepalive_time_ms", 1000),
42+
),
43+
)
3444
self.stub = sync_pb2_grpc.FlagSyncServiceStub(self.channel)
3545
self.timeout = config.timeout
3646
self.retry_backoff_seconds = config.retry_backoff_seconds
@@ -62,11 +72,10 @@ def shutdown(self) -> None:
6272
self.active = False
6373

6474
def sync_flags(self) -> None:
65-
request = sync_pb2.SyncFlagsRequest(selector=self.selector) # type:ignore[attr-defined]
66-
6775
retry_delay = self.retry_backoff_seconds
6876
while self.active:
6977
try:
78+
request = sync_pb2.SyncFlagsRequest(selector=self.selector)
7079
logger.debug("Setting up gRPC sync flags connection")
7180
for flag_rsp in self.stub.SyncFlags(request):
7281
flag_str = flag_rsp.flag_configuration
@@ -107,4 +116,4 @@ def sync_flags(self) -> None:
107116
)
108117
logger.info(f"gRPC sync disconnected, reconnecting in {retry_delay}s")
109118
time.sleep(retry_delay)
110-
retry_delay = min(2 * retry_delay, self.MAX_BACK_OFF)
119+
retry_delay = min(2, self.MAX_BACK_OFF)

providers/openfeature-provider-flagd/src/openfeature/contrib/provider/flagd/resolvers/process/flags.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,10 @@ def from_dict(cls, key: str, data: dict) -> "Flag":
7272
data["default_variant"] = data["defaultVariant"]
7373
del data["defaultVariant"]
7474

75+
if "source" in data:
76+
del data["source"]
77+
if "selector" in data:
78+
del data["selector"]
7579
try:
7680
flag = cls(key=key, **data)
7781
return flag

providers/openfeature-provider-flagd/tests/e2e/conftest.py

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,29 +5,22 @@
55
from tests.e2e.flagd_container import FlagdContainer
66
from tests.e2e.steps import * # noqa: F403
77

8-
from openfeature import api
9-
from openfeature.contrib.provider.flagd import FlagdProvider
10-
118
JsonPrimitive = typing.Union[str, bool, float, int]
129

1310

14-
@pytest.fixture(autouse=True, scope="package")
15-
def setup(request, port, image, resolver_type):
11+
@pytest.fixture(autouse=True, scope="module")
12+
def setup(request, port, image):
1613
container: DockerContainer = FlagdContainer(
1714
image=image,
1815
port=port,
1916
)
2017
# Setup code
2118
c = container.start()
22-
api.set_provider(
23-
FlagdProvider(
24-
resolver_type=resolver_type,
25-
port=int(container.get_exposed_port(port)),
26-
)
27-
)
2819

2920
def fin():
3021
c.stop()
3122

3223
# Teardown code
3324
request.addfinalizer(fin)
25+
26+
return c.get_exposed_port(port)

providers/openfeature-provider-flagd/tests/e2e/inprocess/file/conftest.py

Lines changed: 0 additions & 17 deletions
This file was deleted.

providers/openfeature-provider-flagd/tests/e2e/inprocess/grpc/conftest.py

Lines changed: 0 additions & 49 deletions
This file was deleted.

providers/openfeature-provider-flagd/tests/e2e/inprocess/grpc/test_inprocess_grpc.py

Lines changed: 0 additions & 6 deletions
This file was deleted.

0 commit comments

Comments
 (0)