@jmparsons/ccxt
Version:
A JavaScript / Python / PHP cryptocurrency trading library with support for 100+ exchanges
67 lines (46 loc) • 2.17 kB
JavaScript
// ----------------------------------------------------------------------------
const log = require ('ololog')
, ansi = require ('ansicolor').nice
, chai = require ('chai')
, ccxt = require ('../../../ccxt.js')
, expect = chai.expect
, assert = chai.assert
/* ------------------------------------------------------------------------ */
module.exports = async (exchange, symbol) => {
log.green ('AuthenticationError (bad nonce) test...')
const hasFetchBalance = exchange.has.fetchBalance
const hasFetchMyTrades = exchange.has.fetchMyTrades
const hasFetchOrders = exchange.has.fetchOrders
if (hasFetchBalance || hasFetchMyTrades || hasFetchOrders) {
// save the nonce temporarily and replace it with a fake one
const nonce = exchange.nonce
exchange.nonce = () => 1
try {
// check if handleErrors() throws AuthenticationError if an exchange
// responds with an error on a bad nonce
// (still, some exchanges that require nonce silently eat bad nonce w/o an error)
if (hasFetchBalance)
await exchange.fetchBalance ()
else if (hasFetchMyTrades)
await exchange.fetchMyTrades (symbol, 0)
else
await exchange.fetchOrders (symbol)
// restore the nonce so the caller may proceed in case bad nonce was accepted by an exchange
exchange.nonce = nonce
log.warn (exchange.id + ': AuthenticationError: bad nonce swallowed')
} catch (e) {
// restore the nonce so the caller may proceed in case the test failed
exchange.nonce = nonce
if (e instanceof ccxt.AuthenticationError || e instanceof ccxt.InvalidNonce) {
// it has thrown the exception as expected
log.green ('AuthenticationError test passed')
} else {
// rethrow an unexpected error if any
throw e
}
}
} else {
log (exchange.id + ' has no means of testing for bad nonce')
}
}