---
 src/mds/apitest/mdstipc.h     |   2 +
 src/mds/apitest/mdstipc_api.c | 130 ++++++++++++++++++++++++++++++++++
 src/mds/mds_dt_tipc.c         |   2 +-
 3 files changed, 133 insertions(+), 1 deletion(-)

diff --git a/src/mds/apitest/mdstipc.h b/src/mds/apitest/mdstipc.h
index 01b58c405..07cf55696 100644
--- a/src/mds/apitest/mdstipc.h
+++ b/src/mds/apitest/mdstipc.h
@@ -361,6 +361,8 @@ void tet_broadcast_to_svc_tp_3(void);
 void tet_broadcast_to_svc_tp_4(void);
 void tet_broadcast_to_svc_tp_5(void);
 void tet_broadcast_to_svc_tp_6(void);
+void tet_broadcast_to_svc_tp_7(void);
+void tet_broadcast_to_svc_tp_8(void);
 void tet_direct_just_send_tp_1(void);
 void tet_direct_just_send_tp_2(void);
 void tet_direct_just_send_tp_3(void);
diff --git a/src/mds/apitest/mdstipc_api.c b/src/mds/apitest/mdstipc_api.c
index de166d11d..e320e094e 100644
--- a/src/mds/apitest/mdstipc_api.c
+++ b/src/mds/apitest/mdstipc_api.c
@@ -7479,6 +7479,130 @@ void tet_broadcast_to_svc_tp_6()
        test_validate(FAIL, 0);
 }
 
+void tet_broadcast_to_svc_tp_7()
+{
+       int FAIL = 0;
+       MDS_SVC_ID svcids[] = {NCSMDS_SVC_ID_EXTERNAL_MIN};
+
+       // Test broadcast of large message
+       char tmp[65220] = " Hi All ";
+       TET_MDS_MSG *mesg;
+       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(
+                   "\nCase 1: Svc INTMIN on VDEST=200 Broadcasting a LOW 
Priority message to Svc EXTMIN\n");
+               if (mds_service_subscribe(gl_tet_vdest[1].mds_pwe1_hdl,
+                                         NCSMDS_SVC_ID_INTERNAL_MIN,
+                                         NCSMDS_SCOPE_NONE, 1,
+                                         svcids) != NCSCC_RC_SUCCESS) {
+                       printf("\nFail\n");
+                       FAIL = 1;
+               }
+               if (mds_service_retrieve(gl_tet_vdest[1].mds_pwe1_hdl,
+                                        NCSMDS_SVC_ID_INTERNAL_MIN,
+                                        SA_DISPATCH_ALL) != NCSCC_RC_SUCCESS) {
+                       printf("\nFail\n");
+                       FAIL = 1;
+               }
+               if (mds_broadcast_to_svc(
+                       gl_tet_vdest[1].mds_pwe1_hdl,
+                       NCSMDS_SVC_ID_INTERNAL_MIN, NCSMDS_SVC_ID_EXTERNAL_MIN,
+                       NCSMDS_SCOPE_NONE, MDS_SEND_PRIORITY_LOW,
+                       mesg) != NCSCC_RC_SUCCESS) {
+                       printf("\nFail\n");
+                       FAIL = 1;
+               } else
+                       printf("\nSuccess\n");
+               if (mds_service_cancel_subscription(
+                       gl_tet_vdest[1].mds_pwe1_hdl,
+                       NCSMDS_SVC_ID_INTERNAL_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_broadcast_to_svc_tp_8()
+{
+       int FAIL = 0;
+       MDS_SVC_ID svcids[] = {NCSMDS_SVC_ID_EXTERNAL_MIN};
+
+       // Test broadcast of large message
+       char tmp[66000] = " Hi All ";
+       TET_MDS_MSG *mesg;
+       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(
+                   "\nCase 1: Svc INTMIN on VDEST=200 Broadcasting a LOW 
Priority message to Svc EXTMIN\n");
+               if (mds_service_subscribe(gl_tet_vdest[1].mds_pwe1_hdl,
+                                         NCSMDS_SVC_ID_INTERNAL_MIN,
+                                         NCSMDS_SCOPE_NONE, 1,
+                                         svcids) != NCSCC_RC_SUCCESS) {
+                       printf("\nFail\n");
+                       FAIL = 1;
+               }
+               if (mds_service_retrieve(gl_tet_vdest[1].mds_pwe1_hdl,
+                                        NCSMDS_SVC_ID_INTERNAL_MIN,
+                                        SA_DISPATCH_ALL) != NCSCC_RC_SUCCESS) {
+                       printf("\nFail\n");
+                       FAIL = 1;
+               }
+               if (mds_broadcast_to_svc(
+                       gl_tet_vdest[1].mds_pwe1_hdl,
+                       NCSMDS_SVC_ID_INTERNAL_MIN, NCSMDS_SVC_ID_EXTERNAL_MIN,
+                       NCSMDS_SCOPE_NONE, MDS_SEND_PRIORITY_LOW,
+                       mesg) != NCSCC_RC_SUCCESS) {
+                       printf("\nFail\n");
+                       FAIL = 1;
+               } else
+                       printf("\nSuccess\n");
+               if (mds_service_cancel_subscription(
+                       gl_tet_vdest[1].mds_pwe1_hdl,
+                       NCSMDS_SVC_ID_INTERNAL_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);
+}
+
 /*---------------- DIRECT SEND TEST CASES--------------------------------*/
 
 void tet_direct_just_send_tp_1()
@@ -13422,6 +13546,12 @@ __attribute__((constructor)) static void 
mdsTipcAPI_constructor(void)
        test_case_add(
            12, tet_broadcast_to_svc_tp_6,
            "Svc INTMIN on VDEST=200 Broadcasting a VERY HIGH Priority message 
(>MDS_DIRECT_BUF_MAXSIZE) to Svc EXTMIN");
+       test_case_add(
+           12, tet_broadcast_to_svc_tp_7,
+           "Svc INTMIN on VDEST=200 Broadcasting a LOW Priority message to Svc 
EXTMIN, large buffer near MDS_DIRECT_BUF_MAXSIZE");
+       test_case_add(
+           12, tet_broadcast_to_svc_tp_8,
+           "Svc INTMIN on VDEST=200 Broadcasting a LOW Priority message to Svc 
EXTMIN, large buffer > MDS_DIRECT_BUF_MAXSIZE");
 
        test_suite_add(13, "Direct Just Send test cases");
        test_case_add(
diff --git a/src/mds/mds_dt_tipc.c b/src/mds/mds_dt_tipc.c
index 77141757b..a3abff5f7 100644
--- a/src/mds/mds_dt_tipc.c
+++ b/src/mds/mds_dt_tipc.c
@@ -2700,7 +2700,7 @@ uint32_t mds_mdtm_send_tipc(MDTM_SEND_REQ *req)
                                            req->src_svc_id,
                                            get_svc_names(req->dest_svc_id),
                                            req->dest_svc_id);
-                                       if (len > MDS_DIRECT_BUF_MAXSIZE) {
+                                       if (len - 
sum_mds_hdr_plus_mdtm_hdr_plus_len > MDS_DIRECT_BUF_MAXSIZE) {
                                                m_MMGR_FREE_BUFR_LIST(usrbuf);
                                                free(body);
                                                LOG_NO(
-- 
2.17.0


------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Opensaf-devel mailing list
Opensaf-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to