2 senders (1 disable, 1 enable MDS FCTRL) send broadcast (tipc mcast)
big messages to 2 receivers (1 disable, 1 enable MDS FCTRL).
Expect receive all messages in correct order.
---
src/mds/apitest/mdstipc_api.c | 142 ++++++++++++++++++++++++++++++++++
1 file changed, 142 insertions(+)
diff --git a/src/mds/apitest/mdstipc_api.c b/src/mds/apitest/mdstipc_api.c
index 1f16a6a93..cbcffbd76 100644
--- a/src/mds/apitest/mdstipc_api.c
+++ b/src/mds/apitest/mdstipc_api.c
@@ -13283,6 +13283,64 @@ static bool verify_counters(uint32_t expect_num)
return true;
}
+void tet_sender2(MDS_SVC_ID svc_id, uint32_t msg_num, uint32_t msg_size,
+ int svc_num, MDS_SVC_ID to_svcids[])
+{
+ 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);
+ }
+
+ 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);
+ }
+
+ 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);
+ }
+
+ // Wait for receiver UP
+ sleep(5);
+
+ for (uint32_t i = 1; i <= msg_num; 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_broadcast_to_svc(
+ gl_tet_adest.mds_pwe1_hdl,
+ svc_id,
+ to_svcids[0],
+ NCSMDS_SCOPE_NONE,
+ MDS_SEND_PRIORITY_MEDIUM,
+ mesg) != NCSCC_RC_SUCCESS) {
+ printf("\nSender FAIL send message\n");
+ exit(1);
+ } else {
+ printf("\nSender SENT message %d"
+ " successfully\n", i);
+ }
+ }
+ free(mesg);
+}
+
void tet_sender(MDS_SVC_ID svc_id, uint32_t msg_num, uint32_t msg_size,
int svc_num, MDS_SVC_ID to_svcids[])
{
@@ -13837,6 +13895,87 @@ void tet_mds_fctrl_compatibility_tp4(void)
test_validate(FAIL, 0);
}
+void tet_mcast_tp_1(void)
+{
+ int FAIL = 1;
+ uint32_t msg_num = 10;
+ uint32_t msg_size = 100000;
+
+ printf("\nTest Case 11: 2 Senders mcast big messages to 2 Receivers\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;
+ tet_sender2(svc_id, msg_num, msg_size, 1, to_svcids);
+ mds_shutdown();
+ } else if (pid > 0) {
+ FILE *fp = fopen("/tmp/mdstest.pid", "a");
+ fprintf(fp, " %d", getpid());
+ fclose(fp);
+ /* This sender disable MDS FCTRL */
+ mds_startup();
+ MDS_SVC_ID to_svcids[] = {NCSMDS_SVC_ID_EXTERNAL_MIN};
+ MDS_SVC_ID svc_id = NCSMDS_SVC_ID_INTERNAL_MIN+1;
+ tet_sender2(svc_id, msg_num, msg_size, 1, to_svcids);
+ mds_shutdown();
+ }
+ } else if (pid > 0) {
+ /* parent as receiver */
+ pid_t pid2 = fork();
+ if (pid2 == 0) {
+ /* This receiver disable MDS FCTRL */
+ 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_num, msg_size,
+ 2, 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,
+ NCSMDS_SVC_ID_INTERNAL_MIN+1};
+ MDS_SVC_ID svc_id = NCSMDS_SVC_ID_EXTERNAL_MIN;
+ FAIL = tet_receiver(svc_id, msg_num, msg_size,
+ 2, fr_svcids);
+ mds_shutdown();
+ if (FAIL == 0) {
+ pid_t rc;
+ int status;
+ do {
+ rc = waitpid(pid2, &status, 0);
+ } while ((rc == -1) && (errno == EINTR));
+ if ((rc == -1) || \
+ (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");
+ }
+ printf("\nkill mdstest processes rc: %d\n",
+ system("kill -9 $(cat /tmp/mdstest.pid);"
+ "rm -f /tmp/mdstest.pid"));
+ test_validate(FAIL, 0);
+}
+
void Print_return_status(uint32_t rs)
{
@@ -14598,4 +14737,7 @@ __attribute__((constructor)) static void
mdsTipcAPI_constructor(void)
test_case_add(
27, tet_mds_fctrl_compatibility_tp4,
"Sender disable MDS FCTRL but Receiver enable");
+ test_case_add(
+ 27, tet_mcast_tp_1,
+ "2 Senders mcast big messages to 2 Receivers");
}
--
2.17.1
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel