[tracker/tracker-0.12] tests: Testing gvdb to get a good coverage report



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]