[gnome-keyring] Improve the gkm transaction tests



commit c95d1520bcf23370afbc1933d9c67ceca82ca785
Author: Werner Koch <wk gnupg org>
Date:   Thu Aug 9 10:24:50 2012 +0200

    Improve the gkm transaction tests
    
    * pkcs11/gkm/tests/test-transaction.c (test_write_file): Run test
    twice.
    (test_write_file_abort_gone, test_write_file_abort_revert): Ditto.
    (test_write_large_file): New.
    (main): Add new tests.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=657234

 pkcs11/gkm/tests/test-transaction.c |   85 +++++++++++++++++++++++++++++++++-
 1 files changed, 82 insertions(+), 3 deletions(-)
---
diff --git a/pkcs11/gkm/tests/test-transaction.c b/pkcs11/gkm/tests/test-transaction.c
index ac6317b..8725f77 100644
--- a/pkcs11/gkm/tests/test-transaction.c
+++ b/pkcs11/gkm/tests/test-transaction.c
@@ -300,7 +300,7 @@ test_remove_file_non_exist (Test* test, gconstpointer unused)
 }
 
 static void
-test_write_file (Test* test, gconstpointer unused)
+do_test_write_file (Test* test)
 {
 	GkmTransaction *transaction = gkm_transaction_new ();
 	const gchar *filename = "/tmp/transaction-test";
@@ -326,7 +326,56 @@ test_write_file (Test* test, gconstpointer unused)
 }
 
 static void
-test_write_file_abort_gone (Test* test, gconstpointer unused)
+test_write_file (Test* test, gconstpointer unused)
+{
+	/* Run it two times so that that the second one works on an
+	   existing file "/tmp/transaction-test".  */
+	do_test_write_file (test);
+	do_test_write_file (test);
+}
+
+static void
+test_write_large_file (Test* test, gconstpointer test_data)
+{
+	guint buffersize = GPOINTER_TO_UINT (test_data);
+	GkmTransaction *transaction = gkm_transaction_new ();
+	const gchar *filename = "/tmp/transaction-test";
+	gchar *data;
+	gsize n_data;
+	guchar *buffer;
+	int i;
+
+	buffer = g_malloc (buffersize);
+
+	for (i=0; i < buffersize; i++)
+		buffer[i] = i;
+
+	gkm_transaction_write_file (transaction, filename,
+				    buffer, buffersize);
+	g_assert (!gkm_transaction_get_failed (transaction));
+
+	g_assert (g_file_get_contents (filename, &data, &n_data, NULL));
+	g_assert_cmpuint (n_data, ==, buffersize);
+	for (i=0; i < buffersize; i++)
+		g_assert_cmpuint (buffer[i], ==, ((guchar*)data)[i]);
+	g_free (data);
+
+	gkm_transaction_complete (transaction);
+
+	g_assert (g_file_get_contents (filename, &data, &n_data, NULL));
+	g_assert_cmpuint (n_data, ==, buffersize);
+	for (i=0; i < buffersize; i++)
+		g_assert_cmpuint (buffer[i], ==, ((guchar*)data)[i]);
+	g_free (data);
+
+	g_object_unref (transaction);
+
+	g_free (buffer);
+}
+
+
+static void
+do_test_write_file_abort_gone (Test* test)
 {
 	GkmTransaction *transaction = gkm_transaction_new ();
 	const gchar *filename = "/tmp/transaction-test";
@@ -352,7 +401,14 @@ test_write_file_abort_gone (Test* test, gconstpointer unused)
 }
 
 static void
-test_write_file_abort_revert (Test* test, gconstpointer unused)
+test_write_file_abort_gone (Test* test, gconstpointer unused)
+{
+	do_test_write_file_abort_gone (test);
+	do_test_write_file_abort_gone (test);
+}
+
+static void
+do_test_write_file_abort_revert (Test* test)
 {
 	GkmTransaction *transaction = gkm_transaction_new ();
 	const gchar *filename = "/tmp/transaction-test";
@@ -378,6 +434,13 @@ test_write_file_abort_revert (Test* test, gconstpointer unused)
 }
 
 static void
+test_write_file_abort_revert (Test* test, gconstpointer unused)
+{
+	do_test_write_file_abort_revert (test);
+	do_test_write_file_abort_revert (test);
+}
+
+static void
 test_unique_file_conflict (Test* test, gconstpointer unused)
 {
 	GkmTransaction *transaction = gkm_transaction_new ();
@@ -467,6 +530,22 @@ main (int argc, char **argv)
 	g_test_add ("/gkm/transaction/remove_file_abort", Test, NULL, setup, test_remove_file_abort, teardown);
 	g_test_add ("/gkm/transaction/remove_file_non_exist", Test, NULL, setup, test_remove_file_non_exist, teardown);
 	g_test_add ("/gkm/transaction/write_file", Test, NULL, setup, test_write_file, teardown);
+
+	{
+		/* Several test runs at different sizes.  Note that
+		   the copy function, used if hardlinks do not work,
+		   uses a 512 byte buffer.  */
+		guint buffersizes[] = {
+			2000, 1024, 510, 511, 512, 513, 514, 0
+		};
+		int i;
+
+		for (i = 0; buffersizes[i]; i++)
+			g_test_add ("/gkm/transaction/write_large_file",
+				    Test, GUINT_TO_POINTER (buffersizes[i]),
+				    setup, test_write_large_file, teardown);
+	}
+
 	g_test_add ("/gkm/transaction/write_file_abort_gone", Test, NULL, setup, test_write_file_abort_gone, teardown);
 	g_test_add ("/gkm/transaction/write_file_abort_revert", Test, NULL, setup, test_write_file_abort_revert, teardown);
 	g_test_add ("/gkm/transaction/unique_file_conflict", Test, NULL, setup, test_unique_file_conflict, teardown);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]