1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113
|
/* threaded folder testing */
#include <string.h>
#include "camel-test.h"
#include "camel-test-provider.h"
#include "folders.h"
#include "messages.h"
#include "session.h"
#define MAX_LOOP (10000)
#define MAX_THREADS (5)
#define d (x)
static const gchar *local_drivers[] = { "local" };
static const gchar *local_providers[] = {
"mbox",
"mh",
"maildir"
};
static gchar *path;
static CamelSession *session;
static gint testid;
static gpointer
worker (gpointer d)
{
gint i;
CamelStore *store;
CamelService *service;
CamelFolder *folder;
for (i = 0; i < MAX_LOOP; i++) {
gchar *uid;
uid = g_strdup_printf ("test-uid-%d", i);
service = camel_session_add_service (
session, uid, path, CAMEL_PROVIDER_STORE, NULL);
g_free (uid);
check (CAMEL_IS_STORE (service));
store = CAMEL_STORE (service);
folder = camel_store_get_folder_sync (
store, "testbox",
CAMEL_STORE_FOLDER_CREATE, NULL, NULL);
if (testid == 0) {
g_object_unref (folder);
g_object_unref (store);
} else {
g_object_unref (store);
g_object_unref (folder);
}
}
return NULL;
}
gint
main (gint argc,
gchar **argv)
{
gint i, j;
GThread *threads[MAX_THREADS];
camel_test_init (argc, argv);
camel_test_provider_init (1, local_drivers);
/* clear out any camel-test data */
system ("/bin/rm -rf /tmp/camel-test");
session = camel_test_session_new ("/tmp/camel-test");
for (testid = 0; testid < 2; testid++) {
if (testid == 0)
camel_test_start ("store and folder bag torture test, stacked references");
else
camel_test_start ("store and folder bag torture test, unstacked references");
for (j = 0; j < G_N_ELEMENTS (local_providers); j++) {
camel_test_push ("provider %s", local_providers[j]);
path = g_strdup_printf ("%s:///tmp/camel-test/%s", local_providers[j], local_providers[j]);
for (i = 0; i < MAX_THREADS; i++) {
GError *error = NULL;
threads[i] = g_thread_create (worker, NULL, TRUE, &error);
if (error) {
fprintf (stderr, "%s: Failed to create a thread: %s\n", G_STRFUNC, error->message);
g_error_free (error);
}
}
for (i = 0; i < MAX_THREADS; i++) {
if (threads[i])
g_thread_join (threads[i]);
}
test_free (path);
camel_test_pull ();
}
camel_test_end ();
}
g_object_unref (session);
return 0;
}
|