This source file includes following definitions.
- resolve_nspace
- test_resolve_peers
1
2
3
4
5
6
7
8
9
10
11
12
13 #include "test_resolve_peers.h"
14 #include "test_cd.h"
15
16 #include "src/util/output.h"
17
18 static int resolve_nspace(char *nspace, test_params params, char *my_nspace, int my_rank)
19 {
20 int rc;
21 pmix_proc_t *procs;
22 size_t nprocs, nranks, i;
23 pmix_proc_t *ranks;
24 rc = PMIx_Resolve_peers(NODE_NAME, nspace, &procs, &nprocs);
25 if (PMIX_SUCCESS != rc) {
26 TEST_ERROR(("%s:%d: Resolve peers test failed: rc = %d", my_nspace, my_rank, rc));
27 return rc;
28 }
29 if (NULL == procs || 0 == nprocs) {
30 TEST_ERROR(("%s:%d: Resolve peers didn't find any process from ns %s at this node\n", my_nspace, my_rank,my_nspace));
31 return PMIX_ERROR;
32 }
33 rc = get_all_ranks_from_namespace(params, nspace, &ranks, &nranks);
34 if (PMIX_SUCCESS != rc) {
35 TEST_ERROR(("%s:%d: get_all_ranks_from_namespace function failed", my_nspace, my_rank));
36 PMIX_PROC_FREE(procs, nprocs);
37 return rc;
38 }
39 if (nprocs != nranks) {
40 TEST_ERROR(("%s:%d: Resolve peers returned incorect result: returned %lu processes, expected %lu", my_nspace, my_rank, nprocs, nranks));
41 PMIX_PROC_FREE(procs, nprocs);
42 PMIX_PROC_FREE(ranks, nranks);
43 return PMIX_ERROR;
44 }
45 for (i = 0; i < nprocs; i++) {
46 if (procs[i].rank != ranks[i].rank) {
47 TEST_ERROR(("%s:%d: Resolve peers returned incorrect result: returned value %s:%d, expected rank %d",
48 my_nspace, my_rank, procs[i].nspace, procs[i].rank, ranks[i].rank));
49 rc = PMIX_ERROR;
50 break;
51 }
52 }
53 PMIX_PROC_FREE(procs, nprocs);
54 PMIX_PROC_FREE(ranks, nranks);
55 return rc;
56 }
57
58 int test_resolve_peers(char *my_nspace, int my_rank, test_params params)
59 {
60 int rc, n;
61 int ns_num;
62 char nspace[PMIX_MAX_NSLEN+1];
63 pmix_proc_t procs[2];
64
65
66 rc = resolve_nspace(my_nspace, params, my_nspace, my_rank);
67 if (PMIX_SUCCESS == rc) {
68 TEST_VERBOSE(("%s:%d: Resolve peers succeeded for the own namespace\n", my_nspace, my_rank));
69 } else {
70 TEST_ERROR(("%s:%d: Resolve peers failed for the own namespace\n", my_nspace, my_rank));
71 return PMIX_ERROR;
72 }
73
74
75 ns_num = get_total_ns_number(params);
76 if (0 >= ns_num) {
77 TEST_ERROR(("%s:%d: get_total_ns_number function failed", my_nspace, my_rank));
78 return PMIX_ERROR;
79 }
80 for (n = 0; n < ns_num; n++) {
81 memset(nspace, 0, PMIX_MAX_NSLEN+1);
82
83 (void)snprintf(nspace, PMIX_MAX_NSLEN, "%s-%d", TEST_NAMESPACE, n);
84 if (0 == strncmp(my_nspace, nspace, strlen(nspace)+1)) {
85 continue;
86 }
87
88
89
90 if (0 < strncmp(nspace, my_nspace, PMIX_MAX_NSLEN)) {
91 (void)strncpy(procs[0].nspace, nspace, PMIX_MAX_NSLEN);
92 (void)strncpy(procs[1].nspace, my_nspace, PMIX_MAX_NSLEN);
93 } else {
94 (void)strncpy(procs[1].nspace, nspace, PMIX_MAX_NSLEN);
95 (void)strncpy(procs[0].nspace, my_nspace, PMIX_MAX_NSLEN);
96 }
97 procs[0].rank = PMIX_RANK_WILDCARD;
98 procs[1].rank = PMIX_RANK_WILDCARD;
99
100
101 rc = PMIx_Connect(procs, 2, NULL, 0);
102 if (PMIX_SUCCESS == rc) {
103 TEST_VERBOSE(("%s:%d: Connect to %s succeeded.", my_nspace, my_rank, nspace));
104 } else {
105 TEST_ERROR(("%s:%d: Connect to %s failed.", my_nspace, my_rank, nspace));
106 return PMIX_ERROR;
107 }
108
109
110 rc = resolve_nspace(nspace, params, my_nspace, my_rank);
111 if (PMIX_SUCCESS == rc) {
112 TEST_VERBOSE(("%s:%d: Resolve peers succeeded for ns %s\n", my_nspace, my_rank, nspace));
113 } else {
114 PMIx_Disconnect(procs, 2, NULL, 0);
115 break;
116 }
117
118
119 rc = PMIx_Disconnect(procs, 2, NULL, 0);
120 if (PMIX_SUCCESS == rc) {
121 TEST_VERBOSE(("%s:%d: Disconnect from %s succeeded %s.", my_nspace, my_rank, nspace));
122 } else {
123 TEST_ERROR(("%s:%d: Disconnect from %s failed %s.", my_nspace, my_rank, nspace));
124 return PMIX_ERROR;
125 }
126 }
127 if (PMIX_SUCCESS == rc) {
128 TEST_VERBOSE(("%s:%d: Resolve peers test succeeded.", my_nspace, my_rank));
129 }
130 return rc;
131 }