@@ -8134,6 +8134,126 @@ static void test_segment_record_error(void) {
8134
8134
nr_txn_destroy (& txn );
8135
8135
}
8136
8136
8137
+ static void test_segment_record_error_with_additional_params (void ) {
8138
+ nrapp_t app = {
8139
+ .state = NR_APP_OK ,
8140
+ .limits = {
8141
+ .analytics_events = NR_MAX_ANALYTIC_EVENTS ,
8142
+ .span_events = NR_DEFAULT_SPAN_EVENTS_MAX_SAMPLES_STORED ,
8143
+ },
8144
+ };
8145
+ nrtxnopt_t opts ;
8146
+ nr_segment_t * segment ;
8147
+ nrtxn_t * txn ;
8148
+
8149
+ /* Setup transaction and segment */
8150
+ nr_memset (& opts , 0 , sizeof (opts ));
8151
+ opts .distributed_tracing_enabled = 1 ;
8152
+ opts .span_events_enabled = 1 ;
8153
+ txn = nr_txn_begin (& app , & opts , NULL );
8154
+ segment = nr_segment_start (txn , NULL , NULL );
8155
+ nr_distributed_trace_set_sampled (txn -> distributed_trace , true);
8156
+ txn -> options .allow_raw_exception_messages = 1 ;
8157
+
8158
+ /* No error attributes added if error collection isn't enabled */
8159
+ txn -> options .err_enabled = 0 ;
8160
+ nr_txn_record_error_with_additional_attributes (
8161
+ txn , 1 , true, "low priority message" , "low priority class" , "random.php" ,
8162
+ 150 , "random context" , 256 , "[\"A\",\"B\"]" );
8163
+ tlib_pass_if_null ("No segment error created" , segment -> error );
8164
+ txn -> options .err_enabled = 1 ;
8165
+
8166
+ /* Do not add to current segment */
8167
+ nr_txn_record_error_with_additional_attributes (txn , 0.5 , false,
8168
+ "low priority message" , "low priority class" , "random php" , 150 , "random context" , 256 , "[\"A\",\"B\"]" );
8169
+ tlib_pass_if_not_null ("Txn error event created" , txn -> error );
8170
+ tlib_pass_if_null ("Segment error NOT created" , segment -> error );
8171
+ tlib_pass_if_str_equal ("Correct txn error.message" , "low priority message" ,
8172
+ nr_error_get_message (txn -> error ));
8173
+ tlib_pass_if_str_equal ("Correct txn error.class" , "low priority class" ,
8174
+ nr_error_get_klass (txn -> error ));
8175
+
8176
+ /* Normal operation: txn error prioritized over previous */
8177
+ nr_txn_record_error_with_additional_attributes (
8178
+ txn , 1 , true, "random message" , "random class" , "random.php" ,
8179
+ 150 , "random context" , 256 , "[\"A\",\"B\"]" );
8180
+ tlib_pass_if_not_null ("Txn error event created" , txn -> error );
8181
+ tlib_pass_if_not_null ("Segment error created" , segment -> error );
8182
+ tlib_pass_if_str_equal ("Correct segment error.message" , "random message" ,
8183
+ segment -> error -> error_message );
8184
+ tlib_pass_if_str_equal ("Correct segment error.class" , "random class" ,
8185
+ segment -> error -> error_class );
8186
+ tlib_pass_if_str_equal ("Correct segment error.file" , "random.php" ,
8187
+ segment -> error -> error_file );
8188
+ tlib_pass_if_int_equal ("Correct segment error.line" , 150 ,
8189
+ segment -> error -> error_line );
8190
+ tlib_pass_if_str_equal ("Correct segment error.context" , "random context" ,
8191
+ segment -> error -> error_context );
8192
+ tlib_pass_if_int_equal ("Correct segment error.no" , 256 ,
8193
+ segment -> error -> error_no );
8194
+ tlib_pass_if_str_equal ("txn error message matches segment error message" ,
8195
+ segment -> error -> error_message ,
8196
+ nr_error_get_message (txn -> error ));
8197
+ tlib_pass_if_str_equal ("txn error class matches segment error class" ,
8198
+ segment -> error -> error_class ,
8199
+ nr_error_get_klass (txn -> error ));
8200
+
8201
+ /* Multiple errors on the same segment */
8202
+ nr_txn_record_error_with_additional_attributes (
8203
+ txn , 1 , true, "random message 2" , "random class 2" , "random.php2" ,
8204
+ 150 , "random context2" , 256 , "[\"A\",\"B\"]" );
8205
+
8206
+ tlib_pass_if_str_equal ("Segment error.message overwritten" , "random message 2" ,
8207
+ segment -> error -> error_message );
8208
+ tlib_pass_if_str_equal ("Segment error.class overwritten" , "random class 2" ,
8209
+ segment -> error -> error_class );
8210
+ tlib_pass_if_str_equal ("txn error message matches segment error message" ,
8211
+ segment -> error -> error_message ,
8212
+ nr_error_get_message (txn -> error ));
8213
+ tlib_pass_if_str_equal ("txn error class matches segment error class" ,
8214
+ segment -> error -> error_class ,
8215
+ nr_error_get_klass (txn -> error ));
8216
+
8217
+ /* High_security */
8218
+ txn -> high_security = 1 ;
8219
+ nr_txn_record_error_with_additional_attributes (
8220
+ txn , 1 , true, "secure message" , "random class" , "random.php" ,
8221
+ 150 , "random context" , 256 , "[\"A\",\"B\"]" );
8222
+ tlib_pass_if_not_null ("Segment error created" , segment -> error );
8223
+ tlib_pass_if_str_equal ("Secure error.message" ,
8224
+ NR_TXN_HIGH_SECURITY_ERROR_MESSAGE ,
8225
+ segment -> error -> error_message );
8226
+ tlib_pass_if_str_equal ("Correct segment error class" , "random class" ,
8227
+ segment -> error -> error_class );
8228
+ tlib_pass_if_str_equal ("txn error message matches segment error message" ,
8229
+ segment -> error -> error_message ,
8230
+ nr_error_get_message (txn -> error ));
8231
+ tlib_pass_if_str_equal ("txn error class matches segment error class" ,
8232
+ segment -> error -> error_class ,
8233
+ nr_error_get_klass (txn -> error ));
8234
+ txn -> high_security = 0 ;
8235
+
8236
+ /* allow_raw_exception_messages */
8237
+ txn -> options .allow_raw_exception_messages = 0 ;
8238
+ nr_txn_record_error_with_additional_attributes (
8239
+ txn , 1 , true, "another secure message" , "another random class" , "random.php" ,
8240
+ 150 , "random context" , 256 , "[\"A\",\"B\"]" );
8241
+ tlib_pass_if_not_null ("Segment error created" , segment -> error );
8242
+ tlib_pass_if_str_equal ("Secure error message" ,
8243
+ NR_TXN_ALLOW_RAW_EXCEPTION_MESSAGE ,
8244
+ segment -> error -> error_message );
8245
+ tlib_pass_if_str_equal ("Correct segment error.class" , "another random class" ,
8246
+ segment -> error -> error_class );
8247
+ tlib_pass_if_str_equal ("txn error message matches segment error message" ,
8248
+ segment -> error -> error_message ,
8249
+ nr_error_get_message (txn -> error ));
8250
+ tlib_pass_if_str_equal ("txn error class matches segment error class" ,
8251
+ segment -> error -> error_class ,
8252
+ nr_error_get_klass (txn -> error ));
8253
+
8254
+ nr_txn_destroy (& txn );
8255
+ }
8256
+
8137
8257
static nrtxn_t * new_txn_for_record_log_event_test (char * entity_name ) {
8138
8258
nrapp_t app ;
8139
8259
nrtxnopt_t opts ;
@@ -8721,6 +8841,7 @@ void test_main(void* p NRUNUSED) {
8721
8841
test_txn_accept_distributed_trace_payload_w3c_and_nr ();
8722
8842
test_span_queue ();
8723
8843
test_segment_record_error ();
8844
+ test_segment_record_error_with_additional_params ();
8724
8845
test_log_level_verify ();
8725
8846
test_record_log_event ();
8726
8847
test_txn_log_configuration ();
0 commit comments