@@ -500,7 +500,7 @@ def assert_exposure_event_fields(
500500 cfg = self .exp_base_config [experiment_name ]
501501 self .assertEqual (getattr (event_fields ["experiment" ], "id" ), cfg ["id" ])
502502 self .assertEqual (getattr (event_fields ["experiment" ], "name" ), cfg ["name" ])
503- self .assertEqual (getattr (event_fields ["experiment" ], "owner" ), cfg [ "owner" ] )
503+ self .assertEqual (getattr (event_fields ["experiment" ], "owner" ), None )
504504 self .assertEqual (getattr (event_fields ["experiment" ], "version" ), cfg ["version" ])
505505 self .assertEqual (getattr (event_fields ["experiment" ], "bucket_val" ), bucket_val )
506506
@@ -520,7 +520,7 @@ def assert_minimal_exposure_event_fields(
520520 cfg = self .exp_base_config [experiment_name ]
521521 self .assertEqual (getattr (event_fields ["experiment" ], "id" ), cfg ["id" ])
522522 self .assertEqual (getattr (event_fields ["experiment" ], "name" ), cfg ["name" ])
523- self .assertEqual (getattr (event_fields ["experiment" ], "owner" ), cfg [ "owner" ] )
523+ self .assertEqual (getattr (event_fields ["experiment" ], "owner" ), None )
524524 self .assertEqual (getattr (event_fields ["experiment" ], "version" ), cfg ["version" ])
525525 self .assertEqual (getattr (event_fields ["experiment" ], "bucket_val" ), bucket_val )
526526
@@ -573,7 +573,7 @@ def test_none_returned_on_get_variant_call_with_bad_id(self):
573573 self .assertEqual (self .event_logger .log .call_count , 0 )
574574
575575 assert any (
576- " Partially loaded Decider: 1 features failed to load: {' test': 'Manifest parsing error: invalid type: string \" 1\" , expected u32'}"
576+ ' Partially loaded Decider: 1 feature(s) failed to load: {" test": ParsingError(Error(" invalid type: string \\ "1\\ ", expected u32", line: 0, column: 0))'
577577 in x .getMessage ()
578578 for x in captured .records
579579 )
@@ -1508,6 +1508,81 @@ def test_get_variant_with_disabled_exp(self):
15081508 # exposure assertions
15091509 self .assertEqual (self .event_logger .log .call_count , 0 )
15101510
1511+ def test_range_variant_emit_event_override (self ):
1512+ cfg = {
1513+ "feature_rollout_100" : {
1514+ "id" : 9110 ,
1515+ "name" : "feature_rollout_100" ,
1516+ "enabled" : True ,
1517+ "version" : "1" ,
1518+ "start_ts" : 1522306800 ,
1519+ "stop_ts" : 32533405261 ,
1520+ "owner" : "test_user@reddit.com" ,
1521+ "type" : "feature_rollout" ,
1522+ "emit_event" : False ,
1523+ "experiment" : {
1524+ "variants" : [
1525+ {"name" : "enabled" , "size" : 1.0 , "range_end" : 1.0 , "range_start" : 0.0 }
1526+ ],
1527+ "experiment_version" : 1 ,
1528+ "shuffle_version" : 0 ,
1529+ "bucket_val" : "user_id" ,
1530+ "log_bucketing" : False ,
1531+ },
1532+ },
1533+ "measured_rollout_100" : {
1534+ "id" : 9119 ,
1535+ "name" : "measured_rollout_100" ,
1536+ "enabled" : True ,
1537+ "version" : "1" ,
1538+ "start_ts" : 1522306800 ,
1539+ "stop_ts" : 32533405261 ,
1540+ "owner" : "test_user@reddit.com" ,
1541+ "type" : "range_variant" ,
1542+ "emit_event" : False ,
1543+ "measured" : True ,
1544+ "experiment" : {
1545+ "variants" : [
1546+ {
1547+ "name" : "enabled" ,
1548+ "size" : 1.0 ,
1549+ "range_end" : 1.0 ,
1550+ "range_start" : 0.0 ,
1551+ "emit_event_override" : True ,
1552+ }
1553+ ],
1554+ "experiment_version" : 1 ,
1555+ "shuffle_version" : 0 ,
1556+ "bucket_val" : "user_id" ,
1557+ "log_bucketing" : False ,
1558+ },
1559+ },
1560+ }
1561+
1562+ with create_temp_config_file (cfg ) as f :
1563+ decider = setup_decider (f , self .dc , self .mock_span , self .event_logger )
1564+
1565+ self .assertEqual (self .event_logger .log .call_count , 0 )
1566+ variant = decider .get_variant (experiment_name = "feature_rollout_100" )
1567+ self .assertEqual (variant , "enabled" )
1568+
1569+ # FR does NOT emit exposure
1570+ self .assertEqual (self .event_logger .log .call_count , 0 )
1571+
1572+ # FR is NOT "measured"
1573+ fr_cfg = decider .get_experiment (experiment_name = "feature_rollout_100" )
1574+ self .assertEqual (fr_cfg .measured , False )
1575+
1576+ variant = decider .get_variant (experiment_name = "measured_rollout_100" )
1577+ self .assertEqual (variant , "enabled" )
1578+
1579+ # Measured Rollout DOES emit exposure (due to RV "emit_event_override" field)
1580+ self .assertEqual (self .event_logger .log .call_count , 1 )
1581+
1582+ # MR IS "measured"
1583+ mr_cfg = decider .get_experiment (experiment_name = "measured_rollout_100" )
1584+ self .assertEqual (mr_cfg .measured , True )
1585+
15111586 def test_get_experiment (self ):
15121587 with create_temp_config_file (self .exp_base_config ) as f :
15131588 decider = setup_decider (f , self .dc , self .mock_span , self .event_logger )
@@ -1521,7 +1596,6 @@ def test_get_experiment(self):
15211596 self .assertEqual (experiment .bucket_val , cfg ["experiment" ]["bucket_val" ])
15221597 self .assertEqual (experiment .start_ts , cfg ["start_ts" ])
15231598 self .assertEqual (experiment .stop_ts , cfg ["stop_ts" ])
1524- self .assertEqual (experiment .owner , cfg ["owner" ])
15251599 self .assertEqual (experiment .emit_event , True )
15261600
15271601 def test_get_variant_without_expose_with_HG_as_control_1_and_child_returns_none_does_expose (
0 commit comments