@@ -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,86 @@ 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
+ {
1526
+ "name" : "enabled" ,
1527
+ "size" : 1.0 ,
1528
+ "range_end" : 1.0 ,
1529
+ "range_start" : 0.0
1530
+ }
1531
+ ],
1532
+ "experiment_version" : 1 ,
1533
+ "shuffle_version" : 0 ,
1534
+ "bucket_val" : "user_id" ,
1535
+ "log_bucketing" : False
1536
+ }
1537
+ },
1538
+ "measured_rollout_100" : {
1539
+ "id" : 9119 ,
1540
+ "name" : "measured_rollout_100" ,
1541
+ "enabled" : True ,
1542
+ "version" : "1" ,
1543
+ "start_ts" : 1522306800 ,
1544
+ "stop_ts" : 32533405261 ,
1545
+
1546
+ "type" : "range_variant" ,
1547
+ "emit_event" : False ,
1548
+ "measured" : True ,
1549
+ "experiment" : {
1550
+ "variants" : [
1551
+ {
1552
+ "name" : "enabled" ,
1553
+ "size" : 1.0 ,
1554
+ "range_end" : 1.0 ,
1555
+ "range_start" : 0.0 ,
1556
+ "emit_event_override" : True
1557
+ }
1558
+ ],
1559
+ "experiment_version" : 1 ,
1560
+ "shuffle_version" : 0 ,
1561
+ "bucket_val" : "user_id" ,
1562
+ "log_bucketing" : False
1563
+ }
1564
+ }
1565
+ }
1566
+
1567
+ with create_temp_config_file (cfg ) as f :
1568
+ decider = setup_decider (f , self .dc , self .mock_span , self .event_logger )
1569
+
1570
+ self .assertEqual (self .event_logger .log .call_count , 0 )
1571
+ variant = decider .get_variant (experiment_name = "feature_rollout_100" )
1572
+ self .assertEqual (variant , "enabled" )
1573
+
1574
+ # FR does NOT emit exposure
1575
+ self .assertEqual (self .event_logger .log .call_count , 0 )
1576
+
1577
+ # FR is NOT "measured"
1578
+ fr_cfg = decider .get_experiment (experiment_name = "feature_rollout_100" )
1579
+ self .assertEqual (fr_cfg .measured , False )
1580
+
1581
+ variant = decider .get_variant (experiment_name = "measured_rollout_100" )
1582
+ self .assertEqual (variant , "enabled" )
1583
+
1584
+ # Measured Rollout DOES emit exposure (due to RV "emit_event_override" field)
1585
+ self .assertEqual (self .event_logger .log .call_count , 1 )
1586
+
1587
+ # MR IS "measured"
1588
+ mr_cfg = decider .get_experiment (experiment_name = "measured_rollout_100" )
1589
+ self .assertEqual (mr_cfg .measured , True )
1590
+
1511
1591
def test_get_experiment (self ):
1512
1592
with create_temp_config_file (self .exp_base_config ) as f :
1513
1593
decider = setup_decider (f , self .dc , self .mock_span , self .event_logger )
@@ -1521,7 +1601,7 @@ def test_get_experiment(self):
1521
1601
self .assertEqual (experiment .bucket_val , cfg ["experiment" ]["bucket_val" ])
1522
1602
self .assertEqual (experiment .start_ts , cfg ["start_ts" ])
1523
1603
self .assertEqual (experiment .stop_ts , cfg ["stop_ts" ])
1524
- self .assertEqual (experiment .owner , cfg [ "owner" ] )
1604
+ self .assertEqual (experiment .owner , None )
1525
1605
self .assertEqual (experiment .emit_event , True )
1526
1606
1527
1607
def test_get_variant_without_expose_with_HG_as_control_1_and_child_returns_none_does_expose (
0 commit comments