summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/sys/posixshm/posixshm_test.c108
-rw-r--r--tests/sys/vm/mmap_test.c56
2 files changed, 92 insertions, 72 deletions
diff --git a/tests/sys/posixshm/posixshm_test.c b/tests/sys/posixshm/posixshm_test.c
index b1a7c08..05774df 100644
--- a/tests/sys/posixshm/posixshm_test.c
+++ b/tests/sys/posixshm/posixshm_test.c
@@ -50,12 +50,9 @@ static char test_path[TEST_PATH_LEN];
static void
gen_test_path(void)
{
- char *tmpdir = getenv("TMPDIR");
- if (tmpdir == NULL)
- tmpdir = "/tmp";
-
- snprintf(test_path, sizeof(test_path), "%s/tmp.XXXXXX", tmpdir);
+ snprintf(test_path, sizeof(test_path), "%s/tmp.XXXXXX",
+ getenv("TMPDIR") == NULL ? "/tmp" : getenv("TMPDIR"));
test_path[sizeof(test_path) - 1] = '\0';
ATF_REQUIRE_MSG(mkstemp(test_path) != -1,
"mkstemp failed; errno=%d", errno);
@@ -99,10 +96,12 @@ static int
scribble_object(void)
{
char *page;
- int fd;
+ int fd, pagesize;
gen_test_path();
+ ATF_REQUIRE(0 < (pagesize = getpagesize()));
+
fd = shm_open(test_path, O_CREAT|O_EXCL|O_RDWR, 0777);
if (fd < 0 && errno == EEXIST) {
if (shm_unlink(test_path) < 0)
@@ -111,17 +110,16 @@ scribble_object(void)
}
if (fd < 0)
atf_tc_fail("shm_open failed; errno=%d", errno);
- if (ftruncate(fd, getpagesize()) < 0)
+ if (ftruncate(fd, pagesize) < 0)
atf_tc_fail("ftruncate failed; errno=%d", errno);
- page = mmap(0, getpagesize(), PROT_READ | PROT_WRITE, MAP_SHARED, fd,
- 0);
+ page = mmap(0, pagesize, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
if (page == MAP_FAILED)
atf_tc_fail("mmap failed; errno=%d", errno);
page[0] = '1';
- if (munmap(page, getpagesize()) < 0)
- atf_tc_fail("munmap failed; errno=%d", errno);
+ ATF_REQUIRE_MSG(munmap(page, pagesize) == 0, "munmap failed; errno=%d",
+ errno);
return (fd);
}
@@ -130,12 +128,13 @@ ATF_TC_WITHOUT_HEAD(remap_object);
ATF_TC_BODY(remap_object, tc)
{
char *page;
- int fd;
+ int fd, pagesize;
+
+ ATF_REQUIRE(0 < (pagesize = getpagesize()));
fd = scribble_object();
- page = mmap(0, getpagesize(), PROT_READ | PROT_WRITE, MAP_SHARED, fd,
- 0);
+ page = mmap(0, pagesize, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
if (page == MAP_FAILED)
atf_tc_fail("mmap(2) failed; errno=%d", errno);
@@ -143,8 +142,8 @@ ATF_TC_BODY(remap_object, tc)
atf_tc_fail("missing data ('%c' != '1')", page[0]);
close(fd);
- if (munmap(page, getpagesize()) < 0)
- atf_tc_fail("munmap failed; errno=%d", errno);
+ ATF_REQUIRE_MSG(munmap(page, pagesize) == 0, "munmap failed; errno=%d",
+ errno);
ATF_REQUIRE_MSG(shm_unlink(test_path) != -1,
"shm_unlink failed; errno=%d", errno);
@@ -154,7 +153,9 @@ ATF_TC_WITHOUT_HEAD(reopen_object);
ATF_TC_BODY(reopen_object, tc)
{
char *page;
- int fd;
+ int fd, pagesize;
+
+ ATF_REQUIRE(0 < (pagesize = getpagesize()));
fd = scribble_object();
close(fd);
@@ -163,14 +164,15 @@ ATF_TC_BODY(reopen_object, tc)
if (fd < 0)
atf_tc_fail("shm_open(2) failed; errno=%d", errno);
- page = mmap(0, getpagesize(), PROT_READ, MAP_SHARED, fd, 0);
+ page = mmap(0, pagesize, PROT_READ, MAP_SHARED, fd, 0);
if (page == MAP_FAILED)
atf_tc_fail("mmap(2) failed; errno=%d", errno);
if (page[0] != '1')
atf_tc_fail("missing data ('%c' != '1')", page[0]);
- munmap(page, getpagesize());
+ ATF_REQUIRE_MSG(munmap(page, pagesize) == 0, "munmap failed; errno=%d",
+ errno);
close(fd);
ATF_REQUIRE_MSG(shm_unlink(test_path) != -1,
"shm_unlink failed; errno=%d", errno);
@@ -180,7 +182,9 @@ ATF_TC_WITHOUT_HEAD(readonly_mmap_write);
ATF_TC_BODY(readonly_mmap_write, tc)
{
char *page;
- int fd;
+ int fd, pagesize;
+
+ ATF_REQUIRE(0 < (pagesize = getpagesize()));
gen_test_path();
@@ -188,8 +192,7 @@ ATF_TC_BODY(readonly_mmap_write, tc)
ATF_REQUIRE_MSG(fd >= 0, "shm_open failed; errno=%d", errno);
/* PROT_WRITE should fail with EACCES. */
- page = mmap(0, getpagesize(), PROT_READ | PROT_WRITE, MAP_SHARED, fd,
- 0);
+ page = mmap(0, pagesize, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
if (page != MAP_FAILED)
atf_tc_fail("mmap(PROT_WRITE) succeeded unexpectedly");
@@ -359,49 +362,49 @@ ATF_TC_BODY(object_resize, tc)
{
pid_t pid;
struct stat sb;
- char err_buf[1024], *page;
- int fd, status;
+ char *page;
+ int fd, pagesize, status;
+
+ ATF_REQUIRE(0 < (pagesize = getpagesize()));
/* Start off with a size of a single page. */
fd = shm_open(SHM_ANON, O_CREAT|O_RDWR, 0777);
if (fd < 0)
atf_tc_fail("shm_open failed; errno=%d", errno);
- if (ftruncate(fd, getpagesize()) < 0)
+ if (ftruncate(fd, pagesize) < 0)
atf_tc_fail("ftruncate(1) failed; errno=%d", errno);
if (fstat(fd, &sb) < 0)
atf_tc_fail("fstat(1) failed; errno=%d", errno);
- if (sb.st_size != getpagesize())
+ if (sb.st_size != pagesize)
atf_tc_fail("first resize failed (%d != %d)",
- (int)sb.st_size, getpagesize());
+ (int)sb.st_size, pagesize);
/* Write a '1' to the first byte. */
- page = mmap(0, getpagesize(), PROT_READ|PROT_WRITE, MAP_SHARED, fd,
- 0);
+ page = mmap(0, pagesize, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);
if (page == MAP_FAILED)
atf_tc_fail("mmap(1)");
page[0] = '1';
- if (munmap(page, getpagesize()) < 0)
- atf_tc_fail("munmap(1) failed; errno=%d", errno);
+ ATF_REQUIRE_MSG(munmap(page, pagesize) == 0, "munmap failed; errno=%d",
+ errno);
/* Grow the object to 2 pages. */
- if (ftruncate(fd, getpagesize() * 2) < 0)
+ if (ftruncate(fd, pagesize * 2) < 0)
atf_tc_fail("ftruncate(2) failed; errno=%d", errno);
if (fstat(fd, &sb) < 0)
atf_tc_fail("fstat(2) failed; errno=%d", errno);
- if (sb.st_size != getpagesize() * 2)
+ if (sb.st_size != pagesize * 2)
atf_tc_fail("second resize failed (%d != %d)",
- (int)sb.st_size, getpagesize() * 2);
+ (int)sb.st_size, pagesize * 2);
/* Check for '1' at the first byte. */
- page = mmap(0, getpagesize() * 2, PROT_READ|PROT_WRITE, MAP_SHARED,
- fd, 0);
+ page = mmap(0, pagesize * 2, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);
if (page == MAP_FAILED)
atf_tc_fail("mmap(2) failed; errno=%d", errno);
@@ -409,18 +412,18 @@ ATF_TC_BODY(object_resize, tc)
atf_tc_fail("'%c' != '1'", page[0]);
/* Write a '2' at the start of the second page. */
- page[getpagesize()] = '2';
+ page[pagesize] = '2';
/* Shrink the object back to 1 page. */
- if (ftruncate(fd, getpagesize()) < 0)
+ if (ftruncate(fd, pagesize) < 0)
atf_tc_fail("ftruncate(3) failed; errno=%d", errno);
if (fstat(fd, &sb) < 0)
atf_tc_fail("fstat(3) failed; errno=%d", errno);
- if (sb.st_size != getpagesize())
+ if (sb.st_size != pagesize)
atf_tc_fail("third resize failed (%d != %d)",
- (int)sb.st_size, getpagesize());
+ (int)sb.st_size, pagesize);
/*
* Fork a child process to make sure the second page is no
@@ -435,16 +438,16 @@ ATF_TC_BODY(object_resize, tc)
char c;
/* Don't generate a core dump. */
- getrlimit(RLIMIT_CORE, &lim);
+ ATF_REQUIRE(getrlimit(RLIMIT_CORE, &lim) == 0);
lim.rlim_cur = 0;
- setrlimit(RLIMIT_CORE, &lim);
+ ATF_REQUIRE(setrlimit(RLIMIT_CORE, &lim) == 0);
/*
* The previous ftruncate(2) shrunk the backing object
* so that this address is no longer valid, so reading
* from it should trigger a SIGSEGV.
*/
- c = page[getpagesize()];
+ c = page[pagesize];
fprintf(stderr, "child: page 1: '%c'\n", c);
exit(0);
}
@@ -456,15 +459,15 @@ ATF_TC_BODY(object_resize, tc)
atf_tc_fail("child terminated with status %x", status);
/* Grow the object back to 2 pages. */
- if (ftruncate(fd, getpagesize() * 2) < 0)
+ if (ftruncate(fd, pagesize * 2) < 0)
atf_tc_fail("ftruncate(2) failed; errno=%d", errno);
if (fstat(fd, &sb) < 0)
atf_tc_fail("fstat(2) failed; errno=%d", errno);
- if (sb.st_size != getpagesize() * 2)
+ if (sb.st_size != pagesize * 2)
atf_tc_fail("fourth resize failed (%d != %d)",
- (int)sb.st_size, getpagesize());
+ (int)sb.st_size, pagesize);
/*
* Note that the mapping at 'page' for the second page is
@@ -475,9 +478,9 @@ ATF_TC_BODY(object_resize, tc)
* object was shrunk and the new pages when an object are
* grown are zero-filled.
*/
- if (page[getpagesize()] != 0)
+ if (page[pagesize] != 0)
atf_tc_fail("invalid data at %d: %x != 0",
- getpagesize(), (int)page[getpagesize()]);
+ pagesize, (int)page[pagesize]);
close(fd);
}
@@ -524,7 +527,7 @@ ATF_TC_BODY(shm_functionality_across_fork, tc)
scval = sysconf(_SC_PAGESIZE);
if (scval == -1 && errno != 0) {
atf_tc_fail("sysconf(_SC_PAGESIZE) failed; errno=%d", errno);
- } else if (scval <= 0 || (size_t)psize != psize) {
+ } else if (scval <= 0) {
fprintf(stderr, "bogus return from sysconf(_SC_PAGESIZE): %ld",
scval);
psize = 4096;
@@ -542,8 +545,7 @@ ATF_TC_BODY(shm_functionality_across_fork, tc)
ATF_REQUIRE_MSG(ftruncate(desc, (off_t)psize) != -1,
"ftruncate failed; errno=%d", errno);
- region = mmap((void *)0, psize, PROT_READ | PROT_WRITE, MAP_SHARED,
- desc, (off_t)0);
+ region = mmap(NULL, psize, PROT_READ | PROT_WRITE, MAP_SHARED, desc, 0);
ATF_REQUIRE_MSG(region != MAP_FAILED, "mmap failed; errno=%d", errno);
memset(region, '\377', psize);
@@ -601,6 +603,10 @@ ATF_TC_BODY(shm_functionality_across_fork, tc)
strsignal(WTERMSIG(status)));
}
}
+
+ ATF_REQUIRE_MSG(munmap(region, psize) == 0, "munmap failed; errno=%d",
+ errno);
+ shm_unlink(test_path);
}
ATF_TP_ADD_TCS(tp)
diff --git a/tests/sys/vm/mmap_test.c b/tests/sys/vm/mmap_test.c
index 88013da..df52072 100644
--- a/tests/sys/vm/mmap_test.c
+++ b/tests/sys/vm/mmap_test.c
@@ -91,8 +91,10 @@ static void
checked_mmap(int prot, int flags, int fd, int error, const char *msg)
{
void *p;
+ int pagesize;
- p = mmap(NULL, getpagesize(), prot, flags, fd, 0);
+ ATF_REQUIRE((pagesize = getpagesize()) > 0);
+ p = mmap(NULL, pagesize, prot, flags, fd, 0);
if (p == MAP_FAILED) {
if (error == 0)
ATF_CHECK_MSG(0, "%s failed with errno %d", msg,
@@ -103,18 +105,19 @@ checked_mmap(int prot, int flags, int fd, int error, const char *msg)
errno, error);
} else {
ATF_CHECK_MSG(error == 0, "%s succeeded", msg);
- munmap(p, getpagesize());
+ munmap(p, pagesize);
}
}
ATF_TC_WITHOUT_HEAD(mmap__bad_arguments);
ATF_TC_BODY(mmap__bad_arguments, tc)
{
- int devstatfd, shmfd, zerofd;
+ int devstatfd, pagesize, shmfd, zerofd;
+ ATF_REQUIRE((pagesize = getpagesize()) > 0);
ATF_REQUIRE((devstatfd = open("/dev/devstat", O_RDONLY)) >= 0);
ATF_REQUIRE((shmfd = shm_open(SHM_ANON, O_RDWR, 0644)) >= 0);
- ATF_REQUIRE(ftruncate(shmfd, getpagesize()) == 0);
+ ATF_REQUIRE(ftruncate(shmfd, pagesize) == 0);
ATF_REQUIRE((zerofd = open("/dev/zero", O_RDONLY)) >= 0);
/* These should work. */
@@ -179,6 +182,10 @@ ATF_TC_BODY(mmap__bad_arguments, tc)
*/
checked_mmap(PROT_READ, MAP_PRIVATE, devstatfd, EINVAL,
"MAP_PRIVATE of /dev/devstat");
+
+ close(devstatfd);
+ close(shmfd);
+ close(zerofd);
}
ATF_TC_WITHOUT_HEAD(mmap__dev_zero_private);
@@ -186,22 +193,21 @@ ATF_TC_BODY(mmap__dev_zero_private, tc)
{
char *p1, *p2, *p3;
size_t i;
- int fd;
+ int fd, pagesize;
+ ATF_REQUIRE((pagesize = getpagesize()) > 0);
ATF_REQUIRE((fd = open("/dev/zero", O_RDONLY)) >= 0);
- p1 = mmap(NULL, getpagesize(), PROT_READ | PROT_WRITE, MAP_PRIVATE, fd,
- 0);
+ p1 = mmap(NULL, pagesize, PROT_READ | PROT_WRITE, MAP_PRIVATE, fd, 0);
ATF_REQUIRE(p1 != MAP_FAILED);
- p2 = mmap(NULL, getpagesize(), PROT_READ | PROT_WRITE, MAP_PRIVATE, fd,
- 0);
+ p2 = mmap(NULL, pagesize, PROT_READ | PROT_WRITE, MAP_PRIVATE, fd, 0);
ATF_REQUIRE(p2 != MAP_FAILED);
- for (i = 0; i < getpagesize(); i++)
+ for (i = 0; i < pagesize; i++)
ATF_REQUIRE_EQ_MSG(0, p1[i], "byte at p1[%zu] is %x", i, p1[i]);
- ATF_REQUIRE(memcmp(p1, p2, getpagesize()) == 0);
+ ATF_REQUIRE(memcmp(p1, p2, pagesize) == 0);
p1[0] = 1;
@@ -211,11 +217,15 @@ ATF_TC_BODY(mmap__dev_zero_private, tc)
ATF_REQUIRE(p1[0] == 1);
- p3 = mmap(NULL, getpagesize(), PROT_READ | PROT_WRITE, MAP_PRIVATE, fd,
- 0);
+ p3 = mmap(NULL, pagesize, PROT_READ | PROT_WRITE, MAP_PRIVATE, fd, 0);
ATF_REQUIRE(p3 != MAP_FAILED);
ATF_REQUIRE(p3[0] == 0);
+
+ munmap(p1, pagesize);
+ munmap(p2, pagesize);
+ munmap(p3, pagesize);
+ close(fd);
}
ATF_TC_WITHOUT_HEAD(mmap__dev_zero_shared);
@@ -223,22 +233,21 @@ ATF_TC_BODY(mmap__dev_zero_shared, tc)
{
char *p1, *p2, *p3;
size_t i;
- int fd;
+ int fd, pagesize;
+ ATF_REQUIRE((pagesize = getpagesize()) > 0);
ATF_REQUIRE((fd = open("/dev/zero", O_RDWR)) >= 0);
- p1 = mmap(NULL, getpagesize(), PROT_READ | PROT_WRITE, MAP_SHARED, fd,
- 0);
+ p1 = mmap(NULL, pagesize, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
ATF_REQUIRE(p1 != MAP_FAILED);
- p2 = mmap(NULL, getpagesize(), PROT_READ | PROT_WRITE, MAP_SHARED, fd,
- 0);
+ p2 = mmap(NULL, pagesize, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
ATF_REQUIRE(p2 != MAP_FAILED);
- for (i = 0; i < getpagesize(); i++)
+ for (i = 0; i < pagesize; i++)
ATF_REQUIRE_EQ_MSG(0, p1[i], "byte at p1[%zu] is %x", i, p1[i]);
- ATF_REQUIRE(memcmp(p1, p2, getpagesize()) == 0);
+ ATF_REQUIRE(memcmp(p1, p2, pagesize) == 0);
p1[0] = 1;
@@ -248,11 +257,16 @@ ATF_TC_BODY(mmap__dev_zero_shared, tc)
ATF_REQUIRE(p1[0] == 1);
- p3 = mmap(NULL, getpagesize(), PROT_READ | PROT_WRITE, MAP_SHARED, fd,
+ p3 = mmap(NULL, pagesize, PROT_READ | PROT_WRITE, MAP_SHARED, fd,
0);
ATF_REQUIRE(p3 != MAP_FAILED);
ATF_REQUIRE(p3[0] == 0);
+
+ munmap(p1, pagesize);
+ munmap(p2, pagesize);
+ munmap(p3, pagesize);
+ close(fd);
}
ATF_TP_ADD_TCS(tp)
OpenPOWER on IntegriCloud