summaryrefslogtreecommitdiff
path: root/src/test/test_util.c
diff options
context:
space:
mode:
authorGeorge Kadianakis <desnacked@riseup.net>2019-04-05 14:52:36 +0300
committerGeorge Kadianakis <desnacked@riseup.net>2019-04-05 14:52:36 +0300
commitb371ea5b0eaca7affed4cdc39d68a34ad8c47c0a (patch)
treed3a1a734294239bcaccfe8c73c904bc002c90e3a /src/test/test_util.c
parent574c20767059a9c39b33181a4792ac4aa7c71ba4 (diff)
parent76912bf140ec61856c0bb0d25354283d024229f5 (diff)
downloadtor-b371ea5b0eaca7affed4cdc39d68a34ad8c47c0a.tar.gz
tor-b371ea5b0eaca7affed4cdc39d68a34ad8c47c0a.zip
Merge branch 'tor-github/pr/761'
Diffstat (limited to 'src/test/test_util.c')
-rw-r--r--src/test/test_util.c27
1 files changed, 18 insertions, 9 deletions
diff --git a/src/test/test_util.c b/src/test/test_util.c
index b4e702e1d7..da55fcac30 100644
--- a/src/test/test_util.c
+++ b/src/test/test_util.c
@@ -6130,10 +6130,12 @@ test_util_map_anon(void *arg)
(void)arg;
char *ptr = NULL;
size_t sz = 16384;
+ unsigned inherit=0;
/* Basic checks. */
- ptr = tor_mmap_anonymous(sz, 0);
+ ptr = tor_mmap_anonymous(sz, 0, &inherit);
tt_ptr_op(ptr, OP_NE, 0);
+ tt_int_op(inherit, OP_EQ, INHERIT_RES_KEEP);
ptr[sz-1] = 3;
tt_int_op(ptr[0], OP_EQ, 0);
tt_int_op(ptr[sz-2], OP_EQ, 0);
@@ -6141,8 +6143,9 @@ test_util_map_anon(void *arg)
/* Try again, with a private (non-swappable) mapping. */
tor_munmap_anonymous(ptr, sz);
- ptr = tor_mmap_anonymous(sz, ANONMAP_PRIVATE);
+ ptr = tor_mmap_anonymous(sz, ANONMAP_PRIVATE, &inherit);
tt_ptr_op(ptr, OP_NE, 0);
+ tt_int_op(inherit, OP_EQ, INHERIT_RES_KEEP);
ptr[sz-1] = 10;
tt_int_op(ptr[0], OP_EQ, 0);
tt_int_op(ptr[sz/2], OP_EQ, 0);
@@ -6150,7 +6153,7 @@ test_util_map_anon(void *arg)
/* Now let's test a drop-on-fork mapping. */
tor_munmap_anonymous(ptr, sz);
- ptr = tor_mmap_anonymous(sz, ANONMAP_NOINHERIT);
+ ptr = tor_mmap_anonymous(sz, ANONMAP_NOINHERIT, &inherit);
tt_ptr_op(ptr, OP_NE, 0);
ptr[sz-1] = 10;
tt_int_op(ptr[0], OP_EQ, 0);
@@ -6179,10 +6182,10 @@ test_util_map_anon_nofork(void *arg)
char *ptr = NULL;
size_t sz = 16384;
int pipefd[2] = {-1, -1};
+ unsigned inherit=0;
tor_munmap_anonymous(ptr, sz);
- ptr = tor_mmap_anonymous(sz, ANONMAP_NOINHERIT);
- int outcome = get_last_anon_map_noinherit();
+ ptr = tor_mmap_anonymous(sz, ANONMAP_NOINHERIT, &inherit);
tt_ptr_op(ptr, OP_NE, 0);
memset(ptr, 0xd0, sz);
@@ -6204,16 +6207,16 @@ test_util_map_anon_nofork(void *arg)
char buf[1];
ssize_t r = read(pipefd[0], buf, 1);
- if (outcome == 2) {
+ if (inherit == INHERIT_RES_ZERO) {
// We should be seeing clear-on-fork behavior.
tt_int_op((int)r, OP_EQ, 1); // child should send us a byte.
tt_int_op(buf[0], OP_EQ, 0); // that byte should be zero.
- } else if (outcome == 1) {
+ } else if (inherit == INHERIT_RES_DROP) {
// We should be seeing noinherit behavior.
tt_int_op(r, OP_LE, 0); // child said nothing; it should have crashed.
} else {
// noinherit isn't implemented.
- tt_int_op(outcome, OP_EQ, 0);
+ tt_int_op(inherit, OP_EQ, INHERIT_RES_KEEP);
tt_int_op((int)r, OP_EQ, 1); // child should send us a byte.
tt_int_op(buf[0], OP_EQ, 0xd0); // that byte should what we set it to.
}
@@ -6221,11 +6224,17 @@ test_util_map_anon_nofork(void *arg)
int ws;
waitpid(child, &ws, 0);
- if (outcome == 0) {
+#ifndef NOINHERIT_CAN_FAIL
+ /* Only if NOINHERIT_CAN_FAIL should it be possible for us to get
+ * INHERIT_KEEP behavior in this case. */
+ tt_int_op(inherit, OP_NE, INHERIT_RES_KEEP);
+#else
+ if (inherit == INHERIT_RES_KEEP) {
/* Call this test "skipped", not "passed", since noinherit wasn't
* implemented. */
tt_skip();
}
+#endif
done:
tor_munmap_anonymous(ptr, sz);