Skip to content

Commit cb8c97f

Browse files
authored
Merge pull request #60 from reddit/compare_decider_against_old_sdk
Compare `decider.get_variant()` against old sdk's `experiments.variant()`
2 parents 9308ce4 + ec0cb17 commit cb8c97f

File tree

3 files changed

+39
-6
lines changed

3 files changed

+39
-6
lines changed

reddit_decider/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -820,7 +820,7 @@ def get_all_dynamic_configs(self) -> List[Dict[str, Any]]:
820820
where "type" field can be one of:
821821
"boolean", "integer", "float", "string", or "map"
822822
823-
Dynamic Configurations that are malformed, fail parsing, or otherwirse
823+
Dynamic Configurations that are malformed, fail parsing, or otherwise
824824
error for any reason are included in the response and have their respective default
825825
values set:
826826
"boolean" -> False

tests/range_variant_tests/data/range_variant_zk_config.json

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

tests/range_variant_tests/range_variant_parity_tests.py

Lines changed: 37 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,14 @@
44
from unittest import mock
55

66
from baseplate import ServerSpan
7+
from baseplate.lib.events import DebugLogger
78
from baseplate.lib.file_watcher import FileWatcher
89
from reddit_edgecontext import AuthenticationToken
910
from reddit_edgecontext import User
1011

12+
from reddit_decider import Decider
13+
from reddit_decider import DeciderContext
14+
from reddit_decider import init_decider_parser
1115
from reddit_experiments import Experiments
1216

1317
ORIGINAL_ZK_CONFIG_FILE = "tests/range_variant_tests/data/original_zk_config.json"
@@ -29,6 +33,7 @@ def setUp(self):
2933
self.mock_span.trace_id = "123456"
3034
self.mock_authentication_token = mock.Mock(spec=AuthenticationToken)
3135
self.mock_authentication_token.user_roles = set()
36+
self.event_logger = mock.Mock(spec=DebugLogger)
3237

3338
def test_range_variant_bucketing_with_cfg_data(self):
3439
original_experiments = Experiments(
@@ -45,30 +50,58 @@ def test_range_variant_bucketing_with_cfg_data(self):
4550
cfg_data=self.range_variant_zk_config,
4651
)
4752

53+
filewatcher = FileWatcher(
54+
path=RANGE_VARIANT_ZK_CONFIG_FILE, parser=init_decider_parser, timeout=2, backoff=2
55+
)
56+
extracted_fields = {"app_name": "", "build_number": 0}
57+
4858
# results = {}
4959
for experiment_name in self.original_zk_config.keys():
5060
for i in range(NUMBER_OF_TEST_USERS):
5161
uuid = "t2_" + str(i)
62+
63+
# experiments sdk
5264
self.mock_authentication_token.subject = uuid
5365
user = User(
5466
authentication_token=self.mock_authentication_token,
5567
loid=uuid,
5668
cookie_created_ms=10000,
5769
)
70+
5871
og_variant = original_experiments.variant(
59-
experiment_name, user=user, app_name="", build_number=0
60-
)
61-
rv_variant = rv_experiments.variant(
62-
experiment_name, user=user, app_name="", build_number=0
72+
experiment_name, user=user, **extracted_fields
6373
)
74+
rv_variant = rv_experiments.variant(experiment_name, user=user, **extracted_fields)
6475

76+
# compare experiments sdk in original data format to range-variants format
6577
if og_variant != rv_variant:
6678
print(f"\n\nexperiment: {experiment_name}")
6779
print(f"uuid: {uuid}")
6880
print(f"original variant: {og_variant}")
6981
print(f"rv variant: {rv_variant}")
7082
self.assertEqual(og_variant, rv_variant)
7183

84+
# decider sdk
85+
decider_context = DeciderContext(user_id=uuid, extracted_fields=extracted_fields)
86+
87+
decider = Decider(
88+
decider_context=decider_context,
89+
config_watcher=filewatcher,
90+
server_span=self.mock_span,
91+
context_name="test",
92+
event_logger=self.event_logger,
93+
)
94+
95+
decider_variant = decider.get_variant(experiment_name=experiment_name)
96+
97+
# compare decider sdk to original experiments sdk in range-variant format
98+
if decider_variant != rv_variant:
99+
print(f"\n\nexperiment: {experiment_name}")
100+
print(f"uuid: {uuid}")
101+
print(f"rv variant: {rv_variant}")
102+
print(f"decider variant: {decider_variant}")
103+
self.assertEqual(decider_variant, rv_variant)
104+
72105
# construct experiment/uuid to variant mapping
73106
# used to compare results across baseplate languages
74107
# results[experiment_name + ':' + uuid] = og_variant

0 commit comments

Comments
 (0)