Skip to content

Commit

Permalink
move multi open test to new t/multi directory
Browse files Browse the repository at this point in the history
  • Loading branch information
adammoody committed Dec 14, 2020
1 parent 9c947f1 commit 4f65e49
Show file tree
Hide file tree
Showing 2 changed files with 52 additions and 30 deletions.
7 changes: 7 additions & 0 deletions t/Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ libexec_PROGRAMS = \
std/stdio-static.t \
sys/sysio-gotcha.t \
sys/sysio-static.t \
multi/stdio-static.t \
unifyfs_unmount.t


Expand Down Expand Up @@ -153,6 +154,12 @@ std_stdio_static_t_CPPFLAGS = $(test_cppflags)
std_stdio_static_t_LDADD = $(test_static_ldadd)
std_stdio_static_t_LDFLAGS = $(test_static_ldflags)

multi_stdio_static_t_SOURCES = multi/open_multi.c

multi_stdio_static_t_CPPFLAGS = $(test_cppflags)
multi_stdio_static_t_LDADD = $(test_static_ldadd)
multi_stdio_static_t_LDFLAGS = $(test_static_ldflags)

unifyfs_unmount_t_SOURCES = unifyfs_unmount.c
unifyfs_unmount_t_CPPFLAGS = $(test_cppflags)
unifyfs_unmount_t_LDADD = $(test_static_ldadd)
Expand Down
75 changes: 45 additions & 30 deletions open_multi.c → t/multi/open_multi.c
Original file line number Diff line number Diff line change
@@ -1,14 +1,30 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>

#include "t/lib/tap.h"
#include "t/lib/testutil.h"

#include "mpi.h"
#include "unifyfs.h"

#define all_ok(condition, comm, ...) \
do { \
int input = (int) condition; \
int output; \
MPI_Allreduce(&input, &output, 1, MPI_INT, MPI_LAND, comm); \
int rank; \
MPI_Comm_rank(comm, &rank); \
if (rank == 0) { \
ok_at_loc(__FILE__, __LINE__, output, __VA_ARGS__, NULL); \
} \
} while (0)

int mpi_sum(int val)
{
int sum;
Expand Down Expand Up @@ -37,7 +53,7 @@ int main(int argc, char* argv[])
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &ranks);

int ret = unifyfs_mount(mountpoint, rank, ranks, 0);
unifyfs_mount(mountpoint, rank, ranks, 0);

char file[256];
sprintf(file, "%s/testfile", mountpoint);
Expand All @@ -53,7 +69,7 @@ int main(int argc, char* argv[])
errno = 0;
int success = 0;
int eexist = 0;
int fd = open(file, O_WRONLY | O_CREAT | O_EXCL);
int fd = open(file, O_WRONLY | O_CREAT | O_EXCL, S_IRWXU);
if (fd >= 0) {
success = 1;
close(fd);
Expand All @@ -63,15 +79,13 @@ int main(int argc, char* argv[])

/* one rank should win */
int sum = mpi_sum(success);
if (sum != 1) {
}
all_ok(sum == 1, MPI_COMM_WORLD,
"More than one process opened file in exclusive mode");

/* all others should get EEXIST */
sum = mpi_sum(eexist);
if (sum != (ranks - 1)) {
}

MPI_Barrier(MPI_COMM_WORLD);
all_ok(sum == (ranks - 1), MPI_COMM_WORLD,
"All but one process should get EEXIST when opening file in exclusive mode");

/* all delete,
* one rank should win, all others should get ENOENT */
Expand All @@ -87,31 +101,26 @@ int main(int argc, char* argv[])

/* one winner */
sum = mpi_sum(success);
if (sum != 1) {
}
all_ok(sum == 1, MPI_COMM_WORLD,
"More than one process got success on unlink of the same file");

/* everyone else should get ENOENT */
sum = mpi_sum(enoent);
if (sum != (ranks - 1)) {
}

MPI_Barrier(MPI_COMM_WORLD);
all_ok(sum == (ranks - 1), MPI_COMM_WORLD,
"All but one process should get ENOENT when unlinking the same file");

/* all create, this time not exclusive */
errno = 0;
success = 0;
fd = open(file, O_WRONLY | O_CREAT | O_TRUNC);
fd = open(file, O_WRONLY | O_CREAT | O_TRUNC, S_IRWXU);
if (fd >= 0) {
success = 1;
close(fd);
}

/* all should succeed */
sum = mpi_sum(success);
if (sum != ranks) {
}

MPI_Barrier(MPI_COMM_WORLD);
all_ok(success, MPI_COMM_WORLD,
"All processes should open file with O_CREAT and not O_EXCL");

/* open file for writing */
errno = 0;
Expand All @@ -123,9 +132,8 @@ int main(int argc, char* argv[])
}

/* all should succeeed */
sum = mpi_sum(success);
if (sum != ranks) {
}
all_ok(success, MPI_COMM_WORLD,
"All processes should open file with O_CREAT for writing");

MPI_Barrier(MPI_COMM_WORLD);

Expand All @@ -135,30 +143,37 @@ int main(int argc, char* argv[])

/* have all ranks write to a different section of the file,
* then open file with truncate on one rank to verify size change */
fd = open(file, O_WRONLY | O_CREAT);
success = 0;
fd = open(file, O_WRONLY | O_CREAT, S_IRWXU);
if (fd >= 0) {
success = 1;
off_t offset = (off_t) (rank * bufsize);
pwrite(fd, buf, bufsize, offset);
ssize_t nwritten = pwrite(fd, buf, bufsize, offset);
if (nwritten != bufsize) {
success = 0;
}
fsync(fd);
close(fd);
}
MPI_Barrier(MPI_COMM_WORLD);
if (rank == 0) {
/* all ranks should have written some data */
off_t size = getsize(file);
if (size != bufsize * ranks) {
}
ok(size == bufsize * ranks,
"File size %lu does not match expected size %lu",
size, bufsize * ranks);

/* create file with truncate */
fd = open(file, O_WRONLY | O_CREAT | O_TRUNC);
fd = open(file, O_WRONLY | O_CREAT | O_TRUNC, S_IRWXU);
if (fd >= 0) {
close(fd);
}

/* now file should be 0 length again */
size = getsize(file);
if (size != 0) {
}
ok(size == 0,
"File size %lu does not match expected size %lu",
size, 0);
}
MPI_Barrier(MPI_COMM_WORLD);

Expand Down

0 comments on commit 4f65e49

Please sign in to comment.