From dfd3cee5cf5bfcffbe794fb3976fa35b27206686 Mon Sep 17 00:00:00 2001 From: David Vossel Date: Thu, 18 Jul 2013 18:50:12 -0500 Subject: [PATCH] Low: tests: Added test to verify sending ipc msg equal to max size succeeds --- tests/check_ipc.c | 49 +++++++++++++++++++++++++++++++++++------------ 1 file changed, 37 insertions(+), 12 deletions(-) diff --git a/tests/check_ipc.c b/tests/check_ipc.c index 4502481..9b2b91b 100644 --- a/tests/check_ipc.c +++ b/tests/check_ipc.c @@ -34,9 +34,23 @@ static const char *ipc_name = "ipc_test"; #define MAX_MSG_SIZE (8192*16) + +/* The size the giant msg's data field needs to be to make + * this the largests msg we can successfully send. */ +#define GIANT_MSG_DATA_SIZE MAX_MSG_SIZE - sizeof(struct qb_ipc_response_header) - 8 + static qb_ipcc_connection_t *conn; static enum qb_ipc_type ipc_type; +struct giant_event { + struct qb_ipc_response_header hdr __attribute__ ((aligned(8))); + char data[GIANT_MSG_DATA_SIZE] __attribute__ ((aligned(8))); + uint32_t sent_msgs __attribute__ ((aligned(8))); +} __attribute__ ((aligned(8))); + +static struct giant_event giant_event_recv; +static struct giant_event giant_event_send; + enum my_msg_ids { IPC_MSG_REQ_TX_RX, IPC_MSG_RES_TX_RX, @@ -174,10 +188,19 @@ s1_msg_process_fn(qb_ipcs_connection_t *c, res = qb_ipcs_response_send(c, &response, response.size); ck_assert_int_eq(res, sizeof(response)); - response.id=IPC_MSG_RES_STRESS_EVENT; + giant_event_send.hdr.error = 0; + giant_event_send.hdr.id = IPC_MSG_RES_STRESS_EVENT; for (m = 0; m < num_stress_events; m++) { - res = qb_ipcs_event_send(c, &response, - sizeof(response)); + size_t sent_len = sizeof(struct qb_ipc_response_header); + + if (((m+1) % 1000) == 0) { + qb_log(LOG_DEBUG, "SENT: %d stress events sent", m+1); + sent_len = sizeof(struct giant_event); + giant_event_send.sent_msgs = m + 1; + } + giant_event_send.hdr.size = sent_len; + + res = qb_ipcs_event_send(c, &giant_event_send, sent_len); if (res < 0) { if (res == -EAGAIN || res == -ENOBUFS) { /* yield to the receive process */ @@ -186,14 +209,10 @@ s1_msg_process_fn(qb_ipcs_connection_t *c, continue; } else { qb_perror(LOG_DEBUG, "sending stress events"); - ck_assert_int_eq(res, sizeof(response)); + ck_assert_int_eq(res, sent_len); } } - response.id++; - - if ((m % 1000) == 0) { - qb_log(LOG_DEBUG, "SENT: %d stress events sent", m); - } + giant_event_send.hdr.id++; } } else if (req_pt->id == IPC_MSG_REQ_SERVER_FAIL) { @@ -687,17 +706,23 @@ static int32_t count_stress_events(int32_t fd, int32_t revents, void *data) { qb_loop_t *cl = (qb_loop_t*)data; - struct qb_ipc_response_header res_header = { 0, }; int32_t res; - res = qb_ipcc_event_recv(conn, &res_header, - sizeof(struct qb_ipc_response_header), + res = qb_ipcc_event_recv(conn, &giant_event_recv, + sizeof(struct giant_event), -1); if (res > 0) { events_received++; if ((events_received % 1000) == 0) { qb_log(LOG_DEBUG, "RECV: %d stress events processed", events_received); + if (res != sizeof(struct giant_event)) { + qb_log(LOG_DEBUG, "Unexpected recv size, expected %d got %d", + res, sizeof(struct giant_event)); + } else if (giant_event_recv.sent_msgs != events_received) { + qb_log(LOG_DEBUG, "Server event mismatch. Server thinks we got %d msgs, but we only received %d", + giant_event_recv.sent_msgs, events_received); + } } } else if (res != -EAGAIN) { qb_perror(LOG_DEBUG, "count_stress_events");