|
@ -57,11 +57,51 @@ static bool test_wallet_outputs(void) |
|
|
return true; |
|
|
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) |
|
|
int main(void) |
|
|
{ |
|
|
{ |
|
|
bool ok = true; |
|
|
bool ok = true; |
|
|
|
|
|
|
|
|
ok &= test_wallet_outputs(); |
|
|
ok &= test_wallet_outputs(); |
|
|
|
|
|
ok &= test_shachain_crud(); |
|
|
|
|
|
|
|
|
return !ok; |
|
|
return !ok; |
|
|
} |
|
|
} |
|
|