Skip to content

Commit a0049ff

Browse files
Wait until data is ready to read in manager_tests. (#13)
* Wait until data is ready to read in manager_tests. * remove race conditions from plasma manager test and make CHECK and CHECKM print a backgrace
1 parent e631998 commit a0049ff

File tree

2 files changed

+25
-13
lines changed

2 files changed

+25
-13
lines changed

src/common/common.h

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
#include <string.h>
77
#include <errno.h>
88
#include <inttypes.h>
9+
#include <execinfo.h>
910

1011
#ifndef RAY_COMMON_DEBUG
1112
#define LOG_DEBUG(M, ...)
@@ -21,21 +22,18 @@
2122
#define LOG_INFO(M, ...) \
2223
fprintf(stderr, "[INFO] (%s:%d) " M "\n", __FILE__, __LINE__, ##__VA_ARGS__)
2324

24-
#define CHECK(COND) \
25-
do { \
26-
if (!(COND)) { \
27-
LOG_ERR("Check failure: %s", #COND); \
28-
exit(-1); \
29-
} \
25+
#define CHECKM(COND, M, ...) \
26+
do { \
27+
if (!(COND)) { \
28+
LOG_ERR("Check failure: %s \n" M, #COND, ##__VA_ARGS__); \
29+
void *buffer[255]; \
30+
const int calls = backtrace(buffer, sizeof(buffer) / sizeof(void *)); \
31+
backtrace_symbols_fd(buffer, calls, 1); \
32+
exit(-1); \
33+
} \
3034
} while (0);
3135

32-
#define CHECKM(COND, M, ...) \
33-
do { \
34-
if (!(COND)) { \
35-
LOG_ERR("Check failure: %s \n" M, #COND, ##__VA_ARGS__); \
36-
exit(-1); \
37-
} \
38-
} while (0);
36+
#define CHECK(COND) CHECKM(COND, "")
3937

4038
/** This macro indicates that this pointer owns the data it is pointing to
4139
* and is responsible for freeing it. */

src/plasma/test/manager_tests.c

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
#include <assert.h>
44
#include <unistd.h>
5+
#include <poll.h>
56
#include <sys/types.h>
67
#include <sys/socket.h>
78

@@ -21,6 +22,14 @@ const char *store_socket_name = "/tmp/store12345";
2122
const char *manager_socket_name = "/tmp/manager12345";
2223
object_id oid;
2324

25+
void wait_for_pollin(int fd) {
26+
struct pollfd poll_list[1];
27+
poll_list[0].fd = fd;
28+
poll_list[0].events = POLLIN;
29+
int retval = poll(poll_list, (unsigned long) 1, -1);
30+
CHECK(retval > 0);
31+
}
32+
2433
int test_done_handler(event_loop *loop, timer_id id, void *context) {
2534
event_loop_stop(loop);
2635
return AE_NOMORE;
@@ -59,6 +68,7 @@ plasma_mock *init_plasma_mock(int port, plasma_mock *remote_mock) {
5968
if (remote_mock != NULL) {
6069
mock->write_conn =
6170
get_manager_connection(remote_mock->state, manager_addr, port);
71+
wait_for_pollin(mock->manager_remote_fd);
6272
mock->read_conn = new_client_connection(mock->loop, mock->manager_remote_fd,
6373
mock->state, 0);
6474
} else {
@@ -68,6 +78,7 @@ plasma_mock *init_plasma_mock(int port, plasma_mock *remote_mock) {
6878
/* Connect a new client to the local plasma manager and mock a request to an
6979
* object. */
7080
mock->plasma_conn = plasma_connect(store_socket_name, manager_socket_name);
81+
wait_for_pollin(mock->manager_local_fd);
7182
mock->client_conn =
7283
new_client_connection(mock->loop, mock->manager_local_fd, mock->state, 0);
7384
return mock;
@@ -229,6 +240,9 @@ TEST read_write_object_chunk_test(void) {
229240
* - Check that the data matches.
230241
*/
231242
write_object_chunk(remote_mock->write_conn, &remote_buf);
243+
/* Wait until the data is ready to be read. */
244+
wait_for_pollin(get_client_sock(remote_mock->read_conn));
245+
/* Read the data. */
232246
int done = read_object_chunk(remote_mock->read_conn, &local_buf);
233247
ASSERT(done);
234248
ASSERT_EQ(memcmp(remote_buf.data, local_buf.data, data_size), 0);

0 commit comments

Comments
 (0)