[glib] Add more tests for g_log_structured
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [glib] Add more tests for g_log_structured
- Date: Thu, 21 Jul 2016 00:42:45 +0000 (UTC)
commit 3892034455a65a02b8a307bcb9b0a1de93be934f
Author: Matthias Clasen <mclasen redhat com>
Date: Wed Jul 20 18:42:19 2016 -0400
Add more tests for g_log_structured
glib/tests/logging.c | 137 ++++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 134 insertions(+), 3 deletions(-)
---
diff --git a/glib/tests/logging.c b/glib/tests/logging.c
index 2307c6d..f151ed9 100644
--- a/glib/tests/logging.c
+++ b/glib/tests/logging.c
@@ -1,4 +1,6 @@
#include <stdlib.h>
+#include <string.h>
+#define G_LOG_USE_STRUCTURED 1
#include <glib.h>
/* Test g_warn macros */
@@ -301,11 +303,10 @@ test_structured_logging_no_state (void)
guint some_integer = 123;
g_log_structured ("some-domain", G_LOG_LEVEL_MESSAGE,
- "This is a debug message about pointer %p and integer %u.",
- some_pointer, some_integer,
"MESSAGE_ID", "06d4df59e6c24647bfe69d2c27ef0b4e",
"MY_APPLICATION_CUSTOM_FIELD", "some debug string",
- NULL);
+ "MESSAGE", "This is a debug message about pointer %p and integer %u.",
+ some_pointer, some_integer);
}
static void
@@ -322,6 +323,131 @@ test_structured_logging_some_state (void)
g_log_structured_array (G_LOG_LEVEL_DEBUG, fields, G_N_ELEMENTS (fields));
}
+typedef struct {
+ const GLogField *fields;
+ gsize n_fields;
+} MyLogFields;
+
+static void
+compare_field (const GLogField *f1, const GLogField *f2)
+{
+ g_assert_cmpstr (f1->key, ==, f2->key);
+ g_assert_cmpuint (f1->length, ==, f2->length);
+ if (f1->length == -1)
+ g_assert_cmpstr (f1->value, ==, f2->value);
+ else
+ g_assert (memcmp (f1->value, f2->value, f1->length) == 0);
+}
+
+static void
+compare_fields (const GLogField *f1, gsize n1, const GLogField *f2, gsize n2)
+{
+ int i, j;
+
+ for (i = 0; i < n1; i++)
+ {
+ for (j = 0; j < n2; j++)
+ {
+ if (strcmp (f1[i].key, f2[j].key) == 0)
+ {
+ compare_field (&f1[i], &f2[j]);
+ break;
+ }
+ }
+ g_assert (j < n2);
+ }
+
+ g_assert_cmpint (n1, ==, n2);
+}
+
+static GLogWriterOutput
+my_writer_func (GLogLevelFlags log_level,
+ const GLogField *fields,
+ gsize n_fields,
+ gpointer user_data)
+{
+ MyLogFields *data = user_data;
+
+ compare_fields (fields, n_fields, data->fields, data->n_fields);
+
+ return G_LOG_WRITER_HANDLED;
+}
+
+static void
+test_structured_logging_roundtrip1 (void)
+{
+ gpointer some_pointer = GUINT_TO_POINTER (0x100);
+ gint some_integer = 123;
+ const GLogField fields[] = {
+ { "GLIB_DOMAIN", "some-domain", -1 },
+ { "PRIORITY", "5", 1 },
+ { "MESSAGE", "This is a debug message about pointer 0x100 and integer 123.", -1 },
+ { "MESSAGE_ID", "fcfb2e1e65c3494386b74878f1abf893", -1 },
+ { "MY_APPLICATION_CUSTOM_FIELD", "some debug string", -1 }
+ };
+ MyLogFields data = { fields, 5 };
+
+ g_log_set_writer_func (my_writer_func, &data, NULL);
+
+ g_log_structured ("some-domain", G_LOG_LEVEL_MESSAGE,
+ "MESSAGE_ID", "fcfb2e1e65c3494386b74878f1abf893",
+ "MY_APPLICATION_CUSTOM_FIELD", "some debug string",
+ "MESSAGE", "This is a debug message about pointer %p and integer %u.",
+ some_pointer, some_integer);
+ exit (0);
+}
+
+static void
+test_structured_logging_roundtrip2 (void)
+{
+ const gchar *some_string = "abc";
+ const GLogField fields[] = {
+ { "GLIB_DOMAIN", "some-domain", -1 },
+ { "PRIORITY", "5", 1 },
+ { "MESSAGE", "This is a debug message about string 'abc'.", -1 },
+ { "MESSAGE_ID", "fcfb2e1e65c3494386b74878f1abf893", -1 },
+ { "MY_APPLICATION_CUSTOM_FIELD", "some debug string", -1 }
+ };
+ MyLogFields data = { fields, 5 };
+
+ g_log_set_writer_func (my_writer_func, &data, NULL);
+
+ g_log_structured ("some-domain", G_LOG_LEVEL_MESSAGE,
+ "MESSAGE_ID", "fcfb2e1e65c3494386b74878f1abf893",
+ "MY_APPLICATION_CUSTOM_FIELD", "some debug string",
+ "MESSAGE", "This is a debug message about string '%s'.",
+ some_string);
+ exit (0);
+}
+
+static void
+test_structured_logging_roundtrip3 (void)
+{
+ const GLogField fields[] = {
+ { "GLIB_DOMAIN", "some-domain", -1 },
+ { "PRIORITY", "4", 1 },
+ { "MESSAGE", "Test test test.", -1 }
+ };
+ MyLogFields data = { fields, 3 };
+
+ g_log_set_writer_func (my_writer_func, &data, NULL);
+
+ g_log_structured ("some-domain", G_LOG_LEVEL_WARNING,
+ "MESSAGE", "Test test test.");
+ exit (0);
+}
+
+static void
+test_structured_logging_roundtrip (void)
+{
+ g_test_trap_subprocess ("/structured-logging/roundtrip/subprocess/1", 0, 0);
+ g_test_trap_assert_passed ();
+ g_test_trap_subprocess ("/structured-logging/roundtrip/subprocess/2", 0, 0);
+ g_test_trap_assert_passed ();
+ g_test_trap_subprocess ("/structured-logging/roundtrip/subprocess/3", 0, 0);
+ g_test_trap_assert_passed ();
+}
+
int
main (int argc, char *argv[])
{
@@ -349,7 +475,12 @@ main (int argc, char *argv[])
g_test_add_func ("/logging/gibberish", test_gibberish);
g_test_add_func ("/structured-logging/no-state", test_structured_logging_no_state);
g_test_add_func ("/structured-logging/some-state", test_structured_logging_some_state);
+ g_test_add_func ("/structured-logging/roundtrip", test_structured_logging_roundtrip);
+ g_test_add_func ("/structured-logging/roundtrip/subprocess/1", test_structured_logging_roundtrip1);
+ g_test_add_func ("/structured-logging/roundtrip/subprocess/2", test_structured_logging_roundtrip2);
+ g_test_add_func ("/structured-logging/roundtrip/subprocess/3", test_structured_logging_roundtrip3);
return g_test_run ();
}
+ guint some_integer = 123;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]