@@ -500,7 +500,7 @@ def assert_exposure_event_fields(
500
500
cfg = self .exp_base_config [experiment_name ]
501
501
self .assertEqual (getattr (event_fields ["experiment" ], "id" ), cfg ["id" ])
502
502
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 )
504
504
self .assertEqual (getattr (event_fields ["experiment" ], "version" ), cfg ["version" ])
505
505
self .assertEqual (getattr (event_fields ["experiment" ], "bucket_val" ), bucket_val )
506
506
@@ -520,7 +520,7 @@ def assert_minimal_exposure_event_fields(
520
520
cfg = self .exp_base_config [experiment_name ]
521
521
self .assertEqual (getattr (event_fields ["experiment" ], "id" ), cfg ["id" ])
522
522
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 )
524
524
self .assertEqual (getattr (event_fields ["experiment" ], "version" ), cfg ["version" ])
525
525
self .assertEqual (getattr (event_fields ["experiment" ], "bucket_val" ), bucket_val )
526
526
@@ -573,7 +573,7 @@ def test_none_returned_on_get_variant_call_with_bad_id(self):
573
573
self .assertEqual (self .event_logger .log .call_count , 0 )
574
574
575
575
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))'
577
577
in x .getMessage ()
578
578
for x in captured .records
579
579
)
@@ -1508,6 +1508,81 @@ def test_get_variant_with_disabled_exp(self):
1508
1508
# exposure assertions
1509
1509
self .assertEqual (self .event_logger .log .call_count , 0 )
1510
1510
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
+
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
+
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
+
1511
1586
def test_get_experiment (self ):
1512
1587
with create_temp_config_file (self .exp_base_config ) as f :
1513
1588
decider = setup_decider (f , self .dc , self .mock_span , self .event_logger )
@@ -1521,7 +1596,6 @@ def test_get_experiment(self):
1521
1596
self .assertEqual (experiment .bucket_val , cfg ["experiment" ]["bucket_val" ])
1522
1597
self .assertEqual (experiment .start_ts , cfg ["start_ts" ])
1523
1598
self .assertEqual (experiment .stop_ts , cfg ["stop_ts" ])
1524
- self .assertEqual (experiment .owner , cfg ["owner" ])
1525
1599
self .assertEqual (experiment .emit_event , True )
1526
1600
1527
1601
def test_get_variant_without_expose_with_HG_as_control_1_and_child_returns_none_does_expose (
0 commit comments