X-Git-Url: https://git.ozlabs.org/?a=blobdiff_plain;f=ccan%2Ftdb%2Ftest%2Frun-wronghash-old.c;fp=ccan%2Ftdb%2Ftest%2Frun-wronghash-old.c;h=3f1955eec772f5ae1a0458a18dffc986050d854f;hb=fdf3c148052f30d10e8c72fbdbdaf67d4a51b11e;hp=0000000000000000000000000000000000000000;hpb=63bceea014e091a2f2907e49f7c3b33f042106f4;p=ccan diff --git a/ccan/tdb/test/run-wronghash-old.c b/ccan/tdb/test/run-wronghash-old.c new file mode 100644 index 00000000..3f1955ee --- /dev/null +++ b/ccan/tdb/test/run-wronghash-old.c @@ -0,0 +1,68 @@ +#define _XOPEN_SOURCE 500 +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +static unsigned int non_jenkins_hash(TDB_DATA *key) +{ + return ~hash_stable(key->dptr, key->dsize, 0); +} + +static void log_fn(struct tdb_context *tdb, enum tdb_debug_level level, const char *fmt, ...) +{ + unsigned int *count = tdb_get_logging_private(tdb); + /* Old code used to complain about spinlocks on new databases. */ + if (strstr(fmt, "spinlock")) + (*count)++; +} + +/* The old code should barf on new-style TDBs created with a non-default hash. + */ +int main(int argc, char *argv[]) +{ + struct tdb_context *tdb; + unsigned int log_count; + struct tdb_logging_context log_ctx = { log_fn, &log_count }; + + plan_tests(8); + + /* We should fail to open new-style non-default-hash tdbs of + * either endian. */ + log_count = 0; + tdb = tdb_open_ex("test/jenkins-le-hash.tdb", 0, 0, O_RDWR, 0, + &log_ctx, NULL); + ok1(!tdb); + ok1(log_count == 1); + + log_count = 0; + tdb = tdb_open_ex("test/jenkins-be-hash.tdb", 0, 0, O_RDWR, 0, + &log_ctx, NULL); + ok1(!tdb); + ok1(log_count == 1); + + /* And of course, if we use the wrong hash it will still fail. */ + log_count = 0; + tdb = tdb_open_ex("test/jenkins-le-hash.tdb", 0, 0, O_RDWR, 0, + &log_ctx, non_jenkins_hash); + ok1(!tdb); + ok1(log_count == 1); + + log_count = 0; + tdb = tdb_open_ex("test/jenkins-be-hash.tdb", 0, 0, O_RDWR, 0, + &log_ctx, non_jenkins_hash); + ok1(!tdb); + ok1(log_count == 1); + + return exit_status(); +}