]> git.ozlabs.org Git - ccan/blobdiff - ccan/tdb2/test/run-traverse.c
tdb2: feature support.
[ccan] / ccan / tdb2 / test / run-traverse.c
index 97694a842b2ccd1522d28a8f48fb44f36c1deb8b..13c3d4573d8ab0358d2d2d0f9685271d4c37cf61 100644 (file)
@@ -5,6 +5,7 @@
 #include <ccan/tdb2/hash.c>
 #include <ccan/tdb2/check.c>
 #include <ccan/tdb2/traverse.c>
+#include <ccan/tdb2/transaction.c>
 #include <ccan/tap/tap.h>
 #include "logging.h"
 
@@ -37,9 +38,9 @@ struct trav_data {
        enum TDB_ERROR delete_error;
 };
 
-static int trav(struct tdb_context *tdb, TDB_DATA key, TDB_DATA dbuf, void *p)
+static int trav(struct tdb_context *tdb, TDB_DATA key, TDB_DATA dbuf,
+               struct trav_data *td)
 {
-       struct trav_data *td = p;
        int val;
 
        td->calls++;
@@ -55,9 +56,8 @@ static int trav(struct tdb_context *tdb, TDB_DATA key, TDB_DATA dbuf, void *p)
                td->high = val;
 
        if (td->delete) {
-
-               if (tdb_delete(tdb, key) != 0) {
-                       td->delete_error = tdb_error(tdb);
+               td->delete_error = tdb_delete(tdb, key);
+               if (td->delete_error != TDB_SUCCESS) {
                        return -1;
                }
        }
@@ -75,9 +75,8 @@ struct trav_grow_data {
 };
 
 static int trav_grow(struct tdb_context *tdb, TDB_DATA key, TDB_DATA dbuf,
-                    void *p)
+                    struct trav_grow_data *tgd)             
 {
-       struct trav_grow_data *tgd = p;
        int val;
        unsigned char buffer[128] = { 0 };
 
@@ -95,8 +94,8 @@ static int trav_grow(struct tdb_context *tdb, TDB_DATA key, TDB_DATA dbuf,
        /* Make a big difference to the database. */
        dbuf.dptr = buffer;
        dbuf.dsize = sizeof(buffer);
-       if (tdb_append(tdb, key, dbuf) != 0) {
-               tgd->error = tdb_error(tdb);
+       tgd->error = tdb_append(tdb, key, dbuf);
+       if (tgd->error != TDB_SUCCESS) {
                return -1;
        }
        return 0;
@@ -119,7 +118,7 @@ int main(int argc, char *argv[])
 
        hattr.base.next = &tap_log_attr;
 
-       plan_tests(sizeof(flags) / sizeof(flags[0]) * 50 + 1);
+       plan_tests(sizeof(flags) / sizeof(flags[0]) * 32 + 1);
        for (i = 0; i < sizeof(flags) / sizeof(flags[0]); i++) {
                tdb = tdb_open("run-traverse.tdb", flags[i],
                               O_RDWR|O_CREAT|O_TRUNC, 0600, &hattr);
@@ -127,30 +126,12 @@ int main(int argc, char *argv[])
                if (!tdb)
                        continue;
 
-               ok1(tdb_traverse_read(tdb, NULL, NULL) == 0);
                ok1(tdb_traverse(tdb, NULL, NULL) == 0);
 
                ok1(store_records(tdb));
-               num = tdb_traverse_read(tdb, NULL, NULL);
-               ok1(num == NUM_RECORDS);
                num = tdb_traverse(tdb, NULL, NULL);
                ok1(num == NUM_RECORDS);
 
-               /* Full traverse (read-only). */
-               td.calls = 0;
-               td.call_limit = UINT_MAX;
-               td.low = INT_MAX;
-               td.high = INT_MIN;
-               td.mismatch = false;
-               td.delete = false;
-
-               num = tdb_traverse_read(tdb, trav, &td);
-               ok1(num == NUM_RECORDS);
-               ok1(!td.mismatch);
-               ok1(td.calls == NUM_RECORDS);
-               ok1(td.low == 0);
-               ok1(td.high == NUM_RECORDS-1);
-
                /* Full traverse. */
                td.calls = 0;
                td.call_limit = UINT_MAX;
@@ -181,34 +162,7 @@ int main(int argc, char *argv[])
                ok1(td.low <= NUM_RECORDS / 2);
                ok1(td.high > NUM_RECORDS / 2);
                ok1(tdb_check(tdb, NULL, NULL) == 0);
-
-               /* Growing traverse.  Expect failure on r/o traverse. */
-               tgd.calls = 0;
-               tgd.num_large = 0;
-               tgd.mismatch = false;
-               tgd.error = TDB_SUCCESS;
-               num = tdb_traverse_read(tdb, trav_grow, &tgd);
-               ok1(num == 1);
-               ok1(tgd.error == TDB_ERR_RDONLY);
-               ok1(tgd.calls == 1);
-               ok1(!tgd.mismatch);
-               ok1(tdb_check(tdb, NULL, NULL) == 0);
-
-               /* Deleting traverse.  Expect failure on r/o traverse. */
-               td.calls = 0;
-               td.call_limit = UINT_MAX;
-               td.low = INT_MAX;
-               td.high = INT_MIN;
-               td.mismatch = false;
-               td.delete = true;
-               td.delete_error = TDB_SUCCESS;
-               num = tdb_traverse_read(tdb, trav, &td);
-               ok1(num == 1);
-               ok1(td.delete_error == TDB_ERR_RDONLY);
-               ok1(!td.mismatch);
-               ok1(td.calls == 1);
-               ok1(td.low == td.high);
-               ok1(tdb_check(tdb, NULL, NULL) == 0);
+               ok1(tap_log_messages == 0);
 
                /* Deleting traverse (delete everything). */
                td.calls = 0;
@@ -228,12 +182,11 @@ int main(int argc, char *argv[])
                ok1(tdb_check(tdb, NULL, NULL) == 0);
 
                /* Now it's empty! */
-               ok1(tdb_traverse_read(tdb, NULL, NULL) == 0);
                ok1(tdb_traverse(tdb, NULL, NULL) == 0);
 
                /* Re-add. */
                ok1(store_records(tdb));
-               ok1(tdb_traverse_read(tdb, NULL, NULL) == NUM_RECORDS);
+               ok1(tdb_traverse(tdb, NULL, NULL) == NUM_RECORDS);
                ok1(tdb_check(tdb, NULL, NULL) == 0);
 
                /* Grow.  This will cause us to be reshuffled. */