]> git.ozlabs.org Git - ccan/blobdiff - ccan/tdb2/test/run-82-lockattr.c
tdb2: test: try (almost) all tests with TDB_VERSION1 flag.
[ccan] / ccan / tdb2 / test / run-82-lockattr.c
index 20d0aaafa05e1b282595093ee2c21674e5f348aa..acad4399414d14b7859dd7b26a7ebdf1b3f518d3 100644 (file)
@@ -29,29 +29,6 @@ static int mylock(int fd, int rw, off_t off, off_t len, bool waitflag,
        return ret;
 }
 
        return ret;
 }
 
-static int myunlock(int fd, int rw, off_t off, off_t len, void *_err)
-{
-       int *lock_err = _err;
-       struct flock fl;
-       int ret;
-
-       if (*lock_err) {
-               errno = *lock_err;
-               return -1;
-       }
-
-       do {
-               fl.l_type = F_UNLCK;
-               fl.l_whence = SEEK_SET;
-               fl.l_start = off;
-               fl.l_len = len;
-
-               ret = fcntl(fd, F_SETLKW, &fl);
-       } while (ret != 0 && errno == EINTR);
-
-       return ret;
-}
-
 static int trav_err;
 static int trav(struct tdb_context *tdb, TDB_DATA k, TDB_DATA d, int *err)
 {
 static int trav_err;
 static int trav(struct tdb_context *tdb, TDB_DATA k, TDB_DATA d, int *err)
 {
@@ -64,7 +41,10 @@ int main(int argc, char *argv[])
        unsigned int i;
        struct tdb_context *tdb;
        int flags[] = { TDB_DEFAULT, TDB_NOMMAP,
        unsigned int i;
        struct tdb_context *tdb;
        int flags[] = { TDB_DEFAULT, TDB_NOMMAP,
-                       TDB_CONVERT, TDB_NOMMAP|TDB_CONVERT };
+                       TDB_CONVERT, TDB_NOMMAP|TDB_CONVERT,
+                       TDB_VERSION1, TDB_NOMMAP|TDB_VERSION1,
+                       TDB_CONVERT|TDB_VERSION1,
+                       TDB_NOMMAP|TDB_CONVERT|TDB_VERSION1 };
        union tdb_attribute lock_attr;
        struct tdb_data key = tdb_mkdata("key", 3);
        struct tdb_data data = tdb_mkdata("data", 4);
        union tdb_attribute lock_attr;
        struct tdb_data key = tdb_mkdata("key", 3);
        struct tdb_data data = tdb_mkdata("data", 4);
@@ -73,13 +53,21 @@ int main(int argc, char *argv[])
        lock_attr.base.attr = TDB_ATTRIBUTE_FLOCK;
        lock_attr.base.next = &tap_log_attr;
        lock_attr.flock.lock = mylock;
        lock_attr.base.attr = TDB_ATTRIBUTE_FLOCK;
        lock_attr.base.next = &tap_log_attr;
        lock_attr.flock.lock = mylock;
-       lock_attr.flock.unlock = myunlock;
+       lock_attr.flock.unlock = tdb_fcntl_unlock;
        lock_attr.flock.data = &lock_err;
 
        plan_tests(sizeof(flags) / sizeof(flags[0]) * 80);
 
        for (i = 0; i < sizeof(flags) / sizeof(flags[0]); i++) {
                struct tdb_data d;
        lock_attr.flock.data = &lock_err;
 
        plan_tests(sizeof(flags) / sizeof(flags[0]) * 80);
 
        for (i = 0; i < sizeof(flags) / sizeof(flags[0]); i++) {
                struct tdb_data d;
+               unsigned int num_oom_messages;
+
+               /* TDB1 double logs here. */
+               if (flags[i] & TDB_VERSION1) {
+                       num_oom_messages = 2;
+               } else {
+                       num_oom_messages = 1;
+               }
 
                /* Nonblocking open; expect no error message. */
                lock_err = EAGAIN;
 
                /* Nonblocking open; expect no error message. */
                lock_err = EAGAIN;
@@ -121,7 +109,7 @@ int main(int argc, char *argv[])
                ok1(tap_log_messages == 0);
                lock_err = ENOMEM;
                ok1(tdb_store(tdb, key, data, TDB_REPLACE) == TDB_ERR_LOCK);
                ok1(tap_log_messages == 0);
                lock_err = ENOMEM;
                ok1(tdb_store(tdb, key, data, TDB_REPLACE) == TDB_ERR_LOCK);
-               ok1(tap_log_messages == 1);
+               ok1(tap_log_messages == num_oom_messages);
                tap_log_messages = 0;
 
                /* Nonblocking fetch. */
                tap_log_messages = 0;
 
                /* Nonblocking fetch. */
@@ -133,7 +121,7 @@ int main(int argc, char *argv[])
                ok1(tap_log_messages == 0);
                lock_err = ENOMEM;
                ok1(!tdb_exists(tdb, key));
                ok1(tap_log_messages == 0);
                lock_err = ENOMEM;
                ok1(!tdb_exists(tdb, key));
-               ok1(tap_log_messages == 1);
+               ok1(tap_log_messages == num_oom_messages);
                tap_log_messages = 0;
 
                lock_err = EAGAIN;
                tap_log_messages = 0;
 
                lock_err = EAGAIN;
@@ -144,7 +132,7 @@ int main(int argc, char *argv[])
                ok1(tap_log_messages == 0);
                lock_err = ENOMEM;
                ok1(tdb_fetch(tdb, key, &d) == TDB_ERR_LOCK);
                ok1(tap_log_messages == 0);
                lock_err = ENOMEM;
                ok1(tdb_fetch(tdb, key, &d) == TDB_ERR_LOCK);
-               ok1(tap_log_messages == 1);
+               ok1(tap_log_messages == num_oom_messages);
                tap_log_messages = 0;
 
                /* Nonblocking delete. */
                tap_log_messages = 0;
 
                /* Nonblocking delete. */
@@ -156,7 +144,7 @@ int main(int argc, char *argv[])
                ok1(tap_log_messages == 0);
                lock_err = ENOMEM;
                ok1(tdb_delete(tdb, key) == TDB_ERR_LOCK);
                ok1(tap_log_messages == 0);
                lock_err = ENOMEM;
                ok1(tdb_delete(tdb, key) == TDB_ERR_LOCK);
-               ok1(tap_log_messages == 1);
+               ok1(tap_log_messages == num_oom_messages);
                tap_log_messages = 0;
 
                /* Nonblocking locks. */
                tap_log_messages = 0;
 
                /* Nonblocking locks. */
@@ -168,7 +156,7 @@ int main(int argc, char *argv[])
                ok1(tap_log_messages == 0);
                lock_err = ENOMEM;
                ok1(tdb_chainlock(tdb, key) == TDB_ERR_LOCK);
                ok1(tap_log_messages == 0);
                lock_err = ENOMEM;
                ok1(tdb_chainlock(tdb, key) == TDB_ERR_LOCK);
-               ok1(tap_log_messages == 1);
+               ok1(tap_log_messages == num_oom_messages);
                tap_log_messages = 0;
 
                lock_err = EAGAIN;
                tap_log_messages = 0;
 
                lock_err = EAGAIN;
@@ -179,7 +167,7 @@ int main(int argc, char *argv[])
                ok1(tap_log_messages == 0);
                lock_err = ENOMEM;
                ok1(tdb_chainlock_read(tdb, key) == TDB_ERR_LOCK);
                ok1(tap_log_messages == 0);
                lock_err = ENOMEM;
                ok1(tdb_chainlock_read(tdb, key) == TDB_ERR_LOCK);
-               ok1(tap_log_messages == 1);
+               ok1(tap_log_messages == num_oom_messages);
                tap_log_messages = 0;
 
                lock_err = EAGAIN;
                tap_log_messages = 0;
 
                lock_err = EAGAIN;
@@ -218,7 +206,7 @@ int main(int argc, char *argv[])
                trav_err = ENOMEM;
                lock_err = 0;
                ok1(tdb_traverse(tdb, trav, &lock_err) == TDB_ERR_LOCK);
                trav_err = ENOMEM;
                lock_err = 0;
                ok1(tdb_traverse(tdb, trav, &lock_err) == TDB_ERR_LOCK);
-               ok1(tap_log_messages == 1);
+               ok1(tap_log_messages == num_oom_messages);
                tap_log_messages = 0;
 
                /* Nonblocking transactions. */
                tap_log_messages = 0;
 
                /* Nonblocking transactions. */