- 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
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel