From 400d5787168d7df390701a91de267d5c7483f34b Mon Sep 17 00:00:00 2001 From: Braydon Fuller Date: Wed, 5 Jun 2019 11:59:28 -0700 Subject: [PATCH 1/3] indexer: fix error message --- lib/indexer/addrindexer.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/indexer/addrindexer.js b/lib/indexer/addrindexer.js index 92531591..10b85006 100644 --- a/lib/indexer/addrindexer.js +++ b/lib/indexer/addrindexer.js @@ -218,7 +218,7 @@ class AddrIndexer extends Indexer { limit = this.maxTxs; if (limit > this.maxTxs) - throw new Error('Limit above max of ${this.maxTxs}.'); + throw new Error(`Limit above max of ${this.maxTxs}.`); const hash = Address.getHash(addr); const prefix = addr.getPrefix(this.network); From f00985fefb3984330a5a1e42782f708369407257 Mon Sep 17 00:00:00 2001 From: Braydon Fuller Date: Wed, 5 Jun 2019 12:04:05 -0700 Subject: [PATCH 2/3] node: consistent rpc error messages --- lib/node/rpc.js | 6 +++--- lib/wallet/rpc.js | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/node/rpc.js b/lib/node/rpc.js index 90082f11..a46b2025 100644 --- a/lib/node/rpc.js +++ b/lib/node/rpc.js @@ -613,7 +613,7 @@ class RPC extends RPCBase { const entry = await this.chain.getEntry(hash); if (!entry) - throw new RPCError(errs.MISC_ERROR, 'Block not found'); + throw new RPCError(errs.MISC_ERROR, 'Block not found.'); const block = await this.chain.getBlock(entry.hash); @@ -652,7 +652,7 @@ class RPC extends RPCBase { const entry = await this.chain.getEntry(height); if (!entry) - throw new RPCError(errs.MISC_ERROR, 'Block not found'); + throw new RPCError(errs.MISC_ERROR, 'Block not found.'); const block = await this.chain.getBlock(entry.hash); @@ -706,7 +706,7 @@ class RPC extends RPCBase { const entry = await this.chain.getEntry(hash); if (!entry) - throw new RPCError(errs.MISC_ERROR, 'Block not found'); + throw new RPCError(errs.MISC_ERROR, 'Block not found.'); if (!verbose) return entry.toRaw().toString('hex', 0, 80); diff --git a/lib/wallet/rpc.js b/lib/wallet/rpc.js index 1dd9ccec..a0b8fda7 100644 --- a/lib/wallet/rpc.js +++ b/lib/wallet/rpc.js @@ -1080,7 +1080,7 @@ class RPC extends RPCBase { if (entry) height = entry.height; else - throw new RPCError(errs.MISC_ERROR, 'Block not found'); + throw new RPCError(errs.MISC_ERROR, 'Block not found.'); } if (height === -1) From a3a34dbfe6df6656d1f1eb788ba5064dac5469dc Mon Sep 17 00:00:00 2001 From: Braydon Fuller Date: Wed, 5 Jun 2019 12:06:18 -0700 Subject: [PATCH 3/3] test: remove test assert util and use bsert --- test/address-test.js | 2 +- test/bech32-test.js | 2 +- test/block-test.js | 2 +- test/blockstore-test.js | 2 +- test/chain-test.js | 2 +- test/coin-test.js | 2 +- test/coins-test.js | 4 +- test/consensus-test.js | 2 +- test/hd-test.js | 2 +- test/headers-test.js | 2 +- test/http-test.js | 14 +-- test/indexer-test.js | 30 +++-- test/input-test.js | 2 +- test/keyring-test.js | 2 +- test/mempool-test.js | 2 +- test/mnemonic-test.js | 2 +- test/net-test.js | 2 +- test/node-test.js | 12 +- test/outpoint-test.js | 2 +- test/pow-test.js | 2 +- test/protocol-test.js | 8 +- test/rpc-test.js | 51 ++++++--- test/script-test.js | 4 +- test/tx-test.js | 2 +- test/txmeta-test.js | 2 +- test/util/assert.js | 230 -------------------------------------- test/util/common.js | 2 +- test/util/memwallet.js | 2 +- test/util/node-context.js | 2 +- test/util/reorg.js | 2 +- test/utils-test.js | 2 +- test/wallet-rpc-test.js | 12 +- test/wallet-test.js | 2 +- 33 files changed, 111 insertions(+), 302 deletions(-) delete mode 100644 test/util/assert.js diff --git a/test/address-test.js b/test/address-test.js index c79b36b4..50ce38cd 100644 --- a/test/address-test.js +++ b/test/address-test.js @@ -5,7 +5,7 @@ const Address = require('../lib/primitives/address'); const Script = require('../lib/script/script'); -const assert = require('./util/assert'); +const assert = require('bsert'); const nodejsUtil = require('util'); describe('Address', function() { diff --git a/test/bech32-test.js b/test/bech32-test.js index 10e45aa8..9fb97457 100644 --- a/test/bech32-test.js +++ b/test/bech32-test.js @@ -26,7 +26,7 @@ 'use strict'; -const assert = require('./util/assert'); +const assert = require('bsert'); const Address = require('../lib/primitives/address'); // see https://github.com/bitcoin/bips/blob/master/bip-0173.mediawiki diff --git a/test/block-test.js b/test/block-test.js index 20f2047b..96380a77 100644 --- a/test/block-test.js +++ b/test/block-test.js @@ -3,7 +3,7 @@ 'use strict'; -const assert = require('./util/assert'); +const assert = require('bsert'); const common = require('./util/common'); const {BloomFilter} = require('bfilter'); const {BufferMap} = require('buffer-map'); diff --git a/test/blockstore-test.js b/test/blockstore-test.js index df667f3e..70d8ef83 100644 --- a/test/blockstore-test.js +++ b/test/blockstore-test.js @@ -5,7 +5,7 @@ const Logger = require('blgr'); const bio = require('bufio'); -const assert = require('./util/assert'); +const assert = require('bsert'); const common = require('./util/common'); const {resolve} = require('path'); const fs = require('bfile'); diff --git a/test/chain-test.js b/test/chain-test.js index 1feacd15..25387a36 100644 --- a/test/chain-test.js +++ b/test/chain-test.js @@ -3,7 +3,7 @@ 'use strict'; -const assert = require('./util/assert'); +const assert = require('bsert'); const consensus = require('../lib/protocol/consensus'); const Coin = require('../lib/primitives/coin'); const Script = require('../lib/script/script'); diff --git a/test/coin-test.js b/test/coin-test.js index c47e0131..c6e25a8f 100644 --- a/test/coin-test.js +++ b/test/coin-test.js @@ -4,7 +4,7 @@ 'use strict'; const Coin = require('../lib/primitives/coin'); -const assert = require('./util/assert'); +const assert = require('bsert'); const common = require('../test/util/common'); const nodejsUtil = require('util'); diff --git a/test/coins-test.js b/test/coins-test.js index daa88b9c..7e3f48db 100644 --- a/test/coins-test.js +++ b/test/coins-test.js @@ -4,7 +4,7 @@ 'use strict'; const bio = require('bufio'); -const assert = require('./util/assert'); +const assert = require('bsert'); const Output = require('../lib/primitives/output'); const Input = require('../lib/primitives/input'); const Outpoint = require('../lib/primitives/outpoint'); @@ -48,7 +48,7 @@ describe('Coins', function() { assert.strictEqual(entry.height, 1); assert.strictEqual(entry.coinbase, false); assert.strictEqual(entry.raw, null); - assert.instanceOf(entry.output, Output); + assert(entry.output instanceof Output); assert.strictEqual(entry.spent, false); const output = view.getOutputFor(input); diff --git a/test/consensus-test.js b/test/consensus-test.js index 10b09860..03503d44 100644 --- a/test/consensus-test.js +++ b/test/consensus-test.js @@ -3,7 +3,7 @@ 'use strict'; -const assert = require('./util/assert'); +const assert = require('bsert'); const consensus = require('../lib/protocol/consensus'); const BN = require('bcrypto/lib/bn.js'); diff --git a/test/hd-test.js b/test/hd-test.js index 367bb75f..d92cf97a 100644 --- a/test/hd-test.js +++ b/test/hd-test.js @@ -6,7 +6,7 @@ const {base58} = require('bstring'); const pbkdf2 = require('bcrypto/lib/pbkdf2'); const sha512 = require('bcrypto/lib/sha512'); -const assert = require('./util/assert'); +const assert = require('bsert'); const HD = require('../lib/hd'); const vectors = require('./data/hd.json'); const vector1 = vectors.vector1; diff --git a/test/headers-test.js b/test/headers-test.js index f0512a51..338283bf 100644 --- a/test/headers-test.js +++ b/test/headers-test.js @@ -4,7 +4,7 @@ 'use strict'; const Headers = require('../lib/primitives/headers'); -const assert = require('./util/assert'); +const assert = require('bsert'); const common = require('./util/common'); const block1 = common.readBlock('block1'); diff --git a/test/http-test.js b/test/http-test.js index 7f535994..c553e77c 100644 --- a/test/http-test.js +++ b/test/http-test.js @@ -4,7 +4,7 @@ 'use strict'; const {BloomFilter} = require('bfilter'); -const assert = require('./util/assert'); +const assert = require('bsert'); const consensus = require('../lib/protocol/consensus'); const Address = require('../lib/primitives/address'); const Script = require('../lib/script/script'); @@ -87,15 +87,15 @@ describe('HTTP', function() { const info = await nclient.getInfo(); assert.strictEqual(info.network, node.network.type); assert.strictEqual(info.version, pkg.version); - assert.typeOf(info.pool, 'object'); + assert(typeof info.pool === 'object'); assert.strictEqual(info.pool.agent, node.pool.options.agent); - assert.typeOf(info.chain, 'object'); + assert(typeof info.chain === 'object'); assert.strictEqual(info.chain.height, 0); - assert.typeOf(info.indexes, 'object'); - assert.typeOf(info.indexes.addr, 'object'); + assert(typeof info.indexes === 'object'); + assert(typeof info.indexes.addr === 'object'); assert.equal(info.indexes.addr.enabled, false); assert.equal(info.indexes.addr.height, 0); - assert.typeOf(info.indexes.tx, 'object'); + assert(typeof info.indexes.tx === 'object'); assert.equal(info.indexes.addr.enabled, false); assert.equal(info.indexes.tx.height, 0); }); @@ -105,7 +105,7 @@ describe('HTTP', function() { assert.strictEqual(info.id, 'test'); const acct = await wallet.getAccount('default'); const str = acct.receiveAddress; - assert.typeOf(str, 'string'); + assert(typeof str === 'string'); addr = Address.fromString(str, node.network); }); diff --git a/test/indexer-test.js b/test/indexer-test.js index dcd06da4..53aada2b 100644 --- a/test/indexer-test.js +++ b/test/indexer-test.js @@ -3,7 +3,7 @@ 'use strict'; -const assert = require('./util/assert'); +const assert = require('bsert'); const reorg = require('./util/reorg'); const Script = require('../lib/script/script'); const Opcode = require('../lib/script/opcode'); @@ -313,9 +313,12 @@ describe('Indexer', function() { maxTxs: 10 }); - await assert.asyncThrows(async () => { + await assert.rejects(async () => { await indexer.getHashesByAddress(vectors[0].addr, {limit: 11}); - }, 'Limit above max'); + }, { + name: 'Error', + message: 'Limit above max of 10.' + }); }); }); @@ -795,8 +798,8 @@ describe('Indexer', function() { httpPort: ports.node }); - assert.equal(node.txindex, undefined); - assert.equal(node.addrindex, undefined); + assert.equal(node.txindex, null); + assert.equal(node.addrindex, null); }); }); }); @@ -1184,23 +1187,32 @@ describe('Indexer', function() { describe('Errors', function() { it('will give error if limit is exceeded', async () => { - await assert.asyncThrows(async () => { + await assert.rejects(async () => { await nclient.request( 'GET', `/tx/address/${vectors[0].addr}`, {limit: 101}); - }, 'Limit above max'); + }, { + name: 'Error', + message: 'Limit above max of 100.' + }); }); it('will give error with invalid after hash', async () => { - await assert.asyncThrows(async () => { + await assert.rejects(async () => { await nclient.request( 'GET', `/tx/address/${vectors[0].addr}`, {after: 'deadbeef'}); + }, { + name: 'Error', + message: 'after must be a hex string.' }); }); it('will give error with invalid reverse', async () => { - await assert.asyncThrows(async () => { + await assert.rejects(async () => { await nclient.request( 'GET', `/tx/address/${vectors[0].addr}`, {reverse: 'sure'}); + }, { + name: 'Error', + message: 'reverse must be a boolean.' }); }); }); diff --git a/test/input-test.js b/test/input-test.js index 7dcc5196..7be7d9b0 100644 --- a/test/input-test.js +++ b/test/input-test.js @@ -6,7 +6,7 @@ const bio = require('bufio'); const util = require('../lib/utils/util'); const Input = require('../lib/primitives/input'); -const assert = require('./util/assert'); +const assert = require('bsert'); const common = require('./util/common'); // Take input rawbytes from the raw data format diff --git a/test/keyring-test.js b/test/keyring-test.js index b0d951b0..b8eeaf36 100644 --- a/test/keyring-test.js +++ b/test/keyring-test.js @@ -3,7 +3,7 @@ 'use strict'; -const assert = require('./util/assert'); +const assert = require('bsert'); const KeyRing = require('../lib/primitives/keyring'); const Script = require('../lib/script/script'); diff --git a/test/mempool-test.js b/test/mempool-test.js index 78467a91..26b627cd 100644 --- a/test/mempool-test.js +++ b/test/mempool-test.js @@ -3,7 +3,7 @@ 'use strict'; -const assert = require('./util/assert'); +const assert = require('bsert'); const random = require('bcrypto/lib/random'); const common = require('../lib/blockchain/common'); const Block = require('../lib/primitives/block'); diff --git a/test/mnemonic-test.js b/test/mnemonic-test.js index 2b3eb726..b0e670df 100644 --- a/test/mnemonic-test.js +++ b/test/mnemonic-test.js @@ -3,7 +3,7 @@ 'use strict'; -const assert = require('./util/assert'); +const assert = require('bsert'); const Mnemonic = require('../lib/hd/mnemonic'); const HDPrivateKey = require('../lib/hd/private'); diff --git a/test/net-test.js b/test/net-test.js index 18dbe4cf..54f571b9 100644 --- a/test/net-test.js +++ b/test/net-test.js @@ -3,7 +3,7 @@ 'use strict'; -const assert = require('./util/assert'); +const assert = require('bsert'); const test = require('./util/common'); const {BloomFilter} = require('bfilter'); const Logger = require('blgr'); diff --git a/test/node-test.js b/test/node-test.js index 2c268528..5696fd77 100644 --- a/test/node-test.js +++ b/test/node-test.js @@ -3,7 +3,7 @@ 'use strict'; -const assert = require('./util/assert'); +const assert = require('bsert'); const consensus = require('../lib/protocol/consensus'); const Coin = require('../lib/primitives/coin'); const Script = require('../lib/script/script'); @@ -505,11 +505,11 @@ describe('Node', function() { id: '1' }, {}); - assert.typeOf(json.result, 'object'); - assert.typeOf(json.result.curtime, 'number'); - assert.typeOf(json.result.mintime, 'number'); - assert.typeOf(json.result.maxtime, 'number'); - assert.typeOf(json.result.expires, 'number'); + assert(typeof json.result === 'object'); + assert(Number.isInteger(json.result.curtime)); + assert(Number.isInteger(json.result.mintime)); + assert(Number.isInteger(json.result.maxtime)); + assert(Number.isInteger(json.result.expires)); assert.deepStrictEqual(json, { result: { diff --git a/test/outpoint-test.js b/test/outpoint-test.js index 0d72cab6..1276cb33 100644 --- a/test/outpoint-test.js +++ b/test/outpoint-test.js @@ -3,7 +3,7 @@ 'use strict'; const Outpoint = require('../lib/primitives/outpoint'); -const assert = require('./util/assert'); +const assert = require('bsert'); const common = require('./util/common'); const util = require('../lib/utils/util'); const TX = require('../lib/primitives/tx'); diff --git a/test/pow-test.js b/test/pow-test.js index 6f54ad5a..041ca1c1 100644 --- a/test/pow-test.js +++ b/test/pow-test.js @@ -3,7 +3,7 @@ 'use strict'; -const assert = require('./util/assert'); +const assert = require('bsert'); const Chain = require('../lib/blockchain/chain'); const ChainEntry = require('../lib/blockchain/chainentry'); const Network = require('../lib/protocol/network'); diff --git a/test/protocol-test.js b/test/protocol-test.js index 69d0ab1c..ff1e8a39 100644 --- a/test/protocol-test.js +++ b/test/protocol-test.js @@ -4,7 +4,7 @@ 'use strict'; -const assert = require('./util/assert'); +const assert = require('bsert'); const Network = require('../lib/protocol/network'); const util = require('../lib/utils/util'); const NetAddress = require('../lib/net/netaddress'); @@ -102,15 +102,15 @@ describe('Protocol', function() { ]; packetTest('addr', new packets.AddrPacket(hosts), (payload) => { - assert.typeOf(payload.items, 'array'); + assert(Array.isArray(payload.items)); assert.strictEqual(payload.items.length, 2); - assert.typeOf(payload.items[0].time, 'number'); + assert(Number.isInteger(payload.items[0].time)); assert.strictEqual(payload.items[0].services, 1); assert.strictEqual(payload.items[0].host, hosts[0].host); assert.strictEqual(payload.items[0].port, hosts[0].port); - assert.typeOf(payload.items[1].time, 'number'); + assert(Number.isInteger(payload.items[1].time)); assert.strictEqual(payload.items[1].services, 1); assert.strictEqual(payload.items[1].host, hosts[1].host); assert.strictEqual(payload.items[1].port, hosts[1].port); diff --git a/test/rpc-test.js b/test/rpc-test.js index f6cf53a8..afad91ce 100644 --- a/test/rpc-test.js +++ b/test/rpc-test.js @@ -3,7 +3,7 @@ 'use strict'; -const assert = require('./util/assert'); +const assert = require('bsert'); const consensus = require('../lib/protocol/consensus'); const Address = require('../lib/primitives/address'); const FullNode = require('../lib/node/fullnode'); @@ -80,13 +80,19 @@ describe('RPC', function() { assert(await nclient.execute('help', [])); assert(await wclient.execute('help', [])); - await assert.asyncThrows(async () => { + await assert.rejects(async () => { await nclient.execute('help', ['getinfo']); - }, 'getinfo'); + }, { + name: 'Error', + message: /^getinfo/ + }); - await assert.asyncThrows(async () => { + await assert.rejects(async () => { await wclient.execute('help', ['getbalance']); - }, 'getbalance'); + }, { + name: 'Error', + message: /^getbalance/ + }); }); it('should rpc getinfo', async () => { @@ -105,9 +111,12 @@ describe('RPC', function() { }); it('should fail rpc getnewaddress from nonexistent account', async () => { - await assert.asyncThrows(async () => { + await assert.rejects(async () => { await wclient.execute('getnewaddress', ['bad-account-name']); - }, 'Account not found.'); + }, { + name: 'Error', + message: 'Account not found.' + }); }); it('should rpc getaccountaddress', async () => { @@ -138,15 +147,21 @@ describe('RPC', function() { }); it('should fail malformed rpc sendmany', async () => { - await assert.asyncThrows(async () => { + await assert.rejects(async () => { await wclient.execute('sendmany', ['default', null]); - }, 'Invalid send-to address'); + }, { + name: 'Error', + message: 'Invalid send-to address.' + }); const sendTo = {}; sendTo[addressHot] = null; - await assert.asyncThrows(async () => { + await assert.rejects(async () => { await wclient.execute('sendmany', ['default', sendTo]); - }, 'Invalid amount.'); + }, { + name: 'Error', + message: 'Invalid amount.' + }); }); it('should rpc listreceivedbyaddress', async () => { @@ -198,9 +213,12 @@ describe('RPC', function() { }); it('should fail rpc listtransactions from nonexistent account', async () => { - assert.asyncThrows(async () => { + assert.rejects(async () => { await wclient.execute('listtransactions', ['nonexistent']); - }, 'Account not found.'); + }, { + name: 'Error', + message: 'Account not found.' + }); }); it('should rpc listunspent', async () => { @@ -244,9 +262,12 @@ describe('RPC', function() { assert.strictEqual(listOldBlock.transactions.length, 2); const nonexistentBlock = consensus.ZERO_HASH.toString('hex'); - await assert.asyncThrows(async () => { + await assert.rejects(async () => { await wclient.execute('listsinceblock', [nonexistentBlock]); - }, 'Block not found'); + }, { + name: 'Error', + message: 'Block not found.' + }); }); it('should cleanup', async () => { diff --git a/test/script-test.js b/test/script-test.js index 2cfe052f..9623168c 100644 --- a/test/script-test.js +++ b/test/script-test.js @@ -3,7 +3,7 @@ 'use strict'; -const assert = require('./util/assert'); +const assert = require('bsert'); const Script = require('../lib/script/script'); const Witness = require('../lib/script/witness'); const Stack = require('../lib/script/stack'); @@ -336,7 +336,7 @@ describe('Script', function() { } if (expected !== 'OK') { - assert.typeOf(err, 'error'); + assert(err instanceof Error); assert.strictEqual(err.code, expected); return; } diff --git a/test/tx-test.js b/test/tx-test.js index 8b31554b..77f05f77 100644 --- a/test/tx-test.js +++ b/test/tx-test.js @@ -5,7 +5,7 @@ const {inspect} = require('util'); const {encoding} = require('bufio'); -const assert = require('./util/assert'); +const assert = require('bsert'); const random = require('bcrypto/lib/random'); const util = require('../lib/utils/util'); const consensus = require('../lib/protocol/consensus'); diff --git a/test/txmeta-test.js b/test/txmeta-test.js index 8722e3c3..3740597f 100644 --- a/test/txmeta-test.js +++ b/test/txmeta-test.js @@ -3,7 +3,7 @@ 'use strict'; -const assert = require('./util/assert'); +const assert = require('bsert'); const Network = require('../lib/protocol/network'); const TXMeta = require('../lib/primitives/txmeta'); diff --git a/test/util/assert.js b/test/util/assert.js deleted file mode 100644 index 772a5270..00000000 --- a/test/util/assert.js +++ /dev/null @@ -1,230 +0,0 @@ -'use strict'; - -const _assert = require('assert'); -const util = require('util'); - -const assert = function assert(value, message) { - if (!value) { - throw new assert.AssertionError({ - message, - actual: value, - expected: true, - operator: '==', - stackStartFunction: assert - }); - } -}; - -Object.setPrototypeOf(assert, _assert); - -assert.typeOf = function typeOf(value, expected, message) { - _isString(expected, '`expected` must be a string.', typeOf); - - const actual = _typeOf(value); - - if (actual !== expected) { - throw new assert.AssertionError({ - message, - actual, - expected, - operator: 'typeof ==', - stackStartFunction: typeOf - }); - } -}; - -assert.notTypeOf = function notTypeOf(value, expected, message) { - _isString(expected, '`expected` must be a string.', notTypeOf); - - const actual = _typeOf(value); - - if (actual === expected) { - throw new assert.AssertionError({ - message, - actual, - expected, - operator: 'typeof !=', - stackStartFunction: notTypeOf - }); - } -}; - -assert.instanceOf = function instanceOf(object, parent, message) { - _isFunction(parent, '`parent` must be a constructor.', instanceOf); - - if (!(object instanceof parent)) { - throw new assert.AssertionError({ - message, - actual: _getConstructorName(object), - expected: _getFunctionName(parent), - operator: 'instanceof', - stackStartFunction: instanceOf - }); - } -}; - -assert.notInstanceOf = function notInstanceOf(object, parent, message) { - _isFunction(parent, '`parent` must be a constructor.', notInstanceOf); - - if (object instanceof parent) { - throw new assert.AssertionError({ - message, - actual: _getConstructorName(object), - expected: _getFunctionName(parent), - operator: 'not instanceof', - stackStartFunction: notInstanceOf - }); - } -}; - -assert.bufferEqual = function bufferEqual(actual, expected, message) { - _isBuffer(actual, '`actual` must be a buffer.', bufferEqual); - _isBuffer(expected, '`expected` must be a buffer.', bufferEqual); - - if (actual !== expected && !actual.equals(expected)) { - throw new assert.AssertionError({ - message, - actual: actual.toString('hex'), - expected: expected.toString('hex'), - operator: '===', - stackStartFunction: bufferEqual - }); - } -}; - -assert.notBufferEqual = function notBufferEqual(actual, expected, message) { - _isBuffer(actual, '`actual` must be a buffer.', notBufferEqual); - _isBuffer(expected, '`expected` must be a buffer.', notBufferEqual); - - if (actual === expected || actual.equals(expected)) { - throw new assert.AssertionError({ - message, - actual: actual.toString('hex'), - expected: expected.toString('hex'), - operator: '!==', - stackStartFunction: notBufferEqual - }); - } -}; - -// node V10 implements assert.rejects() but this is compatible with V8 -assert.asyncThrows = async function asyncThrows(func, expectedError) { - let err = null; - try { - await func(); - } catch (e) { - err = e; - } - assert(err, 'Expected error.'); - if (expectedError) { - const re = new RegExp('^' + expectedError); - assert(re.test(err.message), err.message); - } -}; - -function _isString(value, message, stackStartFunction) { - if (typeof value !== 'string') { - throw new assert.AssertionError({ - message, - actual: _typeOf(value), - expected: 'string', - operator: 'typeof ==', - stackStartFunction - }); - } -} - -function _isFunction(value, message, stackStartFunction) { - if (typeof value !== 'function') { - throw new assert.AssertionError({ - message, - actual: _typeOf(value), - expected: 'function', - operator: 'typeof ==', - stackStartFunction - }); - } -} - -function _isBuffer(value, message, stackStartFunction) { - if (!Buffer.isBuffer(value)) { - throw new assert.AssertionError({ - message, - actual: _typeOf(value), - expected: 'buffer', - operator: 'typeof ==', - stackStartFunction - }); - } -} - -function _typeOf(value) { - const type = typeof value; - - switch (type) { - case 'object': - if (value === null) - return 'null'; - - if (Array.isArray(value)) - return 'array'; - - if (Buffer.isBuffer(value)) - return 'buffer'; - - if (ArrayBuffer.isView(value)) - return 'arraybuffer'; - - if (util.isError(value)) - return 'error'; - - if (util.isDate(value)) - return 'date'; - - if (util.isRegExp(value)) - return 'regexp'; - - break; - case 'number': - if (!isFinite(value)) - return 'nan'; - break; - } - - return type; -} - -function _getConstructorName(object) { - if (object === undefined) - return 'undefined'; - - if (object === null) - return 'null'; - - const proto = Object.getPrototypeOf(object); - - // Should never happen. - if (proto === undefined) - throw new Error('Bad prototype.'); - - // Inherited from `null`. - if (proto === null) - return 'Null'; - - // Someone overwrote their - // constructor property? - if (!proto.constructor) - return 'Object'; - - // Non-named constructor function. - if (!proto.constructor.name) - return 'Unknown'; - - return proto.constructor.name; -} - -function _getFunctionName(func) { - return func.name || 'Unknown'; -} - -module.exports = assert; diff --git a/test/util/common.js b/test/util/common.js index 04760129..8bdbab1a 100644 --- a/test/util/common.js +++ b/test/util/common.js @@ -1,6 +1,6 @@ 'use strict'; -const assert = require('assert'); +const assert = require('bsert'); const {tmpdir} = require('os'); const path = require('path'); const fs = require('bfile'); diff --git a/test/util/memwallet.js b/test/util/memwallet.js index ace6d3a2..712475e7 100644 --- a/test/util/memwallet.js +++ b/test/util/memwallet.js @@ -6,7 +6,7 @@ 'use strict'; -const assert = require('assert'); +const assert = require('bsert'); const {BufferMap, BufferSet} = require('buffer-map'); const Network = require('../../lib/protocol/network'); const MTX = require('../../lib/primitives/mtx'); diff --git a/test/util/node-context.js b/test/util/node-context.js index 76a1d97a..953a7cb5 100644 --- a/test/util/node-context.js +++ b/test/util/node-context.js @@ -1,6 +1,6 @@ 'use strict'; -const assert = require('assert'); +const assert = require('bsert'); const FullNode = require('../../lib/node/fullnode'); const Network = require('../../lib/protocol/network'); const Logger = require('blgr'); diff --git a/test/util/reorg.js b/test/util/reorg.js index bcdf953c..94b558c8 100644 --- a/test/util/reorg.js +++ b/test/util/reorg.js @@ -1,6 +1,6 @@ 'use strict'; -const assert = require('./assert'); +const assert = require('bsert'); const Chain = require('../../lib/blockchain/chain'); const CPUMiner = require('../../lib/mining/cpuminer'); diff --git a/test/utils-test.js b/test/utils-test.js index 8c9cce8e..e01bb4c9 100644 --- a/test/utils-test.js +++ b/test/utils-test.js @@ -6,7 +6,7 @@ const Validator = require('bval'); const {base58} = require('bstring'); const {encoding} = require('bufio'); -const assert = require('./util/assert'); +const assert = require('bsert'); const Amount = require('../lib/btc/amount'); const fixed = require('../lib/utils/fixed'); diff --git a/test/wallet-rpc-test.js b/test/wallet-rpc-test.js index 3ffd4b31..de6a4553 100644 --- a/test/wallet-rpc-test.js +++ b/test/wallet-rpc-test.js @@ -3,7 +3,7 @@ 'use strict'; const {NodeClient, WalletClient} = require('bclient'); -const assert = require('./util/assert'); +const assert = require('bsert'); const FullNode = require('../lib/node/fullnode'); const Network = require('../lib/protocol/network'); const Mnemonic = require('../lib/hd/mnemonic'); @@ -259,7 +259,10 @@ describe('Wallet RPC Methods', function() { // Match the bitcoind response when sending the incorrect // network. Expect an RPC error const fn = async () => await wclient.execute('getaddressinfo', [failed]); - await assert.asyncThrows(fn, 'Invalid address.'); + await assert.rejects(fn, { + name: 'Error', + message: 'Invalid address.' + }); }); it('should fail for invalid address', async () => { @@ -269,7 +272,10 @@ describe('Wallet RPC Methods', function() { failed = failed.slice(1, failed.length); const fn = async () => await wclient.execute('getaddressinfo', [failed]); - await assert.asyncThrows(fn, 'Invalid address.'); + await assert.rejects(fn, { + name: 'Error', + message: 'Invalid address.' + }); }); }); }); diff --git a/test/wallet-test.js b/test/wallet-test.js index b6bc1b6d..e2bc2dd1 100644 --- a/test/wallet-test.js +++ b/test/wallet-test.js @@ -3,7 +3,7 @@ 'use strict'; -const assert = require('./util/assert'); +const assert = require('bsert'); const consensus = require('../lib/protocol/consensus'); const util = require('../lib/utils/util'); const hash256 = require('bcrypto/lib/hash256');