tap_ev tap_ev_queue_shift_next(tap_ev_queue queue, const char * identifier) { tap_ev ev = queue->head; tap_ev prev; if (ev == NULL) { assert(queue->queue_count == 0); return NULL; } if (strcmp(ev->identifier, identifier) == 0) { return tap_ev_queue_shift(queue); } for (prev = ev, ev = ev->next; ev != NULL; prev = ev, ev = ev->next) { if (strcmp(ev->identifier, identifier) == 0) { prev->next = ev->next; ev->next = NULL; assert(queue->queue_count != 0); queue->queue_count--; return ev; } } return NULL; }
void tap_ev_queue_flush(tap_ev_queue queue) { tap_ev ev; while ((ev = tap_ev_queue_shift(queue)) != NULL) { tap_ev_free(ev); } }
tap_ev test_tap_ev_queue_shift_wait(tap_ev_queue queue, ev_tstamp seconds) { tap_ev event; SXE_TIME deadline; SXE_TIME current; SXE_TIME wait_time; wait_time = SXE_TIME_FROM_DOUBLE_SECONDS(seconds); event = tap_ev_queue_shift(queue); /* If the tap event queue was not empty, return the event. */ if (event != NULL) { return event; } deadline = local_get_time() + wait_time; for (;;) { test_ev_loop_wait(SXE_TIME_TO_DOUBLE_SECONDS(wait_time)); event = tap_ev_queue_shift(queue); if (event != NULL) { return event; } current = local_get_time(); if (current >= deadline) { return NULL; } wait_time = deadline - current; } }
int main(int argc, char *argv[]) { tap_ev ev; struct object self; struct object * this = &self; char expected[1024]; pid_t pid = getpid(); plan_tests(28); MOCK_SET_HOOK(openlog, t_openlog); MOCK_SET_HOOK(syslog, t_syslog); q_syslog = tap_ev_queue_new(); sxe_log_use_syslog("my-program", LOG_NDELAY|LOG_PID, LOG_USER); ev = tap_ev_queue_shift(q_syslog); is_eq(tap_ev_identifier(ev), "openlog", "sxe_log_use_syslog() calls openlog()"); is_eq(tap_ev_arg(ev, "ident"), "my-program", "sxe_log_use_syslog() calls openlog() with correct 'ident' parameter"); is(tap_ev_arg(ev, "option"), LOG_NDELAY|LOG_PID, "sxe_log_use_syslog() calls openlog() with correct 'option' parameter"); is(tap_ev_arg(ev, "facility"), LOG_USER, "sxe_log_use_syslog() calls openlog() with correct 'facility' parameter"); SXEL10("SXEL10"); snprintf(expected, sizeof expected, "T=%d ------ 1 - SXEL10\n", pid); ev = tap_ev_queue_shift(q_syslog); is_eq(tap_ev_identifier(ev), "syslog", "SXEL10() calls syslog()"); is(tap_ev_arg(ev, "priority"), LOG_ERR, "SXEL10() maps to LOG_ERR syslog level"); is_eq(tap_ev_arg(ev, "logline"), expected, "SXEL10() is logged correctly"); SXEL21("SXEL21(%s)", "arg1"); snprintf(expected, sizeof expected, "T=%d ------ 2 - SXEL21(arg1)\n", pid); ev = tap_ev_queue_shift(q_syslog); is_eq(tap_ev_identifier(ev), "syslog", "SXEL21() calls syslog()"); is(tap_ev_arg(ev, "priority"), LOG_WARNING, "SXEL21() maps to LOG_WARNING syslog level"); is_eq(tap_ev_arg(ev, "logline"), expected, "SXEL21() is logged correctly"); SXEL32("SXEL32(%s,%d)", "arg1", 22); snprintf(expected, sizeof expected, "T=%d ------ 3 - SXEL32(arg1,22)\n", pid); ev = tap_ev_queue_shift(q_syslog); is_eq(tap_ev_identifier(ev), "syslog", "SXEL32() calls syslog()"); is(tap_ev_arg(ev, "priority"), LOG_NOTICE, "SXEL32() maps to LOG_NOTICE syslog level"); is_eq(tap_ev_arg(ev, "logline"), expected, "SXEL32() is logged correctly"); SXEL43("SXEL43(%s,%d,%u)", "arg1", 22, 44); snprintf(expected, sizeof expected, "T=%d ------ 4 - SXEL43(arg1,22,44)\n", pid); ev = tap_ev_queue_shift(q_syslog); is_eq(tap_ev_identifier(ev), "syslog", "SXEL43() calls syslog()"); is(tap_ev_arg(ev, "priority"), LOG_INFO, "SXEL43() maps to LOG_INFO syslog level"); is_eq(tap_ev_arg(ev, "logline"), expected, "SXEL43() is logged correctly"); SXEL54("SXEL54(%s,%d,%u,%x)", "arg1", 22, 44, 64); snprintf(expected, sizeof expected, "T=%d ------ 5 - SXEL54(arg1,22,44,40)\n", pid); ev = tap_ev_queue_shift(q_syslog); is_eq(tap_ev_identifier(ev), "syslog", "SXEL54() calls syslog()"); is(tap_ev_arg(ev, "priority"), LOG_DEBUG, "SXEL54() maps to LOG_DEBUG syslog level"); is_eq(tap_ev_arg(ev, "logline"), expected, "SXEL54() is logged correctly"); SXEL65("SXEL65(%s,%d,%u,%x,%.2f)", "arg1", 22, 44, 64, 3.1415926); snprintf(expected, sizeof expected, "T=%d ------ 6 - SXEL65(arg1,22,44,40,3.14)\n", pid); ev = tap_ev_queue_shift(q_syslog); is_eq(tap_ev_identifier(ev), "syslog", "SXEL65() calls syslog()"); is(tap_ev_arg(ev, "priority"), LOG_DEBUG, "SXEL65() maps to LOG_DEBUG syslog level"); is_eq(tap_ev_arg(ev, "logline"), expected, "SXEL65() is logged correctly"); this->id = 99; SXEL10I("SXEL10I"); snprintf(expected, sizeof expected, "T=%d 99 1 - SXEL10I\n", pid); ev = tap_ev_queue_shift(q_syslog); is_eq(tap_ev_identifier(ev), "syslog", "SXEL10I() calls syslog()"); is(tap_ev_arg(ev, "priority"), LOG_ERR, "SXEL10I() maps to LOG_ERR syslog level"); is_eq(tap_ev_arg(ev, "logline"), expected, "SXEL10I() is logged correctly"); this->id = 98; SXEL65I("SXEL65I(%s,%d,%u,%x,%.2f)", "arg1", 22, 44, 64, 3.1415926); snprintf(expected, sizeof expected, "T=%d 98 6 - SXEL65I(arg1,22,44,40,3.14)\n", pid); ev = tap_ev_queue_shift(q_syslog); is_eq(tap_ev_identifier(ev), "syslog", "SXEL65I() calls syslog()"); is(tap_ev_arg(ev, "priority"), LOG_DEBUG, "SXEL65I() maps to LOG_DEBUG syslog level"); is_eq(tap_ev_arg(ev, "logline"), expected, "SXEL65I() is logged correctly"); sxe_log_hook_buffer_prefix(NULL); /* For coverage */ (void)argc; (void)argv; return exit_status(); }
tap_ev tap_ev_shift(void) { return tap_ev_queue_shift(&tap_ev_queue_default); }