Пример #1
0
void
__test_seeks(Journald *journald)
{
  gint result = journald_seek_head(journald);
  assert_gint(result, 0, ASSERTION_ERROR("Can't seek in empty journald mock"));
  result = journald_next(journald);
  assert_gint(result, 0, ASSERTION_ERROR("Bad next step result"));

  MockEntry *entry = mock_entry_new("test_data1");
  mock_entry_add_data(entry, "MESSAGE=test message");
  mock_entry_add_data(entry, "KEY=VALUE");
  mock_entry_add_data(entry, "HOST=testhost");

  journald_mock_add_entry(journald, entry);

  entry = mock_entry_new("test_data2");
  mock_entry_add_data(entry, "MESSAGE=test message2");
  mock_entry_add_data(entry, "KEY=VALUE2");
  mock_entry_add_data(entry, "HOST=testhost2");

  journald_mock_add_entry(journald, entry);

  result = journald_seek_head(journald);
  assert_gint(result, 0, ASSERTION_ERROR("Can't seek in journald mock"));
  result = journald_next(journald);
  assert_gint(result, 1, ASSERTION_ERROR("Bad next step result"));
}
Пример #2
0
void
__test_cursors(Journald *journald)
{
  gchar *cursor;
  gint result = journald_get_cursor(journald, &cursor);
  assert_string(cursor, "test_data1", ASSERTION_ERROR("Bad cursor fetched"));\
  g_free(cursor);

  result = journald_next(journald);
  assert_gint(result, 1, ASSERTION_ERROR("Bad next step result"));
  result = journald_get_cursor(journald, &cursor);
  assert_string(cursor, "test_data2", ASSERTION_ERROR("Bad cursor fetched"));
  g_free(cursor);

  result = journald_next(journald);
  assert_gint(result, 0, ASSERTION_ERROR("Should not contain more elements"));

  result = journald_seek_cursor(journald, "test_data1");
  assert_gint(result, 0, ASSERTION_ERROR("Should find cursor"));
  result = journald_next(journald);
  assert_gint(result, 1, ASSERTION_ERROR("Bad next step result"));
  result = journald_get_cursor(journald, &cursor);
  assert_string(cursor, "test_data1", ASSERTION_ERROR("Bad cursor fetched"));
  g_free(cursor);

  result = journald_seek_cursor(journald, "test_data2");
  assert_gint(result, 0, ASSERTION_ERROR("Should find cursor"));
  result = journald_next(journald);
  assert_gint(result, 1, ASSERTION_ERROR("Bad next step result"));
  result = journald_get_cursor(journald, &cursor);
  assert_string(cursor, "test_data2", ASSERTION_ERROR("Bad cursor fetched"));
  g_free(cursor);
}
Пример #3
0
static gint
_fetch_log(JournalReader *self)
{
    gint msg_count = 0;
    gint result = 0;
    self->immediate_check = TRUE;
    while (msg_count < self->options->fetch_limit && !main_loop_worker_job_quit())
    {
        gint rc = journald_next(self->journal);
        if (rc > 0)
        {
            Bookmark *bookmark = ack_tracker_request_bookmark(self->super.ack_tracker);
            _fill_bookmark(self, bookmark);
            msg_count++;
            if (!_handle_message(self))
            {
                break;
            }
        }
        else
        {
            self->immediate_check = FALSE;
            /* rc == 0 means EOF */
            if (rc < 0)
            {
                msg_error("Error occurred while getting next message from journal",
                          evt_tag_errno("error", errno));
                result = NC_READ_ERROR;
            }
            break;
        }
    }
    return result;
}
Пример #4
0
void
test_journald_helper()
{
  Journald *journald = journald_mock_new();
  journald_open(journald, 0);

  MockEntry *entry = mock_entry_new("test_data1");
  mock_entry_add_data(entry, "MESSAGE=test message");
  mock_entry_add_data(entry, "KEY=VALUE");
  mock_entry_add_data(entry, "HOST=testhost");

  journald_mock_add_entry(journald, entry);
  journald_seek_head(journald);
  journald_next(journald);

  GHashTable *result = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free);
  journald_foreach_data(journald, __helper_test, result);

  gchar *message = g_hash_table_lookup(result, "MESSAGE");
  gchar *key = g_hash_table_lookup(result, "KEY");
  gchar *host = g_hash_table_lookup(result, "HOST");

  assert_string(message, "test message", ASSERTION_ERROR("Bad item"));
  assert_string(key, "VALUE", ASSERTION_ERROR("Bad item"));
  assert_string(host, "testhost", ASSERTION_ERROR("Bad item"));

  journald_close(journald);
  journald_free(journald);
  g_hash_table_unref(result);
}
Пример #5
0
void
__test_enumerate(Journald *journald)
{
  const void *data;
  const void *prev_data;
  gsize length;
  gsize prev_len;
  gint result;

  journald_restart_data(journald);
  result = journald_enumerate_data(journald, &data, &length);
  assert_gint(result, 1, ASSERTION_ERROR("Data should exist"));

  prev_data = data;
  prev_len = length;

  result = journald_enumerate_data(journald, &data, &length);
  assert_gint(result, 1, ASSERTION_ERROR("Data should exist"));
  result = journald_enumerate_data(journald, &data, &length);
  assert_gint(result, 1, ASSERTION_ERROR("Data should exist"));
  result = journald_enumerate_data(journald, &data, &length);
  assert_gint(result, 0, ASSERTION_ERROR("Data should not exist"));

  journald_restart_data(journald);

  result = journald_enumerate_data(journald, &data, &length);
  assert_gint(result, 1, ASSERTION_ERROR("Data should exist"));
  assert_gpointer((gpointer )data, (gpointer )prev_data, ASSERTION_ERROR("restart data should seek the start of the data"));
  assert_gint(length, prev_len, ASSERTION_ERROR("Bad length after restart data"));

  result = journald_next(journald);
  assert_gint(result, 0, ASSERTION_ERROR("Should not contain more elements"));
}
Пример #6
0
Test(systemd_journal, test_journald_helper)
{
  const gchar *persist_file = "test_systemd_journal2.persist";

  _init_cfg_with_persist_file(persist_file);
  Journald *journald = journald_mock_new();
  journald_open(journald, 0);

  MockEntry *entry = mock_entry_new("test_data1");
  mock_entry_add_data(entry, "MESSAGE=test message");
  mock_entry_add_data(entry, "KEY=VALUE");
  mock_entry_add_data(entry, "HOST=testhost");

  journald_mock_add_entry(journald, entry);
  journald_seek_head(journald);
  journald_next(journald);

  GHashTable *result = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free);
  journald_foreach_data(journald, __helper_test, result);

  gchar *message = g_hash_table_lookup(result, "MESSAGE");
  gchar *key = g_hash_table_lookup(result, "KEY");
  gchar *host = g_hash_table_lookup(result, "HOST");

  cr_assert_str_eq(message, "test message", "%s", "Bad item");
  cr_assert_str_eq(key, "VALUE", "%s", "Bad item");
  cr_assert_str_eq(host, "testhost", "%s", "Bad item");

  journald_close(journald);
  journald_free(journald);
  g_hash_table_unref(result);

  _deinit_cfg(persist_file);
}
Пример #7
0
void
__test_enumerate(Journald *journald)
{
  const void *data;
  const void *prev_data;
  gsize length;
  gsize prev_len;
  gint result;

  journald_restart_data(journald);
  result = journald_enumerate_data(journald, &data, &length);
  cr_assert_eq(result, 1, "%s", "Data should exist");

  prev_data = data;
  prev_len = length;

  result = journald_enumerate_data(journald, &data, &length);
  cr_assert_eq(result, 1, "%s", "Data should exist");
  result = journald_enumerate_data(journald, &data, &length);
  cr_assert_eq(result, 1, "%s", "Data should exist");
  result = journald_enumerate_data(journald, &data, &length);
  cr_assert_eq(result, 0, "%s", "Data should not exist");

  journald_restart_data(journald);

  result = journald_enumerate_data(journald, &data, &length);
  cr_assert_eq(result, 1, "%s", "Data should exist");
  cr_assert_eq((gpointer )data, (gpointer )prev_data,
               "%s", "restart data should seek the start of the data");
  cr_assert_eq(length, prev_len, "%s", "Bad length after restart data");

  result = journald_next(journald);
  cr_assert_eq(result, 0, "%s", "Should not contain more elements");
}
Пример #8
0
void
__test_cursors(Journald *journald)
{
  gchar *cursor;
  journald_seek_head(journald);
  journald_next(journald);
  gint result = journald_get_cursor(journald, &cursor);
  cr_assert_str_eq(cursor, "test_data1", "%s", "Bad cursor fetched");
  \
  g_free(cursor);

  result = journald_next(journald);
  cr_assert_eq(result, 1, "%s", "Bad next step result");
  result = journald_get_cursor(journald, &cursor);
  cr_assert_str_eq(cursor, "test_data2", "%s", "Bad cursor fetched");
  g_free(cursor);

  result = journald_next(journald);
  cr_assert_eq(result, 0, "%s", "Should not contain more elements");

  result = journald_seek_cursor(journald, "test_data1");
  cr_assert_eq(result, 0, "%s", "Should find cursor");
  result = journald_next(journald);
  cr_assert_eq(result, 1, "%s", "Bad next step result");
  result = journald_get_cursor(journald, &cursor);
  cr_assert_str_eq(cursor, "test_data1", "%s", "Bad cursor fetched");
  g_free(cursor);

  result = journald_seek_cursor(journald, "test_data2");
  cr_assert_eq(result, 0, "%s", "Should find cursor");
  result = journald_next(journald);
  cr_assert_eq(result, 1, "%s", "Bad next step result");
  result = journald_get_cursor(journald, &cursor);
  cr_assert_str_eq(cursor, "test_data2", "%s", "Bad cursor fetched");
  g_free(cursor);
}
Пример #9
0
static inline gboolean
_seek_to_saved_state(JournalReader *self)
{
    JournalReaderState *state = persist_state_map_entry(self->persist_state, self->persist_handle);
    gint rc = journald_seek_cursor(self->journal, state->cursor);
    persist_state_unmap_entry(self->persist_state, self->persist_handle);
    if (rc != 0)
    {
        msg_warning("Failed to seek journal to the saved cursor position",
                    evt_tag_str("cursor", state->cursor),
                    evt_tag_errno("error", errno));
        return _seek_to_head(self);
    }
    else
    {
        msg_debug("Seeking the journal to the last cursor position",
                  evt_tag_str("cursor", state->cursor));
    }
    journald_next(self->journal);
    return TRUE;
}