- Add timeout for MDS_SENDTYPE_SND message. - Add test cases. --- src/mds/apitest/mdstipc.h | 6 +- src/mds/apitest/mdstipc_api.c | 347 ++++++++++++++++++++++++++++++--- src/mds/apitest/mdstipc_conf.c | 11 +- src/mds/mds_c_sndrcv.c | 29 ++- src/mds/mds_papi.c | 1 + src/mds/mds_papi.h | 1 + 6 files changed, 364 insertions(+), 31 deletions(-)
diff --git a/src/mds/apitest/mdstipc.h b/src/mds/apitest/mdstipc.h index b84c303e6..0cac1f31c 100644 --- a/src/mds/apitest/mdstipc.h +++ b/src/mds/apitest/mdstipc.h @@ -229,7 +229,7 @@ uint32_t mds_send_message(MDS_HDL, MDS_SVC_ID, NCSCONTEXT, MDS_SVC_ID, MDS_SYNC_SND_CTXT, NCSMDS_SCOPE_TYPE, V_DEST_QA); /* Non Redundant */ -uint32_t mds_just_send(MDS_HDL, MDS_SVC_ID, MDS_SVC_ID, MDS_DEST, +uint32_t mds_just_send(MDS_HDL, MDS_SVC_ID, MDS_SVC_ID, MDS_DEST, int64_t, MDS_SEND_PRIORITY_TYPE, TET_MDS_MSG *); uint32_t mds_send_get_ack(MDS_HDL, MDS_SVC_ID, MDS_SVC_ID, MDS_DEST, int64_t, MDS_SEND_PRIORITY_TYPE, TET_MDS_MSG *); @@ -322,6 +322,8 @@ void tet_just_send_tp_11(void); void tet_just_send_tp_12(void); void tet_just_send_tp_13(void); void tet_just_send_tp_14(void); +void tet_just_send_tp_15(void); +void tet_just_send_tp_16(void); void tet_send_ack_tp_1(void); void tet_send_ack_tp_2(void); void tet_send_ack_tp_3(void); @@ -384,6 +386,8 @@ void tet_direct_just_send_tp_12(void); void tet_direct_just_send_tp_13(void); void tet_direct_just_send_tp_14(void); void tet_direct_just_send_tp_15(void); +void tet_direct_just_send_tp_16(void); +void tet_direct_just_send_tp_17(void); void tet_direct_send_all_tp_1(void); void tet_direct_send_all_tp_2(void); void tet_direct_send_all_tp_3(void); diff --git a/src/mds/apitest/mdstipc_api.c b/src/mds/apitest/mdstipc_api.c index 581ea53f3..9ba5f2423 100644 --- a/src/mds/apitest/mdstipc_api.c +++ b/src/mds/apitest/mdstipc_api.c @@ -2874,7 +2874,7 @@ void tet_just_send_tp_1() printf("\nAction: Send LOW\n"); if (mds_just_send( gl_tet_adest.mds_pwe1_hdl, NCSMDS_SVC_ID_EXTERNAL_MIN, - NCSMDS_SVC_ID_EXTERNAL_MIN, gl_tet_vdest[1].vdest, + NCSMDS_SVC_ID_EXTERNAL_MIN, gl_tet_vdest[1].vdest, 0, MDS_SEND_PRIORITY_LOW, mesg) != NCSCC_RC_SUCCESS) { printf("\nFail\n"); FAIL = 1; @@ -2885,7 +2885,7 @@ void tet_just_send_tp_1() printf("\nAction: Send MEDIUM\n"); if (mds_just_send( gl_tet_adest.mds_pwe1_hdl, NCSMDS_SVC_ID_EXTERNAL_MIN, - NCSMDS_SVC_ID_EXTERNAL_MIN, gl_tet_vdest[1].vdest, + NCSMDS_SVC_ID_EXTERNAL_MIN, gl_tet_vdest[1].vdest, 0, MDS_SEND_PRIORITY_MEDIUM, mesg) != NCSCC_RC_SUCCESS) { printf("\nFail\n"); FAIL = 1; @@ -2896,7 +2896,7 @@ void tet_just_send_tp_1() printf("\nAction: Send HIGH\n"); if (mds_just_send( gl_tet_adest.mds_pwe1_hdl, NCSMDS_SVC_ID_EXTERNAL_MIN, - NCSMDS_SVC_ID_EXTERNAL_MIN, gl_tet_vdest[1].vdest, + NCSMDS_SVC_ID_EXTERNAL_MIN, gl_tet_vdest[1].vdest, 0, MDS_SEND_PRIORITY_HIGH, mesg) != NCSCC_RC_SUCCESS) { printf("\nFail\n"); FAIL = 1; @@ -2907,7 +2907,7 @@ void tet_just_send_tp_1() printf("\nAction: Send VERY HIGH\n"); if (mds_just_send( gl_tet_adest.mds_pwe1_hdl, NCSMDS_SVC_ID_EXTERNAL_MIN, - NCSMDS_SVC_ID_EXTERNAL_MIN, gl_tet_vdest[1].vdest, + NCSMDS_SVC_ID_EXTERNAL_MIN, gl_tet_vdest[1].vdest, 0, MDS_SEND_PRIORITY_VERY_HIGH, mesg) != NCSCC_RC_SUCCESS) { printf("\nFail\n"); @@ -2970,10 +2970,12 @@ void tet_just_send_tp_2() } if (mds_just_send(gl_tet_adest.pwe[0].mds_pwe_hdl, - NCSMDS_SVC_ID_EXTERNAL_MIN, - NCSMDS_SVC_ID_EXTERNAL_MIN, - gl_tet_vdest[1].vdest, MDS_SEND_PRIORITY_LOW, - mesg) == NCSCC_RC_SUCCESS) { + NCSMDS_SVC_ID_EXTERNAL_MIN, + NCSMDS_SVC_ID_EXTERNAL_MIN, + gl_tet_vdest[1].vdest, + 0, + MDS_SEND_PRIORITY_LOW, + mesg) == NCSCC_RC_SUCCESS) { printf("\nFail\n"); FAIL = 1; } @@ -3033,7 +3035,7 @@ void tet_just_send_tp_3() if (mds_just_send( (MDS_HDL)(long)NULL, NCSMDS_SVC_ID_EXTERNAL_MIN, - NCSMDS_SVC_ID_EXTERNAL_MIN, gl_tet_vdest[1].vdest, + NCSMDS_SVC_ID_EXTERNAL_MIN, gl_tet_vdest[1].vdest, 0, MDS_SEND_PRIORITY_LOW, mesg) == NCSCC_RC_SUCCESS) { printf("\nFail\n"); FAIL = 1; @@ -3093,7 +3095,7 @@ void tet_just_send_tp_4() if (mds_just_send( gl_tet_adest.mds_pwe1_hdl, NCSMDS_SVC_ID_EXTERNAL_MIN, - NCSMDS_SVC_ID_EXTERNAL_MIN, 0, MDS_SEND_PRIORITY_LOW, + NCSMDS_SVC_ID_EXTERNAL_MIN, 0, 0, MDS_SEND_PRIORITY_LOW, mesg) == NCSCC_RC_SUCCESS) { printf("\nFail\n"); FAIL = 1; @@ -3152,8 +3154,11 @@ void tet_just_send_tp_5() FAIL = 1; } if (mds_just_send(gl_tet_adest.mds_pwe1_hdl, - NCSMDS_SVC_ID_EXTERNAL_MIN, 1800, - gl_tet_vdest[1].vdest, MDS_SEND_PRIORITY_LOW, + NCSMDS_SVC_ID_EXTERNAL_MIN, + 1800, + gl_tet_vdest[1].vdest, + 0, + MDS_SEND_PRIORITY_LOW, mesg) == NCSCC_RC_SUCCESS) { printf("\nFail\n"); FAIL = 1; @@ -3217,6 +3222,7 @@ void tet_just_send_tp_6() NCSMDS_SVC_ID_EXTERNAL_MIN, NCSMDS_SVC_ID_EXTERNAL_MIN, gl_tet_vdest[1].vdest, + 0, MDS_SEND_PRIORITY_LOW, mesg) != NCSCC_RC_SUCCESS) { printf("\nFail\n"); @@ -3284,7 +3290,7 @@ void tet_just_send_tp_7() if (mds_just_send( gl_tet_adest.mds_pwe1_hdl, NCSMDS_SVC_ID_EXTERNAL_MIN, - NCSMDS_SVC_ID_INTERNAL_MIN, gl_tet_vdest[1].vdest, + NCSMDS_SVC_ID_INTERNAL_MIN, gl_tet_vdest[1].vdest, 0, MDS_SEND_PRIORITY_LOW, mesg) != NCSCC_RC_SUCCESS) { printf("\nFail\n"); FAIL = 1; @@ -3306,7 +3312,7 @@ void tet_just_send_tp_7() if (mds_just_send( gl_tet_adest.mds_pwe1_hdl, NCSMDS_SVC_ID_EXTERNAL_MIN, - NCSMDS_SVC_ID_INTERNAL_MIN, gl_tet_vdest[1].vdest, + NCSMDS_SVC_ID_INTERNAL_MIN, gl_tet_vdest[1].vdest, 0, MDS_SEND_PRIORITY_LOW, mesg) != NCSCC_RC_SUCCESS) { printf("\nFail\n"); FAIL = 1; @@ -3376,8 +3382,8 @@ void tet_just_send_tp_8() if (mds_just_send( gl_tet_adest.mds_pwe1_hdl, NCSMDS_SVC_ID_EXTERNAL_MIN, - NCSMDS_SVC_ID_EXTERNAL_MIN, gl_tet_vdest[1].vdest, 5, - mesg) == NCSCC_RC_SUCCESS) { + NCSMDS_SVC_ID_EXTERNAL_MIN, gl_tet_vdest[1].vdest, 0, + 5, mesg) == NCSCC_RC_SUCCESS) { printf("\nFail\n"); FAIL = 1; } @@ -3438,7 +3444,7 @@ void tet_just_send_tp_9() if (mds_just_send( gl_tet_adest.mds_pwe1_hdl, NCSMDS_SVC_ID_EXTERNAL_MIN, - NCSMDS_SVC_ID_EXTERNAL_MIN, gl_tet_vdest[1].vdest, + NCSMDS_SVC_ID_EXTERNAL_MIN, gl_tet_vdest[1].vdest, 0, MDS_SEND_PRIORITY_LOW, NULL) == NCSCC_RC_SUCCESS) { printf("\nFail\n"); FAIL = 1; @@ -3502,7 +3508,7 @@ void tet_just_send_tp_10() mesg->send_len = 2 * MSG_SIZE + 2; if (mds_just_send( gl_tet_adest.mds_pwe1_hdl, NCSMDS_SVC_ID_EXTERNAL_MIN, - NCSMDS_SVC_ID_EXTERNAL_MIN, gl_tet_vdest[1].vdest, + NCSMDS_SVC_ID_EXTERNAL_MIN, gl_tet_vdest[1].vdest, 0, MDS_SEND_PRIORITY_LOW, mesg) != NCSCC_RC_SUCCESS) { printf("\nFail\n"); FAIL = 1; @@ -3643,7 +3649,7 @@ void tet_just_send_tp_12() sleep(2); if (mds_just_send( gl_tet_adest.mds_pwe1_hdl, NCSMDS_SVC_ID_EXTERNAL_MIN, - NCSMDS_SVC_ID_EXTERNAL_MIN, gl_tet_vdest[1].vdest, + NCSMDS_SVC_ID_EXTERNAL_MIN, gl_tet_vdest[1].vdest, 0, MDS_SEND_PRIORITY_LOW, mesg) != NCSCC_RC_SUCCESS) { printf("\nFail\n"); FAIL = 1; @@ -3719,7 +3725,7 @@ void tet_just_send_tp_13() sleep(2); if (mds_just_send( gl_tet_adest.mds_pwe1_hdl, NCSMDS_SVC_ID_EXTERNAL_MIN, - NCSMDS_SVC_ID_EXTERNAL_MIN, gl_tet_vdest[1].vdest, + NCSMDS_SVC_ID_EXTERNAL_MIN, gl_tet_vdest[1].vdest, 0, MDS_SEND_PRIORITY_HIGH, mesg) != NCSCC_RC_SUCCESS) { printf("\nFail\n"); FAIL = 1; @@ -3787,7 +3793,7 @@ void tet_just_send_tp_14() gl_COPY_CB_FAIL = 1; if (mds_just_send( gl_tet_adest.mds_pwe1_hdl, NCSMDS_SVC_ID_EXTERNAL_MIN, - NCSMDS_SVC_ID_EXTERNAL_MIN, gl_tet_vdest[1].vdest, + NCSMDS_SVC_ID_EXTERNAL_MIN, gl_tet_vdest[1].vdest, 0, MDS_SEND_PRIORITY_LOW, mesg) == NCSCC_RC_SUCCESS) { printf("\nFail\n"); FAIL = 1; @@ -3816,6 +3822,149 @@ void tet_just_send_tp_14() test_validate(FAIL, 0); } +void tet_just_send_tp_15(void) +{ + int FAIL = 0; + MDS_SVC_ID svcids[] = {NCSMDS_SVC_ID_EXTERNAL_MIN}; + MDS_SVC_ID not_installed_svc_id = 500; + char tmp[] = " Hi Receiver "; + TET_MDS_MSG *mesg; + + gl_vdest_indx = 0; + mesg = (TET_MDS_MSG *)malloc(sizeof(TET_MDS_MSG)); + memset(mesg, 0, sizeof(TET_MDS_MSG)); + memcpy(mesg->send_data, tmp, sizeof(tmp)); + mesg->send_len = sizeof(tmp); + + /*start up*/ + if (tet_initialise_setup(false)) { + printf("\nSetup Initialisation has Failed\n"); + FAIL = 1; + } else { + printf("\nTest Case 15: Timeout to send a message to service" + " which is not installed with the timeout shorter" + " than the discovery time\n"); + /*-----------------------------------------------------------*/ + printf("\nSubscribing the service\n"); + if (mds_service_subscribe(gl_tet_adest.mds_pwe1_hdl, + NCSMDS_SVC_ID_EXTERNAL_MIN, + NCSMDS_SCOPE_NONE, + 1, + svcids) != NCSCC_RC_SUCCESS) { + printf("\nFail\n"); + FAIL = 1; + } + if (mds_service_retrieve(gl_tet_adest.mds_pwe1_hdl, + NCSMDS_SVC_ID_EXTERNAL_MIN, + SA_DISPATCH_ALL) + != NCSCC_RC_SUCCESS) { + printf("\nFail\n"); + FAIL = 1; + } + printf("\nSending the message\n"); + if (mds_just_send(gl_tet_adest.mds_pwe1_hdl, + NCSMDS_SVC_ID_EXTERNAL_MIN, + not_installed_svc_id, + gl_tet_vdest[1].vdest, + 100, + MDS_SEND_PRIORITY_LOW, + mesg) != NCSCC_RC_REQ_TIMOUT) { + printf("\nFail\n"); + FAIL = 1; + } + printf("\nCancelling the subscription\n"); + if (mds_service_cancel_subscription(gl_tet_adest.mds_pwe1_hdl, + NCSMDS_SVC_ID_EXTERNAL_MIN, + 1, + svcids) != NCSCC_RC_SUCCESS) { + printf("\nFail\n"); + FAIL = 1; + } + } + + /*clean up*/ + if (tet_cleanup_setup()) { + printf("\nSetup Clean Up has Failed\n"); + FAIL = 1; + } + + free(mesg); + test_validate(FAIL, 0); +} + +void tet_just_send_tp_16(void) +{ + int FAIL = 0; + uint32_t rc = NCSCC_RC_SUCCESS; + MDS_SVC_ID not_installed_svc_id = 500; + MDS_SVC_ID svcids[] = {NCSMDS_SVC_ID_EXTERNAL_MIN}; + char tmp[] = " Hi Receiver "; + TET_MDS_MSG *mesg; + + gl_vdest_indx = 0; + mesg = (TET_MDS_MSG *)malloc(sizeof(TET_MDS_MSG)); + memset(mesg, 0, sizeof(TET_MDS_MSG)); + memcpy(mesg->send_data, tmp, sizeof(tmp)); + mesg->send_len = sizeof(tmp); + + /*start up*/ + if (tet_initialise_setup(false)) { + printf("\nSetup Initialisation has Failed\n"); + FAIL = 1; + } else { + printf("\nTest Case 16: No able to send a message to service" + " which is not installed with the timeout longer" + " than the discovery time\n"); + /*-----------------------------------------------------------*/ + printf("\nSubscribing the service\n"); + if (mds_service_subscribe(gl_tet_adest.mds_pwe1_hdl, + NCSMDS_SVC_ID_EXTERNAL_MIN, + NCSMDS_SCOPE_NONE, + 1, + svcids) + != NCSCC_RC_SUCCESS) { + printf("\nFail\n"); + FAIL = 1; + } + if (mds_service_retrieve(gl_tet_adest.mds_pwe1_hdl, + NCSMDS_SVC_ID_EXTERNAL_MIN, + SA_DISPATCH_ALL) + != NCSCC_RC_SUCCESS) { + printf("\nFail\n"); + FAIL = 1; + } + printf("\nSending the message\n"); + rc = mds_just_send(gl_tet_adest.mds_pwe1_hdl, + NCSMDS_SVC_ID_EXTERNAL_MIN, + not_installed_svc_id, + gl_tet_vdest[1].vdest, + 1000, + MDS_SEND_PRIORITY_LOW, + mesg); + if (rc != NCSCC_RC_FAILURE) { + printf("\nFail\n"); + FAIL = 1; + } + printf("\nCancelling the subscription\n"); + if (mds_service_cancel_subscription(gl_tet_adest.mds_pwe1_hdl, + NCSMDS_SVC_ID_EXTERNAL_MIN, + 1, + svcids) != NCSCC_RC_SUCCESS) { + printf("\nFail\n"); + FAIL = 1; + } + } + + /*clean up*/ + if (tet_cleanup_setup()) { + printf("\nSetup Clean Up has Failed\n"); + FAIL = 1; + } + + free(mesg); + test_validate(FAIL, 0); +} + bool setup_send_ack_tp() { int FAIL = 0; @@ -6242,7 +6391,7 @@ void tet_send_all_tp_1() printf("\t Sending the message to no active instance\n"); if ((mds_just_send( gl_tet_adest.mds_pwe1_hdl, NCSMDS_SVC_ID_EXTERNAL_MIN, - NCSMDS_SVC_ID_EXTERNAL_MIN, gl_tet_vdest[1].vdest, + NCSMDS_SVC_ID_EXTERNAL_MIN, gl_tet_vdest[1].vdest, 0, MDS_SEND_PRIORITY_LOW, mesg) != MDS_RC_MSG_NO_BUFFERING)) { printf("\nFail\n"); FAIL = 1; @@ -6409,7 +6558,7 @@ void tet_send_all_tp_2() printf("\n Sending the message to no active instance\n"); if ((mds_just_send(gl_tet_adest.mds_pwe1_hdl, NCSMDS_SVC_ID_EXTERNAL_MIN, - NCSMDS_SVC_ID_EXTERNAL_MIN, gl_tet_vdest[1].vdest, + NCSMDS_SVC_ID_EXTERNAL_MIN, gl_tet_vdest[1].vdest, 0, MDS_SEND_PRIORITY_LOW, mesg) != NCSCC_RC_SUCCESS) && gl_rcvdmsginfo.msg_fmt_ver != 3) { printf("\nFail\n"); @@ -8756,6 +8905,141 @@ void tet_direct_just_send_tp_15() test_validate(FAIL, 0); } +void tet_direct_just_send_tp_16(void) +{ + int FAIL = 0; + MDS_SVC_ID svcids[] = {NCSMDS_SVC_ID_EXTERNAL_MIN}; + MDS_SVC_ID not_installed_svc_id = 500; + char message[] = "Direct Message"; + + /*start up*/ + if (tet_initialise_setup(false)) { + printf("\nSetup Initialisation has Failed\n"); + FAIL = 1; + } else { + printf("\nTest Case 16: Timeout to send a message to service" + " which is not installed with the timeout shorter" + " than the discovery time\n"); + /*----------------------DIRECT SEND--------------------------*/ + printf("\nSubscribing the service\n"); + if (mds_service_subscribe(gl_tet_adest.mds_pwe1_hdl, + NCSMDS_SVC_ID_EXTERNAL_MIN, + NCSMDS_SCOPE_NONE, + 1, + svcids) != NCSCC_RC_SUCCESS) { + printf("\nFail\n"); + FAIL = 1; + } + if (mds_service_retrieve(gl_tet_adest.mds_pwe1_hdl, + NCSMDS_SVC_ID_EXTERNAL_MIN, + SA_DISPATCH_ALL) + != NCSCC_RC_SUCCESS) { + printf("\nFail\n"); + FAIL = 1; + } + printf("\nSending the message\n"); + if (mds_direct_send_message(gl_tet_adest.mds_pwe1_hdl, + NCSMDS_SVC_ID_EXTERNAL_MIN, + not_installed_svc_id, + 1, + MDS_SENDTYPE_SND, + gl_tet_vdest[1].vdest, + 100, + MDS_SEND_PRIORITY_LOW, + message) != NCSCC_RC_REQ_TIMOUT) { + printf("\nFail\n"); + FAIL = 1; + } else + printf("\nSuccess\n"); + + printf("\nCancelling the subscription\n"); + if (mds_service_cancel_subscription(gl_tet_adest.mds_pwe1_hdl, + NCSMDS_SVC_ID_EXTERNAL_MIN, + 1, + svcids) + != NCSCC_RC_SUCCESS) { + printf("\nFail\n"); + FAIL = 1; + } + } + + /*-------------------------------------------------------------------*/ + /*clean up*/ + if (tet_cleanup_setup()) { + printf("\nSetup Clean Up has Failed\n"); + FAIL = 1; + } + + test_validate(FAIL, 0); +} + +void tet_direct_just_send_tp_17(void) +{ + int FAIL = 0; + MDS_SVC_ID svcids[] = {NCSMDS_SVC_ID_EXTERNAL_MIN}; + MDS_SVC_ID not_installed_svc_id = 500; + char message[] = "Direct Message"; + + /*start up*/ + if (tet_initialise_setup(false)) { + printf("\nSetup Initialisation has Failed\n"); + FAIL = 1; + } else { + printf("\nTest Case 17: No able to send a message to service" + " which is not installed with the timeout longer" + " than the discovery time\n"); + /*-------------------------DIRECT SEND-----------------------*/ + printf("\nSubscribing the service\n"); + if (mds_service_subscribe(gl_tet_adest.mds_pwe1_hdl, + NCSMDS_SVC_ID_EXTERNAL_MIN, + NCSMDS_SCOPE_NONE, + 1, + svcids) + != NCSCC_RC_SUCCESS) { + printf("\nFail\n"); + FAIL = 1; + } + if (mds_service_retrieve(gl_tet_adest.mds_pwe1_hdl, + NCSMDS_SVC_ID_EXTERNAL_MIN, + SA_DISPATCH_ALL) + != NCSCC_RC_SUCCESS) { + printf("\nFail\n"); + FAIL = 1; + } + printf("\nSending the message\n"); + if (mds_direct_send_message(gl_tet_adest.mds_pwe1_hdl, + NCSMDS_SVC_ID_EXTERNAL_MIN, + not_installed_svc_id, + 1, + MDS_SENDTYPE_SND, + gl_tet_vdest[1].vdest, + 1000, + MDS_SEND_PRIORITY_LOW, + message) != NCSCC_RC_FAILURE) { + printf("\nFail\n"); + FAIL = 1; + } else + printf("\nSuccess\n"); + printf("\nCancelling the subscription\n"); + if (mds_service_cancel_subscription(gl_tet_adest.mds_pwe1_hdl, + NCSMDS_SVC_ID_EXTERNAL_MIN, + 1, + svcids) != NCSCC_RC_SUCCESS) { + printf("\nFail\n"); + FAIL = 1; + } + } + + /*-------------------------------------------------------------------*/ + /*clean up*/ + if (tet_cleanup_setup()) { + printf("\nSetup Clean Up has Failed\n"); + FAIL = 1; + } + + test_validate(FAIL, 0); +} + void tet_direct_send_all_tp_1() { int FAIL = 0; @@ -13432,6 +13716,7 @@ void tet_sender(MDS_SVC_ID svc_id, uint32_t msg_num, uint32_t msg_size, svc_id, to_svcids[j], gl_tet_adest.svc[0].svcevt[j].dest, + 0, MDS_SEND_PRIORITY_HIGH, mesg) != NCSCC_RC_SUCCESS) { printf("\nSender FAIL send message\n"); @@ -14320,6 +14605,14 @@ __attribute__((constructor)) static void mdsTipcAPI_constructor(void) "Send a message to Svc EXTMIN on QUIESCED Vdest=200"); test_case_add(6, tet_just_send_tp_14, "Copy Callback returning Failure: Send Fails"); + test_case_add(6, tet_just_send_tp_15, + "Timeout to send a message to service" + " which is not installed with the timeout" + " shorter than the discovery time"); + test_case_add(6, tet_just_send_tp_16, + "No able to send a message to service" + " which is not installed with the timeout" + " longer than the discovery time"); test_suite_add(7, "SEND ACK test cases"); test_case_add( @@ -14513,6 +14806,14 @@ __attribute__((constructor)) static void mdsTipcAPI_constructor(void) test_case_add( 13, tet_direct_just_send_tp_15, "Able to send a message of size =(MDS_DIRECT_BUF_MAXSIZE) to 200"); + test_case_add(13, tet_direct_just_send_tp_16, + "Timeout to send a message to service" + " which is not installed with the timeout" + " shorter than the discovery time"); + test_case_add(13, tet_direct_just_send_tp_17, + "No able to send a message to service" + " which is not installed with the timeout" + " longer than the discovery time"); test_suite_add(14, "Direct Send All test cases"); test_case_add( diff --git a/src/mds/apitest/mdstipc_conf.c b/src/mds/apitest/mdstipc_conf.c index e7cdaa1b8..e365207eb 100644 --- a/src/mds/apitest/mdstipc_conf.c +++ b/src/mds/apitest/mdstipc_conf.c @@ -993,7 +993,8 @@ uint32_t mds_service_cancel_subscription(MDS_HDL mds_hdl, MDS_SVC_ID svc_id, /******************************* SEND WRAPPERS ***************************/ uint32_t mds_just_send(MDS_HDL mds_hdl, MDS_SVC_ID svc_id, MDS_SVC_ID to_svc, - MDS_DEST to_dest, MDS_SEND_PRIORITY_TYPE priority, + MDS_DEST to_dest, int64_t time_to_wait, + MDS_SEND_PRIORITY_TYPE priority, TET_MDS_MSG *message) { uint32_t rs; @@ -1008,6 +1009,7 @@ uint32_t mds_just_send(MDS_HDL mds_hdl, MDS_SVC_ID svc_id, MDS_SVC_ID to_svc, svc_to_mds_info.info.svc_send.i_sendtype = MDS_SENDTYPE_SND; svc_to_mds_info.info.svc_send.info.snd.i_to_dest = to_dest; + svc_to_mds_info.info.svc_send.info.snd.i_time_to_wait = time_to_wait; rs = ncsmds_api(&svc_to_mds_info); if (rs == NCSCC_RC_SUCCESS) { printf("\nMDS SEND is SUCCESSFULL\n"); @@ -1017,9 +1019,12 @@ uint32_t mds_just_send(MDS_HDL mds_hdl, MDS_SVC_ID svc_id, MDS_SVC_ID to_svc, printf( "\nMDS SEND has failed as there is no active instance\n"); return MDS_RC_MSG_NO_BUFFERING; + } else if (rs == NCSCC_RC_REQ_TIMOUT) { + printf("\nMDS SEND has TIMED OUT\n"); + return NCSCC_RC_REQ_TIMOUT; } else { printf( - "\nRequest to ncsmds_api: MDS SEND ACK has FAILED\n"); + "\nRequest to ncsmds_api: MDS SEND has FAILED\n"); return NCSCC_RC_FAILURE; } } @@ -1354,6 +1359,8 @@ uint32_t mds_direct_send_message(MDS_HDL mds_hdl, MDS_SVC_ID svc_id, case MDS_SENDTYPE_SND: svc_to_mds_info.info.svc_direct_send.info.snd.i_to_dest = to_dest; + svc_to_mds_info.info.svc_direct_send.info.snd + .i_time_to_wait = time_to_wait; break; case MDS_SENDTYPE_SNDACK: svc_to_mds_info.info.svc_direct_send.info.sndack.i_to_dest = diff --git a/src/mds/mds_c_sndrcv.c b/src/mds/mds_c_sndrcv.c index 557f68a4b..9fb2cf226 100644 --- a/src/mds/mds_c_sndrcv.c +++ b/src/mds/mds_c_sndrcv.c @@ -529,6 +529,8 @@ static uint32_t mds_mcm_direct_send(NCSMDS_INFO *info) switch (info->info.svc_direct_send.i_sendtype) { case MDS_SENDTYPE_SND: req.i_sendtype = MDS_SENDTYPE_SND; + req.info.snd.i_time_to_wait = + info->info.svc_direct_send.info.snd.i_time_to_wait; status = mcm_pvt_normal_svc_snd_direct( info->i_mds_hdl, info->i_svc_id, info->info.svc_direct_send.i_direct_buff, @@ -778,6 +780,8 @@ static uint32_t mds_mcm_send(NCSMDS_INFO *info) switch (info->info.svc_send.i_sendtype) { case MDS_SENDTYPE_SND: req.i_sendtype = MDS_SENDTYPE_SND; + req.info.snd.i_time_to_wait = + info->info.svc_send.info.snd.i_time_to_wait; status = mcm_pvt_normal_svc_snd( info->i_mds_hdl, info->i_svc_id, info->info.svc_send.i_msg, info->info.svc_send.info.snd.i_to_dest, @@ -1139,17 +1143,19 @@ mcm_pvt_normal_snd_process_common(MDS_HDL env_hdl, MDS_SVC_ID fr_svc_id, if (tx_send_hdl == NULL) { /* Check in subscriptions whether this exists */ - if (NCSCC_RC_SUCCESS != mds_mcm_process_disc_queue_checks( + status = mds_mcm_process_disc_queue_checks( svc_cb, dest_svc_id, to_dest, req, &ret_adest, &timer_running, - &tx_send_hdl)) { + &tx_send_hdl); + if (status != NCSCC_RC_SUCCESS) { m_MDS_LOG_ERR( "MDS_SND_RCV:No Route Found from svc_id = %s(%d), to svc_id = %s(%d) on Adest = <0x%08x, %u> ", get_svc_names(fr_svc_id), fr_svc_id, get_svc_names(to_svc_id), to_svc_id, m_MDS_GET_NODE_ID_FROM_ADEST(to_dest), m_MDS_GET_PROCESS_ID_FROM_ADEST(to_dest)); - if (to_msg.msg_type == MSG_DIRECT_BUFF) { + if (to_msg.msg_type == MSG_DIRECT_BUFF + && NCSCC_RC_REQ_TIMOUT != status) { return MDS_INT_RC_DIRECT_SEND_FAIL; /* This is as the direct @@ -1159,7 +1165,7 @@ mcm_pvt_normal_snd_process_common(MDS_HDL env_hdl, MDS_SVC_ID fr_svc_id, location */ } - return NCSCC_RC_FAILURE; + return status; } } else if ((tx_send_hdl != NULL) && (timer_running == true)) { /* Route Exists active or timer running */ @@ -1989,6 +1995,10 @@ mds_mcm_process_disc_queue_checks(MDS_SVC_INFO *svc_cb, MDS_SVC_ID dest_svc_id, get_svc_names(svc_cb->svc_id), svc_cb->svc_id, get_svc_names(dest_svc_id), dest_svc_id, sub_info->sub_adest_details); + m_MDS_LOG_DBG( + "MDS_SND_RCV :L" + " mds_mcm_process_disc_queue_checks\n"); + return NCSCC_RC_REQ_TIMOUT; } m_MDS_LOG_DBG( @@ -2110,7 +2120,16 @@ static uint32_t mds_subtn_tbl_add_disc_queue(MDS_SUBSCRIPTION_INFO *sub_info, /* Now wait till the timeout or an subscription result will come */ switch (req->i_sendtype) { - case MDS_SENDTYPE_SND: + case MDS_SENDTYPE_SND: { + m_MDS_LOG_INFO("MDS_SND_RCV: Waiting for timeout\n"); + if (NCSCC_RC_SUCCESS != + mds_mcm_time_wait(&add_ptr->sel_obj, + req->info.snd.i_time_to_wait)) { + m_MDS_LOG_ERR( + "MDS_SND_RCV: timeout or error occured\n"); + rc = NCSCC_RC_REQ_TIMOUT; + } + } break; case MDS_SENDTYPE_RSP: case MDS_SENDTYPE_RED: case MDS_SENDTYPE_RRSP: diff --git a/src/mds/mds_papi.c b/src/mds/mds_papi.c index fc0c0e04e..f912a8e2d 100644 --- a/src/mds/mds_papi.c +++ b/src/mds/mds_papi.c @@ -102,6 +102,7 @@ const char *get_svc_names(int svc_id) * external service. * * Return Value: NCSCC_RC_SUCCESS + * NCSCC_RC_REQ_TIMOUT * NCSCC_RC_FAILURE * ****************************************************************************/ diff --git a/src/mds/mds_papi.h b/src/mds/mds_papi.h index 7cd543c9f..71f75bf1f 100644 --- a/src/mds/mds_papi.h +++ b/src/mds/mds_papi.h @@ -270,6 +270,7 @@ typedef struct mds_sync_snd_ctxt { typedef struct mds_sendtype_snd_info { MDS_DEST i_to_dest; /* A virtual or absolute destination */ + int64_t i_time_to_wait; /* Timeout duration in 10ms units */ } MDS_SENDTYPE_SND_INFO; typedef struct mds_sendtype_sndrsp_info { -- 2.17.1 _______________________________________________ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel