X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=tests%2Ftest-lockfile.c;h=0bf3fe6dd1529ba7729059470a676fc5fbef5c2f;hb=84f7a5273bc627df61c9d71f4ce9f1f058c18545;hp=412010b30690eea1c11c43d21412629b838826b0;hpb=b1fdc5fb270c0ca21de4bbe5002aca4dd79e9911;p=sliver-openvswitch.git diff --git a/tests/test-lockfile.c b/tests/test-lockfile.c index 412010b30..0bf3fe6dd 100644 --- a/tests/test-lockfile.c +++ b/tests/test-lockfile.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, 2010, 2011, 2012 Nicira, Inc. + * Copyright (c) 2009, 2010, 2011, 2012, 2014 Nicira, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -28,13 +28,14 @@ #include "timeval.h" #include "util.h" #include "vlog.h" +#include "ovstest.h" struct test { const char *name; void (*function)(void); }; -static const struct test tests[]; +static void run_help(void); #define CHECK(A, B) check(A, B, #A, #B, __FILE__, __LINE__) static void @@ -54,7 +55,7 @@ run_lock_and_unlock(void) { struct lockfile *lockfile; - CHECK(lockfile_lock("file", 0, &lockfile), 0); + CHECK(lockfile_lock("file", &lockfile), 0); lockfile_unlock(lockfile); } @@ -63,10 +64,10 @@ run_lock_and_unlock_twice(void) { struct lockfile *lockfile; - CHECK(lockfile_lock("file", 0, &lockfile), 0); + CHECK(lockfile_lock("file", &lockfile), 0); lockfile_unlock(lockfile); - CHECK(lockfile_lock("file", 0, &lockfile), 0); + CHECK(lockfile_lock("file", &lockfile), 0); lockfile_unlock(lockfile); } @@ -75,8 +76,8 @@ run_lock_blocks_same_process(void) { struct lockfile *lockfile; - CHECK(lockfile_lock("file", 0, &lockfile), 0); - CHECK(lockfile_lock("file", 0, &lockfile), EDEADLK); + CHECK(lockfile_lock("file", &lockfile), 0); + CHECK(lockfile_lock("file", &lockfile), EDEADLK); lockfile_unlock(lockfile); } @@ -85,9 +86,9 @@ run_lock_blocks_same_process_twice(void) { struct lockfile *lockfile; - CHECK(lockfile_lock("file", 0, &lockfile), 0); - CHECK(lockfile_lock("file", 0, &lockfile), EDEADLK); - CHECK(lockfile_lock("file", 0, &lockfile), EDEADLK); + CHECK(lockfile_lock("file", &lockfile), 0); + CHECK(lockfile_lock("file", &lockfile), EDEADLK); + CHECK(lockfile_lock("file", &lockfile), EDEADLK); lockfile_unlock(lockfile); } @@ -96,7 +97,6 @@ do_fork(void) { switch (fork()) { case 0: - time_postfork(); lockfile_postfork(); return CHILD; @@ -118,10 +118,10 @@ run_lock_blocks_other_process(void) * this function that does the wait() call. */ static struct lockfile *lockfile; - CHECK(lockfile_lock("file", 0, &lockfile), 0); + CHECK(lockfile_lock("file", &lockfile), 0); if (do_fork() == CHILD) { lockfile_unlock(lockfile); - CHECK(lockfile_lock("file", 0, &lockfile), EAGAIN); + CHECK(lockfile_lock("file", &lockfile), EAGAIN); exit(11); } } @@ -131,10 +131,10 @@ run_lock_twice_blocks_other_process(void) { struct lockfile *lockfile, *dummy; - CHECK(lockfile_lock("file", 0, &lockfile), 0); - CHECK(lockfile_lock("file", 0, &dummy), EDEADLK); + CHECK(lockfile_lock("file", &lockfile), 0); + CHECK(lockfile_lock("file", &dummy), EDEADLK); if (do_fork() == CHILD) { - CHECK(lockfile_lock("file", 0, &dummy), EAGAIN); + CHECK(lockfile_lock("file", &dummy), EAGAIN); exit(11); } } @@ -144,72 +144,31 @@ run_lock_and_unlock_allows_other_process(void) { struct lockfile *lockfile; - CHECK(lockfile_lock("file", 0, &lockfile), 0); + CHECK(lockfile_lock("file", &lockfile), 0); lockfile_unlock(lockfile); if (do_fork() == CHILD) { - CHECK(lockfile_lock("file", 0, &lockfile), 0); + CHECK(lockfile_lock("file", &lockfile), 0); exit(11); } } -static void -run_lock_timeout_gets_the_lock(void) -{ - struct lockfile *lockfile; - - CHECK(lockfile_lock("file", 0, &lockfile), 0); - - if (do_fork() == CHILD) { - lockfile_unlock(lockfile); - CHECK(lockfile_lock("file", TIME_UPDATE_INTERVAL * 3, &lockfile), 0); - exit(11); - } else { - long long int now = time_msec(); - while (time_msec() < now + TIME_UPDATE_INTERVAL) { - pause(); - } - lockfile_unlock(lockfile); - } -} - -static void -run_lock_timeout_runs_out(void) -{ - struct lockfile *lockfile; - - CHECK(lockfile_lock("file", 0, &lockfile), 0); - - if (do_fork() == CHILD) { - lockfile_unlock(lockfile); - CHECK(lockfile_lock("file", TIME_UPDATE_INTERVAL, &lockfile), - ETIMEDOUT); - exit(11); - } else { - long long int now = time_msec(); - while (time_msec() < now + TIME_UPDATE_INTERVAL * 3) { - pause(); - } - lockfile_unlock(lockfile); - } -} - static void run_lock_multiple(void) { struct lockfile *a, *b, *c, *dummy; - CHECK(lockfile_lock("a", 0, &a), 0); - CHECK(lockfile_lock("b", 0, &b), 0); - CHECK(lockfile_lock("c", 0, &c), 0); + CHECK(lockfile_lock("a", &a), 0); + CHECK(lockfile_lock("b", &b), 0); + CHECK(lockfile_lock("c", &c), 0); lockfile_unlock(a); - CHECK(lockfile_lock("a", 0, &a), 0); - CHECK(lockfile_lock("a", 0, &dummy), EDEADLK); + CHECK(lockfile_lock("a", &a), 0); + CHECK(lockfile_lock("a", &dummy), EDEADLK); lockfile_unlock(a); lockfile_unlock(b); - CHECK(lockfile_lock("a", 0, &a), 0); + CHECK(lockfile_lock("a", &a), 0); lockfile_unlock(c); lockfile_unlock(a); @@ -231,14 +190,14 @@ run_lock_symlink(void) CHECK(stat(".b.~lock~", &s), -1); CHECK(errno, ENOENT); - CHECK(lockfile_lock("a", 0, &a), 0); - CHECK(lockfile_lock("a", 0, &dummy), EDEADLK); - CHECK(lockfile_lock("b", 0, &dummy), EDEADLK); + CHECK(lockfile_lock("a", &a), 0); + CHECK(lockfile_lock("a", &dummy), EDEADLK); + CHECK(lockfile_lock("b", &dummy), EDEADLK); lockfile_unlock(a); - CHECK(lockfile_lock("b", 0, &b), 0); - CHECK(lockfile_lock("b", 0, &dummy), EDEADLK); - CHECK(lockfile_lock("a", 0, &dummy), EDEADLK); + CHECK(lockfile_lock("b", &b), 0); + CHECK(lockfile_lock("b", &dummy), EDEADLK); + CHECK(lockfile_lock("a", &dummy), EDEADLK); lockfile_unlock(b); CHECK(lstat(".a.~lock~", &s), 0); @@ -268,29 +227,16 @@ run_lock_symlink_to_dir(void) CHECK(S_ISLNK(s.st_mode) != 0, 1); /* Lock 'a'. */ - CHECK(lockfile_lock("a", 0, &a), 0); + CHECK(lockfile_lock("a", &a), 0); CHECK(lstat("dir/.b.~lock~", &s), 0); CHECK(S_ISREG(s.st_mode) != 0, 1); CHECK(lstat(".a.~lock~", &s), -1); CHECK(errno, ENOENT); - CHECK(lockfile_lock("dir/b", 0, &dummy), EDEADLK); + CHECK(lockfile_lock("dir/b", &dummy), EDEADLK); lockfile_unlock(a); } -static void -run_help(void) -{ - size_t i; - - printf("usage: %s TESTNAME\n" - "where TESTNAME is one of the following:\n", - program_name); - for (i = 0; tests[i].name; i++) { - fprintf(stderr, "\t%s\n", tests[i].name); - } -} - static const struct test tests[] = { #define TEST(NAME) { #NAME, run_##NAME } TEST(lock_and_unlock), @@ -300,8 +246,6 @@ static const struct test tests[] = { TEST(lock_blocks_other_process), TEST(lock_twice_blocks_other_process), TEST(lock_and_unlock_allows_other_process), - TEST(lock_timeout_gets_the_lock), - TEST(lock_timeout_runs_out), TEST(lock_multiple), TEST(lock_symlink), TEST(lock_symlink_to_dir), @@ -310,19 +254,31 @@ static const struct test tests[] = { #undef TEST }; -int -main(int argc, char *argv[]) +static void +run_help(void) +{ + size_t i; + + printf("usage: %s TESTNAME\n" + "where TESTNAME is one of the following:\n", + program_name); + for (i = 0; tests[i].name; i++) { + fprintf(stderr, "\t%s\n", tests[i].name); + } +} + +static void +test_lockfile_main(int argc, char *argv[]) { - extern struct vlog_module VLM_lockfile; size_t i; set_program_name(argv[0]); - vlog_set_levels(&VLM_lockfile, VLF_ANY_FACILITY, VLL_ERR); + vlog_set_pattern(VLF_CONSOLE, "%c|%p|%m"); + vlog_set_levels(NULL, VLF_SYSLOG, VLL_OFF); if (argc != 2) { ovs_fatal(0, "exactly one argument required; use \"%s help\" for help", program_name); - return 1; } for (i = 0; tests[i].name; i++) { @@ -354,3 +310,4 @@ main(int argc, char *argv[]) argv[1], program_name); } +OVSTEST_REGISTER("test-lockfile", test_lockfile_main);