mdstest for overload - 2 senders overload one receivers - one sender overloads 2 receivers
mdstest for SNA (Serial Number Arithmetic) - without overload, mds sender gradually sends more than 65535 messages and receivers should receive them all - with overload, mds sender sends a burst of greater than 65535 messages and receivers should receive them all mdstest for #1960 backward compatibility, in order to test the txprob timer - sender enables, receiver disables - sender disables, receiver enables --- src/mds/apitest/mdstipc.h | 6 + src/mds/apitest/mdstipc_api.c | 743 +++++++++++++++++++++++++--------- 2 files changed, 553 insertions(+), 196 deletions(-) diff --git a/src/mds/apitest/mdstipc.h b/src/mds/apitest/mdstipc.h index 2bd44b4fa..5fd7b9c6e 100644 --- a/src/mds/apitest/mdstipc.h +++ b/src/mds/apitest/mdstipc.h @@ -145,6 +145,12 @@ typedef struct tet_mds_recvd_msg_info { uint16_t len; } TET_MDS_RECVD_MSG_INFO; +typedef struct COUNTER { + MDS_DEST fr_dest; + uint32_t msg_count; + struct COUNTER *next; +} COUNTER; + /********************* GLOBAL variables ********************/ TET_ADEST gl_tet_adest; TET_VDEST diff --git a/src/mds/apitest/mdstipc_api.c b/src/mds/apitest/mdstipc_api.c index f667d7385..4f6a4e14c 100644 --- a/src/mds/apitest/mdstipc_api.c +++ b/src/mds/apitest/mdstipc_api.c @@ -31,6 +31,7 @@ #define MSG_SIZE MDS_DIRECT_BUF_MAXSIZE static MDS_CLIENT_MSG_FORMAT_VER gl_set_msg_fmt_ver; +COUNTER *gl_head_counters = NULL; MDS_SVC_ID svc_ids[3] = {2006, 2007, 2008}; @@ -13105,219 +13106,543 @@ void tet_create_default_PWE_VDEST_tp() test_validate(FAIL, 0); } -void tet_sender(uint32_t msg_count, uint32_t msg_size) +static void reset_counters() { - 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)); + COUNTER *tmp = gl_head_counters; + while(tmp != NULL) { + gl_head_counters = tmp->next; + free(tmp); + tmp = gl_head_counters; + } +} - printf("\nStarted Sender (pid:%d) svc_id=%d\n", - (int)getpid(), NCSMDS_SVC_ID_INTERNAL_MIN); - if (adest_get_handle() != NCSCC_RC_SUCCESS) { - printf("\n: Sender FAIL to get adest handle\n"); - exit(1); - } +static uint32_t increase_counters(MDS_DEST dest) +{ + COUNTER *tmp = gl_head_counters; + while(tmp != NULL) { + if (tmp->fr_dest == dest) { + tmp->msg_count++; + printf("\nGot %d message from %x\n", + tmp->msg_count, dest); + return tmp->msg_count; + } + tmp = tmp->next; + } + if (tmp == NULL) { + COUNTER *new = (COUNTER *)malloc(sizeof(COUNTER)); + new->fr_dest = dest; + new->msg_count = 1; + new->next = gl_head_counters; + gl_head_counters = new; + printf("\nGot %d message from %x\n", + new->msg_count, dest); + return new->msg_count; + } + return 0; +} - if (mds_service_install(gl_tet_adest.mds_pwe1_hdl, - NCSMDS_SVC_ID_INTERNAL_MIN, 1, - NCSMDS_SCOPE_NONE, false, false) != NCSCC_RC_SUCCESS) { - printf("\nSender FAIL to install the service\n"); - exit(1); - } +static bool verify_counters(uint32_t expect_num) +{ + COUNTER *tmp = gl_head_counters; + if (tmp == NULL) { + printf("\nNo message\n"); + return false; + } + while(tmp != NULL) { + if (tmp->msg_count != expect_num) { + printf("\nGot %d message from %x\n", + tmp->msg_count, tmp->fr_dest); + return false; + } + tmp = tmp->next; + } + return true; +} - MDS_SVC_ID svcids[] = {NCSMDS_SVC_ID_EXTERNAL_MIN}; - if (mds_service_subscribe( - gl_tet_adest.mds_pwe1_hdl, NCSMDS_SVC_ID_INTERNAL_MIN, - NCSMDS_SCOPE_INTRANODE, 1, svcids) != NCSCC_RC_SUCCESS) { - printf("\nSender FAIL to subscribe receiver\n"); - exit(1); - } +void tet_sender(MDS_SVC_ID svc_id, uint32_t msg_count, uint32_t msg_size, + int svc_num, MDS_SVC_ID to_svcids[], + uint32_t live_time) +{ + 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)); + + printf("\nStarted Sender (pid:%d) svc_id=%d\n", + (int)getpid(), svc_id); + if (adest_get_handle() != NCSCC_RC_SUCCESS) { + printf("\n: Sender FAIL to get adest handle\n"); + exit(1); + } - while (!gl_tet_adest.svc[0].svcevt[0].dest && live-- > 0) { - printf("\nSender is waiting for receiver UP\n"); - sleep(1); - } - printf("\nSender got last event=%d of svc_id=%d dest=<%llx>\n", - gl_tet_adest.svc[0].svcevt[0].event, - gl_tet_adest.svc[0].svcevt[0].svc_id, - gl_tet_adest.svc[0].svcevt[0].dest); + if (mds_service_install(gl_tet_adest.mds_pwe1_hdl, + svc_id, 1, + NCSMDS_SCOPE_NONE, false, false) != NCSCC_RC_SUCCESS) { + printf("\nSender FAIL to install the service\n"); + exit(1); + } - // wait for receiver subscribe sender - // otherwise, receiver won't detect loss message - sleep(1); + if (mds_service_subscribe( + gl_tet_adest.mds_pwe1_hdl, svc_id, + NCSMDS_SCOPE_INTRANODE, + svc_num, to_svcids) != NCSCC_RC_SUCCESS) { + printf("\nSender FAIL to subscribe receiver\n"); + exit(1); + } - 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, - gl_tet_adest.svc[0].svcevt[0].dest, - MDS_SEND_PRIORITY_HIGH, - mesg) != NCSCC_RC_SUCCESS) { - printf("\nSender FAIL send message\n"); - exit(1); - } else { - printf("\nSender SENT message %d successfully\n", i); - } - } - free(mesg); - while (live-- > 0) { - // Keep sender alive for retransmission - sleep(1); - } + while (live_time-- > 0) { + int count = 0; + printf("\nSender is waiting for receiver UP\n"); + for (int i = 0; i < gl_tet_adest.svc[0].subscr_count; i++) { + if (gl_tet_adest.svc[0].svcevt[i].dest) { + count++; + } + } + if (count == svc_num) { + printf("\nAll %d receivers are UP\n", count); + break; + } + sleep(1); + } + + // wait for receiver subscribe sender + // otherwise, receiver won't detect loss message + sleep(5); + + 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; + for (int j = 0; j < gl_tet_adest.svc[0].subscr_count; j++) { + if (mds_just_send(gl_tet_adest.mds_pwe1_hdl, + svc_id, + to_svcids[j], + gl_tet_adest.svc[0].svcevt[j].dest, + MDS_SEND_PRIORITY_HIGH, + mesg) != NCSCC_RC_SUCCESS) { + printf("\nSender FAIL send message\n"); + exit(1); + } else { + printf("\nSender SENT message %d successfully\n", i); + } + } + } + free(mesg); + while (live_time-- > 0) { + // Keep sender alive for retransmission + sleep(1); + } } -bool tet_receiver(uint32_t msg_count, uint32_t msg_size) +int tet_receiver(MDS_SVC_ID svc_id, uint32_t msg_count, + uint32_t msg_size, int svc_num, MDS_SVC_ID fr_svcids[]) { - 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 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(), svc_id); + if (adest_get_handle() != NCSCC_RC_SUCCESS) { + printf("\nReceiver FAIL to get adest handle\n"); + return 1; + } - sleep(1); //Let sender subscribe before receiver install - if (mds_service_install(gl_tet_adest.mds_pwe1_hdl, - NCSMDS_SVC_ID_EXTERNAL_MIN, 1, - NCSMDS_SCOPE_NONE, true, false) != NCSCC_RC_SUCCESS) { - printf("\nReceiver FAIL to install the service\n"); - } - - MDS_SVC_ID svcids[] = {NCSMDS_SVC_ID_INTERNAL_MIN}; - if (mds_service_subscribe( - gl_tet_adest.mds_pwe1_hdl, NCSMDS_SVC_ID_EXTERNAL_MIN, - NCSMDS_SCOPE_INTRANODE, 1, svcids) != NCSCC_RC_SUCCESS) { - printf("\nReceiver FAIL to subscribe sender\n"); - exit(1); - } - - struct pollfd sel; - 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) { - int ret = osaf_poll(&sel, 1, 10000); - if (ret > 0) { - gl_rcvdmsginfo.msg = NULL; - if (mds_service_retrieve(gl_tet_adest.mds_pwe1_hdl, - NCSMDS_SVC_ID_EXTERNAL_MIN, - SA_DISPATCH_ONE) != NCSCC_RC_SUCCESS) { - printf("\nReceiver FAIL to retrieve message\n"); - break; - } - TET_MDS_MSG *msg = (TET_MDS_MSG *)gl_rcvdmsginfo.msg; - if (msg != NULL) { - 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); - printf("\nReceiver poll FAIL\n"); - break; - } - } + sleep(1); //Let sender subscribe before receiver install + if (mds_service_install(gl_tet_adest.mds_pwe1_hdl, + svc_id, 1, + NCSMDS_SCOPE_NONE, true, false) != NCSCC_RC_SUCCESS) { + printf("\nReceiver FAIL to install the service\n"); + } - 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; - } + if (mds_service_subscribe( + gl_tet_adest.mds_pwe1_hdl, svc_id, + NCSMDS_SCOPE_INTRANODE, + svc_num, fr_svcids) != NCSCC_RC_SUCCESS) { + printf("\nReceiver FAIL to subscribe sender\n"); + exit(1); + } + + struct pollfd sel; + uint32_t counter = 0; + reset_counters(); + char *expected_buff = malloc(msg_size); + sel.fd = m_GET_FD_FROM_SEL_OBJ(gl_tet_adest.svc[0].sel_obj); + sel.events = POLLIN; + while (true) { + int ret = osaf_poll(&sel, 1, 10000); + if (ret > 0) { + gl_rcvdmsginfo.msg = NULL; + if (mds_service_retrieve(gl_tet_adest.mds_pwe1_hdl, + svc_id, + SA_DISPATCH_ONE) != NCSCC_RC_SUCCESS) { + printf("\nReceiver FAIL to retrieve message\n"); + break; + } + TET_MDS_MSG *msg = (TET_MDS_MSG *)gl_rcvdmsginfo.msg; + if (msg != NULL) { + counter = increase_counters(gl_rcvdmsginfo.fr_dest); + memset(expected_buff, 'X', msg_size); + sprintf(expected_buff, "%u", counter); + if (memcmp(msg->recvd_data, + expected_buff, msg_size) != 0) { + printf("\nExpect %s but received %s from %x\n", + expected_buff, + msg->recvd_data, + gl_rcvdmsginfo.fr_dest); + free(expected_buff); + free(msg); + reset_counters(); + return 1; + } + free(msg); + } + } else { + break; + } + } + + printf("\nReceiver verify number of received messages\n"); + if (!verify_counters(msg_count)) { + printf("\nReceiver: Not get enough %d messages\n", msg_count); + free(expected_buff); + reset_counters(); + return 1; + } - printf("\nEnd Receiver (pid:%d) svc_id=%d\n", - (int)getpid(), NCSMDS_SVC_ID_EXTERNAL_MIN); - free(expected_buff); - return 0; + printf("\nEnd Receiver (pid:%d) svc_id=%d\n", + (int)getpid(), svc_id); + free(expected_buff); + reset_counters(); + return 0; } void tet_overload_tp_1(void) { - int pid = 0; - int FAIL = 0; - 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"); - /*--------------------------------------------------------------------*/ - pid = fork(); - if (pid == 0) { - /* child as sender */ - setenv("MDS_TIPC_FCTRL_ENABLED", "1", 1); - mds_startup(); - 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(msg_count, msg_size); - printf("\nReceiver finish, kill Sender\n"); - kill(pid, SIGKILL); - mds_shutdown(); - } else { - /* fork() error */ - printf("\nFAIL to fork()\n"); - FAIL = 1; - } + int FAIL = 1; + uint32_t msg_count = 2000; + uint32_t msg_size = 50000; //bytes + + printf("\nTest Case 1: Receiver wait for drop normal message" + " retransmit and receive all messages in order\n"); + /*--------------------------------------------------------------------*/ + pid_t pid = fork(); + if (pid == 0) { + /* child as sender */ + setenv("MDS_TIPC_FCTRL_ENABLED", "1", 1); + mds_startup(); + MDS_SVC_ID to_svcids[] = {NCSMDS_SVC_ID_EXTERNAL_MIN}; + MDS_SVC_ID svc_id = NCSMDS_SVC_ID_INTERNAL_MIN; + uint32_t live_time = 100; //seconds + tet_sender(svc_id, msg_count, msg_size, 1, to_svcids, live_time); + mds_shutdown(); + } else if (pid > 0) { + /* parent as receiver */ + setenv("MDS_TIPC_FCTRL_ENABLED", "1", 1); + mds_startup(); + MDS_SVC_ID fr_svcids[] = {NCSMDS_SVC_ID_INTERNAL_MIN}; + MDS_SVC_ID svc_id = NCSMDS_SVC_ID_EXTERNAL_MIN; + FAIL = tet_receiver(svc_id, msg_count, msg_size, 1, fr_svcids); + printf("\nReceiver finish, kill Sender\n"); + kill(pid, SIGKILL); + mds_shutdown(); + } else { + printf("\nFAIL to fork()\n"); + } - test_validate(FAIL, 0); + test_validate(FAIL, 0); } void tet_overload_tp_2(void) { - int pid = 0; - int FAIL = 0; - uint32_t msg_count = 1000; - uint32_t msg_size = 100000; + int FAIL = 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"); + /*--------------------------------------------------------------------*/ + pid_t pid = fork(); + if (pid == 0) { + /* child as sender */ + setenv("MDS_TIPC_FCTRL_ENABLED", "1", 1); + mds_startup(); + MDS_SVC_ID to_svcids[] = {NCSMDS_SVC_ID_EXTERNAL_MIN}; + MDS_SVC_ID svc_id = NCSMDS_SVC_ID_INTERNAL_MIN; + uint32_t live_time = 100; //seconds + tet_sender(svc_id, msg_count, msg_size, 1, to_svcids, live_time); + mds_shutdown(); + } else if (pid > 0) { + /* parent as receiver */ + setenv("MDS_TIPC_FCTRL_ENABLED", "1", 1); + mds_startup(); + MDS_SVC_ID fr_svcids[] = {NCSMDS_SVC_ID_INTERNAL_MIN}; + MDS_SVC_ID svc_id = NCSMDS_SVC_ID_EXTERNAL_MIN; + FAIL = tet_receiver(svc_id, msg_count, msg_size, 1, fr_svcids); + kill(pid, SIGKILL); + mds_shutdown(); + } else { + printf("\nFAIL to fork()\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(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(msg_count, msg_size); - kill(pid, SIGKILL); - mds_shutdown(); - } else { - /* fork() error */ - printf("\nFAIL to fork()\n"); - FAIL = 1; - } + test_validate(FAIL, 0); +} + +void tet_overload_tp_3(void) +{ + int FAIL = 1; + uint32_t msg_count = 2000; + uint32_t msg_size = 50000; + + printf("\nTest Case 3: One Receiver wait for drop normal message" + " retransmit and receive all messages in order from two senders\n"); + /*--------------------------------------------------------------------*/ + pid_t pid = fork(); + if (pid == 0) { + /* child as sender */ + pid = fork(); + if (pid == 0) { + FILE *fp = fopen("/tmp/mdstest.pid", "a"); + fprintf(fp, " %d", getpid()); + fclose(fp); + setenv("MDS_TIPC_FCTRL_ENABLED", "1", 1); + mds_startup(); + MDS_SVC_ID to_svcids[] = {NCSMDS_SVC_ID_EXTERNAL_MIN}; + MDS_SVC_ID svc_id = NCSMDS_SVC_ID_INTERNAL_MIN; + uint32_t live_time = 100; //seconds + tet_sender(svc_id, msg_count, msg_size, 1, to_svcids, live_time); + mds_shutdown(); + } else if (pid > 0) { + FILE *fp = fopen("/tmp/mdstest.pid", "a"); + fprintf(fp, " %d", getpid()); + fclose(fp); + setenv("MDS_TIPC_FCTRL_ENABLED", "1", 1); + mds_startup(); + MDS_SVC_ID to_svcids[] = {NCSMDS_SVC_ID_EXTERNAL_MIN}; + MDS_SVC_ID svc_id = NCSMDS_SVC_ID_INTERNAL_MIN+1; + uint32_t live_time = 100; //seconds + tet_sender(svc_id, msg_count, msg_size, 1, to_svcids, live_time); + mds_shutdown(); + } + } else if (pid > 0) { + /* parent as receiver */ + setenv("MDS_TIPC_FCTRL_ENABLED", "1", 1); + mds_startup(); + MDS_SVC_ID fr_svcids[] = { + NCSMDS_SVC_ID_INTERNAL_MIN, + NCSMDS_SVC_ID_INTERNAL_MIN+1}; + MDS_SVC_ID svc_id = NCSMDS_SVC_ID_EXTERNAL_MIN; + FAIL = tet_receiver(svc_id, msg_count, msg_size, 2, fr_svcids); + mds_shutdown(); + } else { + printf("\nFAIL to fork()\n"); + } + printf("\nkill mdstest processes rc: %d\n", + system("kill -9 $(cat /tmp/mdstest.pid); rm -f /tmp/mdstest.pid")); + test_validate(FAIL, 0); +} + +void tet_overload_tp_4(void) +{ + int FAIL = 1; + uint32_t msg_count = 2000; + uint32_t msg_size = 50000; + + printf("\nTest Case 4: Two Receivers wait for drop normal message" + " retransmit and receive all messages in order from one sender\n"); + /*--------------------------------------------------------------------*/ + pid_t pid = fork(); + if (pid == 0) { + /* child as sender */ + setenv("MDS_TIPC_FCTRL_ENABLED", "1", 1); + mds_startup(); + MDS_SVC_ID to_svcids[] = { + NCSMDS_SVC_ID_EXTERNAL_MIN, + NCSMDS_SVC_ID_EXTERNAL_MIN+1}; + MDS_SVC_ID svc_id = NCSMDS_SVC_ID_INTERNAL_MIN; + uint32_t live_time = 100; //seconds + tet_sender(svc_id, msg_count, msg_size, 2, to_svcids, live_time); + mds_shutdown(); + } else if (pid > 0) { + /* parent as receiver */ + pid_t pid2 = fork(); + if (pid2 == 0) { + setenv("MDS_TIPC_FCTRL_ENABLED", "1", 1); + mds_startup(); + MDS_SVC_ID fr_svcids[] = {NCSMDS_SVC_ID_INTERNAL_MIN}; + MDS_SVC_ID svc_id = NCSMDS_SVC_ID_EXTERNAL_MIN; + FAIL = tet_receiver(svc_id, msg_count, msg_size, 1, fr_svcids); + mds_shutdown(); + exit(FAIL); + } else if (pid2 > 0) { + setenv("MDS_TIPC_FCTRL_ENABLED", "1", 1); + mds_startup(); + MDS_SVC_ID fr_svcids[] = {NCSMDS_SVC_ID_INTERNAL_MIN}; + MDS_SVC_ID svc_id = NCSMDS_SVC_ID_EXTERNAL_MIN+1; + FAIL = tet_receiver(svc_id, msg_count, msg_size, 1, fr_svcids); + mds_shutdown(); + if (FAIL == 0) { + int status; + wait(&status); + if (!WIFEXITED(status) || (WEXITSTATUS(status) != 0)) { + printf("\nThe other receiver FAIL\n"); + FAIL = 1; + } + } + } else { + printf("\nFAIL to fork()\n"); + } + } else { + printf("\nFAIL to fork()\n"); + } + kill(pid, SIGKILL); + test_validate(FAIL, 0); +} + +void tet_mds_fctrl_compatibility_tp1(void) +{ + int FAIL = 1; + uint32_t msg_count = 100; + uint32_t msg_size = 50000; + + printf("\nTest Case 5: Sender enable MDS FCTRL but Receiver disable\n"); + /*--------------------------------------------------------------------*/ + pid_t pid = fork(); + if (pid == 0) { + /* child as sender */ + setenv("MDS_TIPC_FCTRL_ENABLED", "1", 1); + mds_startup(); + MDS_SVC_ID to_svcids[] = {NCSMDS_SVC_ID_EXTERNAL_MIN}; + MDS_SVC_ID svc_id = NCSMDS_SVC_ID_INTERNAL_MIN; + uint32_t live_time = 100; //seconds + tet_sender(svc_id, msg_count, msg_size, 1, to_svcids, live_time); + mds_shutdown(); + } else if (pid > 0) { + /* parent as receiver */ + mds_startup(); + MDS_SVC_ID fr_svcids[] = {NCSMDS_SVC_ID_INTERNAL_MIN}; + MDS_SVC_ID svc_id = NCSMDS_SVC_ID_EXTERNAL_MIN; + FAIL = tet_receiver(svc_id, msg_count, msg_size, 1, fr_svcids); + printf("\nReceiver finish, kill Sender\n"); + kill(pid, SIGKILL); + mds_shutdown(); + } else { + printf("\nFAIL to fork()\n"); + } - test_validate(FAIL, 0); + test_validate(FAIL, 0); +} + +void tet_mds_fctrl_compatibility_tp2(void) +{ + int FAIL = 1; + uint32_t msg_count = 100; + uint32_t msg_size = 50000; + + printf("\nTest Case 5: Sender diable MDS FCTRL but Receiver enable\n"); + /*--------------------------------------------------------------------*/ + pid_t pid = fork(); + if (pid == 0) { + /* child as sender */ + mds_startup(); + MDS_SVC_ID to_svcids[] = {NCSMDS_SVC_ID_EXTERNAL_MIN}; + MDS_SVC_ID svc_id = NCSMDS_SVC_ID_INTERNAL_MIN; + uint32_t live_time = 100; //seconds + tet_sender(svc_id, msg_count, msg_size, 1, to_svcids, live_time); + mds_shutdown(); + } else if (pid > 0) { + /* parent as receiver */ + setenv("MDS_TIPC_FCTRL_ENABLED", "1", 1); + mds_startup(); + MDS_SVC_ID fr_svcids[] = {NCSMDS_SVC_ID_INTERNAL_MIN}; + MDS_SVC_ID svc_id = NCSMDS_SVC_ID_EXTERNAL_MIN; + FAIL = tet_receiver(svc_id, msg_count, msg_size, 1, fr_svcids); + printf("\nReceiver finish, kill Sender\n"); + kill(pid, SIGKILL); + mds_shutdown(); + } else { + printf("\nFAIL to fork()\n"); + } + + test_validate(FAIL, 0); +} + +void tet_mds_fctrl_with_sna_tp1(void) +{ + int FAIL = 1; + uint32_t msg_count = 65535 + 1000; + uint32_t msg_size = 1000; + + printf("\nTest Case 7: sender gradually sends more than 65535" + " small messages (not OVERLOAD)" + " and receiver should receive them all\n"); + /*--------------------------------------------------------------------*/ + pid_t pid = fork(); + if (pid == 0) { + /* child as sender */ + setenv("MDS_TIPC_FCTRL_ENABLED", "1", 1); + mds_startup(); + MDS_SVC_ID to_svcids[] = {NCSMDS_SVC_ID_EXTERNAL_MIN}; + MDS_SVC_ID svc_id = NCSMDS_SVC_ID_INTERNAL_MIN; + uint32_t live_time = 0; //seconds + tet_sender(svc_id, msg_count, msg_size, 1, to_svcids, live_time); + mds_shutdown(); + } else if (pid > 0) { + /* parent as receiver */ + setenv("MDS_TIPC_FCTRL_ENABLED", "1", 1); + mds_startup(); + MDS_SVC_ID fr_svcids[] = {NCSMDS_SVC_ID_INTERNAL_MIN}; + MDS_SVC_ID svc_id = NCSMDS_SVC_ID_EXTERNAL_MIN; + FAIL = tet_receiver(svc_id, msg_count, msg_size, 1, fr_svcids); + printf("\nReceiver finish, kill Sender\n"); + kill(pid, SIGKILL); + mds_shutdown(); + } else { + printf("\nFAIL to fork()\n"); + } + + test_validate(FAIL, 0); +} + +void tet_mds_fctrl_with_sna_tp2(void) +{ + int FAIL = 1; + uint32_t msg_count = 65535 + 1000; + uint32_t msg_size = 50000; + + printf("\nTest Case 8: sender gradually sends more than 65535" + " big messages (OVERLOAD happens)" + " and receiver should receive them all\n"); + /*--------------------------------------------------------------------*/ + pid_t pid = fork(); + if (pid == 0) { + /* child as sender */ + setenv("MDS_TIPC_FCTRL_ENABLED", "1", 1); + mds_startup(); + MDS_SVC_ID to_svcids[] = {NCSMDS_SVC_ID_EXTERNAL_MIN}; + MDS_SVC_ID svc_id = NCSMDS_SVC_ID_INTERNAL_MIN; + uint32_t live_time = 1000; //seconds + tet_sender(svc_id, msg_count, msg_size, 1, to_svcids, live_time); + mds_shutdown(); + } else if (pid > 0) { + /* parent as receiver */ + setenv("MDS_TIPC_FCTRL_ENABLED", "1", 1); + mds_startup(); + MDS_SVC_ID fr_svcids[] = {NCSMDS_SVC_ID_INTERNAL_MIN}; + MDS_SVC_ID svc_id = NCSMDS_SVC_ID_EXTERNAL_MIN; + FAIL = tet_receiver(svc_id, msg_count, msg_size, 1, fr_svcids); + printf("\nReceiver finish, kill Sender\n"); + kill(pid, SIGKILL); + mds_shutdown(); + } else { + printf("\nFAIL to fork()\n"); + } + + test_validate(FAIL, 0); } void Print_return_status(uint32_t rs) @@ -14038,11 +14363,37 @@ __attribute__((constructor)) static void mdsTipcAPI_constructor(void) test_case_add(26, tet_create_default_PWE_VDEST_tp, "create_default_PWE_VDEST"); - test_suite_add(27, "MDS TIPC OVERLOAD Test"); - test_case_add( - 27, tet_overload_tp_1, - "Receiver wait for drop normal message retransmit and receive all messages in order"); - test_case_add( - 27, tet_overload_tp_2, - "Receiver wait for drop fragment message retransmit and receive all messages in order"); + test_suite_add(27, "MDS TIPC OVERLOAD Test"); + test_case_add( + 27, tet_overload_tp_1, + "Receiver wait for drop normal message retransmit" + " (OVERLOAD happens) and receive all messages in order"); + test_case_add( + 27, tet_overload_tp_2, + "Receiver wait for drop fragment message retransmit" + " (OVERLOAD happens) and receive all messages in order"); + test_case_add( + 27, tet_overload_tp_3, + "One Receiver can receive all messages" + " (OVERLOAD happens) from two senders"); + test_case_add( + 27, tet_overload_tp_4, + "Two Receivers can receive all messages" + " (OVERLOAD happens) from one sender"); + test_case_add( + 27, tet_mds_fctrl_compatibility_tp1, + "Sender enable MDS FCTRL but Receiver disable"); + test_case_add( + 27, tet_mds_fctrl_compatibility_tp2, + "Sender diable MDS FCTRL but Receiver enable"); + test_case_add( + 27, tet_mds_fctrl_with_sna_tp1, + "sender gradually sends more than 65535" + " small messages (not OVERLOAD)" + " and receiver should receive them all"); + test_case_add( + 27, tet_mds_fctrl_with_sna_tp2, + "sender gradually sends more than 65535" + " big messages (OVERLOAD happens)" + " and receiver should receive them all"); } -- 2.17.1 _______________________________________________ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel