[ovs-dev] [PATCH] test-lockfile: Provide better diagnostics on failure.

Ben Pfaff blp at nicira.com
Wed Oct 19 09:47:06 PDT 2011


Thank you.  I pushed this.

On Tue, Oct 18, 2011 at 11:47:10PM -0700, Justin Pettit wrote:
> Looks good.  Sorry for the delay.
> 
> --Justin
> 
> 
> On Sep 29, 2011, at 10:40 AM, Ben Pfaff wrote:
> 
> > We spotted one failure of the "lock_timeout_runs_out" test several builds
> > ago, but there weren't enough diagnostics to track it down and I couldn't
> > reproduce it.
> > 
> > This commit should make the failure easier to understand if it recurs.
> > 
> > CC: Michael Hu <mhu at nicira.com>
> > ---
> > tests/test-lockfile.c |   69 +++++++++++++++++++++++++++---------------------
> > 1 files changed, 39 insertions(+), 30 deletions(-)
> > 
> > diff --git a/tests/test-lockfile.c b/tests/test-lockfile.c
> > index 121b2ba..a9ac17f 100644
> > --- a/tests/test-lockfile.c
> > +++ b/tests/test-lockfile.c
> > @@ -28,9 +28,6 @@
> > #include "util.h"
> > #include "vlog.h"
> > 
> > -#undef NDEBUG
> > -#include <assert.h>
> > -
> > struct test {
> >     const char *name;
> >     void (*function)(void);
> > @@ -38,12 +35,25 @@ struct test {
> > 
> > static const struct test tests[];
> > 
> > +#define CHECK(A, B) check(A, B, #A, #B, __FILE__, __LINE__)
> > +static void
> > +check(int a, int b,
> > +      const char *a_string, const char *b_string, const char *file, int line)
> > +{
> > +    if (a != b) {
> > +        fprintf(stderr, "%s:%d: expected %s == %s but %d != %d\n",
> > +                file, line, a_string, b_string, a, b);
> > +        fflush(stderr);
> > +        abort();
> > +    }
> > +}
> > +
> > static void
> > run_lock_and_unlock(void)
> > {
> >     struct lockfile *lockfile;
> > 
> > -    assert(lockfile_lock("file", 0, &lockfile) == 0);
> > +    CHECK(lockfile_lock("file", 0, &lockfile), 0);
> >     lockfile_unlock(lockfile);
> > }
> > 
> > @@ -52,10 +62,10 @@ run_lock_and_unlock_twice(void)
> > {
> >     struct lockfile *lockfile;
> > 
> > -    assert(lockfile_lock("file", 0, &lockfile) == 0);
> > +    CHECK(lockfile_lock("file", 0, &lockfile), 0);
> >     lockfile_unlock(lockfile);
> > 
> > -    assert(lockfile_lock("file", 0, &lockfile) == 0);
> > +    CHECK(lockfile_lock("file", 0, &lockfile), 0);
> >     lockfile_unlock(lockfile);
> > }
> > 
> > @@ -64,8 +74,8 @@ run_lock_blocks_same_process(void)
> > {
> >     struct lockfile *lockfile;
> > 
> > -    assert(lockfile_lock("file", 0, &lockfile) == 0);
> > -    assert(lockfile_lock("file", 0, &lockfile) == EDEADLK);
> > +    CHECK(lockfile_lock("file", 0, &lockfile), 0);
> > +    CHECK(lockfile_lock("file", 0, &lockfile), EDEADLK);
> >     lockfile_unlock(lockfile);
> > }
> > 
> > @@ -74,9 +84,9 @@ run_lock_blocks_same_process_twice(void)
> > {
> >     struct lockfile *lockfile;
> > 
> > -    assert(lockfile_lock("file", 0, &lockfile) == 0);
> > -    assert(lockfile_lock("file", 0, &lockfile) == EDEADLK);
> > -    assert(lockfile_lock("file", 0, &lockfile) == EDEADLK);
> > +    CHECK(lockfile_lock("file", 0, &lockfile), 0);
> > +    CHECK(lockfile_lock("file", 0, &lockfile), EDEADLK);
> > +    CHECK(lockfile_lock("file", 0, &lockfile), EDEADLK);
> >     lockfile_unlock(lockfile);
> > }
> > 
> > @@ -107,10 +117,10 @@ run_lock_blocks_other_process(void)
> >      * this function that does the wait() call. */
> >     static struct lockfile *lockfile;
> > 
> > -    assert(lockfile_lock("file", 0, &lockfile) == 0);
> > +    CHECK(lockfile_lock("file", 0, &lockfile), 0);
> >     if (do_fork() == CHILD) {
> >         lockfile_unlock(lockfile);
> > -        assert(lockfile_lock("file", 0, &lockfile) == EAGAIN);
> > +        CHECK(lockfile_lock("file", 0, &lockfile), EAGAIN);
> >         exit(11);
> >     }
> > }
> > @@ -120,10 +130,10 @@ run_lock_twice_blocks_other_process(void)
> > {
> >     struct lockfile *lockfile, *dummy;
> > 
> > -    assert(lockfile_lock("file", 0, &lockfile) == 0);
> > -    assert(lockfile_lock("file", 0, &dummy) == EDEADLK);
> > +    CHECK(lockfile_lock("file", 0, &lockfile), 0);
> > +    CHECK(lockfile_lock("file", 0, &dummy), EDEADLK);
> >     if (do_fork() == CHILD) {
> > -        assert(lockfile_lock("file", 0, &dummy) == EAGAIN);
> > +        CHECK(lockfile_lock("file", 0, &dummy), EAGAIN);
> >         exit(11);
> >     }
> > }
> > @@ -133,11 +143,11 @@ run_lock_and_unlock_allows_other_process(void)
> > {
> >     struct lockfile *lockfile;
> > 
> > -    assert(lockfile_lock("file", 0, &lockfile) == 0);
> > +    CHECK(lockfile_lock("file", 0, &lockfile), 0);
> >     lockfile_unlock(lockfile);
> > 
> >     if (do_fork() == CHILD) {
> > -        assert(lockfile_lock("file", 0, &lockfile) == 0);
> > +        CHECK(lockfile_lock("file", 0, &lockfile), 0);
> >         exit(11);
> >     }
> > }
> > @@ -147,12 +157,11 @@ run_lock_timeout_gets_the_lock(void)
> > {
> >     struct lockfile *lockfile;
> > 
> > -    assert(lockfile_lock("file", 0, &lockfile) == 0);
> > +    CHECK(lockfile_lock("file", 0, &lockfile), 0);
> > 
> >     if (do_fork() == CHILD) {
> >         lockfile_unlock(lockfile);
> > -        assert(lockfile_lock("file", TIME_UPDATE_INTERVAL * 3,
> > -                             &lockfile) == 0);
> > +        CHECK(lockfile_lock("file", TIME_UPDATE_INTERVAL * 3, &lockfile), 0);
> >         exit(11);
> >     } else {
> >         long long int now = time_msec();
> > @@ -168,12 +177,12 @@ run_lock_timeout_runs_out(void)
> > {
> >     struct lockfile *lockfile;
> > 
> > -    assert(lockfile_lock("file", 0, &lockfile) == 0);
> > +    CHECK(lockfile_lock("file", 0, &lockfile), 0);
> > 
> >     if (do_fork() == CHILD) {
> >         lockfile_unlock(lockfile);
> > -        assert(lockfile_lock("file", TIME_UPDATE_INTERVAL,
> > -                             &lockfile) == ETIMEDOUT);
> > +        CHECK(lockfile_lock("file", TIME_UPDATE_INTERVAL, &lockfile),
> > +              ETIMEDOUT);
> >         exit(11);
> >     } else {
> >         long long int now = time_msec();
> > @@ -189,17 +198,17 @@ run_lock_multiple(void)
> > {
> >     struct lockfile *a, *b, *c, *dummy;
> > 
> > -    assert(lockfile_lock("a", 0, &a) == 0);
> > -    assert(lockfile_lock("b", 0, &b) == 0);
> > -    assert(lockfile_lock("c", 0, &c) == 0);
> > +    CHECK(lockfile_lock("a", 0, &a), 0);
> > +    CHECK(lockfile_lock("b", 0, &b), 0);
> > +    CHECK(lockfile_lock("c", 0, &c), 0);
> > 
> >     lockfile_unlock(a);
> > -    assert(lockfile_lock("a", 0, &a) == 0);
> > -    assert(lockfile_lock("a", 0, &dummy) == EDEADLK);
> > +    CHECK(lockfile_lock("a", 0, &a), 0);
> > +    CHECK(lockfile_lock("a", 0, &dummy), EDEADLK);
> >     lockfile_unlock(a);
> > 
> >     lockfile_unlock(b);
> > -    assert(lockfile_lock("a", 0, &a) == 0);
> > +    CHECK(lockfile_lock("a", 0, &a), 0);
> > 
> >     lockfile_unlock(c);
> >     lockfile_unlock(a);
> > -- 
> > 1.7.4.4
> > 
> > _______________________________________________
> > dev mailing list
> > dev at openvswitch.org
> > http://openvswitch.org/mailman/listinfo/dev
> 



More information about the dev mailing list