int test_connect_disconnect(char *my_nspace, int my_rank) { int rc; pmix_proc_t proc; (void)strncpy(proc.nspace, my_nspace, PMIX_MAX_NSLEN); proc.rank = PMIX_RANK_WILDCARD; rc = test_cd_common(&proc, 1, 1, 0); if (PMIX_SUCCESS != rc) { TEST_ERROR(("%s:%d: Connect blocking test failed.", my_nspace, my_rank)); return PMIX_ERROR; } TEST_VERBOSE(("%s:%d: Connect blocking test succeded.", my_nspace, my_rank)); rc = test_cd_common(&proc, 1, 1, 1); if (PMIX_SUCCESS != rc) { TEST_ERROR(("%s:%d: Disconnect blocking test failed.", my_nspace, my_rank)); return PMIX_ERROR; } TEST_VERBOSE(("%s:%d: Disconnect blocking test succeded.", my_nspace, my_rank)); rc = test_cd_common(&proc, 1, 0, 0); if (PMIX_SUCCESS != rc) { TEST_ERROR(("%s:%d: Connect non-blocking test failed.", my_nspace, my_rank)); return PMIX_ERROR; } TEST_VERBOSE(("%s:%d: Connect non-blocking test succeded.", my_nspace, my_rank)); rc = test_cd_common(&proc, 1, 0, 1); if (PMIX_SUCCESS != rc) { TEST_ERROR(("%s:%d: Disconnect non-blocking test failed.", my_nspace, my_rank)); return PMIX_ERROR; } TEST_VERBOSE(("%s:%d: Disconnect non-blocking test succeded.", my_nspace, my_rank)); return PMIX_SUCCESS; }
int test_resolve_peers(char *my_nspace, int my_rank, test_params params) { int rc, n; int ns_num; char nspace[PMIX_MAX_NSLEN+1]; pmix_proc_t procs[2]; /* first resolve peers from the own namespace. */ rc = resolve_nspace(my_nspace, params, my_nspace, my_rank); if (PMIX_SUCCESS == rc) { TEST_VERBOSE(("%s:%d: Resolve peers succeeded for the own namespace\n", my_nspace, my_rank)); } else { TEST_ERROR(("%s:%d: Resolve peers failed for the own namespace\n", my_nspace, my_rank)); return PMIX_ERROR; } /* then get number of namespaces and try to resolve peers from them. */ ns_num = get_total_ns_number(params); if (0 >= ns_num) { TEST_ERROR(("%s:%d: get_total_ns_number function failed", my_nspace, my_rank)); return PMIX_ERROR; } for (n = 0; n < ns_num; n++) { /* then connect to processes from different namespaces and resolve peers. */ (void)snprintf(nspace, PMIX_MAX_NSLEN, "%s-%d", TEST_NAMESPACE, n); if (0 == strncmp(my_nspace, nspace, strlen(nspace)+1)) { continue; } /* add to procs array all processes from own namespace and all processes from this namespace. * Make sure that processes are placed in the same order. */ if (0 < strncmp(nspace, my_nspace, PMIX_MAX_NSLEN)) { (void)strncpy(procs[0].nspace, nspace, PMIX_MAX_NSLEN); (void)strncpy(procs[1].nspace, my_nspace, PMIX_MAX_NSLEN); } else { (void)strncpy(procs[1].nspace, nspace, PMIX_MAX_NSLEN); (void)strncpy(procs[0].nspace, my_nspace, PMIX_MAX_NSLEN); } procs[0].rank = PMIX_RANK_WILDCARD; procs[1].rank = PMIX_RANK_WILDCARD; /* make a connection between processes from own namespace and processes from this namespace. */ rc = test_cd_common(procs, 2, 1, 0); if (PMIX_SUCCESS == rc) { TEST_VERBOSE(("%s:%d: Connect to %s succeeded %s.", my_nspace, my_rank, nspace)); } else { TEST_ERROR(("%s:%d: Connect to %s failed %s.", my_nspace, my_rank, nspace)); return PMIX_ERROR; } /* then resolve peers from this namespace. */ rc = resolve_nspace(nspace, params, my_nspace, my_rank); if (PMIX_SUCCESS == rc) { TEST_VERBOSE(("%s:%d: Resolve peers succeeded for ns %s\n", my_nspace, my_rank, nspace)); } else { test_cd_common(procs, 2, 1, 1); break; } /* disconnect from the processes of this namespace. */ rc = test_cd_common(procs, 2, 1, 0); if (PMIX_SUCCESS == rc) { TEST_VERBOSE(("%s:%d: Disconnect from %s succeeded %s.", my_nspace, my_rank, nspace)); } else { TEST_ERROR(("%s:%d: Disconnect from %s failed %s.", my_nspace, my_rank, nspace)); return PMIX_ERROR; } } if (PMIX_SUCCESS == rc) { TEST_VERBOSE(("%s:%d: Resolve peers test succeeded.", my_nspace, my_rank)); } return rc; }