diff options
author | Werner Koch <wk@gnupg.org> | 2012-08-09 10:24:50 +0200 |
---|---|---|
committer | Stef Walter <stefw@gnome.org> | 2012-08-09 11:33:29 +0200 |
commit | c95d1520bcf23370afbc1933d9c67ceca82ca785 (patch) | |
tree | a64b21d3c7f46f73a16c4299df2caaf232719f43 /pkcs11/gkm | |
parent | 7f31eebd35a84ed4c09970edb0b8d99a6a8af6f5 (diff) | |
download | gnome-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.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 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); |