diff options
Diffstat (limited to 'debian/opensync/opensync-0.22/tests/check_ipc.c')
-rw-r--r-- | debian/opensync/opensync-0.22/tests/check_ipc.c | 2093 |
1 files changed, 0 insertions, 2093 deletions
diff --git a/debian/opensync/opensync-0.22/tests/check_ipc.c b/debian/opensync/opensync-0.22/tests/check_ipc.c deleted file mode 100644 index 5cde12ae..00000000 --- a/debian/opensync/opensync-0.22/tests/check_ipc.c +++ /dev/null @@ -1,2093 +0,0 @@ -#include "support.h" -#include <sys/wait.h> - -void _remove_pipe(const char *name) -{ - char *cmd = g_strdup_printf("rm %s &> /dev/null", name); - system(cmd); - g_free(cmd); -} - -START_TEST (ipc_new) -{ - char *testbed = setup_testbed(NULL); - _remove_pipe("/tmp/testpipe"); - - OSyncError *error = NULL; - OSyncQueue *queue1 = osync_queue_new("/tmp/testpipe", &error); - fail_unless(queue1 != NULL, NULL); - fail_unless(error == NULL, NULL); - - osync_queue_free(queue1); - - destroy_testbed(testbed); -} -END_TEST - -START_TEST (ipc_create) -{ - char *testbed = setup_testbed(NULL); - _remove_pipe("/tmp/testpipe"); - - OSyncError *error = NULL; - OSyncQueue *queue1 = osync_queue_new("/tmp/testpipe", &error); - fail_unless(queue1 != NULL, NULL); - fail_unless(error == NULL, NULL); - - fail_unless(osync_queue_create(queue1, &error), NULL); - fail_unless(error == NULL, NULL); - - fail_unless(system("ls /tmp/testpipe &> /dev/null") == 0, NULL); - - fail_unless(osync_queue_remove(queue1, &error), NULL); - fail_unless(error == NULL, NULL); - - fail_unless(system("ls /tmp/testpipe &> /dev/null") != 0, NULL); - - osync_queue_free(queue1); - - destroy_testbed(testbed); -} -END_TEST - -START_TEST (ipc_connect) -{ - char *testbed = setup_testbed(NULL); - _remove_pipe("/tmp/testpipe"); - - OSyncError *error = NULL; - OSyncQueue *queue = osync_queue_new("/tmp/testpipe", &error); - - osync_queue_create(queue, &error); - fail_unless(error == NULL, NULL); - - pid_t cpid = fork(); - if (cpid == 0) { //Child - fail_unless(osync_queue_connect(queue, OSYNC_QUEUE_RECEIVER, &error), NULL); - fail_unless(error == NULL, NULL); - - if (osync_queue_disconnect(queue, &error) != TRUE || error != NULL) - exit(1); - - osync_queue_free(queue); - - g_free(testbed); - exit(0); - } else { - fail_unless(osync_queue_connect(queue, OSYNC_QUEUE_SENDER, &error), NULL); - fail_unless(error == NULL, NULL); - - osync_queue_disconnect(queue, &error); - fail_unless(error == NULL, NULL); - - int status = 0; - wait(&status); - fail_unless(WEXITSTATUS(status) == 0, NULL); - - } - - fail_unless(system("ls /tmp/testpipe &> /dev/null") == 0, NULL); - - fail_unless(osync_queue_remove(queue, &error), NULL); - fail_unless(error == NULL, NULL); - - fail_unless(system("ls /tmp/testpipe &> /dev/null") != 0, NULL); - - osync_queue_free(queue); - - destroy_testbed(testbed); -} -END_TEST - -START_TEST (ipc_payload) -{ - char *testbed = setup_testbed(NULL); - _remove_pipe("/tmp/testpipe-server"); - _remove_pipe("/tmp/testpipe-client"); - - OSyncError *error = NULL; - OSyncQueue *server_queue = osync_queue_new("/tmp/testpipe-server", &error); - OSyncQueue *client_queue = osync_queue_new("/tmp/testpipe-client", &error); - OSyncMessage *message = NULL; - - osync_queue_create(server_queue, &error); - fail_unless(error == NULL, NULL); - - osync_queue_create(client_queue, &error); - fail_unless(error == NULL, NULL); - char *data = "this is another test string"; - - pid_t cpid = fork(); - if (cpid == 0) { //Child - fail_unless(osync_queue_connect(client_queue, OSYNC_QUEUE_RECEIVER, &error), NULL); - fail_unless(error == NULL, NULL); - - fail_unless(osync_queue_connect(server_queue, OSYNC_QUEUE_SENDER, &error), NULL); - fail_unless(error == NULL, NULL); - - message = osync_queue_get_message(client_queue); - - if (osync_message_get_command(message) != OSYNC_MESSAGE_INITIALIZE) { - exit (1); - } - - int int1; - long long int longint1; - char *string; - void *databuf; - - osync_message_read_int(message, &int1); - osync_message_read_const_string(message, &string); - osync_message_read_long_long_int(message, &longint1); - osync_message_read_const_data(message, &databuf, strlen(data) + 1); - - fail_unless(int1 == 4000000, NULL); - fail_unless(!strcmp(string, "this is a test string"), NULL); - fail_unless(longint1 == 400000000, NULL); - fail_unless(!strcmp(databuf, "this is another test string"), NULL); - - OSyncMessage *reply = osync_message_new_reply(message, &error); - - osync_message_unref(message); - - if (osync_queue_disconnect(client_queue, &error) != TRUE || error != NULL) - exit(1); - osync_queue_free(client_queue); - - osync_queue_send_message(server_queue, NULL, reply, &error); - osync_message_unref(reply); - - message = osync_queue_get_message(server_queue); - - if (osync_message_get_command(message) != OSYNC_MESSAGE_QUEUE_HUP) { - exit (1); - } - - osync_message_unref(message); - - if (osync_queue_disconnect(server_queue, &error) != TRUE || error != NULL) - exit(1); - osync_queue_free(server_queue); - - g_free(testbed); - - exit(0); - } else { - fail_unless(osync_queue_connect(client_queue, OSYNC_QUEUE_SENDER, &error), NULL); - fail_unless(error == NULL, NULL); - - fail_unless(osync_queue_connect(server_queue, OSYNC_QUEUE_RECEIVER, &error), NULL); - fail_unless(error == NULL, NULL); - - message = osync_message_new(OSYNC_MESSAGE_INITIALIZE, 0, &error); - fail_unless(message != NULL, NULL); - fail_unless(!osync_error_is_set(&error), NULL); - - osync_message_write_int(message, 4000000); - osync_message_write_string(message, "this is a test string"); - osync_message_write_long_long_int(message, 400000000); - osync_message_write_data(message, data, strlen(data) + 1); - - fail_unless(osync_queue_send_message(client_queue, NULL, message, &error), NULL); - fail_unless(!osync_error_is_set(&error), NULL); - - osync_message_unref(message); - - while (!(message = osync_queue_get_message(server_queue))) { - usleep(100000); - } - - fail_unless(osync_message_get_command(message) == OSYNC_MESSAGE_REPLY); - - osync_message_unref(message); - - osync_queue_disconnect(server_queue, &error); - fail_unless(error == NULL, NULL); - - while (!(message = osync_queue_get_message(client_queue))) { - usleep(10000); - } - - if (osync_message_get_command(message) != OSYNC_MESSAGE_QUEUE_HUP) { - exit (1); - } - - osync_message_unref(message); - - osync_queue_disconnect(client_queue, &error); - fail_unless(error == NULL, NULL); - - int status = 0; - wait(&status); - fail_unless(WEXITSTATUS(status) == 0, NULL); - } - - fail_unless(system("ls /tmp/testpipe-client &> /dev/null") == 0, NULL); - - fail_unless(osync_queue_remove(client_queue, &error), NULL); - fail_unless(osync_queue_remove(server_queue, &error), NULL); - fail_unless(!osync_error_is_set(&error), NULL); - - fail_unless(system("ls /tmp/testpipe-client &> /dev/null") != 0, NULL); - - osync_queue_free(client_queue); - osync_queue_free(server_queue); - - destroy_testbed(testbed); -} -END_TEST - -START_TEST (ipc_payload_wait) -{ - char *testbed = setup_testbed(NULL); - _remove_pipe("/tmp/testpipe-server"); - _remove_pipe("/tmp/testpipe-client"); - - OSyncError *error = NULL; - OSyncQueue *server_queue = osync_queue_new("/tmp/testpipe-server", &error); - OSyncQueue *client_queue = osync_queue_new("/tmp/testpipe-client", &error); - OSyncMessage *message = NULL; - - osync_queue_create(server_queue, &error); - fail_unless(error == NULL, NULL); - - osync_queue_create(client_queue, &error); - fail_unless(error == NULL, NULL); - char *data = "this is another test string"; - - pid_t cpid = fork(); - if (cpid == 0) { //Child - sleep(1); - fail_unless(osync_queue_connect(client_queue, OSYNC_QUEUE_RECEIVER, &error), NULL); - fail_unless(error == NULL, NULL); - - fail_unless(osync_queue_connect(server_queue, OSYNC_QUEUE_SENDER, &error), NULL); - fail_unless(error == NULL, NULL); - - while (!(message = osync_queue_get_message(client_queue))) { - usleep(10000); - } - - if (osync_message_get_command(message) != OSYNC_MESSAGE_INITIALIZE) { - exit (1); - } - - int int1; - long long int longint1; - char *string; - char databuf[strlen(data) + 1]; - - osync_message_read_int(message, &int1); - osync_message_read_string(message, &string); - osync_message_read_long_long_int(message, &longint1); - osync_message_read_data(message, databuf, strlen(data) + 1); - - fail_unless(int1 == 4000000, NULL); - fail_unless(!strcmp(string, "this is a test string"), NULL); - fail_unless(longint1 == 400000000, NULL); - fail_unless(!strcmp(databuf, "this is another test string"), NULL); - - sleep(1); - - OSyncMessage *reply = osync_message_new_reply(message, &error); - - osync_message_unref(message); - - osync_queue_send_message(server_queue, NULL, reply, &error); - - osync_message_unref(reply); - - sleep(1); - - if (osync_queue_disconnect(client_queue, &error) != TRUE || error != NULL) - exit(1); - osync_queue_free(client_queue); - - while (!(message = osync_queue_get_message(server_queue))) { - usleep(10000); - } - - if (osync_message_get_command(message) != OSYNC_MESSAGE_QUEUE_HUP) { - exit (1); - } - - osync_message_unref(message); - sleep(1); - - if (osync_queue_disconnect(server_queue, &error) != TRUE || error != NULL) - exit(1); - osync_queue_free(server_queue); - - g_free(testbed); - - exit(0); - } else { - fail_unless(osync_queue_connect(client_queue, OSYNC_QUEUE_SENDER, &error), NULL); - fail_unless(error == NULL, NULL); - - fail_unless(osync_queue_connect(server_queue, OSYNC_QUEUE_RECEIVER, &error), NULL); - fail_unless(error == NULL, NULL); - - message = osync_message_new(OSYNC_MESSAGE_INITIALIZE, 0, &error); - fail_unless(message != NULL, NULL); - fail_unless(!osync_error_is_set(&error), NULL); - - osync_message_write_int(message, 4000000); - osync_message_write_string(message, "this is a test string"); - osync_message_write_long_long_int(message, 400000000); - osync_message_write_data(message, data, strlen(data) + 1); - - fail_unless(osync_queue_send_message(client_queue, NULL, message, &error), NULL); - fail_unless(!osync_error_is_set(&error), NULL); - - osync_message_unref(message); - - while (!(message = osync_queue_get_message(server_queue))) { - usleep(100000); - } - - fail_unless(osync_message_get_command(message) == OSYNC_MESSAGE_REPLY); - - osync_message_unref(message); - - osync_queue_disconnect(server_queue, &error); - fail_unless(error == NULL, NULL); - - while (!(message = osync_queue_get_message(client_queue))) { - usleep(10000); - } - - if (osync_message_get_command(message) != OSYNC_MESSAGE_QUEUE_HUP) { - exit (1); - } - osync_message_unref(message); - - osync_queue_disconnect(client_queue, &error); - fail_unless(error == NULL, NULL); - - int status = 0; - wait(&status); - fail_unless(WEXITSTATUS(status) == 0, NULL); - } - - fail_unless(system("ls /tmp/testpipe-client &> /dev/null") == 0, NULL); - - fail_unless(osync_queue_remove(client_queue, &error), NULL); - fail_unless(osync_queue_remove(server_queue, &error), NULL); - fail_unless(!osync_error_is_set(&error), NULL); - - fail_unless(system("ls /tmp/testpipe-client &> /dev/null") != 0, NULL); - - osync_queue_free(client_queue); - osync_queue_free(server_queue); - - destroy_testbed(testbed); -} -END_TEST - -START_TEST (ipc_payload_stress) -{ - char *testbed = setup_testbed(NULL); - _remove_pipe("/tmp/testpipe-server"); - _remove_pipe("/tmp/testpipe-client"); - - int num_mess = 1000; - int size = 100; - - char *data = malloc(size); - memset(data, 42, size); - - OSyncError *error = NULL; - OSyncQueue *server_queue = osync_queue_new("/tmp/testpipe-server", &error); - OSyncQueue *client_queue = osync_queue_new("/tmp/testpipe-client", &error); - OSyncMessage *message = NULL; - - osync_queue_create(server_queue, &error); - fail_unless(error == NULL, NULL); - - osync_queue_create(client_queue, &error); - fail_unless(error == NULL, NULL); - - pid_t cpid = fork(); - if (cpid == 0) { //Child - fail_unless(osync_queue_connect(client_queue, OSYNC_QUEUE_RECEIVER, &error), NULL); - fail_unless(error == NULL, NULL); - - fail_unless(osync_queue_connect(server_queue, OSYNC_QUEUE_SENDER, &error), NULL); - fail_unless(error == NULL, NULL); - - while (num_mess > 0) { - osync_trace(TRACE_INTERNAL, "Waiting for message"); - message = osync_queue_get_message(client_queue); - - if (osync_message_get_command(message) != OSYNC_MESSAGE_INITIALIZE) { - exit (1); - } - - osync_trace(TRACE_INTERNAL, "Parsing message"); - char databuf[size]; - - osync_message_read_data(message, databuf, size); - - fail_unless(!memcmp(databuf, data, size), NULL); - - osync_trace(TRACE_INTERNAL, "Creating new reply"); - OSyncMessage *reply = osync_message_new_reply(message, &error); - - osync_message_unref(message); - - osync_trace(TRACE_INTERNAL, "Sending reply"); - osync_queue_send_message(server_queue, NULL, reply, &error); - - osync_message_unref(reply); - - num_mess--; - } - - if (osync_queue_disconnect(client_queue, &error) != TRUE || error != NULL) - exit(1); - osync_queue_free(client_queue); - - message = osync_queue_get_message(server_queue); - - if (osync_message_get_command(message) != OSYNC_MESSAGE_QUEUE_HUP) { - exit (1); - } - - osync_message_unref(message); - - if (osync_queue_disconnect(server_queue, &error) != TRUE || error != NULL) - exit(1); - osync_queue_free(server_queue); - - g_free(data); - g_free(testbed); - - exit(0); - } else { - fail_unless(osync_queue_connect(client_queue, OSYNC_QUEUE_SENDER, &error), NULL); - fail_unless(error == NULL, NULL); - - fail_unless(osync_queue_connect(server_queue, OSYNC_QUEUE_RECEIVER, &error), NULL); - fail_unless(error == NULL, NULL); - - while (num_mess > 0) { - osync_trace(TRACE_INTERNAL, "Creating new message"); - message = osync_message_new(OSYNC_MESSAGE_INITIALIZE, 0, &error); - fail_unless(message != NULL, NULL); - fail_unless(!osync_error_is_set(&error), NULL); - - osync_message_write_data(message, data, size); - - osync_trace(TRACE_INTERNAL, "Sending message"); - fail_unless(osync_queue_send_message(client_queue, NULL, message, &error), NULL); - fail_unless(!osync_error_is_set(&error), NULL); - - osync_message_unref(message); - - osync_trace(TRACE_INTERNAL, "Waiting for message"); - message = osync_queue_get_message(server_queue); - - fail_unless(osync_message_get_command(message) == OSYNC_MESSAGE_REPLY); - - osync_message_unref(message); - - num_mess--; - } - - osync_queue_disconnect(server_queue, &error); - fail_unless(error == NULL, NULL); - - message = osync_queue_get_message(client_queue); - - if (osync_message_get_command(message) != OSYNC_MESSAGE_QUEUE_HUP) { - exit (1); - } - - osync_message_unref(message); - - osync_queue_disconnect(client_queue, &error); - fail_unless(error == NULL, NULL); - - int status = 0; - wait(&status); - fail_unless(WEXITSTATUS(status) == 0, NULL); - } - - fail_unless(system("ls /tmp/testpipe-client &> /dev/null") == 0, NULL); - - fail_unless(osync_queue_remove(client_queue, &error), NULL); - fail_unless(osync_queue_remove(server_queue, &error), NULL); - fail_unless(!osync_error_is_set(&error), NULL); - - fail_unless(system("ls /tmp/testpipe-client &> /dev/null") != 0, NULL); - - osync_queue_free(client_queue); - osync_queue_free(server_queue); - - g_free(data); - destroy_testbed(testbed); -} -END_TEST - -START_TEST (ipc_payload_stress2) -{ - char *testbed = setup_testbed(NULL); - _remove_pipe("/tmp/testpipe-server"); - _remove_pipe("/tmp/testpipe-client"); - int i = 0; - - int num_mess = 1000; - int size = 100; - - char *data = malloc(size); - memset(data, 42, size); - - OSyncError *error = NULL; - OSyncQueue *server_queue = osync_queue_new("/tmp/testpipe-server", &error); - OSyncQueue *client_queue = osync_queue_new("/tmp/testpipe-client", &error); - OSyncMessage *message = NULL; - - osync_queue_create(server_queue, &error); - fail_unless(error == NULL, NULL); - - osync_queue_create(client_queue, &error); - fail_unless(error == NULL, NULL); - - pid_t cpid = fork(); - if (cpid == 0) { //Child - fail_unless(osync_queue_connect(client_queue, OSYNC_QUEUE_RECEIVER, &error), NULL); - fail_unless(error == NULL, NULL); - - fail_unless(osync_queue_connect(server_queue, OSYNC_QUEUE_SENDER, &error), NULL); - fail_unless(error == NULL, NULL); - - for (i = 0; i < num_mess; i++) { - message = osync_queue_get_message(client_queue); - - if (osync_message_get_command(message) != OSYNC_MESSAGE_INITIALIZE) { - exit (1); - } - - char databuf[size]; - - osync_message_read_data(message, databuf, size); - - fail_unless(!memcmp(databuf, data, size), NULL); - - osync_message_unref(message); - } - - message = osync_message_new(OSYNC_MESSAGE_INITIALIZE, 0, &error); - - for (i = 0; i < num_mess; i++) { - OSyncMessage *reply = osync_message_new_reply(message, &error); - - osync_queue_send_message(server_queue, NULL, reply, &error); - - osync_message_unref(reply); - } - - osync_message_unref(message); - - if (osync_queue_disconnect(client_queue, &error) != TRUE || error != NULL) - exit(1); - osync_queue_free(client_queue); - - message = osync_queue_get_message(server_queue); - - if (osync_message_get_command(message) != OSYNC_MESSAGE_QUEUE_HUP) { - exit (1); - } - - osync_message_unref(message); - - if (osync_queue_disconnect(server_queue, &error) != TRUE || error != NULL) - exit(1); - osync_queue_free(server_queue); - - g_free(data); - g_free(testbed); - - exit(0); - } else { - fail_unless(osync_queue_connect(client_queue, OSYNC_QUEUE_SENDER, &error), NULL); - fail_unless(error == NULL, NULL); - - fail_unless(osync_queue_connect(server_queue, OSYNC_QUEUE_RECEIVER, &error), NULL); - fail_unless(error == NULL, NULL); - - for (i = 0; i < num_mess; i++) { - message = osync_message_new(OSYNC_MESSAGE_INITIALIZE, 0, &error); - fail_unless(message != NULL, NULL); - fail_unless(!osync_error_is_set(&error), NULL); - - osync_message_write_data(message, data, size); - - fail_unless(osync_queue_send_message(client_queue, NULL, message, &error), NULL); - fail_unless(!osync_error_is_set(&error), NULL); - - osync_message_unref(message); - } - - for (i = 0; i < num_mess; i++) { - message = osync_queue_get_message(server_queue); - - fail_unless(osync_message_get_command(message) == OSYNC_MESSAGE_REPLY); - - osync_message_unref(message); - } - - osync_queue_disconnect(server_queue, &error); - fail_unless(error == NULL, NULL); - - message = osync_queue_get_message(client_queue); - - if (osync_message_get_command(message) != OSYNC_MESSAGE_QUEUE_HUP) { - exit (1); - } - - osync_message_unref(message); - - osync_queue_disconnect(client_queue, &error); - fail_unless(error == NULL, NULL); - - int status = 0; - wait(&status); - fail_unless(WEXITSTATUS(status) == 0, NULL); - } - - fail_unless(system("ls /tmp/testpipe-client &> /dev/null") == 0, NULL); - - fail_unless(osync_queue_remove(client_queue, &error), NULL); - fail_unless(osync_queue_remove(server_queue, &error), NULL); - fail_unless(!osync_error_is_set(&error), NULL); - - fail_unless(system("ls /tmp/testpipe-client &> /dev/null") != 0, NULL); - - osync_queue_free(client_queue); - osync_queue_free(server_queue); - - g_free(data); - destroy_testbed(testbed); -} -END_TEST - -START_TEST (ipc_large_payload) -{ - char *testbed = setup_testbed(NULL); - _remove_pipe("/tmp/testpipe-server"); - _remove_pipe("/tmp/testpipe-client"); - int i = 0; - - int num_mess = 10; - int size = 1024 * 1024 * 20; //20mbyte - - char *data = malloc(size); - memset(data, 42, size); - - OSyncError *error = NULL; - OSyncQueue *server_queue = osync_queue_new("/tmp/testpipe-server", &error); - OSyncQueue *client_queue = osync_queue_new("/tmp/testpipe-client", &error); - OSyncMessage *message = NULL; - - osync_queue_create(server_queue, &error); - fail_unless(error == NULL, NULL); - - osync_queue_create(client_queue, &error); - fail_unless(error == NULL, NULL); - - pid_t cpid = fork(); - if (cpid == 0) { //Child - fail_unless(osync_queue_connect(client_queue, OSYNC_QUEUE_RECEIVER, &error), NULL); - fail_unless(error == NULL, NULL); - - fail_unless(osync_queue_connect(server_queue, OSYNC_QUEUE_SENDER, &error), NULL); - fail_unless(error == NULL, NULL); - - for (i = 0; i < num_mess; i++) { - message = osync_queue_get_message(client_queue); - - if (osync_message_get_command(message) != OSYNC_MESSAGE_INITIALIZE) { - exit (1); - } - - void *databuf = NULL; - osync_message_read_const_data(message, &databuf, size); - - if (memcmp(databuf, data, size)) - exit(1); - - OSyncMessage *reply = osync_message_new_reply(message, &error); - - osync_message_unref(message); - - osync_queue_send_message(server_queue, NULL, reply, &error); - - osync_message_unref(reply); - } - - if (osync_queue_disconnect(client_queue, &error) != TRUE || error != NULL) - exit(1); - osync_queue_free(client_queue); - - message = osync_queue_get_message(server_queue); - - if (osync_message_get_command(message) != OSYNC_MESSAGE_QUEUE_HUP) { - exit (1); - } - - osync_message_unref(message); - - if (osync_queue_disconnect(server_queue, &error) != TRUE || error != NULL) - exit(1); - osync_queue_free(server_queue); - - g_free(data); - - g_free(testbed); - - exit(0); - } else { - fail_unless(osync_queue_connect(client_queue, OSYNC_QUEUE_SENDER, &error), NULL); - fail_unless(error == NULL, NULL); - - fail_unless(osync_queue_connect(server_queue, OSYNC_QUEUE_RECEIVER, &error), NULL); - fail_unless(error == NULL, NULL); - - for (i = 0; i < num_mess; i++) { - message = osync_message_new(OSYNC_MESSAGE_INITIALIZE, 0, &error); - fail_unless(message != NULL, NULL); - fail_unless(!osync_error_is_set(&error), NULL); - - osync_message_write_data(message, data, size); - - fail_unless(osync_queue_send_message(client_queue, NULL, message, &error), NULL); - fail_unless(!osync_error_is_set(&error), NULL); - - osync_message_unref(message); - - message = osync_queue_get_message(server_queue); - - fail_unless(osync_message_get_command(message) == OSYNC_MESSAGE_REPLY); - - osync_message_unref(message); - } - - osync_queue_disconnect(server_queue, &error); - fail_unless(error == NULL, NULL); - - message = osync_queue_get_message(client_queue); - - if (osync_message_get_command(message) != OSYNC_MESSAGE_QUEUE_HUP) { - exit (1); - } - - osync_message_unref(message); - - osync_queue_disconnect(client_queue, &error); - fail_unless(error == NULL, NULL); - - int status = 0; - wait(&status); - fail_unless(WEXITSTATUS(status) == 0, NULL); - } - - fail_unless(system("ls /tmp/testpipe-client &> /dev/null") == 0, NULL); - - fail_unless(osync_queue_remove(client_queue, &error), NULL); - fail_unless(osync_queue_remove(server_queue, &error), NULL); - fail_unless(!osync_error_is_set(&error), NULL); - - fail_unless(system("ls /tmp/testpipe-client &> /dev/null") != 0, NULL); - - osync_queue_free(client_queue); - osync_queue_free(server_queue); - - g_free(data); - destroy_testbed(testbed); -} -END_TEST - -START_TEST (ipc_error_no_pipe) -{ - char *testbed = setup_testbed(NULL); - _remove_pipe("/tmp/testpipe"); - - OSyncError *error = NULL; - OSyncQueue *queue1 = osync_queue_new("/tmp/testpipe", &error); - fail_unless(queue1 != NULL, NULL); - fail_unless(error == NULL, NULL); - - fail_unless(!osync_queue_connect(queue1, OSYNC_QUEUE_RECEIVER, &error), NULL); - fail_unless(error != NULL, NULL); - osync_error_free(&error); - - osync_queue_free(queue1); - - destroy_testbed(testbed); -} -END_TEST - -START_TEST (ipc_error_perm) -{ - char *testbed = setup_testbed(NULL); - _remove_pipe("/tmp/testpipe"); - - OSyncError *error = NULL; - OSyncQueue *queue = osync_queue_new("/tmp/testpipe", &error); - - osync_queue_create(queue, &error); - fail_unless(error == NULL, NULL); - - if (system("chmod 000 /tmp/testpipe")) - abort(); - - fail_unless(!osync_queue_connect(queue, OSYNC_QUEUE_RECEIVER, &error), NULL); - fail_unless(error != NULL, NULL); - osync_error_free(&error); - - fail_unless(system("ls /tmp/testpipe &> /dev/null") == 0, NULL); - - fail_unless(osync_queue_remove(queue, &error), NULL); - fail_unless(error == NULL, NULL); - - fail_unless(system("ls /tmp/testpipe &> /dev/null") != 0, NULL); - - osync_queue_free(queue); - - destroy_testbed(testbed); -} -END_TEST - -START_TEST (ipc_error_rem) -{ - char *testbed = setup_testbed(NULL); - _remove_pipe("/tmp/testpipe"); - - OSyncError *error = NULL; - OSyncQueue *server_queue = osync_queue_new("/tmp/testpipe", &error); - OSyncMessage *message = NULL; - - osync_queue_create(server_queue, &error); - fail_unless(error == NULL, NULL); - - pid_t cpid = fork(); - if (cpid == 0) { //Child - osync_assert(osync_queue_connect(server_queue, OSYNC_QUEUE_RECEIVER, &error)); - osync_assert(error == NULL); - - g_free(testbed); - exit(0); - } else { - fail_unless(osync_queue_connect(server_queue, OSYNC_QUEUE_SENDER, &error), NULL); - fail_unless(error == NULL, NULL); - - message = osync_queue_get_message(server_queue); - osync_assert(osync_message_get_command(message) == OSYNC_MESSAGE_QUEUE_HUP); - osync_message_unref(message); - - osync_queue_disconnect(server_queue, &error); - fail_unless(error == NULL, NULL); - - int status = 0; - wait(&status); - fail_unless(WEXITSTATUS(status) == 0, NULL); - } - - fail_unless(system("ls /tmp/testpipe &> /dev/null") == 0, NULL); - - fail_unless(osync_queue_remove(server_queue, &error), NULL); - fail_unless(!osync_error_is_set(&error), NULL); - - fail_unless(system("ls /tmp/testpipe &> /dev/null") != 0, NULL); - - osync_queue_free(server_queue); - - destroy_testbed(testbed); -} -END_TEST - -START_TEST (ipc_error_rem2) -{ - char *testbed = setup_testbed(NULL); - _remove_pipe("/tmp/testpipe"); - - OSyncError *error = NULL; - OSyncQueue *server_queue = osync_queue_new("/tmp/testpipe", &error); - OSyncMessage *message = NULL; - - osync_queue_create(server_queue, &error); - fail_unless(error == NULL, NULL); - - pid_t cpid = fork(); - if (cpid == 0) { //Child - osync_assert(osync_queue_connect(server_queue, OSYNC_QUEUE_SENDER, &error)); - osync_assert(error == NULL); - - osync_assert(_osync_queue_write_int(server_queue, 10000, &error)); - osync_assert(error == NULL); - - osync_assert(_osync_queue_write_int(server_queue, 0, &error)); - osync_assert(error == NULL); - - osync_assert(_osync_queue_write_long_long_int(server_queue, 0, &error)); - osync_assert(error == NULL); - - osync_assert(_osync_queue_write_int(server_queue, 0, &error)); - osync_assert(error == NULL); - - sleep(1); - - osync_queue_disconnect(server_queue, &error); - fail_unless(error == NULL, NULL); - - osync_queue_free(server_queue); - - g_free(testbed); - exit(0); - } else { - fail_unless(osync_queue_connect(server_queue, OSYNC_QUEUE_RECEIVER, &error), NULL); - fail_unless(error == NULL, NULL); - - message = osync_queue_get_message(server_queue); - osync_assert(osync_message_get_command(message) == OSYNC_MESSAGE_QUEUE_ERROR); - osync_message_unref(message); - - osync_queue_disconnect(server_queue, &error); - fail_unless(error == NULL, NULL); - - int status = 0; - wait(&status); - fail_unless(WEXITSTATUS(status) == 0, NULL); - } - - fail_unless(system("ls /tmp/testpipe &> /dev/null") == 0, NULL); - - fail_unless(osync_queue_remove(server_queue, &error), NULL); - fail_unless(!osync_error_is_set(&error), NULL); - - fail_unless(system("ls /tmp/testpipe &> /dev/null") != 0, NULL); - - osync_queue_free(server_queue); - - destroy_testbed(testbed); -} -END_TEST - -OSyncQueue *server_queue = NULL; -OSyncQueue *client_queue = NULL; - -void server_handler1(OSyncMessage *message, void *user_data) -{ - osync_trace(TRACE_ENTRY, "%s(%p, %p)", __func__, message, user_data); - OSyncError *error = NULL; - - osync_assert(GPOINTER_TO_INT(user_data) ==1); - - fail_unless(osync_message_get_command(message) == OSYNC_MESSAGE_INITIALIZE); - - osync_queue_disconnect(server_queue, &error); - fail_unless(error == NULL, NULL); - - osync_trace(TRACE_EXIT, "%s", __func__); -} - -void client_handler1(OSyncMessage *message, void *user_data) -{ - osync_trace(TRACE_ENTRY, "%s(%p, %p)", __func__, message, user_data); - OSyncError *error = NULL; - - osync_assert(GPOINTER_TO_INT(user_data) ==1); - osync_assert(osync_message_get_command(message) == OSYNC_MESSAGE_INITIALIZE); - - int int1; - long long int longint1; - char *string; - void *databuf; - - osync_message_read_int(message, &int1); - osync_message_read_const_string(message, &string); - osync_message_read_long_long_int(message, &longint1); - osync_message_read_const_data(message, &databuf, strlen("this is another test string") + 1); - - fail_unless(int1 == 4000000, NULL); - fail_unless(!strcmp(string, "this is a test string"), NULL); - fail_unless(longint1 == 400000000, NULL); - fail_unless(!strcmp(databuf, "this is another test string"), NULL); - - OSyncMessage *reply = osync_message_new(OSYNC_MESSAGE_INITIALIZE, 0, &error); - - osync_queue_send_message(server_queue, NULL, reply, &error); - - osync_message_unref(reply); - - osync_trace(TRACE_EXIT, "%s", __func__); -} - -START_TEST (ipc_loop_payload) -{ - char *testbed = setup_testbed(NULL); - _remove_pipe("/tmp/testpipe-server"); - _remove_pipe("/tmp/testpipe-client"); - - OSyncError *error = NULL; - server_queue = osync_queue_new("/tmp/testpipe-server", &error); - client_queue = osync_queue_new("/tmp/testpipe-client", &error); - OSyncMessage *message = NULL; - - osync_queue_create(server_queue, &error); - fail_unless(error == NULL, NULL); - - osync_queue_create(client_queue, &error); - fail_unless(error == NULL, NULL); - char *data = "this is another test string"; - - GMainContext *context = g_main_context_new(); - OSyncThread *thread = osync_thread_new(context, &error); - - pid_t cpid = fork(); - if (cpid == 0) { //Child - osync_queue_set_message_handler(client_queue, client_handler1, GINT_TO_POINTER(1)); - - osync_queue_setup_with_gmainloop(client_queue, context); - - osync_thread_start(thread); - - fail_unless(osync_queue_connect(client_queue, OSYNC_QUEUE_RECEIVER, &error), NULL); - fail_unless(error == NULL, NULL); - - fail_unless(osync_queue_connect(server_queue, OSYNC_QUEUE_SENDER, &error), NULL); - fail_unless(error == NULL, NULL); - - message = osync_queue_get_message(server_queue); - - if (osync_message_get_command(message) != OSYNC_MESSAGE_QUEUE_HUP) { - exit (1); - } - - osync_message_unref(message); - - if (osync_queue_disconnect(server_queue, &error) != TRUE || error != NULL) - exit(1); - osync_queue_free(server_queue); - - osync_assert(osync_queue_disconnect(client_queue, &error)); - osync_assert(error == NULL); - - osync_thread_stop(thread); - osync_thread_free(thread); - - osync_queue_free(client_queue); - - g_free(testbed); - - exit(0); - } else { - osync_queue_set_message_handler(server_queue, server_handler1, GINT_TO_POINTER(1)); - - osync_queue_setup_with_gmainloop(server_queue, context); - - osync_thread_start(thread); - - fail_unless(osync_queue_connect(client_queue, OSYNC_QUEUE_SENDER, &error), NULL); - fail_unless(error == NULL, NULL); - - fail_unless(osync_queue_connect(server_queue, OSYNC_QUEUE_RECEIVER, &error), NULL); - fail_unless(error == NULL, NULL); - - message = osync_message_new(OSYNC_MESSAGE_INITIALIZE, 0, &error); - fail_unless(message != NULL, NULL); - fail_unless(!osync_error_is_set(&error), NULL); - - osync_message_write_int(message, 4000000); - osync_message_write_string(message, "this is a test string"); - osync_message_write_long_long_int(message, 400000000); - osync_message_write_data(message, data, strlen(data) + 1); - - fail_unless(osync_queue_send_message(client_queue, NULL, message, &error), NULL); - fail_unless(!osync_error_is_set(&error), NULL); - - osync_message_unref(message); - - message = osync_queue_get_message(client_queue); - - fail_unless(osync_message_get_command(message) == OSYNC_MESSAGE_QUEUE_HUP); - - osync_message_unref(message); - - osync_queue_disconnect(client_queue, &error); - fail_unless(error == NULL, NULL); - - osync_thread_stop(thread); - osync_thread_free(thread); - - int status = 0; - wait(&status); - fail_unless(WEXITSTATUS(status) == 0, NULL); - } - - fail_unless(system("ls /tmp/testpipe-client &> /dev/null") == 0, NULL); - - fail_unless(osync_queue_remove(client_queue, &error), NULL); - fail_unless(osync_queue_remove(server_queue, &error), NULL); - fail_unless(!osync_error_is_set(&error), NULL); - - fail_unless(system("ls /tmp/testpipe-client &> /dev/null") != 0, NULL); - - osync_queue_free(client_queue); - osync_queue_free(server_queue); - - destroy_testbed(testbed); -} -END_TEST - -int num_msgs = 0; -int req_msgs = 1000; - -void server_handler2(OSyncMessage *message, void *user_data) -{ - osync_trace(TRACE_ENTRY, "%s(%p, %p)", __func__, message, user_data); - OSyncError *error = NULL; - char *data = "this is another test string"; - - osync_assert(GPOINTER_TO_INT(user_data) ==1); - - num_msgs++; - fail_unless(osync_message_get_command(message) == OSYNC_MESSAGE_INITIALIZE); - - if (num_msgs >= req_msgs) { - osync_queue_disconnect(server_queue, &error); - fail_unless(error == NULL, NULL); - } else { - message = osync_message_new(OSYNC_MESSAGE_INITIALIZE, 0, &error); - fail_unless(message != NULL, NULL); - fail_unless(!osync_error_is_set(&error), NULL); - - osync_message_write_int(message, 4000000); - osync_message_write_string(message, "this is a test string"); - osync_message_write_long_long_int(message, 400000000); - osync_message_write_data(message, data, strlen(data) + 1); - - fail_unless(osync_queue_send_message(client_queue, NULL, message, &error), NULL); - fail_unless(!osync_error_is_set(&error), NULL); - - osync_message_unref(message); - } - - osync_trace(TRACE_EXIT, "%s", __func__); -} - -void client_handler2(OSyncMessage *message, void *user_data) -{ - osync_trace(TRACE_ENTRY, "%s(%p, %p)", __func__, message, user_data); - OSyncError *error = NULL; - - osync_assert(GPOINTER_TO_INT(user_data) ==1); - osync_assert(osync_message_get_command(message) == OSYNC_MESSAGE_INITIALIZE); - - int int1; - long long int longint1; - char *string; - void *databuf; - - osync_message_read_int(message, &int1); - osync_message_read_const_string(message, &string); - osync_message_read_long_long_int(message, &longint1); - osync_message_read_const_data(message, &databuf, strlen("this is another test string") + 1); - - fail_unless(int1 == 4000000, NULL); - fail_unless(!strcmp(string, "this is a test string"), NULL); - fail_unless(longint1 == 400000000, NULL); - fail_unless(!strcmp(databuf, "this is another test string"), NULL); - - OSyncMessage *reply = osync_message_new(OSYNC_MESSAGE_INITIALIZE, 0, &error); - - osync_queue_send_message(server_queue, NULL, reply, &error); - - osync_message_unref(reply); - - osync_trace(TRACE_EXIT, "%s", __func__); -} - -START_TEST (ipc_loop_stress) -{ - char *testbed = setup_testbed(NULL); - _remove_pipe("/tmp/testpipe-server"); - _remove_pipe("/tmp/testpipe-client"); - - OSyncError *error = NULL; - server_queue = osync_queue_new("/tmp/testpipe-server", &error); - client_queue = osync_queue_new("/tmp/testpipe-client", &error); - OSyncMessage *message = NULL; - - osync_queue_create(server_queue, &error); - fail_unless(error == NULL, NULL); - - osync_queue_create(client_queue, &error); - fail_unless(error == NULL, NULL); - char *data = "this is another test string"; - - pid_t cpid = fork(); - if (cpid == 0) { //Child - - GMainContext *context = g_main_context_new(); - OSyncThread *thread = osync_thread_new(context, &error); - - osync_queue_set_message_handler(client_queue, client_handler2, GINT_TO_POINTER(1)); - - osync_queue_setup_with_gmainloop(client_queue, context); - - osync_thread_start(thread); - - fail_unless(osync_queue_connect(client_queue, OSYNC_QUEUE_RECEIVER, &error), NULL); - fail_unless(error == NULL, NULL); - - fail_unless(osync_queue_connect(server_queue, OSYNC_QUEUE_SENDER, &error), NULL); - fail_unless(error == NULL, NULL); - - message = osync_queue_get_message(server_queue); - - if (osync_message_get_command(message) != OSYNC_MESSAGE_QUEUE_HUP) { - exit (1); - } - - osync_message_unref(message); - - if (osync_queue_disconnect(server_queue, &error) != TRUE || error != NULL) - exit(1); - osync_queue_free(server_queue); - - osync_assert(osync_queue_disconnect(client_queue, &error)); - osync_assert(error == NULL); - - osync_thread_stop(thread); - osync_thread_free(thread); - - osync_queue_free(client_queue); - - g_free(testbed); - - exit(0); - } else { - GMainContext *context = g_main_context_new(); - OSyncThread *thread = osync_thread_new(context, &error); - - osync_queue_set_message_handler(server_queue, server_handler2, GINT_TO_POINTER(1)); - - osync_queue_setup_with_gmainloop(server_queue, context); - - osync_thread_start(thread); - - fail_unless(osync_queue_connect(client_queue, OSYNC_QUEUE_SENDER, &error), NULL); - fail_unless(error == NULL, NULL); - - fail_unless(osync_queue_connect(server_queue, OSYNC_QUEUE_RECEIVER, &error), NULL); - fail_unless(error == NULL, NULL); - - message = osync_message_new(OSYNC_MESSAGE_INITIALIZE, 0, &error); - fail_unless(message != NULL, NULL); - fail_unless(!osync_error_is_set(&error), NULL); - - osync_message_write_int(message, 4000000); - osync_message_write_string(message, "this is a test string"); - osync_message_write_long_long_int(message, 400000000); - osync_message_write_data(message, data, strlen(data) + 1); - - fail_unless(osync_queue_send_message(client_queue, NULL, message, &error), NULL); - fail_unless(!osync_error_is_set(&error), NULL); - - osync_message_unref(message); - - message = osync_queue_get_message(client_queue); - - fail_unless(osync_message_get_command(message) == OSYNC_MESSAGE_QUEUE_HUP); - - osync_message_unref(message); - - osync_queue_disconnect(client_queue, &error); - fail_unless(error == NULL, NULL); - - osync_thread_stop(thread); - osync_thread_free(thread); - - int status = 0; - wait(&status); - fail_unless(WEXITSTATUS(status) == 0, NULL); - } - - fail_unless(system("ls /tmp/testpipe-client &> /dev/null") == 0, NULL); - - fail_unless(osync_queue_remove(client_queue, &error), NULL); - fail_unless(osync_queue_remove(server_queue, &error), NULL); - fail_unless(!osync_error_is_set(&error), NULL); - - fail_unless(system("ls /tmp/testpipe-client &> /dev/null") != 0, NULL); - - osync_queue_free(client_queue); - osync_queue_free(server_queue); - - destroy_testbed(testbed); -} -END_TEST - -void callback_handler(OSyncMessage *message, void *user_data) -{ - osync_trace(TRACE_ENTRY, "%s(%p, %p)", __func__, message, user_data); - OSyncError *error = NULL; - - osync_assert(GPOINTER_TO_INT(user_data) == 1); - - num_msgs++; - fail_unless(osync_message_get_command(message) == OSYNC_MESSAGE_REPLY); - - if (num_msgs >= req_msgs) { - osync_queue_disconnect(server_queue, &error); - fail_unless(error == NULL, NULL); - } - - osync_trace(TRACE_EXIT, "%s", __func__); -} - -void server_handler3(OSyncMessage *message, void *user_data) -{ - abort(); -} - -void client_handler3(OSyncMessage *message, void *user_data) -{ - osync_trace(TRACE_ENTRY, "%s(%p, %p)", __func__, message, user_data); - OSyncError *error = NULL; - - osync_assert(GPOINTER_TO_INT(user_data) ==1); - osync_assert(osync_message_get_command(message) == OSYNC_MESSAGE_INITIALIZE); - - int int1; - long long int longint1; - char *string; - void *databuf; - - osync_message_read_int(message, &int1); - osync_message_read_const_string(message, &string); - osync_message_read_long_long_int(message, &longint1); - osync_message_read_const_data(message, &databuf, strlen("this is another test string") + 1); - - fail_unless(int1 == 4000000, NULL); - fail_unless(!strcmp(string, "this is a test string"), NULL); - fail_unless(longint1 == 400000000, NULL); - fail_unless(!strcmp(databuf, "this is another test string"), NULL); - - OSyncMessage *reply = osync_message_new_reply(message, &error); - - osync_queue_send_message(server_queue, NULL, reply, &error); - - osync_message_unref(reply); - - osync_trace(TRACE_EXIT, "%s", __func__); -} - -START_TEST (ipc_loop_callback) -{ - num_msgs = 0; - - char *testbed = setup_testbed(NULL); - _remove_pipe("/tmp/testpipe-server"); - _remove_pipe("/tmp/testpipe-client"); - - OSyncError *error = NULL; - server_queue = osync_queue_new("/tmp/testpipe-server", &error); - client_queue = osync_queue_new("/tmp/testpipe-client", &error); - OSyncMessage *message = NULL; - - osync_queue_create(server_queue, &error); - fail_unless(error == NULL, NULL); - - osync_queue_create(client_queue, &error); - fail_unless(error == NULL, NULL); - char *data = "this is another test string"; - - pid_t cpid = fork(); - if (cpid == 0) { //Child - - GMainContext *context = g_main_context_new(); - OSyncThread *thread = osync_thread_new(context, &error); - - osync_queue_set_message_handler(client_queue, client_handler3, GINT_TO_POINTER(1)); - - osync_queue_setup_with_gmainloop(client_queue, context); - - osync_thread_start(thread); - - fail_unless(osync_queue_connect(client_queue, OSYNC_QUEUE_RECEIVER, &error), NULL); - fail_unless(error == NULL, NULL); - - fail_unless(osync_queue_connect(server_queue, OSYNC_QUEUE_SENDER, &error), NULL); - fail_unless(error == NULL, NULL); - - message = osync_queue_get_message(server_queue); - - if (osync_message_get_command(message) != OSYNC_MESSAGE_QUEUE_HUP) { - exit (1); - } - - osync_message_unref(message); - - if (osync_queue_disconnect(server_queue, &error) != TRUE || error != NULL) - exit(1); - osync_queue_free(server_queue); - - osync_assert(osync_queue_disconnect(client_queue, &error)); - osync_assert(error == NULL); - - osync_thread_stop(thread); - osync_thread_free(thread); - - osync_queue_free(client_queue); - - g_free(testbed); - - exit(0); - } else { - GMainContext *context = g_main_context_new(); - OSyncThread *thread = osync_thread_new(context, &error); - - osync_queue_set_message_handler(server_queue, server_handler3, GINT_TO_POINTER(1)); - - osync_queue_setup_with_gmainloop(server_queue, context); - - osync_thread_start(thread); - - fail_unless(osync_queue_connect(client_queue, OSYNC_QUEUE_SENDER, &error), NULL); - fail_unless(error == NULL, NULL); - - fail_unless(osync_queue_connect(server_queue, OSYNC_QUEUE_RECEIVER, &error), NULL); - fail_unless(error == NULL, NULL); - - int i = 0; - for (i = 0; i < req_msgs; i++) { - message = osync_message_new(OSYNC_MESSAGE_INITIALIZE, 0, &error); - fail_unless(message != NULL, NULL); - fail_unless(!osync_error_is_set(&error), NULL); - - osync_message_write_int(message, 4000000); - osync_message_write_string(message, "this is a test string"); - osync_message_write_long_long_int(message, 400000000); - osync_message_write_data(message, data, strlen(data) + 1); - - osync_message_set_handler(message, callback_handler, GINT_TO_POINTER(1)); - - fail_unless(osync_queue_send_message(client_queue, server_queue, message, &error), NULL); - fail_unless(!osync_error_is_set(&error), NULL); - - osync_message_unref(message); - } - - message = osync_queue_get_message(client_queue); - - fail_unless(osync_message_get_command(message) == OSYNC_MESSAGE_QUEUE_HUP); - - osync_message_unref(message); - - osync_queue_disconnect(client_queue, &error); - fail_unless(error == NULL, NULL); - - osync_thread_stop(thread); - osync_thread_free(thread); - - int status = 0; - wait(&status); - fail_unless(WEXITSTATUS(status) == 0, NULL); - } - - fail_unless(system("ls /tmp/testpipe-client &> /dev/null") == 0, NULL); - - fail_unless(osync_queue_remove(client_queue, &error), NULL); - fail_unless(osync_queue_remove(server_queue, &error), NULL); - fail_unless(!osync_error_is_set(&error), NULL); - - fail_unless(system("ls /tmp/testpipe-client &> /dev/null") != 0, NULL); - - osync_queue_free(client_queue); - osync_queue_free(server_queue); - - destroy_testbed(testbed); -} -END_TEST - -int stop_after = 500; - -void callback_handler2(OSyncMessage *message, void *user_data) -{ - osync_trace(TRACE_ENTRY, "%s(%p, %p)", __func__, message, user_data); - - osync_assert(GPOINTER_TO_INT(user_data) == 1); - - if (num_msgs >= stop_after) { - osync_assert(osync_message_get_command(message) == OSYNC_MESSAGE_ERRORREPLY); - } else { - osync_assert(osync_message_get_command(message) == OSYNC_MESSAGE_REPLY); - } - - num_msgs++; - - osync_trace(TRACE_EXIT, "%s", __func__); -} - -int num_msgs2 = 0; - -void server_handler4(OSyncMessage *message, void *user_data) -{ - osync_assert(osync_message_get_command(message) == OSYNC_MESSAGE_QUEUE_HUP || osync_message_get_command(message) == OSYNC_MESSAGE_QUEUE_ERROR); -} - -void client_handler4(OSyncMessage *message, void *user_data) -{ - osync_trace(TRACE_ENTRY, "%s(%p, %p)", __func__, message, user_data); - OSyncError *error = NULL; - - osync_assert(GPOINTER_TO_INT(user_data) ==1); - osync_assert(osync_message_get_command(message) == OSYNC_MESSAGE_INITIALIZE); - - int int1; - long long int longint1; - char *string; - void *databuf; - - - osync_message_read_int(message, &int1); - osync_message_read_const_string(message, &string); - osync_message_read_long_long_int(message, &longint1); - osync_message_read_const_data(message, &databuf, strlen("this is another test string") + 1); - - fail_unless(int1 == 4000000, NULL); - fail_unless(!strcmp(string, "this is a test string"), NULL); - fail_unless(longint1 == 400000000, NULL); - fail_unless(!strcmp(databuf, "this is another test string"), NULL); - - if (num_msgs2 >= stop_after) { - osync_assert(osync_queue_disconnect(client_queue, &error)); - osync_assert(error == NULL); - } else { - OSyncMessage *reply = osync_message_new_reply(message, &error); - - osync_queue_send_message(server_queue, NULL, reply, &error); - - osync_message_unref(reply); - } - - num_msgs2++; - - osync_trace(TRACE_EXIT, "%s", __func__); -} - -START_TEST (ipc_callback_break) -{ - num_msgs = 0; - - char *testbed = setup_testbed(NULL); - _remove_pipe("/tmp/testpipe-server"); - _remove_pipe("/tmp/testpipe-client"); - - OSyncError *error = NULL; - server_queue = osync_queue_new("/tmp/testpipe-server", &error); - client_queue = osync_queue_new("/tmp/testpipe-client", &error); - OSyncMessage *message = NULL; - - osync_queue_create(server_queue, &error); - fail_unless(error == NULL, NULL); - - osync_queue_create(client_queue, &error); - fail_unless(error == NULL, NULL); - char *data = "this is another test string"; - - pid_t cpid = fork(); - if (cpid == 0) { //Child - - GMainContext *context = g_main_context_new(); - OSyncThread *thread = osync_thread_new(context, &error); - - osync_queue_set_message_handler(client_queue, client_handler4, GINT_TO_POINTER(1)); - - osync_queue_setup_with_gmainloop(client_queue, context); - - osync_thread_start(thread); - - fail_unless(osync_queue_connect(client_queue, OSYNC_QUEUE_RECEIVER, &error), NULL); - fail_unless(error == NULL, NULL); - - fail_unless(osync_queue_connect(server_queue, OSYNC_QUEUE_SENDER, &error), NULL); - fail_unless(error == NULL, NULL); - - while (osync_queue_is_connected(client_queue)) { usleep(100); } - - osync_assert(osync_queue_disconnect(server_queue, &error)); - osync_assert(error == NULL); - - osync_thread_stop(thread); - osync_thread_free(thread); - - osync_queue_free(client_queue); - osync_queue_free(server_queue); - - g_free(testbed); - exit(0); - } else { - GMainContext *context = g_main_context_new(); - OSyncThread *thread = osync_thread_new(context, &error); - - osync_queue_set_message_handler(server_queue, server_handler4, GINT_TO_POINTER(1)); - - osync_queue_setup_with_gmainloop(server_queue, context); - - osync_thread_start(thread); - - fail_unless(osync_queue_connect(client_queue, OSYNC_QUEUE_SENDER, &error), NULL); - fail_unless(error == NULL, NULL); - - fail_unless(osync_queue_connect(server_queue, OSYNC_QUEUE_RECEIVER, &error), NULL); - fail_unless(error == NULL, NULL); - - int i = 0; - for (i = 0; i < req_msgs; i++) { - message = osync_message_new(OSYNC_MESSAGE_INITIALIZE, 0, &error); - fail_unless(message != NULL, NULL); - fail_unless(!osync_error_is_set(&error), NULL); - - osync_message_write_int(message, 4000000); - osync_message_write_string(message, "this is a test string"); - osync_message_write_long_long_int(message, 400000000); - osync_message_write_data(message, data, strlen(data) + 1); - - osync_message_set_handler(message, callback_handler2, GINT_TO_POINTER(1)); - - fail_unless(osync_queue_send_message(client_queue, server_queue, message, &error), NULL); - fail_unless(!osync_error_is_set(&error), NULL); - - osync_message_unref(message); - } - - message = osync_queue_get_message(client_queue); - - fail_unless(osync_message_get_command(message) == OSYNC_MESSAGE_QUEUE_HUP); - - osync_message_unref(message); - - while (num_msgs < req_msgs) { usleep(100); }; - - osync_queue_disconnect(client_queue, &error); - fail_unless(error == NULL, NULL); - - osync_queue_disconnect(server_queue, &error); - osync_assert(error == NULL); - - osync_thread_stop(thread); - osync_thread_free(thread); - - int status = 0; - wait(&status); - fail_unless(WEXITSTATUS(status) == 0, NULL); - } - - fail_unless(system("ls /tmp/testpipe-client &> /dev/null") == 0, NULL); - - fail_unless(osync_queue_remove(client_queue, &error), NULL); - fail_unless(osync_queue_remove(server_queue, &error), NULL); - fail_unless(!osync_error_is_set(&error), NULL); - - fail_unless(system("ls /tmp/testpipe-client &> /dev/null") != 0, NULL); - - osync_queue_free(client_queue); - osync_queue_free(server_queue); - - destroy_testbed(testbed); -} -END_TEST - - -START_TEST (ipc_pipes) -{ - char *testbed = setup_testbed(NULL); - - OSyncError *error = NULL; - OSyncQueue *read1 = NULL; - OSyncQueue *write1 = NULL; - char *data = "this is another test string"; - - osync_assert(osync_queue_new_pipes(&read1, &write1, &error)); - osync_assert(error == NULL); - - fail_unless(osync_queue_connect(read1, OSYNC_QUEUE_RECEIVER, &error), NULL); - fail_unless(error == NULL, NULL); - - fail_unless(osync_queue_connect(write1, OSYNC_QUEUE_SENDER, &error), NULL); - fail_unless(error == NULL, NULL); - - OSyncMessage *message = osync_message_new(OSYNC_MESSAGE_INITIALIZE, 0, &error); - fail_unless(message != NULL, NULL); - fail_unless(!osync_error_is_set(&error), NULL); - - osync_message_write_int(message, 4000000); - osync_message_write_string(message, "this is a test string"); - osync_message_write_long_long_int(message, 400000000); - osync_message_write_data(message, data, strlen(data) + 1); - - fail_unless(osync_queue_send_message(write1, NULL, message, &error), NULL); - fail_unless(!osync_error_is_set(&error), NULL); - osync_message_unref(message); - - message = osync_queue_get_message(read1); - osync_assert(osync_message_get_command(message) == OSYNC_MESSAGE_INITIALIZE); - - int int1; - long long int longint1; - char *string; - void *databuf; - - osync_message_read_int(message, &int1); - osync_message_read_const_string(message, &string); - osync_message_read_long_long_int(message, &longint1); - osync_message_read_const_data(message, &databuf, strlen("this is another test string") + 1); - - fail_unless(int1 == 4000000, NULL); - fail_unless(!strcmp(string, "this is a test string"), NULL); - fail_unless(longint1 == 400000000, NULL); - fail_unless(!strcmp(databuf, "this is another test string"), NULL); - - osync_message_unref(message); - - osync_assert(osync_queue_disconnect(read1, &error)); - osync_assert(error == NULL); - - message = osync_queue_get_message(write1); - osync_assert(osync_message_get_command(message) == OSYNC_MESSAGE_QUEUE_HUP); - osync_message_unref(message); - - osync_assert(osync_queue_disconnect(write1, &error)); - osync_assert(error == NULL); - - - osync_queue_free(read1); - osync_queue_free(write1); - - destroy_testbed(testbed); -} -END_TEST - -START_TEST (ipc_pipes_stress) -{ - char *testbed = setup_testbed(NULL); - - OSyncError *error = NULL; - OSyncQueue *read1 = NULL; - OSyncQueue *read2 = NULL; - OSyncQueue *write1 = NULL; - OSyncQueue *write2 = NULL; - - - // First the pipe from the parent to the child - osync_assert(osync_queue_new_pipes(&read1, &write1, &error)); - osync_assert(error == NULL); - - // Then the pipe from the child to the parent - osync_assert(osync_queue_new_pipes(&read2, &write2, &error)); - osync_assert(error == NULL); - - OSyncMessage *message = NULL; - - char *data = "this is another test string"; - - pid_t cpid = fork(); - if (cpid == 0) { //Child - - osync_assert(osync_queue_disconnect(write1, &error)); - osync_queue_free(write1); - - osync_assert(osync_queue_disconnect(read2, &error)); - osync_queue_free(read2); - - client_queue = read1; - server_queue = write2; - - GMainContext *context = g_main_context_new(); - OSyncThread *thread = osync_thread_new(context, &error); - - osync_queue_set_message_handler(client_queue, client_handler2, GINT_TO_POINTER(1)); - - osync_queue_setup_with_gmainloop(client_queue, context); - - osync_thread_start(thread); - - fail_unless(osync_queue_connect(client_queue, OSYNC_QUEUE_RECEIVER, &error), NULL); - fail_unless(error == NULL, NULL); - - fail_unless(osync_queue_connect(server_queue, OSYNC_QUEUE_SENDER, &error), NULL); - fail_unless(error == NULL, NULL); - - message = osync_queue_get_message(server_queue); - if (osync_message_get_command(message) != OSYNC_MESSAGE_QUEUE_HUP) { - exit (1); - } - osync_message_unref(message); - - - if (osync_queue_disconnect(server_queue, &error) != TRUE || error != NULL) - exit(1); - osync_queue_free(server_queue); - - osync_assert(osync_queue_disconnect(client_queue, &error)); - osync_assert(error == NULL); - - osync_thread_stop(thread); - osync_thread_free(thread); - - osync_queue_free(client_queue); - - g_free(testbed); - - exit(0); - } else { - - osync_assert(osync_queue_disconnect(write2, &error)); - osync_queue_free(write2); - - osync_assert(osync_queue_disconnect(read1, &error)); - osync_queue_free(read1); - - client_queue = write1; - server_queue = read2; - - GMainContext *context = g_main_context_new(); - OSyncThread *thread = osync_thread_new(context, &error); - - osync_queue_set_message_handler(server_queue, server_handler2, GINT_TO_POINTER(1)); - - osync_queue_setup_with_gmainloop(server_queue, context); - - osync_thread_start(thread); - - fail_unless(osync_queue_connect(client_queue, OSYNC_QUEUE_SENDER, &error), NULL); - fail_unless(error == NULL, NULL); - - fail_unless(osync_queue_connect(server_queue, OSYNC_QUEUE_RECEIVER, &error), NULL); - fail_unless(error == NULL, NULL); - - message = osync_message_new(OSYNC_MESSAGE_INITIALIZE, 0, &error); - fail_unless(message != NULL, NULL); - fail_unless(!osync_error_is_set(&error), NULL); - - osync_message_write_int(message, 4000000); - osync_message_write_string(message, "this is a test string"); - osync_message_write_long_long_int(message, 400000000); - osync_message_write_data(message, data, strlen(data) + 1); - - fail_unless(osync_queue_send_message(client_queue, NULL, message, &error), NULL); - fail_unless(!osync_error_is_set(&error), NULL); - - osync_message_unref(message); - - message = osync_queue_get_message(client_queue); - fail_unless(osync_message_get_command(message) == OSYNC_MESSAGE_QUEUE_HUP); - - osync_message_unref(message); - - osync_queue_disconnect(client_queue, &error); - fail_unless(error == NULL, NULL); - - osync_thread_stop(thread); - osync_thread_free(thread); - - int status = 0; - wait(&status); - fail_unless(WEXITSTATUS(status) == 0, NULL); - } - - osync_queue_free(client_queue); - osync_queue_free(server_queue); - - destroy_testbed(testbed); -} -END_TEST - -START_TEST (ipc_callback_break_pipes) -{ - num_msgs = 0; - - char *testbed = setup_testbed(NULL); - - OSyncError *error = NULL; - OSyncQueue *read1 = NULL; - OSyncQueue *read2 = NULL; - OSyncQueue *write1 = NULL; - OSyncQueue *write2 = NULL; - OSyncMessage *message = NULL; - - // First the pipe from the parent to the child - osync_assert(osync_queue_new_pipes(&read1, &write1, &error)); - osync_assert(error == NULL); - - // Then the pipe from the child to the parent - osync_assert(osync_queue_new_pipes(&read2, &write2, &error)); - osync_assert(error == NULL); - - char *data = "this is another test string"; - - pid_t cpid = fork(); - if (cpid == 0) { //Child - - osync_assert(osync_queue_disconnect(write1, &error)); - osync_queue_free(write1); - - osync_assert(osync_queue_disconnect(read2, &error)); - osync_queue_free(read2); - - client_queue = read1; - server_queue = write2; - - GMainContext *context = g_main_context_new(); - OSyncThread *thread = osync_thread_new(context, &error); - - osync_queue_set_message_handler(client_queue, client_handler4, GINT_TO_POINTER(1)); - - osync_queue_setup_with_gmainloop(client_queue, context); - - osync_thread_start(thread); - - fail_unless(osync_queue_connect(client_queue, OSYNC_QUEUE_RECEIVER, &error), NULL); - fail_unless(error == NULL, NULL); - - fail_unless(osync_queue_connect(server_queue, OSYNC_QUEUE_SENDER, &error), NULL); - fail_unless(error == NULL, NULL); - - while (osync_queue_is_connected(client_queue)) { usleep(100); } - - osync_assert(osync_queue_disconnect(server_queue, &error)); - osync_assert(error == NULL); - - osync_thread_stop(thread); - osync_thread_free(thread); - - osync_queue_free(client_queue); - osync_queue_free(server_queue); - - g_free(testbed); - exit(0); - } else { - - osync_assert(osync_queue_disconnect(write2, &error)); - osync_queue_free(write2); - - osync_assert(osync_queue_disconnect(read1, &error)); - osync_queue_free(read1); - - client_queue = write1; - server_queue = read2; - - GMainContext *context = g_main_context_new(); - OSyncThread *thread = osync_thread_new(context, &error); - - osync_queue_set_message_handler(server_queue, server_handler4, GINT_TO_POINTER(1)); - - osync_queue_setup_with_gmainloop(server_queue, context); - - osync_thread_start(thread); - - fail_unless(osync_queue_connect(client_queue, OSYNC_QUEUE_SENDER, &error), NULL); - fail_unless(error == NULL, NULL); - - fail_unless(osync_queue_connect(server_queue, OSYNC_QUEUE_RECEIVER, &error), NULL); - fail_unless(error == NULL, NULL); - - int i = 0; - for (i = 0; i < req_msgs; i++) { - message = osync_message_new(OSYNC_MESSAGE_INITIALIZE, 0, &error); - fail_unless(message != NULL, NULL); - fail_unless(!osync_error_is_set(&error), NULL); - - osync_message_write_int(message, 4000000); - osync_message_write_string(message, "this is a test string"); - osync_message_write_long_long_int(message, 400000000); - osync_message_write_data(message, data, strlen(data) + 1); - - osync_message_set_handler(message, callback_handler2, GINT_TO_POINTER(1)); - - fail_unless(osync_queue_send_message(client_queue, server_queue, message, &error), NULL); - fail_unless(!osync_error_is_set(&error), NULL); - - osync_message_unref(message); - } - - message = osync_queue_get_message(client_queue); - - fail_unless(osync_message_get_command(message) == OSYNC_MESSAGE_QUEUE_HUP); - - osync_message_unref(message); - - while (num_msgs < req_msgs) { usleep(100); }; - - osync_queue_disconnect(client_queue, &error); - fail_unless(error == NULL, NULL); - - osync_queue_disconnect(server_queue, &error); - osync_assert(error == NULL); - - osync_thread_stop(thread); - osync_thread_free(thread); - - int status = 0; - wait(&status); - fail_unless(WEXITSTATUS(status) == 0, NULL); - } - - osync_queue_free(client_queue); - osync_queue_free(server_queue); - - destroy_testbed(testbed); -} -END_TEST - -Suite *ipc_suite(void) -{ - Suite *s = suite_create("IPC"); - //Suite *s2 = suite_create("IPC"); - - create_case(s, "ipc_new", ipc_new); - create_case(s, "ipc_create", ipc_create); - create_case(s, "ipc_connect", ipc_connect); - create_case(s, "ipc_payload", ipc_payload); - create_case(s, "ipc_payload_wait", ipc_payload_wait); - create_case(s, "ipc_payload_stress", ipc_payload_stress); - create_case(s, "ipc_payload_stress2", ipc_payload_stress2); - create_case(s, "ipc_large_payload", ipc_large_payload); - - create_case(s, "ipc_error_no_pipe", ipc_error_no_pipe); - create_case(s, "ipc_error_perm", ipc_error_perm); - create_case(s, "ipc_error_rem", ipc_error_rem); - create_case(s, "ipc_error_rem2", ipc_error_rem2); - - create_case(s, "ipc_loop_payload", ipc_loop_payload); - create_case(s, "ipc_loop_stress", ipc_loop_stress); - create_case(s, "ipc_loop_callback", ipc_loop_callback); - create_case(s, "ipc_callback_break", ipc_callback_break); - - create_case(s, "ipc_pipes", ipc_pipes); - create_case(s, "ipc_pipes_stress", ipc_pipes_stress); - create_case(s, "ipc_callback_break_pipes", ipc_callback_break_pipes); - - return s; -} - -int main(void) -{ - int nf; - - Suite *s = ipc_suite(); - - SRunner *sr; - sr = srunner_create(s); - -// srunner_set_fork_status (sr, CK_NOFORK); - srunner_run_all(sr, CK_NORMAL); - nf = srunner_ntests_failed(sr); - srunner_free(sr); - return (nf == 0) ? EXIT_SUCCESS : EXIT_FAILURE; -} |