From c9a9852da78aab22bc7ab59c0bd74a148bc970e0 Mon Sep 17 00:00:00 2001
From: Morris Jette <jette@schedmd.com>
Date: Wed, 20 Sep 2017 15:58:24 -0600
Subject: [PATCH] Modify MPI tests to log sending hostname

---
 testsuite/expect/test1.88.prog.c | 40 ++++++++++++++++++++------------
 testsuite/expect/test38.7.prog.c | 40 ++++++++++++++++++++------------
 2 files changed, 50 insertions(+), 30 deletions(-)

diff --git a/testsuite/expect/test1.88.prog.c b/testsuite/expect/test1.88.prog.c
index 7032355224a..fe131b9866f 100644
--- a/testsuite/expect/test1.88.prog.c
+++ b/testsuite/expect/test1.88.prog.c
@@ -27,46 +27,57 @@
 
 #include <mpi.h>
 #include <stdio.h>
+#include <string.h>
 #include <time.h>
 #include <unistd.h>
 #include <sys/utsname.h>
 
+#define BUF_SIZE   64
 #define COMM_TAG   1000
 #define ITERATIONS 1
 
-static void pass_its_neighbor(const int rank, const int size, const int* buf)
+typedef struct rank_info {
+	char host[BUF_SIZE];
+	int rank;
+} rank_info_t;
+
+static void pass_its_neighbor(const int rank, const int size)
 {
 	struct utsname uts;
 	MPI_Request request[2];
-	MPI_Status status[2];
-
-	MPI_Irecv((void *)buf, 1, MPI_INT, ((rank+size-1)%size), COMM_TAG,
-		MPI_COMM_WORLD, &request[0]);
-	MPI_Isend((void *)&rank, 1, MPI_INT, ((rank+1)%size), COMM_TAG,
-		MPI_COMM_WORLD, &request[1]);
-	MPI_Waitall(2, request, status);
+	rank_info_t out_buf, in_buf;
 
+	out_buf.rank = rank;
 	uname(&uts);
-	printf("Rank[%d] on %s just received msg from Rank %d\n",
-	       rank, uts.nodename, *buf);
+	strncpy(out_buf.host, uts.nodename, BUF_SIZE);
+	out_buf.host[BUF_SIZE - 1] = '\0';
+
+	MPI_Irecv((void *)&in_buf, sizeof(rank_info_t), MPI_CHAR,
+		  ((rank + size - 1) % size),
+		  COMM_TAG, MPI_COMM_WORLD, &request[0]);
+	MPI_Isend((void *)&out_buf, sizeof(rank_info_t), MPI_CHAR,
+		  ((rank + 1) % size),
+		  COMM_TAG, MPI_COMM_WORLD, &request[1]);
+	MPI_Waitall(2, request, MPI_STATUS_IGNORE);
+
+	printf("Rank[%d] on %s just received msg from Rank %d on %s\n",
+	       rank, uts.nodename, in_buf.rank, in_buf.host);
 }
 
 int main(int argc, char * argv[])
 {
 	int i;
-	int size, rank,buf;
+	int size, rank;
 	time_t now;
 
 	MPI_Init(&argc, &argv);
 	MPI_Comm_size(MPI_COMM_WORLD, &size);
 	MPI_Comm_rank(MPI_COMM_WORLD, &rank);
 
-	buf = rank;	/* we only pass rank */
-
 	for (i = 0; i < ITERATIONS; i++) {
 		if (i)
 			sleep(1);
-		pass_its_neighbor(rank, size, &buf);
+		pass_its_neighbor(rank, size);
 		if ((ITERATIONS > 1) && (rank == 0)) {
 			static time_t last_time = 0;
 			now = time(NULL);
@@ -80,4 +91,3 @@ int main(int argc, char * argv[])
 	MPI_Finalize();
 	return 0;
 }
-
diff --git a/testsuite/expect/test38.7.prog.c b/testsuite/expect/test38.7.prog.c
index 47c41765a5d..cf23491f901 100644
--- a/testsuite/expect/test38.7.prog.c
+++ b/testsuite/expect/test38.7.prog.c
@@ -27,46 +27,57 @@
 
 #include <mpi.h>
 #include <stdio.h>
+#include <string.h>
 #include <time.h>
 #include <unistd.h>
 #include <sys/utsname.h>
 
+#define BUF_SIZE   64
 #define COMM_TAG   1000
 #define ITERATIONS 1
 
-static void pass_its_neighbor(const int rank, const int size, const int* buf)
+typedef struct rank_info {
+	char host[BUF_SIZE];
+	int rank;
+} rank_info_t;
+
+static void pass_its_neighbor(const int rank, const int size)
 {
 	struct utsname uts;
 	MPI_Request request[2];
-	MPI_Status status[2];
-
-	MPI_Irecv((void *)buf, 1, MPI_INT, ((rank+size-1)%size), COMM_TAG,
-		MPI_COMM_WORLD, &request[0]);
-	MPI_Isend((void *)&rank, 1, MPI_INT, ((rank+1)%size), COMM_TAG,
-		MPI_COMM_WORLD, &request[1]);
-	MPI_Waitall(2, request, status);
+	rank_info_t out_buf, in_buf;
 
+	out_buf.rank = rank;
 	uname(&uts);
-	printf("Rank[%d] on %s just received msg from Rank %d\n",
-	       rank, uts.nodename, *buf);
+	strncpy(out_buf.host, uts.nodename, BUF_SIZE);
+	out_buf.host[BUF_SIZE - 1] = '\0';
+
+	MPI_Irecv((void *)&in_buf, sizeof(rank_info_t), MPI_CHAR,
+		  ((rank + size - 1) % size),
+		  COMM_TAG, MPI_COMM_WORLD, &request[0]);
+	MPI_Isend((void *)&out_buf, sizeof(rank_info_t), MPI_CHAR,
+		  ((rank + 1) % size),
+		  COMM_TAG, MPI_COMM_WORLD, &request[1]);
+	MPI_Waitall(2, request, MPI_STATUS_IGNORE);
+
+	printf("Rank[%d] on %s just received msg from Rank %d on %s\n",
+	       rank, uts.nodename, in_buf.rank, in_buf.host);
 }
 
 int main(int argc, char * argv[])
 {
 	int i;
-	int size, rank,buf;
+	int size, rank;
 	time_t now;
 
 	MPI_Init(&argc, &argv);
 	MPI_Comm_size(MPI_COMM_WORLD, &size);
 	MPI_Comm_rank(MPI_COMM_WORLD, &rank);
 
-	buf = rank;	/* we only pass rank */
-
 	for (i = 0; i < ITERATIONS; i++) {
 		if (i)
 			sleep(1);
-		pass_its_neighbor(rank, size, &buf);
+		pass_its_neighbor(rank, size);
 		if ((ITERATIONS > 1) && (rank == 0)) {
 			static time_t last_time = 0;
 			now = time(NULL);
@@ -80,4 +91,3 @@ int main(int argc, char * argv[])
 	MPI_Finalize();
 	return 0;
 }
-
-- 
GitLab