Test(logthrdestdrv, when_batched_set_of_messages_result_in_error_the_entire_batch_is_attempted_again_retry_count_times_and_then_dropped) { dd->super.worker.insert = _insert_batched_message_error_drop; dd->super.worker.flush = _flush_batched_message_error_drop; dd->super.time_reopen = 0; dd->super.retries_on_error_max = 5; start_grabbing_messages(); _generate_messages_and_wait_for_processing(dd, 10, dd->super.dropped_messages); cr_assert(dd->insert_counter == dd->super.retries_on_error_max * 10, "not all messages were attempted %d times, insert_counter=%d", dd->super.retries_on_error_max, dd->insert_counter); cr_assert(dd->flush_size == dd->super.retries_on_error_max * 10, "not all messages were flushed %d times, flush_size=%d", dd->super.retries_on_error_max, dd->flush_size); cr_assert(stats_counter_get(dd->super.processed_messages) == 10); cr_assert(stats_counter_get(dd->super.written_messages) == 0); cr_assert(stats_counter_get(dd->super.dropped_messages) == 10); cr_assert(stats_counter_get(dd->super.worker.instance.queue->memory_usage) == 0); cr_assert(dd->super.shared_seq_num == dd->super.retries_on_error_max * 10 + 1, "seq_num needs to be one larger than the number of insert attempts, found %d", dd->super.shared_seq_num); assert_grabbed_log_contains("Error occurred while"); assert_grabbed_log_contains("Multiple failures while sending"); }
Test(logthrdestdrv, when_batched_set_of_messages_result_in_not_connected_the_entire_batch_is_attempted_again_and_then_successfully_delivered) { gint total_attempts = FAILING_ATTEMPTS_NOTCONN + 1; dd->super.worker.insert = _insert_batched_message_not_connected; dd->super.worker.flush = _flush_batched_message_not_connected; dd->super.time_reopen = 0; dd->super.retries_on_error_max = 5; start_grabbing_messages(); _generate_messages_and_wait_for_processing(dd, 10, dd->super.written_messages); cr_assert(dd->insert_counter == total_attempts * 10, "not all messages were attempted %d times, insert_counter=%d", total_attempts, dd->insert_counter); cr_assert(dd->flush_size == total_attempts * 10, "not all messages were flushed %d times, flush_size=%d", total_attempts, dd->flush_size); cr_assert(stats_counter_get(dd->super.processed_messages) == 10); cr_assert(stats_counter_get(dd->super.written_messages) == 10); cr_assert(stats_counter_get(dd->super.dropped_messages) == 0); cr_assert(stats_counter_get(dd->super.worker.instance.queue->memory_usage) == 0); cr_assert(dd->super.shared_seq_num == total_attempts * 10 + 1, "%d", dd->super.shared_seq_num); assert_grabbed_log_contains("Server disconnected"); }
void assert_proto_server_fetch_single_read(LogProtoServer *proto, const gchar *expected_msg, gssize expected_msg_len) { const guchar *msg = NULL; gsize msg_len = 0; LogProtoStatus status; LogTransportAuxData aux; Bookmark bookmark; gboolean may_read = TRUE; start_grabbing_messages(); log_transport_aux_data_init(&aux); status = log_proto_server_fetch(proto, &msg, &msg_len, &may_read, &aux, &bookmark); assert_proto_server_status(proto, status, LPS_SUCCESS); if (expected_msg) { assert_nstring((const gchar *) msg, msg_len, expected_msg, expected_msg_len, "LogProtoServer expected message mismatch"); } else { assert_true(msg == NULL, "when single-read finds an incomplete message, msg must be NULL"); assert_true(aux.peer_addr == NULL, "returned saddr must be NULL on success"); } stop_grabbing_messages(); }
LogProtoStatus proto_server_fetch(LogProtoServer *proto, const guchar **msg, gsize *msg_len) { Bookmark bookmark; LogTransportAuxData aux; GSockAddr *saddr; gboolean may_read = TRUE; LogProtoStatus status; start_grabbing_messages(); do { log_transport_aux_data_init(&aux); status = log_proto_server_fetch(proto, msg, msg_len, &may_read, &aux, &bookmark); } while (status == LPS_SUCCESS && *msg == NULL && may_read); saddr = aux.peer_addr; if (status == LPS_SUCCESS) { g_sockaddr_unref(saddr); } else { assert_true(saddr == NULL, "returned saddr must be NULL on failure"); } stop_grabbing_messages(); return status; }
int main(int argc, char **argv) { app_startup(); putenv("TZ=MET-1METDST"); tzset(); start_grabbing_messages(); test_condition_success(); test_reference_on_condition_cloned(); test_set_field_exist_and_set_literal_string(); test_set_field_not_exist_and_set_literal_string(); test_set_field_exist_and_set_template_string(); test_subst_field_exist_and_substring_substituted(); test_subst_field_exist_and_substring_substituted_with_template(); test_subst_field_exist_and_substring_substituted_only_once_without_global(); test_subst_field_exist_and_substring_substituted_every_occurence_with_global(); test_subst_field_exist_and_substring_substituted_when_regexp_matched(); test_set_field_honors_time_zone(); test_set_field_exist_and_group_set_literal_string(); test_set_field_exist_and_group_set_multiple_fields_with_glob_pattern_literal_string(); test_set_field_exist_and_group_set_multiple_fields_with_glob_question_mark_pattern_literal_string(); test_set_field_exist_and_group_set_multiple_fields_with_multiple_glob_pattern_literal_string(); test_set_field_exist_and_group_set_template_string(); test_set_field_exist_and_group_set_template_string_with_old_value(); test_set_field_invalid_template(); test_set_field_exist_and_group_set_when_condition_doesnt_match(); test_set_field_exist_and_group_set_when_condition_matches(); test_set_field_cloned(); stop_grabbing_messages(); }
Test(wildcard_source, test_invalid_monitor_method) { start_grabbing_messages(); cr_assert(!_parse_config("monitor-method(\"something else\"")); stop_grabbing_messages(); cr_assert(assert_grabbed_messages_contain_non_fatal("Invalid monitor-method", NULL)); reset_grabbed_messages(); }
Test(wildcard_source, test_base_dir_required_options) { start_grabbing_messages(); cr_assert(_parse_config("filename-pattern(/tmp)")); cr_assert(!cfg_init(configuration), "Config initialization should be failed"); stop_grabbing_messages(); cr_assert(assert_grabbed_messages_contain_non_fatal("base-dir option is required", NULL)); reset_grabbed_messages(); }
Test(logthrdestdrv, message_drops_are_accounted_in_the_drop_counter_and_are_reported_properly) { dd->super.worker.insert = _insert_single_message_drop; start_grabbing_messages(); _generate_message_and_wait_for_processing(dd, dd->super.dropped_messages); cr_assert(dd->insert_counter == 1, "insert()-ed message count expected to match the amount generated, found %d", dd->insert_counter); cr_assert(stats_counter_get(dd->super.processed_messages) == 1); cr_assert(stats_counter_get(dd->super.written_messages) == 0); cr_assert(stats_counter_get(dd->super.dropped_messages) == 1); cr_assert(dd->super.shared_seq_num == 2, "seq_num expected to be 1 larger than the amount of messages generated, found %d", dd->super.shared_seq_num); assert_grabbed_log_contains("dropped while sending"); }
Test(logthrdestdrv, connection_failure_is_considered_an_error_and_retried_indefinitely) { dd->super.worker.insert = _insert_single_message_connection_failure; dd->super.time_reopen = 0; start_grabbing_messages(); _generate_message_and_wait_for_processing(dd, dd->super.written_messages); cr_assert(dd->insert_counter == 11, "insert() invocations expected to match 11 (10 failed and 1 successul) attempts, found %d", dd->insert_counter); cr_assert(stats_counter_get(dd->super.processed_messages) == 1); cr_assert(stats_counter_get(dd->super.written_messages) == 1); cr_assert(stats_counter_get(dd->super.dropped_messages) == 0); cr_assert(dd->super.shared_seq_num == 12, "seq_num expected to be 1 larger than the number of insert attempts, found %d", dd->super.shared_seq_num); assert_grabbed_log_contains("Server disconnected"); }
void assert_proto_server_fetch_ignored_eof(LogProtoServer *proto) { const guchar *msg = NULL; gsize msg_len = 0; LogProtoStatus status; LogTransportAuxData aux; gboolean may_read = TRUE; start_grabbing_messages(); log_transport_aux_data_init(&aux); status = log_proto_server_fetch(proto, &msg, &msg_len, &may_read, &aux); assert_proto_server_status(proto, status, LPS_SUCCESS); assert_true(msg == NULL, "when an EOF is ignored msg must be NULL"); assert_true(aux.peer_addr == NULL, "returned saddr must be NULL on success"); stop_grabbing_messages(); }
static void test_log_proto_text_server_invalid_encoding(void) { LogProtoServer *proto; gboolean success; log_proto_server_options_set_encoding(&proto_server_options, "never-ever-is-going-to-be-such-an-encoding"); proto = construct_test_proto( log_transport_mock_stream_new( "", -1, LTM_EOF)); start_grabbing_messages(); success = log_proto_server_validate_options(proto); assert_grabbed_messages_contain("Unknown character set name specified; encoding='never-ever-is-going-to-be-such-an-encoding'", "message about unknown charset missing"); assert_false(success, "validate_options() returned success but it should have failed"); log_proto_server_free(proto); }
Test(logthrdestdrv, batched_set_of_messages_are_dropped_as_a_whole) { dd->super.worker.insert = _insert_batched_message_drop; dd->super.worker.flush = _flush_batched_message_drop; dd->super.time_reopen = 0; start_grabbing_messages(); _generate_messages_and_wait_for_processing(dd, 10, dd->super.dropped_messages); cr_assert(dd->insert_counter == 10); cr_assert(dd->flush_size == 10); cr_assert(stats_counter_get(dd->super.processed_messages) == 10); cr_assert(stats_counter_get(dd->super.written_messages) == 0); cr_assert(stats_counter_get(dd->super.dropped_messages) == 10); cr_assert(stats_counter_get(dd->super.worker.instance.queue->memory_usage) == 0); cr_assert(dd->super.shared_seq_num == 11, "%d", dd->super.shared_seq_num); assert_grabbed_log_contains("dropped while sending message"); }
Test(logthrdestdrv, test_connect_failure_kicks_in_suspend_retry_logic_which_keeps_reconnecting_until_successful) { /* the dd created by setup() is not good for us */ _teardown_dd(); /* we are asserting on a debug message */ debug_flag = TRUE; start_grabbing_messages(); dd = test_threaded_dd_new(main_loop_get_current_config(main_loop)); dd->super.worker.connect = _connect_failure; dd->super.worker.insert = _insert_single_message_success; dd->super.time_reopen = 0; cr_assert(log_pipe_init(&dd->super.super.super.super)); _generate_message_and_wait_for_processing(dd, dd->super.written_messages); cr_assert(dd->connect_counter == 11, "%d", dd->connect_counter); assert_grabbed_log_contains("Error establishing connection to server"); }
Test(logthrdestdrv, error_result_retries_sending_retry_max_times_and_then_accepts) { dd->super.worker.insert = _insert_single_message_error_until_successful; dd->super.time_reopen = 0; dd->super.retries_on_error_max = 5; start_grabbing_messages(); _generate_message_and_wait_for_processing(dd, dd->super.written_messages); cr_assert(dd->insert_counter == 5, "insert() invocations expected to match the number of failed (4) plus the number of successful (1) attempts, found %d", dd->insert_counter); cr_assert(stats_counter_get(dd->super.processed_messages) == 1); cr_assert(stats_counter_get(dd->super.written_messages) == 1); cr_assert(stats_counter_get(dd->super.dropped_messages) == 0); cr_assert(dd->super.shared_seq_num == 6, "seq_num expected to be 1 larger than the number of insert attempts, found %d", dd->super.shared_seq_num); assert_grabbed_log_contains("Error occurred while"); }
static void _before_test(void) { start_grabbing_messages(); mongodb = afmongodb_dd_new(test_cfg); }