[tracker/tracker-0.12] tests: Testing gvdb to get a good coverage report
- From: JÃrg Billeter <juergbi src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [tracker/tracker-0.12] tests: Testing gvdb to get a good coverage report
- Date: Thu, 13 Oct 2011 12:35:44 +0000 (UTC)
commit 9f07a1a6f8a86d4c39cb2df05d21d1b51b154d25
Author: Ivan Frade <ivan frade gmail com>
Date: Tue Oct 11 15:01:28 2011 +0300
tests: Testing gvdb to get a good coverage report
configure.ac | 1 +
tests/Makefile.am | 1 +
tests/gvdb/Makefile.am | 24 +++++
tests/gvdb/gvdb-test.c | 249 ++++++++++++++++++++++++++++++++++++++++++++++++
4 files changed, 275 insertions(+), 0 deletions(-)
---
diff --git a/configure.ac b/configure.ac
index 012e06c..98a390f 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2225,6 +2225,7 @@ AC_CONFIG_FILES([
src/plugins/nautilus/Makefile
src/vapi/Makefile
tests/common/Makefile
+ tests/gvdb/Makefile
tests/libtracker-common/Makefile
tests/libtracker-extract/Makefile
tests/libtracker-data/Makefile
diff --git a/tests/Makefile.am b/tests/Makefile.am
index a753358..2c948be 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -2,6 +2,7 @@ include $(top_srcdir)/Makefile.decl
SUBDIRS = \
common \
+ gvdb \
libtracker-common \
libtracker-extract \
libtracker-miner \
diff --git a/tests/gvdb/Makefile.am b/tests/gvdb/Makefile.am
new file mode 100644
index 0000000..ed0994e
--- /dev/null
+++ b/tests/gvdb/Makefile.am
@@ -0,0 +1,24 @@
+include $(top_srcdir)/Makefile.decl
+
+AM_CPPFLAGS = \
+ -I$(top_srcdir)/src \
+ -I$(top_builddir)/src \
+ -DSHAREDIR=\""$(datadir)"\" \
+ $(LIBTRACKER_DATA_CFLAGS)
+
+
+noinst_PROGRAMS = $(TEST_PROGS)
+
+TEST_PROGS += \
+ gvdb-test
+
+gvdb_test_SOURCES = gvdb-test.c
+gvdb_test_LDADD = $(top_builddir)/src/gvdb/libgvdb.la \
+ $(BUILD_LIBS) \
+ $(GVDB_LIBS) \
+ $(TRACKER_UTILS_LIBS)
+
+gvdb_test_CFLAGS = $(BUILD_CFLAGS) \
+ $(GVDB_CFLAGS) \
+ $(TRACKER_UTILS_CFLAGS)
+
diff --git a/tests/gvdb/gvdb-test.c b/tests/gvdb/gvdb-test.c
new file mode 100644
index 0000000..a960f2a
--- /dev/null
+++ b/tests/gvdb/gvdb-test.c
@@ -0,0 +1,249 @@
+#include <glib.h>
+#include "gvdb/gvdb-builder.h"
+#include "gvdb/gvdb-reader.h"
+
+void
+remove_file (const gchar *filename)
+{
+ GFile *f;
+ f = g_file_new_for_path (filename);
+ g_assert (g_file_delete (f, NULL, NULL));
+}
+
+void
+walk_value_cb (G_GNUC_UNUSED const gchar *name,
+ G_GNUC_UNUSED gsize name_len,
+ G_GNUC_UNUSED GVariant *value,
+ gpointer user_data)
+{
+ gint *counter = (gint *)user_data;
+ (*counter) += 1;
+}
+
+gboolean
+walk_open_cb (G_GNUC_UNUSED const gchar *name,
+ G_GNUC_UNUSED gsize name_len,
+ G_GNUC_UNUSED gpointer user_data)
+{
+ return TRUE;
+}
+
+void
+walk_close_cb (G_GNUC_UNUSED gpointer user_data)
+{
+}
+
+void
+test_gvdb_walk ()
+{
+ GHashTable *root_table, *ns_table;
+ GvdbItem *root, *item;
+ GvdbTable *root_level, *ns_level;
+ guint32 item_id;
+ gchar *key;
+ gint counter = 0;
+
+ const gchar *DB_FILE = "./test_walk.gvdb";
+
+ root_table = gvdb_hash_table_new (NULL, NULL);
+
+ ns_table = gvdb_hash_table_new (root_table, "namespaces");
+ root = gvdb_hash_table_insert (ns_table, "");
+ for (item_id = 0; item_id < 3; item_id++) {
+ key = g_strdup_printf ("ns%d", item_id);
+ item = gvdb_hash_table_insert (ns_table, key);
+ gvdb_item_set_parent (item, root);
+ gvdb_item_set_value (item, g_variant_new_string ("http://some.cool.ns"));
+ g_free (key);
+ }
+
+ g_assert (gvdb_table_write_contents (root_table, DB_FILE, FALSE, NULL));
+
+ g_hash_table_unref (ns_table);
+ g_hash_table_unref (root_table);
+
+
+ root_level = gvdb_table_new (DB_FILE, TRUE, NULL);
+ ns_level = gvdb_table_get_table (root_level, "namespaces");
+
+ gvdb_table_walk (ns_level, "", walk_open_cb, walk_value_cb, walk_close_cb, &counter);
+ g_assert_cmpint (counter, ==, 3);
+
+ gvdb_table_unref (root_level);
+ gvdb_table_unref (ns_level);
+
+ remove_file (DB_FILE);
+}
+
+void
+test_gvdb_nested_keys ()
+{
+ GHashTable *root_table, *ns_table;
+ GvdbItem *root, *item;
+ GvdbTable *root_level, *ns_level;
+ gchar **keys;
+ GVariant *value;
+ guint32 item_id;
+ gchar *key;
+
+ const gchar *DB_FILE = "./test_nested_keys.gvdb";
+
+ root_table = gvdb_hash_table_new (NULL, NULL);
+
+ ns_table = gvdb_hash_table_new (root_table, "namespaces");
+ root = gvdb_hash_table_insert (ns_table, "");
+ for (item_id = 0; item_id < 3; item_id++) {
+ key = g_strdup_printf ("ns%d", item_id);
+ item = gvdb_hash_table_insert (ns_table, key);
+ gvdb_item_set_parent (item, root);
+ gvdb_item_set_value (item, g_variant_new_string ("http://some.cool.ns"));
+ g_free (key);
+ }
+
+ g_assert (gvdb_table_write_contents (root_table, DB_FILE, FALSE, NULL));
+
+ g_hash_table_unref (ns_table);
+ g_hash_table_unref (root_table);
+
+ root_level = gvdb_table_new (DB_FILE, TRUE, NULL);
+ g_assert (root_level);
+
+ ns_level = gvdb_table_get_table (root_level, "namespaces");
+ g_assert (ns_level);
+
+ keys = gvdb_table_list (ns_level, "");
+ g_assert (keys);
+ g_assert_cmpint (g_strv_length (keys), ==, 3);
+ for (item_id = 0; item_id < 3; item_id++) {
+ key = g_strdup_printf ("ns%d", item_id);
+ g_assert (gvdb_table_has_value (ns_level, key));
+ value = gvdb_table_get_raw_value (ns_level, key);
+ g_assert_cmpstr (g_variant_get_string (value, NULL), ==, "http://some.cool.ns");
+ g_free (key);
+ }
+ g_strfreev (keys);
+
+ gvdb_table_unref (root_level);
+ gvdb_table_unref (ns_level);
+ remove_file (DB_FILE);
+}
+
+void
+simple_test (const gchar *filename, gboolean use_byteswap)
+{
+ GHashTable *table;
+ GvdbTable *read;
+ GVariant *value;
+ GVariant *expected;
+
+ table = gvdb_hash_table_new (NULL, "level1");
+ gvdb_hash_table_insert_string (table, "key1", "here just a flat string");
+ g_assert (gvdb_table_write_contents (table, filename, use_byteswap, NULL));
+ g_hash_table_unref (table);
+
+ read = gvdb_table_new (filename, TRUE, NULL);
+ g_assert (read);
+ g_assert (gvdb_table_is_valid (read));
+
+ g_assert (gvdb_table_has_value (read, "key1"));
+ value = gvdb_table_get_value (read, "key1");
+ expected = g_variant_new_string ("here just a flat string");
+ g_assert (g_variant_equal (value, expected));
+
+ g_variant_unref (expected);
+ g_variant_unref (value);
+
+ gvdb_table_unref (read);
+}
+
+void
+test_gvdb_byteswapped ()
+{
+ const gchar *DB_FILE = "./test_byteswpped.gvdb";
+
+ simple_test (DB_FILE, TRUE);
+
+ remove_file (DB_FILE);
+}
+
+void
+test_gvdb_flat_strings ()
+{
+
+ const gchar *DB_FILE = "./test_flat_strings.gvdb";
+
+ simple_test (DB_FILE, FALSE);
+
+ remove_file (DB_FILE);
+}
+
+void
+test_gvdb_ref_unref ()
+{
+ GHashTable *table;
+ GvdbTable *read, *read_ref;
+ GVariant *value;
+ GVariant *expected;
+
+ const gchar *DB_FILE = "./test_ref_unref.gvdb";
+
+ /* Create a table */
+ table = gvdb_hash_table_new (NULL, "level1");
+ gvdb_hash_table_insert_string (table, "key1", "whatever");
+ g_assert (gvdb_table_write_contents (table, DB_FILE, FALSE, NULL));
+ g_hash_table_unref (table);
+
+ /* Read the table */
+ read = gvdb_table_new (DB_FILE, TRUE, NULL);
+ g_assert (read && gvdb_table_is_valid (read));
+
+ /* Run the checks with a reference */
+ read_ref = gvdb_table_ref (read);
+ g_assert (gvdb_table_has_value (read_ref, "key1"));
+ value = gvdb_table_get_value (read_ref, "key1");
+ expected = g_variant_new_string ("whatever");
+ g_assert (g_variant_equal (value, expected));
+
+ g_variant_unref (expected);
+ g_variant_unref (value);
+
+ gvdb_table_unref (read);
+ gvdb_table_unref (read_ref);
+
+ remove_file (DB_FILE);
+}
+
+void
+test_gvdb_corrupted_file ()
+{
+ GError *error = NULL;
+
+ g_file_set_contents ("./test_invalid.gvdb",
+ "Just a bunch of rubbish to fill a text file and try to open it"
+ "as a gvdb and check the error is correctly reported",
+ -1, NULL);
+
+ gvdb_table_new ("./test_invalid.gvdb", TRUE, &error);
+ g_assert (error);
+
+ remove_file ("./test_invalid.gvdb");
+}
+
+
+gint
+main (gint argc, gchar **argv)
+{
+ g_type_init ();
+ g_thread_init (NULL);
+
+ g_test_init (&argc, &argv, NULL);
+
+ g_test_add_func ("/gvdb/ref_unref", test_gvdb_ref_unref);
+ g_test_add_func ("/gvdb/flat_strings", test_gvdb_flat_strings);
+ g_test_add_func ("/gvdb/nested_keys", test_gvdb_nested_keys);
+ g_test_add_func ("/gvdb/walk", test_gvdb_walk);
+ g_test_add_func ("/gvdb/byteswapped", test_gvdb_byteswapped);
+ g_test_add_func ("/gvdb/corrupted_file", test_gvdb_corrupted_file);
+
+ return g_test_run ();
+}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]