1 /* $Id: mmrpc.c 3399 2007-04-11 19:34:43Z cherierm $ */
3 /* msg_handle - ensures the semantic of gras_msg_handle(i) for i<0,=0 or >0 */
5 /* Copyright (c) 2007, 2008, 2009, 2010. The SimGrid Team.
6 * All rights reserved. */
7 /* Thanks to Flavien Vernier for reporting an issue around this */
9 /* This program is free software; you can redistribute it and/or modify it
10 * under the terms of the license (GNU LGPL) which comes with this package. */
14 XBT_LOG_NEW_DEFAULT_CATEGORY(test, "Messages specific to this test");
16 int server(int argc, char *argv[]);
17 int client(int argc, char *argv[]);
19 static int server_cb_hello_handler(gras_msg_cb_ctx_t ctx,
22 XBT_INFO("Got the message");
26 int server(int argc, char *argv[])
28 gras_socket_t me = NULL, pal = NULL;
37 gras_init(&argc, argv);
39 xbt_assert0(argc == 3, "Usage: server <myport> <client>");
40 myport = atoi(argv[1]);
43 gras_msgtype_declare("hello", NULL);
44 gras_cb_register("hello", &server_cb_hello_handler);
46 XBT_INFO("Launch server (port=%d)", myport);
48 me = gras_socket_server(myport);
50 RETHROW0("Unable to establish a server socket: %s");
52 gras_os_sleep(1); /* Wait for pal to startup */
54 pal = gras_socket_client_from_string(palstr);
56 RETHROW1("Unable to establish a socket to %s: %s", palstr);
58 XBT_INFO("Initialization done.");
61 /* Launch handle(0) when there is no message. Timeout expected */
66 if (e.category == timeout_error) {
70 RETHROW0("Didn't got the expected timeout: %s");
73 xbt_assert0(got_expected,
74 "gras_msg_handle(0) do not lead to any timeout exception");
75 xbt_assert1(gras_os_time() - now < 0.01,
76 "gras_msg_handle(0) do not anwser immediately (%.4fsec)",
77 gras_os_time() - now);
78 XBT_INFO("gras_msg_handle(0) works as expected (immediate timeout)");
79 /* Launch handle(0) when there is no message. Timeout expected */
85 if (e.category == timeout_error) {
89 RETHROW0("Didn't got the expected timeout: %s");
92 xbt_assert0(got_expected,
93 "gras_msg_handle(1) do not lead to any timeout exception");
94 xbt_assert1(gras_os_time() - now < 1.5,
95 "gras_msg_handle(1) needs more than 1.5 sec to answer (%.4fsec)",
96 gras_os_time() - now);
97 xbt_assert1(gras_os_time() - now >= 1.0,
98 "gras_msg_handle(1) answers in less than one second (%.4fsec)",
99 gras_os_time() - now);
100 XBT_INFO("gras_msg_handle(1) works as expected (delayed timeout)");
103 /* Send an hello to the client to unlock it */
104 XBT_INFO("Unlock pal");
105 gras_msg_send(pal, "hello", NULL);
107 /* Frees the allocated resources, and shut GRAS down */
108 gras_socket_close(me);
109 gras_socket_close(pal);
114 int client(int argc, char *argv[])
116 gras_socket_t me = NULL, pal = NULL;
124 gras_init(&argc, argv);
125 xbt_assert0(argc == 3, "Usage: client <myport> <server>");
126 myport = atoi(argv[1]);
129 gras_msgtype_declare("hello", NULL);
130 gras_cb_register("hello", &server_cb_hello_handler);
132 XBT_INFO("Launch client (port=%d)", myport);
134 me = gras_socket_server(myport);
136 RETHROW0("Unable to establish a server socket: %s");
138 gras_os_sleep(1); /* Wait for pal to startup */
140 pal = gras_socket_client_from_string(palstr);
142 RETHROW1("Unable to establish a socket to %s: %s", palstr);
144 XBT_INFO("Initialization done.");
146 /* Launch handle(-1). Lock until message from server expected */
151 RETHROW0("No exception expected during handle(-1), but got %s");
153 XBT_INFO("gras_msg_handle(-1) works as expected (locked)");
155 /* Frees the allocated resources, and shut GRAS down */
156 gras_socket_close(me);
157 gras_socket_close(pal);