From 539633536313ff11473fb278485f49d09930c25b Mon Sep 17 00:00:00 2001 From: Christian Decker Date: Wed, 31 May 2017 15:26:30 +0200 Subject: [PATCH] wallet: Add wallet_tests and simplify db_tests I'll eventually move the utils into a different location (maybe CCAN?) but for now I'm keeping it close to where it is used. --- wallet/db_tests.c | 21 ++++++--------------- wallet/test_utils.h | 24 ++++++++++++++++++++++++ wallet/wallet_tests.c | 41 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 71 insertions(+), 15 deletions(-) create mode 100644 wallet/test_utils.h create mode 100644 wallet/wallet_tests.c diff --git a/wallet/db_tests.c b/wallet/db_tests.c index 726fe7c91..13d946f7e 100644 --- a/wallet/db_tests.c +++ b/wallet/db_tests.c @@ -1,5 +1,7 @@ #include "db.c" +#include "wallet/test_utils.h" + #include #include @@ -20,24 +22,13 @@ static struct db *create_test_db(const char *testname) static bool test_empty_db_migrate(void) { struct db *db = create_test_db(__func__); - if (!db) - goto fail; - - if (db_get_version(db) != -1) - goto fail; - - if (!db_migrate(db)) - goto fail; - - if (db_get_version(db) != db_migration_count()) - goto fail; + CHECK(db); + CHECK(db_get_version(db) == -1); + CHECK(db_migrate(db)); + CHECK(db_get_version(db) == db_migration_count()); tal_free(db); return true; -fail: - printf("Migration failed with error: %s\n", db->err); - tal_free(db); - return false; } int main(void) diff --git a/wallet/test_utils.h b/wallet/test_utils.h new file mode 100644 index 000000000..d6df98d80 --- /dev/null +++ b/wallet/test_utils.h @@ -0,0 +1,24 @@ +#ifndef LIGHTNING_WALLET_TEST_UTILS_H +#define LIGHTNING_WALLET_TEST_UTILS_H + +/* Definitions "inspired" by libsecp256k1 */ +#define TEST_FAILURE(msg) do { \ + fprintf(stderr, "%s:%d: %s\n", __FILE__, __LINE__, msg); \ + return false; \ +} while(0) + +#ifdef HAVE_BUILTIN_EXPECT +#define EXPECT(x,c) __builtin_expect((x),(c)) +#else +#define EXPECT(x,c) (x) +#endif + +#define CHECK_MSG(cond,msg) do { \ + if (EXPECT(!(cond), 0)) { \ + TEST_FAILURE(msg); \ + } \ +} while(0) + +#define CHECK(cond) CHECK_MSG(cond,"test condition failed"); + +#endif /* LIGHTNING_WALLET_TEST_UTILS_H */ diff --git a/wallet/wallet_tests.c b/wallet/wallet_tests.c new file mode 100644 index 000000000..84bcab134 --- /dev/null +++ b/wallet/wallet_tests.c @@ -0,0 +1,41 @@ +#include "wallet.c" + +#include "db.c" +#include "wallet/test_utils.h" + +#include +#include + +static bool test_wallet_add_utxo(void) +{ + char filename[] = "/tmp/ldb-XXXXXX"; + struct utxo u; + int fd = mkstemp(filename); + struct wallet *w = tal(NULL, struct wallet); + CHECK_MSG(fd != -1, "Unable to generate temp filename"); + close(fd); + + w->db = db_open(w, filename); + CHECK_MSG(w->db,"Failed opening the db"); + CHECK_MSG(db_migrate(w->db), "DB migration failed"); + + memset(&u, 0, sizeof(u)); + + /* Should work, it's the first time we add it */ + CHECK_MSG(wallet_add_utxo(w, &u, p2sh_wpkh), "wallet_add_utxo failed on first add"); + + /* Should fail, we already have that UTXO */ + CHECK_MSG(!wallet_add_utxo(w, &u, p2sh_wpkh), "wallet_add_utxo succeeded on second add"); + tal_free(w); + return true; + +} + +int main(void) +{ + bool ok = true; + + ok &= test_wallet_add_utxo(); + + return !ok; +}