void assert_structured_data_of_messages(LogMessage *log_message_a, LogMessage *log_message_b) { GString *structured_data_string_a = g_string_sized_new(0); GString *structured_data_string_b = g_string_sized_new(0); log_msg_format_sdata(log_message_a, structured_data_string_a, 0); log_msg_format_sdata(log_message_b, structured_data_string_b, 0); assert_string(structured_data_string_a->str, structured_data_string_b->str, "Structure data string are not the same"); g_string_free(structured_data_string_a, TRUE); g_string_free(structured_data_string_b, TRUE); }
void test_log_messages_can_be_parsed(struct msgparse_params *param) { LogMessage *parsed_message; LogStamp *parsed_timestamp; time_t now; GString *sd_str; parsed_message = _parse_log_message(param->msg, param->parse_flags, param->bad_hostname_re); parsed_timestamp = &(parsed_message->timestamps[LM_TS_STAMP]); if (param->expected_stamp_sec) { if (param->expected_stamp_sec != 1) cr_assert_eq(parsed_timestamp->tv_sec, param->expected_stamp_sec, "Unexpected timestamp, value=%ld, expected=%ld, msg=%s", parsed_timestamp->tv_sec, param->expected_stamp_sec, param->msg); cr_assert_eq(parsed_timestamp->tv_usec, param->expected_stamp_usec, "Unexpected microseconds"); cr_assert_eq(parsed_timestamp->zone_offset, param->expected_stamp_ofs, "Unexpected timezone offset"); } else { time(&now); cr_assert(_absolute_value(parsed_timestamp->tv_sec - now) <= 5, "Expected parsed message timestamp to be set to now; now='%d', timestamp->tv_sec='%d'", (gint)now, (gint)parsed_timestamp->tv_sec); } cr_assert_eq(parsed_message->pri, param->expected_pri, "Unexpected message priority"); assert_log_message_value(parsed_message, LM_V_HOST, param->expected_host); assert_log_message_value(parsed_message, LM_V_PROGRAM, param->expected_program); assert_log_message_value(parsed_message, LM_V_MESSAGE, param->expected_msg); if (param->expected_pid) assert_log_message_value(parsed_message, LM_V_PID, param->expected_pid); if (param->expected_msgid) assert_log_message_value(parsed_message, LM_V_MSGID, param->expected_msgid); if (param->expected_sd_str) { sd_str = g_string_sized_new(0); log_msg_format_sdata(parsed_message, sd_str, 0); cr_assert_str_eq(sd_str->str, param->expected_sd_str, "Unexpected formatted SData"); g_string_free(sd_str, TRUE); } assert_log_message_sdata_pairs(parsed_message, param->expected_sd_pairs); log_msg_unref(parsed_message); }
void testcase(gchar *msg, gint parse_flags, gchar *bad_hostname_re, gint expected_pri, unsigned long expected_stamp_sec, unsigned long expected_stamp_usec, unsigned long expected_stamp_ofs, const gchar *expected_host, const gchar *expected_program, const gchar *expected_msg, const gchar *expected_sd_str, const gchar *expected_pid, const gchar *expected_msgid, const gchar *expected_sd_pairs[][2]) { LogMessage *parsed_message; LogStamp *parsed_timestamp; time_t now; GString *sd_str; testcase_begin("Testing log message parsing; parse_flags='%x', bad_hostname_re='%s', msg='%s'", parse_flags, bad_hostname_re ? : "(null)", msg); parsed_message = parse_log_message(msg, parse_flags, bad_hostname_re); parsed_timestamp = &(parsed_message->timestamps[LM_TS_STAMP]); if (expected_stamp_sec) { if (expected_stamp_sec != 1) assert_guint(parsed_timestamp->tv_sec, expected_stamp_sec, "Unexpected timestamp"); assert_guint32(parsed_timestamp->tv_usec, expected_stamp_usec, "Unexpected microseconds"); assert_guint32(parsed_timestamp->zone_offset, expected_stamp_ofs, "Unexpected timezone offset"); } else { time(&now); assert_true(absolute_value(parsed_timestamp->tv_sec - now) <= 5, "Expected parsed message timestamp to be set to now; now='%d', timestamp->tv_sec='%d'", (gint)now, (gint)parsed_timestamp->tv_sec, NULL); } assert_guint16(parsed_message->pri, expected_pri, "Unexpected message priority"); assert_log_message_value(parsed_message, LM_V_HOST, expected_host); assert_log_message_value(parsed_message, LM_V_PROGRAM, expected_program); assert_log_message_value(parsed_message, LM_V_MESSAGE, expected_msg); if (expected_pid) assert_log_message_value(parsed_message, LM_V_PID, expected_pid); if (expected_msgid) assert_log_message_value(parsed_message, LM_V_MSGID, expected_msgid); if (expected_sd_str) { sd_str = g_string_sized_new(0); log_msg_format_sdata(parsed_message, sd_str, 0); assert_string(sd_str->str, expected_sd_str, "Unexpected formatted SData"); g_string_free(sd_str, TRUE); } assert_log_message_sdata_pairs(parsed_message, expected_sd_pairs); log_msg_unref(parsed_message); testcase_end(); }
int testcase(gchar *msg, gint parse_flags, /* LP_NEW_PROTOCOL */ gchar *bad_hostname_re, gint expected_pri, guint expected_version, unsigned long expected_stamps_sec, unsigned long expected_stamps_usec, unsigned long expected_stamps_ofs, const gchar *expected_host, const gchar *expected_msg, const gchar *expected_program, const gchar *expected_sd_str, const gchar *expected_process_id, const gchar *expected_message_id ) { LogMessage *logmsg, *cloned; time_t now; regex_t bad_hostname; GSockAddr *addr = g_sockaddr_inet_new("10.10.10.10", 1010); gchar logmsg_addr[256], cloned_addr[256]; LogPathOptions path_options = LOG_PATH_OPTIONS_INIT; GString *sd_str = g_string_sized_new(0); if (bad_hostname_re) TEST_ASSERT(regcomp(&bad_hostname, bad_hostname_re, REG_NOSUB | REG_EXTENDED) == 0, "%d", 0, 0); parse_options.flags = parse_flags; parse_options.bad_hostname = &bad_hostname; logmsg = log_msg_new(msg, strlen(msg), addr, &parse_options); TEST_ASSERT(logmsg->pri == expected_pri, "%d", logmsg->pri, expected_pri); if (expected_stamps_sec) { if (expected_stamps_sec != 1) { TEST_ASSERT(logmsg->timestamps[LM_TS_STAMP].time.tv_sec == expected_stamps_sec, "%d", (int) logmsg->timestamps[LM_TS_STAMP].time.tv_sec, (int) expected_stamps_sec); } TEST_ASSERT(logmsg->timestamps[LM_TS_STAMP].time.tv_usec == expected_stamps_usec, "%d", (int) logmsg->timestamps[LM_TS_STAMP].time.tv_usec, (int) expected_stamps_usec); TEST_ASSERT(logmsg->timestamps[LM_TS_STAMP].zone_offset == expected_stamps_ofs, "%d", (int) logmsg->timestamps[LM_TS_STAMP].zone_offset, (int) expected_stamps_ofs); } else { time(&now); TEST_ASSERT(absolute_value(logmsg->timestamps[LM_TS_STAMP].time.tv_sec - now) < 1, "%d", 0, 0); } TEST_ASSERT(strcmp(log_msg_get_value(logmsg, LM_V_HOST, NULL), expected_host) == 0, "%s", log_msg_get_value(logmsg, LM_V_HOST, NULL), expected_host); TEST_ASSERT(strcmp(log_msg_get_value(logmsg, LM_V_PROGRAM, NULL), expected_program) == 0, "%s", log_msg_get_value(logmsg, LM_V_PROGRAM, NULL), expected_program); TEST_ASSERT(strcmp(log_msg_get_value(logmsg, LM_V_MESSAGE, NULL), expected_msg) == 0, "%s", log_msg_get_value(logmsg, LM_V_MESSAGE, NULL), expected_msg); TEST_ASSERT(strcmp(log_msg_get_value(logmsg, LM_V_PID, NULL), expected_process_id) == 0, "%s", log_msg_get_value(logmsg, LM_V_PID, NULL), expected_process_id); TEST_ASSERT(strcmp(log_msg_get_value(logmsg, LM_V_MSGID, NULL), expected_message_id) == 0, "%s", log_msg_get_value(logmsg, LM_V_MSGID, NULL), expected_message_id); /* SD elements */ log_msg_format_sdata(logmsg, sd_str); TEST_ASSERT(strcmp(sd_str->str, expected_sd_str) == 0, "%s", sd_str->str, expected_sd_str); /* check if the sockaddr matches */ g_sockaddr_format(logmsg->saddr, logmsg_addr, sizeof(logmsg_addr), GSA_FULL); path_options.flow_control = FALSE; cloned = log_msg_clone_cow(logmsg, &path_options); g_sockaddr_format(cloned->saddr, cloned_addr, sizeof(cloned_addr), GSA_FULL); TEST_ASSERT(strcmp(logmsg_addr, cloned_addr) == 0, "%s", cloned_addr, logmsg_addr); TEST_ASSERT(logmsg->pri == cloned->pri, "%d", logmsg->pri, cloned->pri); TEST_ASSERT(logmsg->timestamps[LM_TS_STAMP].time.tv_sec == cloned->timestamps[LM_TS_STAMP].time.tv_sec, "%d", (int) logmsg->timestamps[LM_TS_STAMP].time.tv_sec, (int) cloned->timestamps[LM_TS_STAMP].time.tv_sec); TEST_ASSERT(logmsg->timestamps[LM_TS_STAMP].time.tv_usec == cloned->timestamps[LM_TS_STAMP].time.tv_usec, "%d", (int) logmsg->timestamps[LM_TS_STAMP].time.tv_usec, (int) cloned->timestamps[LM_TS_STAMP].time.tv_usec); TEST_ASSERT(logmsg->timestamps[LM_TS_STAMP].zone_offset == cloned->timestamps[LM_TS_STAMP].zone_offset, "%d", (int) logmsg->timestamps[LM_TS_STAMP].zone_offset, (int) cloned->timestamps[LM_TS_STAMP].zone_offset); TEST_ASSERT(strcmp(log_msg_get_value(logmsg, LM_V_HOST, NULL), log_msg_get_value(cloned, LM_V_HOST, NULL)) == 0, "%s", log_msg_get_value(logmsg, LM_V_HOST, NULL), log_msg_get_value(cloned, LM_V_HOST, NULL)); TEST_ASSERT(strcmp(log_msg_get_value(logmsg, LM_V_PROGRAM, NULL), log_msg_get_value(cloned, LM_V_PROGRAM, NULL)) == 0, "%s", log_msg_get_value(logmsg, LM_V_PROGRAM, NULL), log_msg_get_value(cloned, LM_V_PROGRAM, NULL)); TEST_ASSERT(strcmp(log_msg_get_value(logmsg, LM_V_MESSAGE, NULL), log_msg_get_value(cloned, LM_V_MESSAGE, NULL)) == 0, "%s", log_msg_get_value(logmsg, LM_V_MESSAGE, NULL), log_msg_get_value(cloned, LM_V_MESSAGE, NULL)); TEST_ASSERT(strcmp(log_msg_get_value(logmsg, LM_V_PID, NULL), log_msg_get_value(cloned, LM_V_PID, NULL)) == 0, "%s", log_msg_get_value(logmsg, LM_V_PID, NULL), log_msg_get_value(cloned, LM_V_PID, NULL)); TEST_ASSERT(strcmp(log_msg_get_value(logmsg, LM_V_MSGID, NULL), log_msg_get_value(cloned, LM_V_MSGID, NULL)) == 0, "%s", log_msg_get_value(logmsg, LM_V_MSGID, NULL), log_msg_get_value(cloned, LM_V_MSGID, NULL)); /* SD elements */ log_msg_format_sdata(cloned, sd_str); TEST_ASSERT(strcmp(sd_str->str, expected_sd_str) == 0, "%s", sd_str->str, expected_sd_str); log_msg_set_value(cloned, LM_V_HOST, "newhost", -1); log_msg_set_value(cloned, LM_V_HOST_FROM, "newhost", -1); log_msg_set_value(cloned, LM_V_MESSAGE, "newmsg", -1); log_msg_set_value(cloned, LM_V_PROGRAM, "newprogram", -1); log_msg_set_value(cloned, LM_V_PID, "newpid", -1); log_msg_set_value(cloned, LM_V_MSGID, "newmsgid", -1); log_msg_set_value(cloned, LM_V_SOURCE, "newsource", -1); log_msg_set_value(cloned, log_msg_get_value_handle("newvalue"), "newvalue", -1); /* retest values in original logmsg */ TEST_ASSERT(strcmp(log_msg_get_value(logmsg, LM_V_HOST, NULL), expected_host) == 0, "%s", log_msg_get_value(logmsg, LM_V_HOST, NULL), expected_host); TEST_ASSERT(strcmp(log_msg_get_value(logmsg, LM_V_PROGRAM, NULL), expected_program) == 0, "%s", log_msg_get_value(logmsg, LM_V_PROGRAM, NULL), expected_program); TEST_ASSERT(strcmp(log_msg_get_value(logmsg, LM_V_MESSAGE, NULL), expected_msg) == 0, "%s", log_msg_get_value(logmsg, LM_V_MESSAGE, NULL), expected_msg); TEST_ASSERT(strcmp(log_msg_get_value(logmsg, LM_V_PID, NULL), expected_process_id) == 0, "%s", log_msg_get_value(logmsg, LM_V_PID, NULL), expected_process_id); TEST_ASSERT(strcmp(log_msg_get_value(logmsg, LM_V_MSGID, NULL), expected_message_id) == 0, "%s", log_msg_get_value(logmsg, LM_V_MSGID, NULL), expected_message_id); TEST_ASSERT(strcmp(log_msg_get_value(logmsg, LM_V_SOURCE, NULL), "") == 0, "%s", log_msg_get_value(logmsg, LM_V_SOURCE, NULL), ""); /* check newly set values in cloned */ TEST_ASSERT(strcmp(log_msg_get_value(cloned, LM_V_HOST, NULL), "newhost") == 0, "%s", log_msg_get_value(cloned, LM_V_HOST, NULL), "newhost"); TEST_ASSERT(strcmp(log_msg_get_value(cloned, LM_V_HOST_FROM, NULL), "newhost") == 0, "%s", log_msg_get_value(cloned, LM_V_HOST_FROM, NULL), "newhost"); TEST_ASSERT(strcmp(log_msg_get_value(cloned, LM_V_PROGRAM, NULL), "newprogram") == 0, "%s", log_msg_get_value(cloned, LM_V_PROGRAM, NULL), "newprogram"); TEST_ASSERT(strcmp(log_msg_get_value(cloned, LM_V_MESSAGE, NULL), "newmsg") == 0, "%s", log_msg_get_value(cloned, LM_V_MESSAGE, NULL), "newmsg"); TEST_ASSERT(strcmp(log_msg_get_value(cloned, LM_V_PID, NULL), "newpid") == 0, "%s", log_msg_get_value(cloned, LM_V_PID, NULL), "newpid"); TEST_ASSERT(strcmp(log_msg_get_value(cloned, LM_V_MSGID, NULL), "newmsgid") == 0, "%s", log_msg_get_value(cloned, LM_V_MSGID, NULL), "newmsgid"); TEST_ASSERT(strcmp(log_msg_get_value(cloned, LM_V_SOURCE, NULL), "newsource") == 0, "%s", log_msg_get_value(cloned, LM_V_SOURCE, NULL), "newsource"); log_msg_unref(cloned); log_msg_unref(logmsg); g_string_free(sd_str, TRUE); return 0; }