44from unittest import mock
55
66from baseplate import ServerSpan
7+ from baseplate .lib .events import DebugLogger
78from baseplate .lib .file_watcher import FileWatcher
89from reddit_edgecontext import AuthenticationToken
910from 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
1115from reddit_experiments import Experiments
1216
1317ORIGINAL_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 \n experiment: { 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 \n experiment: { 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