2323from splitio .engine .impressions .manager import Counter as ImpressionsCounter
2424from splitio .engine .impressions .unique_keys_tracker import UniqueKeysTracker , UniqueKeysTrackerAsync
2525from splitio .engine .telemetry import TelemetryStorageConsumer , TelemetryStorageProducer , TelemetryStorageProducerAsync
26- from splitio .engine .evaluator import Evaluator
26+ from splitio .engine .evaluator import Evaluator , EvaluationContext
2727from splitio .recorder .recorder import StandardRecorder , StandardRecorderAsync
2828from splitio .engine .impressions .strategies import StrategyDebugMode , StrategyNoneMode , StrategyOptimizedMode
2929from tests .integration import splits_json
@@ -1516,7 +1516,7 @@ def get_feature_flag_names_by_flag_sets(*_):
15161516 pass
15171517
15181518 @mock .patch ('splitio.engine.evaluator.Evaluator.eval_with_context' , side_effect = Exception ())
1519- def test_fallback_treatment_exception_no_impressions (self , mocker ):
1519+ def test_fallback_treatment_exception (self , mocker ):
15201520 # using fallback when the evaluator has RuntimeError exception
15211521 split_storage = mocker .Mock (spec = SplitStorage )
15221522 segment_storage = mocker .Mock (spec = SegmentStorage )
@@ -2890,6 +2890,9 @@ async def test_fallback_treatment_eval_exception(self, mocker):
28902890 impmanager = ImpressionManager (StrategyOptimizedMode (), StrategyNoneMode (), telemetry_producer .get_telemetry_runtime_producer ())
28912891 recorder = StandardRecorderAsync (impmanager , event_storage , impression_storage , telemetry_evaluation_producer , telemetry_producer .get_telemetry_runtime_producer ())
28922892
2893+ async def manager_start_task ():
2894+ pass
2895+
28932896 factory = SplitFactoryAsync (mocker .Mock (),
28942897 {'splits' : split_storage ,
28952898 'segments' : segment_storage ,
@@ -2902,7 +2905,7 @@ async def test_fallback_treatment_eval_exception(self, mocker):
29022905 telemetry_producer ,
29032906 telemetry_producer .get_telemetry_init_producer (),
29042907 mocker .Mock (),
2905- mocker . Mock ()
2908+ manager_start_task
29062909 )
29072910
29082911 self .imps = None
@@ -3020,7 +3023,7 @@ async def fetch_many_rbs(*_):
30203023
30213024 @pytest .mark .asyncio
30223025 @mock .patch ('splitio.engine.evaluator.Evaluator.eval_with_context' , side_effect = Exception ())
3023- def test_fallback_treatment_exception_no_impressions (self , mocker ):
3026+ async def test_fallback_treatment_exception (self , mocker ):
30243027 # using fallback when the evaluator has RuntimeError exception
30253028 split_storage = mocker .Mock (spec = SplitStorage )
30263029 segment_storage = mocker .Mock (spec = SegmentStorage )
@@ -3033,11 +3036,14 @@ def test_fallback_treatment_exception_no_impressions(self, mocker):
30333036 mocker .patch ('splitio.client.client.utctime_ms' , new = lambda : 1000 )
30343037 mocker .patch ('splitio.client.client.get_latency_bucket_index' , new = lambda x : 5 )
30353038
3036- telemetry_storage = InMemoryTelemetryStorage ()
3037- telemetry_producer = TelemetryStorageProducer (telemetry_storage )
3039+ telemetry_storage = await InMemoryTelemetryStorageAsync . create ()
3040+ telemetry_producer = TelemetryStorageProducerAsync (telemetry_storage )
30383041 impmanager = ImpressionManager (StrategyOptimizedMode (), StrategyNoneMode (), telemetry_producer .get_telemetry_runtime_producer ())
3039- recorder = StandardRecorder (impmanager , event_storage , impression_storage , telemetry_producer .get_telemetry_evaluation_producer (), telemetry_producer .get_telemetry_runtime_producer ())
3040- factory = SplitFactory (mocker .Mock (),
3042+ recorder = StandardRecorderAsync (impmanager , event_storage , impression_storage , telemetry_producer .get_telemetry_evaluation_producer (), telemetry_producer .get_telemetry_runtime_producer ())
3043+ async def manager_start_task ():
3044+ pass
3045+
3046+ factory = SplitFactoryAsync (mocker .Mock (),
30413047 {'splits' : split_storage ,
30423048 'segments' : segment_storage ,
30433049 'rule_based_segments' : rb_segment_storage ,
@@ -3046,52 +3052,64 @@ def test_fallback_treatment_exception_no_impressions(self, mocker):
30463052 mocker .Mock (),
30473053 recorder ,
30483054 impmanager ,
3049- mocker .Mock (),
30503055 telemetry_producer ,
30513056 telemetry_producer .get_telemetry_init_producer (),
3052- mocker .Mock ()
3057+ mocker .Mock (),
3058+ manager_start_task
30533059 )
30543060
30553061 self .imps = None
3056- def put (impressions ):
3062+ async def put (impressions ):
30573063 self .imps = impressions
30583064 impression_storage .put = put
30593065
30603066 class TelemetrySubmitterMock ():
30613067 def synchronize_config (* _ ):
30623068 pass
30633069 factory ._telemetry_submitter = TelemetrySubmitterMock ()
3064- client = Client (factory , recorder , True , FallbackTreatmentCalculator (FallbackTreatmentsConfiguration (FallbackTreatment ("on-global" ))))
3065- treatment = client .get_treatment ("key" , "some" )
3070+ client = ClientAsync (factory , recorder , True , FallbackTreatmentCalculator (FallbackTreatmentsConfiguration (FallbackTreatment ("on-global" ))))
3071+
3072+ async def context_for (* _ ):
3073+ return EvaluationContext (
3074+ {},
3075+ {},
3076+ {}
3077+ )
3078+ client ._context_factory .context_for = context_for
3079+
3080+ treatment = await client .get_treatment ("key" , "some" )
30663081 assert (treatment == "on-global" )
3067- assert (self .imps == None )
3082+ assert (self .imps [0 ].treatment == "on-global" )
3083+ assert (self .imps [0 ].label == "fallback - exception" )
30683084
30693085 self .imps = None
30703086 client ._fallback_treatment_calculator = FallbackTreatmentCalculator (FallbackTreatmentsConfiguration (FallbackTreatment ("on-global" ), {'some' : FallbackTreatment ("on-local" )}))
3071- treatment = client .get_treatment ("key2" , "some" )
3087+ treatment = await client .get_treatment ("key2" , "some" )
30723088 assert (treatment == "on-local" )
3073- assert (self .imps == None )
3089+ assert (self .imps [0 ].treatment == "on-local" )
3090+ assert (self .imps [0 ].label == "fallback - exception" )
30743091
30753092 self .imps = None
30763093 client ._fallback_treatment_calculator = FallbackTreatmentCalculator (FallbackTreatmentsConfiguration (None , {'some' : FallbackTreatment ("on-local" )}))
3077- treatment = client .get_treatment ("key3" , "some" )
3094+ treatment = await client .get_treatment ("key3" , "some" )
30783095 assert (treatment == "on-local" )
3079- assert (self .imps == None )
3096+ assert (self .imps [0 ].treatment == "on-local" )
3097+ assert (self .imps [0 ].label == "fallback - exception" )
30803098
30813099 self .imps = None
30823100 client ._fallback_treatment_calculator = FallbackTreatmentCalculator (FallbackTreatmentsConfiguration (None , {'some2' : FallbackTreatment ("on-local" )}))
3083- treatment = client .get_treatment ("key4" , "some" )
3101+ treatment = await client .get_treatment ("key4" , "some" )
30843102 assert (treatment == "control" )
3085- assert (self .imps == None )
3103+ assert (self .imps [0 ].treatment == "control" )
3104+ assert (self .imps [0 ].label == "exception" )
30863105
30873106 try :
3088- factory .destroy ()
3107+ await factory .destroy ()
30893108 except :
30903109 pass
30913110
30923111 @pytest .mark .asyncio
3093- @mock .patch ('splitio.client.client.Client.ready' , side_effect = None )
3094- def test_fallback_treatment_not_ready_impressions (self , mocker ):
3112+ async def test_fallback_treatment_not_ready_impressions (self , mocker ):
30953113 # using fallback when the evaluator has RuntimeError exception
30963114 split_storage = mocker .Mock (spec = SplitStorage )
30973115 segment_storage = mocker .Mock (spec = SegmentStorage )
@@ -3102,11 +3120,14 @@ def test_fallback_treatment_not_ready_impressions(self, mocker):
31023120 mocker .patch ('splitio.client.client.utctime_ms' , new = lambda : 1000 )
31033121 mocker .patch ('splitio.client.client.get_latency_bucket_index' , new = lambda x : 5 )
31043122
3105- telemetry_storage = InMemoryTelemetryStorage ()
3106- telemetry_producer = TelemetryStorageProducer (telemetry_storage )
3123+ telemetry_storage = await InMemoryTelemetryStorageAsync . create ()
3124+ telemetry_producer = TelemetryStorageProducerAsync (telemetry_storage )
31073125 impmanager = ImpressionManager (StrategyOptimizedMode (), StrategyNoneMode (), telemetry_producer .get_telemetry_runtime_producer ())
3108- recorder = StandardRecorder (impmanager , event_storage , impression_storage , telemetry_producer .get_telemetry_evaluation_producer (), telemetry_producer .get_telemetry_runtime_producer ())
3109- factory = SplitFactory (mocker .Mock (),
3126+ recorder = StandardRecorderAsync (impmanager , event_storage , impression_storage , telemetry_producer .get_telemetry_evaluation_producer (), telemetry_producer .get_telemetry_runtime_producer ())
3127+ async def manager_start_task ():
3128+ pass
3129+
3130+ factory = SplitFactoryAsync (mocker .Mock (),
31103131 {'splits' : split_storage ,
31113132 'segments' : segment_storage ,
31123133 'rule_based_segments' : rb_segment_storage ,
@@ -3115,50 +3136,60 @@ def test_fallback_treatment_not_ready_impressions(self, mocker):
31153136 mocker .Mock (),
31163137 recorder ,
31173138 impmanager ,
3118- mocker .Mock (),
31193139 telemetry_producer ,
31203140 telemetry_producer .get_telemetry_init_producer (),
3121- mocker .Mock ()
3141+ mocker .Mock (),
3142+ manager_start_task
31223143 )
31233144
31243145 self .imps = None
3125- def put (impressions ):
3146+ async def put (impressions ):
31263147 self .imps = impressions
31273148 impression_storage .put = put
31283149
31293150 class TelemetrySubmitterMock ():
31303151 def synchronize_config (* _ ):
31313152 pass
31323153 factory ._telemetry_submitter = TelemetrySubmitterMock ()
3133- client = Client (factory , recorder , True , FallbackTreatmentCalculator (FallbackTreatmentsConfiguration (FallbackTreatment ("on-global" ))))
3134- client .ready = False
3154+ client = ClientAsync (factory , recorder , True , FallbackTreatmentCalculator (FallbackTreatmentsConfiguration (FallbackTreatment ("on-global" ))))
3155+ ready_property = mocker .PropertyMock ()
3156+ ready_property .return_value = False
3157+ type(factory ).ready = ready_property
31353158
3136- treatment = client .get_treatment ("key" , "some" )
3159+ async def context_for (* _ ):
3160+ return EvaluationContext (
3161+ {"some" : {}},
3162+ {},
3163+ {}
3164+ )
3165+ client ._context_factory .context_for = context_for
3166+
3167+ treatment = await client .get_treatment ("key" , "some" )
31373168 assert (self .imps [0 ].treatment == "on-global" )
31383169 assert (self .imps [0 ].label == "fallback - not ready" )
31393170
31403171 self .imps = None
31413172 client ._fallback_treatment_calculator = FallbackTreatmentCalculator (FallbackTreatmentsConfiguration (FallbackTreatment ("on-global" ), {'some' : FallbackTreatment ("on-local" )}))
3142- treatment = client .get_treatment ("key2" , "some" )
3173+ treatment = await client .get_treatment ("key2" , "some" )
31433174 assert (treatment == "on-local" )
31443175 assert (self .imps [0 ].treatment == "on-local" )
31453176 assert (self .imps [0 ].label == "fallback - not ready" )
31463177
31473178 self .imps = None
31483179 client ._fallback_treatment_calculator = FallbackTreatmentCalculator (FallbackTreatmentsConfiguration (None , {'some' : FallbackTreatment ("on-local" )}))
3149- treatment = client .get_treatment ("key3" , "some" )
3180+ treatment = await client .get_treatment ("key3" , "some" )
31503181 assert (treatment == "on-local" )
31513182 assert (self .imps [0 ].treatment == "on-local" )
31523183 assert (self .imps [0 ].label == "fallback - not ready" )
31533184
31543185 self .imps = None
31553186 client ._fallback_treatment_calculator = FallbackTreatmentCalculator (FallbackTreatmentsConfiguration (None , {'some2' : FallbackTreatment ("on-local" )}))
3156- treatment = client .get_treatment ("key4" , "some" )
3187+ treatment = await client .get_treatment ("key4" , "some" )
31573188 assert (treatment == "control" )
31583189 assert (self .imps [0 ].treatment == "control" )
31593190 assert (self .imps [0 ].label == "not ready" )
31603191
31613192 try :
3162- factory .destroy ()
3193+ await factory .destroy ()
31633194 except :
31643195 pass
0 commit comments