@@ -1158,7 +1158,7 @@ def wrapper(wrapped, instance, args, kwargs):
11581158
11591159
11601160def validate_transaction_error_trace_attributes (required_params = {},
1161- forgone_params = {}):
1161+ forgone_params = {}, exact_attrs = {} ):
11621162 """Check the error trace for attributes, expect only one error to be
11631163 present in the transaction.
11641164 """
@@ -1178,15 +1178,15 @@ def _validate_transaction_error_trace(wrapped, instance, args, kwargs):
11781178 traced_error = error_data [0 ]
11791179
11801180 check_error_attributes (traced_error .parameters , required_params ,
1181- forgone_params , is_transaction = True )
1181+ forgone_params , exact_attrs , is_transaction = True )
11821182
11831183 return result
11841184
11851185 return _validate_transaction_error_trace
11861186
11871187
11881188def check_error_attributes (parameters , required_params = {}, forgone_params = {},
1189- is_transaction = True ):
1189+ exact_attrs = {}, is_transaction = True ):
11901190
11911191 parameter_fields = ['userAttributes' ]
11921192 if is_transaction :
@@ -1202,10 +1202,10 @@ def check_error_attributes(parameters, required_params={}, forgone_params={},
12021202 assert 'request_params' not in parameters
12031203 assert 'request_uri' not in parameters
12041204
1205- check_attributes (parameters , required_params , forgone_params )
1205+ check_attributes (parameters , required_params , forgone_params , exact_attrs )
12061206
12071207
1208- def check_attributes (parameters , required_params = {}, forgone_params = {}):
1208+ def check_attributes (parameters , required_params = {}, forgone_params = {}, exact_attrs = {} ):
12091209 if required_params :
12101210 for param in required_params ['agent' ]:
12111211 assert param in parameters ['agentAttributes' ]
@@ -1223,6 +1223,17 @@ def check_attributes(parameters, required_params={}, forgone_params={}):
12231223 for param in forgone_params ['user' ]:
12241224 assert param not in parameters ['userAttributes' ]
12251225
1226+ if exact_attrs :
1227+ for param , value in exact_attrs ['agent' ].items ():
1228+ assert parameters ['agentAttributes' ][param ] == value , (
1229+ (param , value ), parameters ['agentAttributes' ])
1230+ for param , value in exact_attrs ['user' ].items ():
1231+ assert parameters ['userAttributes' ][param ] == value , (
1232+ (param , value ), parameters ['userAttributes' ])
1233+ for param , value in exact_attrs ['intrinsic' ].items ():
1234+ assert parameters ['intrinsics' ][param ] == value , (
1235+ (param , value ), parameters ['intrinsics' ])
1236+
12261237
12271238def validate_error_trace_collector_json ():
12281239 @transient_function_wrapper ('newrelic.core.stats_engine' ,
@@ -1605,7 +1616,7 @@ def _validate_error_event_attributes(wrapped, instance, args, kwargs):
16051616
16061617
16071618def validate_error_trace_attributes_outside_transaction (err_name ,
1608- required_params = {}, forgone_params = {}):
1619+ required_params = {}, forgone_params = {}, exact_attrs = {} ):
16091620 @transient_function_wrapper ('newrelic.core.stats_engine' ,
16101621 'StatsEngine.notice_error' )
16111622 def _validate_error_trace_attributes_outside_transaction (wrapped , instance ,
@@ -1618,7 +1629,7 @@ def _validate_error_trace_attributes_outside_transaction(wrapped, instance,
16181629 target_error = core_application_stats_engine_error (err_name )
16191630
16201631 check_error_attributes (target_error .parameters , required_params ,
1621- forgone_params , is_transaction = False )
1632+ forgone_params , exact_attrs , is_transaction = False )
16221633
16231634 return result
16241635
0 commit comments