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
This commit is contained in:
Robert Nishihara
2016-10-29 19:25:43 -07:00
committed by GitHub
parent e6319986ec
commit a0049ffa48
2 changed files with 25 additions and 13 deletions
+14
View File
@@ -2,6 +2,7 @@
#include <assert.h>
#include <unistd.h>
#include <poll.h>
#include <sys/types.h>
#include <sys/socket.h>
@@ -21,6 +22,14 @@ const char *store_socket_name = "/tmp/store12345";
const char *manager_socket_name = "/tmp/manager12345";
object_id oid;
void wait_for_pollin(int fd) {
struct pollfd poll_list[1];
poll_list[0].fd = fd;
poll_list[0].events = POLLIN;
int retval = poll(poll_list, (unsigned long) 1, -1);
CHECK(retval > 0);
}
int test_done_handler(event_loop *loop, timer_id id, void *context) {
event_loop_stop(loop);
return AE_NOMORE;
@@ -59,6 +68,7 @@ plasma_mock *init_plasma_mock(int port, plasma_mock *remote_mock) {
if (remote_mock != NULL) {
mock->write_conn =
get_manager_connection(remote_mock->state, manager_addr, port);
wait_for_pollin(mock->manager_remote_fd);
mock->read_conn = new_client_connection(mock->loop, mock->manager_remote_fd,
mock->state, 0);
} else {
@@ -68,6 +78,7 @@ plasma_mock *init_plasma_mock(int port, plasma_mock *remote_mock) {
/* Connect a new client to the local plasma manager and mock a request to an
* object. */
mock->plasma_conn = plasma_connect(store_socket_name, manager_socket_name);
wait_for_pollin(mock->manager_local_fd);
mock->client_conn =
new_client_connection(mock->loop, mock->manager_local_fd, mock->state, 0);
return mock;
@@ -229,6 +240,9 @@ TEST read_write_object_chunk_test(void) {
* - Check that the data matches.
*/
write_object_chunk(remote_mock->write_conn, &remote_buf);
/* Wait until the data is ready to be read. */
wait_for_pollin(get_client_sock(remote_mock->read_conn));
/* Read the data. */
int done = read_object_chunk(remote_mock->read_conn, &local_buf);
ASSERT(done);
ASSERT_EQ(memcmp(remote_buf.data, local_buf.data, data_size), 0);