diff --git a/wallet/test/run-wallet.c b/wallet/test/run-wallet.c index 7f429a3be..07f42585d 100644 --- a/wallet/test/run-wallet.c +++ b/wallet/test/run-wallet.c @@ -912,12 +912,18 @@ static bool test_channel_crud(struct lightningd *ld, const tal_t *ctx) struct changed_htlc *last_commit; secp256k1_ecdsa_signature *sig = tal(w, secp256k1_ecdsa_signature); u8 *scriptpubkey = tal_arr(ctx, u8, 100); + secp256k1_ecdsa_signature *node_sig1 = tal(w, secp256k1_ecdsa_signature); + secp256k1_ecdsa_signature *bitcoin_sig1 = tal(w, secp256k1_ecdsa_signature); + secp256k1_ecdsa_signature *node_sig2, *bitcoin_sig2; + bool load; memset(&c1, 0, sizeof(c1)); memset(c2, 0, sizeof(*c2)); memset(ci, 3, sizeof(*ci)); mempat(hash, sizeof(*hash)); mempat(sig, sizeof(*sig)); + mempat(node_sig1, sizeof(*node_sig1)); + mempat(bitcoin_sig1, sizeof(*bitcoin_sig1)); last_commit = tal_arr(w, struct changed_htlc, 2); mempat(last_commit, tal_bytelen(last_commit)); pubkey_from_der(tal_hexdata(w, "02a1633cafcc01ebfb6d78e39f687a1f0995c62fc95f51ead10a02ee0be551b5dc", 66), 33, &pk); @@ -992,6 +998,11 @@ static bool test_channel_crud(struct lightningd *ld, const tal_t *ctx) CHECK_MSG(channelseq(&c1, c2), "Compare loaded with saved (v3)"); tal_free(c2); + /* Updates should not result in new ids */ + CHECK(c1.dbid == 1); + CHECK(c1.peer->dbid == 1); + CHECK(c1.their_shachain.id == 1); + /* Variant 4: update and add remote_shutdown_scriptpubkey */ c1.remote_shutdown_scriptpubkey = scriptpubkey; wallet_channel_save(w, &c1); @@ -1002,8 +1013,30 @@ static bool test_channel_crud(struct lightningd *ld, const tal_t *ctx) CHECK_MSG(channelseq(&c1, c2), "Compare loaded with saved (v4)"); tal_free(c2); + /* Updates should not result in new ids */ + CHECK(c1.dbid == 1); + CHECK(c1.peer->dbid == 1); + CHECK(c1.their_shachain.id == 1); + + /* Variant 5: update with remote_ann sigs */ + /* set flag of CHANNEL_FLAGS_ANNOUNCE_CHANNEL */ + c1.channel_flags |= 1; + wallet_channel_save(w, &c1); + CHECK_MSG(!wallet_err, + tal_fmt(w, "Insert into DB: %s", wallet_err)); + wallet_announcement_save(w, c1.dbid, node_sig1, bitcoin_sig1); + CHECK_MSG(!wallet_err, + tal_fmt(w, "Insert ann sigs into DB: %s", wallet_err)); + CHECK_MSG(load = wallet_remote_ann_sigs_load(w, w, c1.dbid, &node_sig2, &bitcoin_sig2), tal_fmt(w, "Load ann sigs from DB")); + CHECK_MSG(!wallet_err, + tal_fmt(w, "Load ann sigs from DB: %s", wallet_err)); + CHECK(load == true); + CHECK_MSG(!memcmp(node_sig1, node_sig2, sizeof(*node_sig1)), "Compare ann sigs loaded with saved (v5)"); + CHECK_MSG(!memcmp(bitcoin_sig1, bitcoin_sig2, sizeof(*node_sig1)), "Compare ann sigs loaded with saved (v5)"); + db_commit_transaction(w->db); CHECK(!wallet_err); + /* Normally freed by destroy_channel, but we don't call that */ tal_free(p); return true;