- Just allocate a small buffer instead of huge buffer
---
src/mds/apitest/mdstipc_api.c | 119 +++++++++++++++-------------------
1 file changed, 53 insertions(+), 66 deletions(-)
diff --git a/src/mds/apitest/mdstipc_api.c b/src/mds/apitest/mdstipc_api.c
index 805728464..f667d7385 100644
--- a/src/mds/apitest/mdstipc_api.c
+++ b/src/mds/apitest/mdstipc_api.c
@@ -13105,10 +13105,14 @@ void tet_create_default_PWE_VDEST_tp()
test_validate(FAIL, 0);
}
-void tet_sender(char *send_buff, uint32_t buff_len, int msg_count)
+void tet_sender(uint32_t msg_count, uint32_t msg_size)
{
int live = 100; // sender live max 100s
TET_MDS_MSG *mesg;
+ if (msg_size > TET_MSG_SIZE_MIN) {
+ printf("\nSender: msg_size > TET_MSG_SIZE_MIN\n");
+ exit(1);
+ }
mesg = (TET_MDS_MSG *)malloc(sizeof(TET_MDS_MSG));
memset(mesg, 0, sizeof(TET_MDS_MSG));
@@ -13134,7 +13138,7 @@ void tet_sender(char *send_buff, uint32_t buff_len, int msg_count)
exit(1);
}
- while(!gl_tet_adest.svc[0].svcevt[0].dest && live-- > 0) {
+ while (!gl_tet_adest.svc[0].svcevt[0].dest && live-- > 0) {
printf("\nSender is waiting for receiver UP\n");
sleep(1);
}
@@ -13147,11 +13151,11 @@ void tet_sender(char *send_buff, uint32_t buff_len,
int msg_count)
// otherwise, receiver won't detect loss message
sleep(1);
- uint32_t offset = 0;
- uint32_t msg_len = buff_len / msg_count;
- for (int i = 1; i <= msg_count; i++) {
- memcpy(mesg->send_data, &send_buff[offset], msg_len);
- mesg->send_len = msg_len;
+ for (uint32_t i = 1; i <= msg_count; i++) {
+ /* to verify received correct order */
+ memset(mesg->send_data, 'X', msg_size);
+ sprintf(mesg->send_data, "%u", i);
+ mesg->send_len = msg_size;
if (mds_just_send(gl_tet_adest.mds_pwe1_hdl,
NCSMDS_SVC_ID_INTERNAL_MIN,
NCSMDS_SVC_ID_EXTERNAL_MIN,
@@ -13163,23 +13167,25 @@ void tet_sender(char *send_buff, uint32_t buff_len,
int msg_count)
} else {
printf("\nSender SENT message %d successfully\n", i);
}
- offset += msg_len;
}
free(mesg);
- while(live-- > 0) {
+ while (live-- > 0) {
// Keep sender alive for retransmission
sleep(1);
}
}
-bool tet_receiver(char *expected_buff, uint32_t buff_len, int msg_count)
+bool tet_receiver(uint32_t msg_count, uint32_t msg_size)
{
- int ret = 1;
+ if (msg_size > TET_MSG_SIZE_MIN) {
+ printf("\nReceiver: msg_size > TET_MSG_SIZE_MIN\n");
+ return 1;
+ }
printf("\nStarted Receiver (pid:%d) svc_id=%d\n",
(int)getpid(), NCSMDS_SVC_ID_EXTERNAL_MIN);
if (adest_get_handle() != NCSCC_RC_SUCCESS) {
printf("\nReceiver FAIL to get adest handle\n");
- return ret;
+ return 1;
}
sleep(1); //Let sender subscribe before receiver install
@@ -13197,14 +13203,13 @@ bool tet_receiver(char *expected_buff, uint32_t
buff_len, int msg_count)
exit(1);
}
- char *received_buff = malloc(buff_len);
- memset(received_buff, 0, buff_len);
- uint32_t offset = 0;
struct pollfd sel;
- int counter = 0;
+ uint32_t counter = 0;
+ char *expected_buff = malloc(msg_size);
+ memset(expected_buff, 'X', msg_size);
sel.fd = m_GET_FD_FROM_SEL_OBJ(gl_tet_adest.svc[0].sel_obj);
sel.events = POLLIN;
- while(counter < msg_count) {
+ while (counter < msg_count) {
int ret = osaf_poll(&sel, 1, 10000);
if (ret > 0) {
gl_rcvdmsginfo.msg = NULL;
@@ -13214,11 +13219,18 @@ bool tet_receiver(char *expected_buff, uint32_t
buff_len, int msg_count)
printf("\nReceiver FAIL to retrieve message\n");
break;
}
- TET_MDS_MSG *msg = (TET_MDS_MSG*)gl_rcvdmsginfo.msg;
+ TET_MDS_MSG *msg = (TET_MDS_MSG *)gl_rcvdmsginfo.msg;
if (msg != NULL) {
- memcpy(&received_buff[offset],msg->recvd_data,
msg->recvd_len);
- offset += msg->recvd_len;
counter++;
+ sprintf(expected_buff, "%u", counter);
+ if (memcmp(msg->recvd_data,
+ expected_buff, msg_size) != 0) {
+ printf("\nReceived incorrect
message\n");
+ free(expected_buff);
+ free(msg);
+ return 1;
+ }
+ free(msg);
}
} else {
printf("\nReceiver got %d messages\n", counter);
@@ -13227,58 +13239,42 @@ bool tet_receiver(char *expected_buff, uint32_t
buff_len, int msg_count)
}
}
- printf("\nReceiver verify received buffer is same as expected\n");
- if (offset == buff_len) {
- if (memcmp(received_buff, expected_buff, buff_len) != 0) {
- printf("\nReceiver: Received buffer is not as
expected\n");
- printf("\nReceiver: Dump buffer to /var/log/opensaf/
\n");
- FILE *fp =
fopen("/var/log/opensaf/mdstest_received_buff","wb");
- fwrite(received_buff, sizeof(char), buff_len, fp);
- fclose(fp);
- fp = fopen("/var/log/opensaf/mdstest_expect_buff","wb");
- fwrite(expected_buff, sizeof(char), buff_len, fp);
- fclose(fp);
- } else {
- ret = 0;
- }
- } else {
- printf("\nReceiver: Total received length=%d differ expected
%d\n", offset, buff_len);
+ printf("\nReceiver verify number of received messages\n");
+ if (counter != msg_count) {
+ printf("\nReceiver: Total received msg=%d"
+ " differ expected %d\n", counter, msg_count);
+ free(expected_buff);
+ return 1;
}
- free(received_buff);
+
printf("\nEnd Receiver (pid:%d) svc_id=%d\n",
(int)getpid(), NCSMDS_SVC_ID_EXTERNAL_MIN);
- return ret;
+ free(expected_buff);
+ return 0;
}
void tet_overload_tp_1(void)
{
int pid = 0;
int FAIL = 0;
- uint32_t buff_len = 100000000;
- int msg_count = 2000;
- int msg_size = buff_len/msg_count;
- char *buff = malloc(buff_len);
-
- for (unsigned int i = 0; i < msg_count; i++) {
- /* to verify received correct order */
- memset(buff+(i*msg_size), 'X', msg_size);
- sprintf(buff+(i*msg_size), "%u", i+1);
- }
+ uint32_t msg_count = 2000;
+ uint32_t msg_size = 50000;
- printf("\nTest Case 1: Receiver wait for drop normal message retransmit and receive all messages in order\n");
+ printf("\nTest Case 1: Receiver wait for drop normal message"
+ " retransmit and receive all messages in order\n");
/*--------------------------------------------------------------------*/
pid = fork();
if (pid == 0) {
/* child as sender */
setenv("MDS_TIPC_FCTRL_ENABLED", "1", 1);
mds_startup();
- tet_sender(buff, buff_len, msg_count);
+ tet_sender(msg_count, msg_size);
mds_shutdown();
} else if (pid > 0) {
/* parent as receiver */
setenv("MDS_TIPC_FCTRL_ENABLED", "1", 1);
mds_startup();
- FAIL = tet_receiver(buff, buff_len, msg_count);
+ FAIL = tet_receiver(msg_count, msg_size);
printf("\nReceiver finish, kill Sender\n");
kill(pid, SIGKILL);
mds_shutdown();
@@ -13288,7 +13284,6 @@ void tet_overload_tp_1(void)
FAIL = 1;
}
- free(buff);
test_validate(FAIL, 0);
}
@@ -13296,31 +13291,24 @@ void tet_overload_tp_2(void)
{
int pid = 0;
int FAIL = 0;
- uint32_t buff_len = 100000000;
- int msg_count = 1000;
- int msg_size = buff_len/msg_count;
- char *buff = malloc(buff_len);
-
- for (unsigned int i = 0; i < msg_count; i++) {
- /* to verify received correct order */
- memset(buff+(i*msg_size), 'X', msg_size);
- sprintf(buff+(i*msg_size), "%u", i+1);
- }
+ uint32_t msg_count = 1000;
+ uint32_t msg_size = 100000;
- printf("\nTest Case 2: Receiver wait for drop fragment message retransmit and receive all messages in order\n");
+ printf("\nTest Case 2: Receiver wait for drop fragment message"
+ " retransmit and receive all messages in order\n");
/*--------------------------------------------------------------------*/
pid = fork();
if (pid == 0) {
/* child as sender */
setenv("MDS_TIPC_FCTRL_ENABLED", "1", 1);
mds_startup();
- tet_sender(buff, buff_len, msg_count);
+ tet_sender(msg_count, msg_size);
mds_shutdown();
} else if (pid > 0) {
/* parent as receiver */
setenv("MDS_TIPC_FCTRL_ENABLED", "1", 1);
mds_startup();
- FAIL = tet_receiver(buff, buff_len, msg_count);
+ FAIL = tet_receiver(msg_count, msg_size);
kill(pid, SIGKILL);
mds_shutdown();
} else {
@@ -13329,7 +13317,6 @@ void tet_overload_tp_2(void)
FAIL = 1;
}
- free(buff);
test_validate(FAIL, 0);
}