test: initial http tests for indexer

This commit is contained in:
Braydon Fuller 2019-03-25 19:31:19 -07:00
parent 9f86dbca28
commit aa3f02d585
No known key found for this signature in database
GPG Key ID: F24F232D108B3AD4

View File

@ -12,8 +12,10 @@ const MemWallet = require('./util/memwallet');
const TXIndexer = require('../lib/indexer/txindexer');
const AddrIndexer = require('../lib/indexer/addrindexer');
const BlockStore = require('../lib/blockstore/level');
const FullNode = require('../lib/node/fullnode');
const Network = require('../lib/protocol/network');
const network = Network.get('regtest');
const {NodeClient, WalletClient} = require('bclient');
const workers = new WorkerPool({
enabled: true
@ -58,7 +60,7 @@ const addrindexer = new AddrIndexer({
});
describe('Indexer', function() {
this.timeout(45000);
this.timeout(120000);
before(async () => {
await blocks.open();
@ -197,4 +199,112 @@ describe('Indexer', function() {
}
});
});
describe('http', function() {
this.timeout(120000);
let node, nclient, wclient = null;
const vectors = [
// Secret for the vectors:
// cVDJUtDjdaM25yNVVDLLX3hcHUfth4c7tY3rSc4hy9e8ibtCuj6G
// {addr: 'bcrt1qngw83fg8dz0k749cg7k3emc7v98wy0c7azaa6h', amount: 19.99},
{addr: 'muZpTpBYhxmRFuCjLc7C6BBDF32C8XVJUi', amount: 1.99}
];
const txids = [];
const ports = {
p2p: 49331,
node: 49332,
wallet: 49333
};
before(async () => {
this.timeout(120000);
// Setup a testing node with txindex and addrindex
// both enabled.
node = new FullNode({
network: 'regtest',
apiKey: 'foo',
walletAuth: true,
memory: true,
workers: true,
indexTX: true,
indexAddress: true,
port: ports.p2p,
httpPort: ports.node,
plugins: [require('../lib/wallet/plugin')],
env: {
'BCOIN_WALLET_HTTP_PORT': ports.wallet.toString()
}
});
await node.open();
// Setup the node client to make calls to the node
// to generate blocks and other tasks.
nclient = new NodeClient({
port: ports.node,
apiKey: 'foo',
timeout: 120000
});
await nclient.open();
// Setup a test wallet to generate transactions for
// testing various scenarios.
wclient = new WalletClient({
port: ports.wallet,
apiKey: 'foo',
timeout: 120000
});
await wclient.open();
// Generate initial set of transactions and
// send the coinbase to alice.
const coinbase = await wclient.execute(
'getnewaddress', ['default']);
const blocks = await nclient.execute(
'generatetoaddress', [120, coinbase]);
assert.equal(blocks.length, 120);
// Send to the vector addresses for several blocks.
for (let i = 0; i < 10; i++) {
for (const v of vectors) {
const txid = await wclient.execute(
'sendtoaddress', [v.addr, v.amount]);
txids.push(txid);
}
const blocks = await nclient.execute(
'generatetoaddress', [1, coinbase]);
assert.equal(blocks.length, 1);
}
});
after(async () => {
await nclient.close();
await wclient.close();
await node.close();
});
it('will get txs by address', async () => {
for (const v of vectors) {
const res = await nclient.request(
'GET', `/tx/address/${v.addr}`, {});
assert.equal(res.length, 10);
for (const tx of res)
assert(txids.includes(tx.hash));
}
});
});
});