Files
electrum-client/test/tls.test.ts
2024-09-29 16:55:13 +02:00

79 lines
3.4 KiB
TypeScript

import { assert, afterEach, beforeEach, describe, expect, it } from "vitest";
import { ElectrumClient } from "../src";
let tlsClient: ElectrumClient;
beforeEach(async () => {
tlsClient = await ElectrumClient.createClient({
port: 60002,
host: "btc.electroncash.dk",
protocol: "tls",
electrumConfig: { client: "electrum-client-js", version: ["1.2", "1.4"] },
persistencePolicy: { retryPeriod: 2000 },
});
});
afterEach(() => {
tlsClient.close();
});
describe("ElectrumClient TLS", () => {
it("successfully connects to Electrum server", async () => {
assert.ok(tlsClient.versionInfo);
});
it("successfully makes a standard request", async () => {
const response = await tlsClient.blockchainTransaction_get(
"b270b8a113c048ed0024e470e3c7794565c2b3e18c600d20410ec8f454b7d25a",
);
assert.strictEqual(
response,
"02000000016016c6d039cbdeefa655e4b5ac61ec2b5fe16920529f086a2439f59a5994bed6200000006a4730440220421b5daf5f72e514075d256121d6b66e1d9a8993d37ceb0532baca11f6964da502205333d1c4b9be749180bfa8da4da6a07c0e9e2d853c809a75c4b60ef717a628b20121029139c783aa8f31707a67248a6a6b643855e9d1484dbd53cfe7d9e3adf3ce7098ffffffff02c19a01000000000017a9146eda8b447af853746f04b902fea5b2cd959d866d87692c0200000000001976a914443674ce759f8fa2fe83a6608339da782b890c1988ac00000000",
);
});
it("successfully makes a batch request", async () => {
const response = await tlsClient.blockchainTransaction_getBatch([
"b270b8a113c048ed0024e470e3c7794565c2b3e18c600d20410ec8f454b7d25a",
"f08474320cb16c34bb6ccbd8ca77b41168589155e8cf0af787d8d8b2a975af0b",
]);
expect(response).toEqual(
expect.arrayContaining([
{
id: 2,
jsonrpc: "2.0",
param:
"b270b8a113c048ed0024e470e3c7794565c2b3e18c600d20410ec8f454b7d25a",
result:
"02000000016016c6d039cbdeefa655e4b5ac61ec2b5fe16920529f086a2439f59a5994bed6200000006a4730440220421b5daf5f72e514075d256121d6b66e1d9a8993d37ceb0532baca11f6964da502205333d1c4b9be749180bfa8da4da6a07c0e9e2d853c809a75c4b60ef717a628b20121029139c783aa8f31707a67248a6a6b643855e9d1484dbd53cfe7d9e3adf3ce7098ffffffff02c19a01000000000017a9146eda8b447af853746f04b902fea5b2cd959d866d87692c0200000000001976a914443674ce759f8fa2fe83a6608339da782b890c1988ac00000000",
},
{
id: 3,
jsonrpc: "2.0",
param:
"f08474320cb16c34bb6ccbd8ca77b41168589155e8cf0af787d8d8b2a975af0b",
result:
"01000000000101536c64334a7e7c49713d836ef9230054e6c38b8c086a3e2068d054781aae89050100000000ffffffff025d9200000000000017a91415035c6225abdf351aa90e6a60726f5e2653839f8728751900000000002200209054b26aafa22ff9bff790d0ed9cc9c84079d7e237e1b617042df9a9734d8aec0400473044022059913f1526f2bfd5a236f86ada8f68b4943632ef9d306d44e482935774059aa60220360d783ca765299c114e28dd0304df913315e5297d9f78fd89319c1ddc6177260147304402204a135548f460dd96e3ea7f981c69d52773cec1475c278631a2180a8010b5dd7802206e090c9c6b1734a9757c76f9a1d5e576bf7b805d12e2d50d344800628dde4f420147522102254d4655d0cae8ad2d96a6789d08ac63982171f10795a5146d03a8369ffd51b921029009039142b4de669fe67507bb3a6b17ff38f7798ae4d7bb3826a3cc2527d62252ae00000000",
},
]),
);
});
it("should make a request after reconnection", async () => {
// @ts-ignore Hijack Typescript to call method on private field in order to simulate connection close
tlsClient.conn?.end();
const promise = await new Promise((resolve) => {
setTimeout(async () => {
const res = await tlsClient.server_banner();
resolve(res);
}, 10000);
});
assert.ok(promise);
});
});