@@ -8098,6 +8098,126 @@ static void test_segment_record_error(void) {
8098
8098
nr_txn_destroy (& txn );
8099
8099
}
8100
8100
8101
+ static void test_segment_record_error_with_additional_params (void ) {
8102
+ nrapp_t app = {
8103
+ .state = NR_APP_OK ,
8104
+ .limits = {
8105
+ .analytics_events = NR_MAX_ANALYTIC_EVENTS ,
8106
+ .span_events = NR_DEFAULT_SPAN_EVENTS_MAX_SAMPLES_STORED ,
8107
+ },
8108
+ };
8109
+ nrtxnopt_t opts ;
8110
+ nr_segment_t * segment ;
8111
+ nrtxn_t * txn ;
8112
+
8113
+ /* Setup transaction and segment */
8114
+ nr_memset (& opts , 0 , sizeof (opts ));
8115
+ opts .distributed_tracing_enabled = 1 ;
8116
+ opts .span_events_enabled = 1 ;
8117
+ txn = nr_txn_begin (& app , & opts , NULL );
8118
+ segment = nr_segment_start (txn , NULL , NULL );
8119
+ nr_distributed_trace_set_sampled (txn -> distributed_trace , true);
8120
+ txn -> options .allow_raw_exception_messages = 1 ;
8121
+
8122
+ /* No error attributes added if error collection isn't enabled */
8123
+ txn -> options .err_enabled = 0 ;
8124
+ nr_txn_record_error_with_additional_attributes (
8125
+ txn , 1 , true, "low priority message" , "low priority class" , "random.php" ,
8126
+ 150 , "random context" , 256 , "[\"A\",\"B\"]" );
8127
+ tlib_pass_if_null ("No segment error created" , segment -> error );
8128
+ txn -> options .err_enabled = 1 ;
8129
+
8130
+ /* Do not add to current segment */
8131
+ nr_txn_record_error_with_additional_attributes (txn , 0.5 , false,
8132
+ "low priority message" , "low priority class" , "random php" , 150 , "random context" , 256 , "[\"A\",\"B\"]" );
8133
+ tlib_pass_if_not_null ("Txn error event created" , txn -> error );
8134
+ tlib_pass_if_null ("Segment error NOT created" , segment -> error );
8135
+ tlib_pass_if_str_equal ("Correct txn error.message" , "low priority message" ,
8136
+ nr_error_get_message (txn -> error ));
8137
+ tlib_pass_if_str_equal ("Correct txn error.class" , "low priority class" ,
8138
+ nr_error_get_klass (txn -> error ));
8139
+
8140
+ /* Normal operation: txn error prioritized over previous */
8141
+ nr_txn_record_error_with_additional_attributes (
8142
+ txn , 1 , true, "random message" , "random class" , "random.php" ,
8143
+ 150 , "random context" , 256 , "[\"A\",\"B\"]" );
8144
+ tlib_pass_if_not_null ("Txn error event created" , txn -> error );
8145
+ tlib_pass_if_not_null ("Segment error created" , segment -> error );
8146
+ tlib_pass_if_str_equal ("Correct segment error.message" , "random message" ,
8147
+ segment -> error -> error_message );
8148
+ tlib_pass_if_str_equal ("Correct segment error.class" , "random class" ,
8149
+ segment -> error -> error_class );
8150
+ tlib_pass_if_str_equal ("Correct segment error.file" , "random.php" ,
8151
+ segment -> error -> error_file );
8152
+ tlib_pass_if_int_equal ("Correct segment error.line" , 150 ,
8153
+ segment -> error -> error_line );
8154
+ tlib_pass_if_str_equal ("Correct segment error.context" , "random context" ,
8155
+ segment -> error -> error_context );
8156
+ tlib_pass_if_int_equal ("Correct segment error.no" , 256 ,
8157
+ segment -> error -> error_no );
8158
+ tlib_pass_if_str_equal ("txn error message matches segment error message" ,
8159
+ segment -> error -> error_message ,
8160
+ nr_error_get_message (txn -> error ));
8161
+ tlib_pass_if_str_equal ("txn error class matches segment error class" ,
8162
+ segment -> error -> error_class ,
8163
+ nr_error_get_klass (txn -> error ));
8164
+
8165
+ /* Multiple errors on the same segment */
8166
+ nr_txn_record_error_with_additional_attributes (
8167
+ txn , 1 , true, "random message 2" , "random class 2" , "random.php2" ,
8168
+ 150 , "random context2" , 256 , "[\"A\",\"B\"]" );
8169
+
8170
+ tlib_pass_if_str_equal ("Segment error.message overwritten" , "random message 2" ,
8171
+ segment -> error -> error_message );
8172
+ tlib_pass_if_str_equal ("Segment error.class overwritten" , "random class 2" ,
8173
+ segment -> error -> error_class );
8174
+ tlib_pass_if_str_equal ("txn error message matches segment error message" ,
8175
+ segment -> error -> error_message ,
8176
+ nr_error_get_message (txn -> error ));
8177
+ tlib_pass_if_str_equal ("txn error class matches segment error class" ,
8178
+ segment -> error -> error_class ,
8179
+ nr_error_get_klass (txn -> error ));
8180
+
8181
+ /* High_security */
8182
+ txn -> high_security = 1 ;
8183
+ nr_txn_record_error_with_additional_attributes (
8184
+ txn , 1 , true, "secure message" , "random class" , "random.php" ,
8185
+ 150 , "random context" , 256 , "[\"A\",\"B\"]" );
8186
+ tlib_pass_if_not_null ("Segment error created" , segment -> error );
8187
+ tlib_pass_if_str_equal ("Secure error.message" ,
8188
+ NR_TXN_HIGH_SECURITY_ERROR_MESSAGE ,
8189
+ segment -> error -> error_message );
8190
+ tlib_pass_if_str_equal ("Correct segment error class" , "random class" ,
8191
+ segment -> error -> error_class );
8192
+ tlib_pass_if_str_equal ("txn error message matches segment error message" ,
8193
+ segment -> error -> error_message ,
8194
+ nr_error_get_message (txn -> error ));
8195
+ tlib_pass_if_str_equal ("txn error class matches segment error class" ,
8196
+ segment -> error -> error_class ,
8197
+ nr_error_get_klass (txn -> error ));
8198
+ txn -> high_security = 0 ;
8199
+
8200
+ /* allow_raw_exception_messages */
8201
+ txn -> options .allow_raw_exception_messages = 0 ;
8202
+ nr_txn_record_error_with_additional_attributes (
8203
+ txn , 1 , true, "another secure message" , "another random class" , "random.php" ,
8204
+ 150 , "random context" , 256 , "[\"A\",\"B\"]" );
8205
+ tlib_pass_if_not_null ("Segment error created" , segment -> error );
8206
+ tlib_pass_if_str_equal ("Secure error message" ,
8207
+ NR_TXN_ALLOW_RAW_EXCEPTION_MESSAGE ,
8208
+ segment -> error -> error_message );
8209
+ tlib_pass_if_str_equal ("Correct segment error.class" , "another random class" ,
8210
+ segment -> error -> error_class );
8211
+ tlib_pass_if_str_equal ("txn error message matches segment error message" ,
8212
+ segment -> error -> error_message ,
8213
+ nr_error_get_message (txn -> error ));
8214
+ tlib_pass_if_str_equal ("txn error class matches segment error class" ,
8215
+ segment -> error -> error_class ,
8216
+ nr_error_get_klass (txn -> error ));
8217
+
8218
+ nr_txn_destroy (& txn );
8219
+ }
8220
+
8101
8221
static nrtxn_t * new_txn_for_record_log_event_test (char * entity_name ) {
8102
8222
nrapp_t app ;
8103
8223
nrtxnopt_t opts ;
@@ -8685,6 +8805,7 @@ void test_main(void* p NRUNUSED) {
8685
8805
test_txn_accept_distributed_trace_payload_w3c_and_nr ();
8686
8806
test_span_queue ();
8687
8807
test_segment_record_error ();
8808
+ test_segment_record_error_with_additional_params ();
8688
8809
test_log_level_verify ();
8689
8810
test_record_log_event ();
8690
8811
test_txn_log_configuration ();
0 commit comments