mirror of
https://github.com/ElementsProject/lightning.git
synced 2025-01-18 21:35:11 +01:00
wallet: Created a simple persisted shachain unit-test
This exercises the create, read and update functionality of the persisted shachain.
This commit is contained in:
parent
34baf05973
commit
8b7efd01d7
@ -22,7 +22,7 @@ WALLET_TEST_PROGRAMS := $(WALLET_TEST_OBJS:.o=)
|
||||
|
||||
$(WALLET_TEST_OBJS): $(WALLET_LIB_OBJS)
|
||||
|
||||
$(WALLET_TEST_PROGRAMS): $(BITCOIN_OBJS) $(CCAN_OBJS) $(LIBBASE58_OBJS) daemon/log.o type_to_string.o daemon/pseudorand.o utils.o libwallycore.a libsecp256k1.a libsodium.a
|
||||
$(WALLET_TEST_PROGRAMS): $(BITCOIN_OBJS) $(CCAN_OBJS) $(LIBBASE58_OBJS) daemon/log.o type_to_string.o daemon/pseudorand.o ccan-crypto-shachain-48.o utils.o libwallycore.a libsecp256k1.a libsodium.a
|
||||
|
||||
$(WALLET_TEST_OBJS): $(CCAN_HEADERS)
|
||||
wallet/tests: $(WALLET_TEST_PROGRAMS:%=unittest/%)
|
||||
|
@ -57,11 +57,51 @@ static bool test_wallet_outputs(void)
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool test_shachain_crud(void)
|
||||
{
|
||||
struct wallet_shachain a, b;
|
||||
char filename[] = "/tmp/ldb-XXXXXX";
|
||||
int fd = mkstemp(filename);
|
||||
struct wallet *w = tal(NULL, struct wallet);
|
||||
struct sha256 seed, hash;
|
||||
shachain_index_t index = UINT64_MAX >> (64 - SHACHAIN_BITS);
|
||||
|
||||
w->db = db_open(w, filename);
|
||||
CHECK_MSG(w->db, "Failed opening the db");
|
||||
CHECK_MSG(db_migrate(w->db), "DB migration failed");
|
||||
|
||||
CHECK_MSG(fd != -1, "Unable to generate temp filename");
|
||||
close(fd);
|
||||
memset(&seed, 'A', sizeof(seed));
|
||||
|
||||
memset(&a, 0, sizeof(a));
|
||||
memset(&b, 0, sizeof(b));
|
||||
|
||||
w->db = db_open(w, filename);
|
||||
CHECK(wallet_shachain_init(w, &a));
|
||||
|
||||
CHECK(a.id == 1);
|
||||
|
||||
CHECK(a.chain.num_valid == 0 && a.chain.min_index == 0);
|
||||
|
||||
for (int i=0; i<100; i++) {
|
||||
shachain_from_seed(&seed, index, &hash);
|
||||
CHECK(wallet_shachain_add_hash(w, &a, index, &hash));
|
||||
index--;
|
||||
}
|
||||
|
||||
CHECK(wallet_shachain_load(w, a.id, &b));
|
||||
CHECK_MSG(memcmp(&a, &b, sizeof(a)) == 0, "Loading from database doesn't match");
|
||||
tal_free(w);
|
||||
return true;
|
||||
}
|
||||
|
||||
int main(void)
|
||||
{
|
||||
bool ok = true;
|
||||
|
||||
ok &= test_wallet_outputs();
|
||||
ok &= test_shachain_crud();
|
||||
|
||||
return !ok;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user