From 0e1424c2cb50e5e236796769c8758e9778ad4ed5 Mon Sep 17 00:00:00 2001 From: Ruben de Vries Date: Thu, 28 Jan 2016 11:06:20 +0100 Subject: [PATCH] fixed issues with integration tests that use the faucet --- test/integration/_blockchain.js | 53 +++++++++++++++++++-------------- test/integration/multisig.js | 28 +++++++++++------ 2 files changed, 49 insertions(+), 32 deletions(-) diff --git a/test/integration/_blockchain.js b/test/integration/_blockchain.js index f6bfb9f..1265f37 100644 --- a/test/integration/_blockchain.js +++ b/test/integration/_blockchain.js @@ -8,30 +8,37 @@ var mainnet = new Blockchain('https://api.blocktrail.com/cb/v0.2.1/BTC', { api_k var testnet = new Blockchain('https://api.blocktrail.com/cb/v0.2.1/tBTC', { api_key: BLOCKTRAIL_API_KEY }) testnet.faucet = function faucet (address, amount, done) { - async.retry(5, function (callback) { - httpify({ - method: 'POST', - url: 'https://api.blocktrail.com/v1/tBTC/faucet/withdrawl?api_key=' + BLOCKTRAIL_API_KEY, - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ - address: address, - amount: amount - }) - }, function (err) { - if (err) return callback(err) - - testnet.addresses.unspents(address, function (err, result) { - if (err) return callback(err) - - var unspent = result.filter(function (unspent) { - return unspent.value > 1e3 - }).pop() - - if (!unspent) return callback(new Error('No unspent given')) - callback(null, unspent) - }) + httpify({ + method: 'POST', + url: 'https://api.blocktrail.com/v1/tBTC/faucet/withdrawl?api_key=' + BLOCKTRAIL_API_KEY, + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ + address: address, + amount: amount }) - }, done) + }, function (err, result) { + if (err) return done(err) + + if (result.body.code === 401) { + return done(new Error('Hit faucet rate limit; ' + result.body.msg)) + } + + // allow for TX to be processed + async.retry(5, function (callback) { + setTimeout(function () { + testnet.addresses.unspents(address, function (err, result) { + if (err) return callback(err) + + var unspent = result.filter(function (unspent) { + return unspent.value >= amount + }).pop() + + if (!unspent) return callback(new Error('No unspent given')) + callback(null, unspent) + }) + }, 600) + }, done) + }) } module.exports = { diff --git a/test/integration/multisig.js b/test/integration/multisig.js index 16f3f00..6775bd8 100644 --- a/test/integration/multisig.js +++ b/test/integration/multisig.js @@ -1,5 +1,6 @@ /* global describe, it */ +var async = require('async') var assert = require('assert') var bitcoin = require('../../') var blockchain = require('./_blockchain') @@ -40,6 +41,9 @@ describe('bitcoinjs-lib (multisig)', function () { blockchain.t.faucet(address, 2e4, function (err, unspent) { if (err) return done(err) + var fee = 1e4 + var targetValue = unspent.value - fee + // make a random destination address var targetAddress = bitcoin.ECPair.makeRandom({ network: bitcoin.networks.testnet @@ -47,7 +51,7 @@ describe('bitcoinjs-lib (multisig)', function () { var txb = new bitcoin.TransactionBuilder(bitcoin.networks.testnet) txb.addInput(unspent.txId, unspent.vout) - txb.addOutput(targetAddress, 1e4) + txb.addOutput(targetAddress, targetValue) // sign with 1st and 3rd key txb.sign(0, keyPairs[0], redeemScript) @@ -60,16 +64,22 @@ describe('bitcoinjs-lib (multisig)', function () { blockchain.t.transactions.propagate(tx.toHex(), function (err) { if (err) return done(err) - // check that the above transaction included the intended address - blockchain.t.addresses.unspents(targetAddress, function (err, unspents) { - if (err) return done(err) + // allow for TX to be processed + async.retry(5, function (callback) { + setTimeout(function () { + // check that the above transaction included the intended address + blockchain.t.addresses.unspents(targetAddress, function (err, unspents) { + if (err) return callback(err) - assert(unspents.some(function (unspent) { - return unspent.txId === txId && unspent.value === 1e4 - })) + var unspentFound = unspents.some(function (unspent) { + return unspent.txId === txId && unspent.value === targetValue + }) - done() - }) + if (!unspentFound) return callback(new Error('Could not find unspent after propagate')) + callback() + }) + }, 600) + }, done) }) }) })