summaryrefslogtreecommitdiff
path: root/pkcs11/gkm
diff options
context:
space:
mode:
authorWerner Koch <wk@gnupg.org>2012-08-09 10:24:50 +0200
committerStef Walter <stefw@gnome.org>2012-08-09 11:33:29 +0200
commitc95d1520bcf23370afbc1933d9c67ceca82ca785 (patch)
treea64b21d3c7f46f73a16c4299df2caaf232719f43 /pkcs11/gkm
parent7f31eebd35a84ed4c09970edb0b8d99a6a8af6f5 (diff)
downloadgnome-keyring-c95d1520bcf23370afbc1933d9c67ceca82ca785.tar.gz
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
Diffstat (limited to 'pkcs11/gkm')
-rw-r--r--pkcs11/gkm/tests/test-transaction.c85
1 files changed, 82 insertions, 3 deletions
diff --git a/pkcs11/gkm/tests/test-transaction.c b/pkcs11/gkm/tests/test-transaction.c
index ac6317b4..8725f775 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);