test: Increase time limit for IP creation in an HS test.

This should avoid most intermittent test failures on developer and CI machines,
but there could (and probably should) be a more elegant solution.

Also, this test was testing that the IP was created and its expiration time was
set to a time greater than or equal to `now+INTRO_POINT_LIFETIME_MIN_SECONDS+5`:

    /* Time to expire MUST also be in that range. We add 5 seconds because
     * there could be a gap between setting now and the time taken in
     * service_intro_point_new. On ARM, it can be surprisingly slow... */
    tt_u64_op(ip->time_to_expire, OP_GE,
              now + INTRO_POINT_LIFETIME_MIN_SECONDS + 5);

However, this appears to be a typo, since, according to the comment above it,
adding five seconds was done because the IP creation can be slow on some
systems.  But the five seconds is added to the *minimum* time we're comparing
against, and so it actually functions to make this test *more* likely to fail on
slower systems.  (It should either subtract five seconds, or instead add it to
time_to_expire.)

 * FIXES #25450: https://bugs.torproject.org/25450
This commit is contained in:
Isis Lovecruft 2018-03-07 23:50:00 +00:00
parent 0026d1a673
commit 0545f64d24
No known key found for this signature in database
GPG Key ID: B8938BC5E86C046F
2 changed files with 15 additions and 5 deletions

9
changes/bug25450 Normal file
View File

@ -0,0 +1,9 @@
o Minor bugfixes (testing):
- Avoid intermittent test failures due to relying on hidden service
introductory point creation within 5 seconds of real clock time. The
time limit for the test has been increased to 500 seconds, which may
still result in intermittent failures (e.g. if the system doing the
testing enters sleep/hibernation or experiences some other clock jump).
However, this should elliminate test failures currently happening on
developer and CI systems. Fixes bug 25450 (shoddily); bugfix on
0.3.1.3-alpha.

View File

@ -413,13 +413,14 @@ test_service_intro_point(void *arg)
INTRO_POINT_MIN_LIFETIME_INTRODUCTIONS);
tt_u64_op(ip->introduce2_max, OP_LE,
INTRO_POINT_MAX_LIFETIME_INTRODUCTIONS);
/* Time to expire MUST also be in that range. We add 5 seconds because
* there could be a gap between setting now and the time taken in
* service_intro_point_new. On ARM, it can be surprisingly slow... */
/* Time to expire MUST also be in that range. We subtract 500 seconds
* because there could be a gap between setting now and the time taken in
* service_intro_point_new. On ARM and other older CPUs, it can be
* surprisingly slow... */
tt_u64_op(ip->time_to_expire, OP_GE,
now + INTRO_POINT_LIFETIME_MIN_SECONDS + 5);
now + INTRO_POINT_LIFETIME_MIN_SECONDS - 500);
tt_u64_op(ip->time_to_expire, OP_LE,
now + INTRO_POINT_LIFETIME_MAX_SECONDS + 5);
now + INTRO_POINT_LIFETIME_MAX_SECONDS - 500);
tt_assert(ip->replay_cache);
tt_assert(ip->base.link_specifiers);
/* By default, this is NOT a legacy object. */