mirror of
https://github.com/Xahau/xahau.js.git
synced 2025-11-20 12:15:51 +00:00
495 lines
13 KiB
JavaScript
495 lines
13 KiB
JavaScript
var assert = require('assert');
|
|
var utils = require('./testutils');
|
|
var Request = utils.load_module('request').Request;
|
|
var Remote = utils.load_module('remote').Remote;
|
|
var Server = utils.load_module('server').Server;
|
|
|
|
function makeServer(url) {
|
|
var server = new Server(new process.EventEmitter(), url);
|
|
server._connected = true;
|
|
return server;
|
|
};
|
|
|
|
const SERVER_INFO = {
|
|
"info": {
|
|
"build_version": "0.25.2-rc1",
|
|
"complete_ledgers": "32570-7016339",
|
|
"hostid": "LIED",
|
|
"io_latency_ms": 1,
|
|
"last_close": {
|
|
"converge_time_s": 2.013,
|
|
"proposers": 5
|
|
},
|
|
"load_factor": 1,
|
|
"peers": 42,
|
|
"pubkey_node": "n9LpxYuMx4Epz4Wz8Kg2kH3eBTx1mUtHnYwtCdLoj3HC85L2pvBm",
|
|
"server_state": "full",
|
|
"validated_ledger": {
|
|
"age": 0,
|
|
"base_fee_xrp": 0.00001,
|
|
"hash": "E43FD49087B18031721D9C3C4743FE1692C326AFF7084A2C01B355CE65A4C699",
|
|
"reserve_base_xrp": 20,
|
|
"reserve_inc_xrp": 5,
|
|
"seq": 7016339
|
|
},
|
|
"validation_quorum": 3
|
|
}
|
|
};
|
|
|
|
describe('Request', function() {
|
|
it('Send request', function(done) {
|
|
var remote = {
|
|
request: function(req) {
|
|
assert(req instanceof Request);
|
|
assert.strictEqual(typeof req.message, 'object');
|
|
assert.strictEqual(req.message.command, 'server_info');
|
|
done();
|
|
}
|
|
};
|
|
|
|
var request = new Request(remote, 'server_info');
|
|
|
|
request.request();
|
|
});
|
|
|
|
it('Broadcast request', function(done) {
|
|
var servers = [
|
|
makeServer('wss://localhost:5006'),
|
|
makeServer('wss://localhost:5007')
|
|
];
|
|
|
|
var requests = 0;
|
|
|
|
servers.forEach(function(server, index, arr) {
|
|
server._request = function(req) {
|
|
assert(req instanceof Request);
|
|
assert.strictEqual(typeof req.message, 'object');
|
|
assert.strictEqual(req.message.command, 'server_info');
|
|
if (++requests === arr.length) {
|
|
done();
|
|
}
|
|
};
|
|
});
|
|
|
|
var remote = new Remote();
|
|
remote._connected = true;
|
|
remote._servers = servers;
|
|
|
|
var request = new Request(remote, 'server_info');
|
|
|
|
request.broadcast();
|
|
});
|
|
|
|
it('Events API', function(done) {
|
|
var server = makeServer('wss://localhost:5006');
|
|
|
|
server._request = function(req) {
|
|
assert(req instanceof Request);
|
|
assert.strictEqual(typeof req.message, 'object');
|
|
assert.strictEqual(req.message.command, 'server_info');
|
|
req.emit('success', SERVER_INFO);
|
|
};
|
|
|
|
var remote = new Remote();
|
|
remote._connected = true;
|
|
remote._servers = [ server ];
|
|
|
|
var request = new Request(remote, 'server_info');
|
|
|
|
request.once('success', function(res) {
|
|
assert.deepEqual(res, SERVER_INFO);
|
|
done();
|
|
});
|
|
|
|
request.request();
|
|
});
|
|
|
|
it('Callback API', function(done) {
|
|
var server = makeServer('wss://localhost:5006');
|
|
|
|
server._request = function(req) {
|
|
assert(req instanceof Request);
|
|
assert.strictEqual(typeof req.message, 'object');
|
|
assert.strictEqual(req.message.command, 'server_info');
|
|
req.emit('success', SERVER_INFO);
|
|
};
|
|
|
|
var remote = new Remote();
|
|
remote._connected = true;
|
|
remote._servers = [ server ];
|
|
|
|
var request = new Request(remote, 'server_info');
|
|
|
|
request.callback(function(err, res) {
|
|
assert.ifError(err);
|
|
assert.deepEqual(res, SERVER_INFO);
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('Timeout', function(done) {
|
|
var server = makeServer('wss://localhost:5006');
|
|
var successEmited = false;
|
|
|
|
server._request = function(req) {
|
|
assert(req instanceof Request);
|
|
assert.strictEqual(typeof req.message, 'object');
|
|
assert.strictEqual(req.message.command, 'server_info');
|
|
setTimeout(function() {
|
|
successEmitted = true;
|
|
req.emit('success', SERVER_INFO);
|
|
}, 200);
|
|
};
|
|
|
|
var remote = new Remote();
|
|
remote._connected = true;
|
|
remote._servers = [ server ];
|
|
|
|
var request = new Request(remote, 'server_info');
|
|
|
|
request.timeout(10, function() {
|
|
setTimeout(function() {
|
|
assert(successEmitted);
|
|
done();
|
|
}, 200);
|
|
});
|
|
|
|
request.callback(function(err, res) {
|
|
assert(false, 'Callback should not be called');
|
|
});
|
|
});
|
|
|
|
it('Set server', function(done) {
|
|
var servers = [
|
|
makeServer('wss://localhost:5006'),
|
|
makeServer('wss://localhost:5007')
|
|
];
|
|
|
|
servers[1]._request = function(req) {
|
|
assert(req instanceof Request);
|
|
assert.strictEqual(typeof req.message, 'object');
|
|
assert.strictEqual(req.message.command, 'server_info');
|
|
done();
|
|
};
|
|
|
|
var remote = new Remote();
|
|
remote._connected = true;
|
|
remote._servers = servers;
|
|
|
|
remote.getServer = function() {
|
|
return servers[0];
|
|
};
|
|
|
|
var request = new Request(remote, 'server_info');
|
|
request.setServer(servers[1]);
|
|
|
|
assert.strictEqual(request.server, servers[1]);
|
|
|
|
request.request();
|
|
});
|
|
|
|
it('Set build path', function() {
|
|
var remote = new Remote();
|
|
remote._connected = true;
|
|
remote.local_signing = false;
|
|
|
|
var request = new Request(remote, 'server_info');
|
|
request.buildPath(true);
|
|
assert.strictEqual(request.message.build_path, true);
|
|
});
|
|
|
|
it('Remove build path', function() {
|
|
var remote = new Remote();
|
|
remote._connected = true;
|
|
remote.local_signing = false;
|
|
|
|
var request = new Request(remote, 'server_info');
|
|
request.buildPath(false);
|
|
assert(!request.message.hasOwnProperty('build_path'));
|
|
});
|
|
|
|
it('Set build path with local signing', function() {
|
|
var remote = new Remote();
|
|
remote._connected = true;
|
|
|
|
var request = new Request(remote, 'server_info');
|
|
|
|
assert.throws(function() {
|
|
request.buildPath(true);
|
|
}, Error);
|
|
});
|
|
|
|
it('Set ledger hash', function() {
|
|
var remote = new Remote();
|
|
remote._connected = true;
|
|
|
|
var request = new Request(remote, 'server_info');
|
|
request.ledgerHash('B4FD84A73DBD8F0DA9E320D137176EBFED969691DC0AAC7882B76B595A0841AE');
|
|
assert.strictEqual(request.message.ledger_hash, 'B4FD84A73DBD8F0DA9E320D137176EBFED969691DC0AAC7882B76B595A0841AE');
|
|
});
|
|
|
|
it('Set ledger index', function() {
|
|
var remote = new Remote();
|
|
remote._connected = true;
|
|
|
|
var request = new Request(remote, 'server_info');
|
|
request.ledgerIndex(7016915);
|
|
assert.strictEqual(request.message.ledger_index, 7016915);
|
|
});
|
|
|
|
it('Select ledger (identifier)', function() {
|
|
var remote = new Remote();
|
|
remote._connected = true;
|
|
|
|
var request = new Request(remote, 'server_info');
|
|
request.ledgerSelect('validated');
|
|
assert.strictEqual(request.message.ledger_index, 'validated');
|
|
});
|
|
|
|
it('Select ledger (index)', function() {
|
|
var remote = new Remote();
|
|
remote._connected = true;
|
|
|
|
var request = new Request(remote, 'server_info');
|
|
request.ledgerSelect(7016915);
|
|
assert.strictEqual(request.message.ledger_index, 7016915);
|
|
});
|
|
|
|
it('Select ledger (hash)', function() {
|
|
var remote = new Remote();
|
|
remote._connected = true;
|
|
|
|
var request = new Request(remote, 'server_info');
|
|
request.ledgerSelect('B4FD84A73DBD8F0DA9E320D137176EBFED969691DC0AAC7882B76B595A0841AE');
|
|
assert.strictEqual(request.message.ledger_hash, 'B4FD84A73DBD8F0DA9E320D137176EBFED969691DC0AAC7882B76B595A0841AE');
|
|
});
|
|
|
|
it('Select ledger (hash)', function() {
|
|
var remote = new Remote();
|
|
remote._connected = true;
|
|
|
|
var request = new Request(remote, 'server_info');
|
|
request.ledgerSelect('B4FD84A73DBD8F0DA9E320D137176EBFED969691DC0AAC7882B76B595A0841AE');
|
|
assert.strictEqual(request.message.ledger_hash, 'B4FD84A73DBD8F0DA9E320D137176EBFED969691DC0AAC7882B76B595A0841AE');
|
|
});
|
|
|
|
it('Set offer ID', function() {
|
|
var remote = new Remote();
|
|
remote._connected = true;
|
|
|
|
var request = new Request(remote, 'server_info');
|
|
request.offerId('r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59', 1337);
|
|
assert.deepEqual(request.message.offer, {
|
|
account: 'r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59',
|
|
seq: 1337
|
|
});
|
|
});
|
|
|
|
it('Set offer index', function() {
|
|
var remote = new Remote();
|
|
remote._connected = true;
|
|
|
|
var request = new Request(remote, 'server_info');
|
|
request.offerIndex(1337);
|
|
assert.strictEqual(request.message.offer, 1337);
|
|
});
|
|
|
|
it('Set secret', function() {
|
|
var remote = new Remote();
|
|
remote._connected = true;
|
|
|
|
var request = new Request(remote, 'server_info');
|
|
request.secret('mySecret');
|
|
assert.strictEqual(request.message.secret, 'mySecret');
|
|
});
|
|
|
|
it('Set transaction hash', function() {
|
|
var remote = new Remote();
|
|
remote._connected = true;
|
|
|
|
var request = new Request(remote, 'server_info');
|
|
request.txHash('E08D6E9754025BA2534A78707605E0601F03ACE063687A0CA1BDDACFCD1698C7');
|
|
assert.strictEqual(request.message.tx_hash, 'E08D6E9754025BA2534A78707605E0601F03ACE063687A0CA1BDDACFCD1698C7');
|
|
});
|
|
|
|
it('Set transaction JSON', function() {
|
|
var remote = new Remote();
|
|
remote._connected = true;
|
|
|
|
var request = new Request(remote, 'server_info');
|
|
var txJson = { hash: 'E08D6E9754025BA2534A78707605E0601F03ACE063687A0CA1BDDACFCD1698C7' };
|
|
request.txJson(txJson);
|
|
assert.deepEqual(request.message.tx_json, txJson);
|
|
});
|
|
|
|
it('Set transaction blob', function() {
|
|
var remote = new Remote();
|
|
remote._connected = true;
|
|
|
|
var request = new Request(remote, 'server_info');
|
|
request.txBlob('asdf');
|
|
assert.strictEqual(request.message.tx_blob, 'asdf');
|
|
});
|
|
|
|
it('Set ripple state', function() {
|
|
var remote = new Remote();
|
|
remote._connected = true;
|
|
|
|
var request = new Request(remote, 'server_info');
|
|
request.rippleState('r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59', 'r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59', 'USD');
|
|
assert.deepEqual(request.message.ripple_state, {
|
|
currency: 'USD',
|
|
accounts: [ 'r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59', 'r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59' ]
|
|
});
|
|
});
|
|
|
|
it('Set accounts', function() {
|
|
var remote = new Remote();
|
|
remote._connected = true;
|
|
|
|
var request = new Request(remote, 'server_info');
|
|
request.accounts([
|
|
'rLEsXccBGNR3UPuPu2hUXPjziKC3qKSBun',
|
|
'rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B'
|
|
]);
|
|
|
|
assert.deepEqual(request.message.accounts, [
|
|
'rLEsXccBGNR3UPuPu2hUXPjziKC3qKSBun',
|
|
'rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B'
|
|
]);
|
|
});
|
|
|
|
it('Set accounts proposed', function() {
|
|
var remote = new Remote();
|
|
remote._connected = true;
|
|
|
|
var request = new Request(remote, 'server_info');
|
|
request.accountsProposed([
|
|
'rLEsXccBGNR3UPuPu2hUXPjziKC3qKSBun',
|
|
'rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B'
|
|
]);
|
|
|
|
assert.deepEqual(request.message.accounts_proposed, [
|
|
'rLEsXccBGNR3UPuPu2hUXPjziKC3qKSBun',
|
|
'rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B'
|
|
]);
|
|
});
|
|
|
|
it('Add account', function() {
|
|
var remote = new Remote();
|
|
remote._connected = true;
|
|
|
|
var request = new Request(remote, 'server_info');
|
|
|
|
request.accounts([
|
|
'rLEsXccBGNR3UPuPu2hUXPjziKC3qKSBun',
|
|
]);
|
|
|
|
request.addAccount('rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B');
|
|
|
|
assert.deepEqual(request.message.accounts, [
|
|
'rLEsXccBGNR3UPuPu2hUXPjziKC3qKSBun',
|
|
'rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B'
|
|
]);
|
|
});
|
|
|
|
it('Add account proposed', function() {
|
|
var remote = new Remote();
|
|
remote._connected = true;
|
|
|
|
var request = new Request(remote, 'server_info');
|
|
|
|
request.accountsProposed([
|
|
'rLEsXccBGNR3UPuPu2hUXPjziKC3qKSBun',
|
|
]);
|
|
|
|
request.addAccountProposed('rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B');
|
|
|
|
assert.deepEqual(request.message.accounts_proposed, [
|
|
'rLEsXccBGNR3UPuPu2hUXPjziKC3qKSBun',
|
|
'rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B'
|
|
]);
|
|
});
|
|
|
|
it('Set books', function() {
|
|
var remote = new Remote();
|
|
remote._connected = true;
|
|
|
|
var request = new Request(remote, 'server_info');
|
|
|
|
var books = [
|
|
{
|
|
"taker_gets": {
|
|
"currency": "EUR",
|
|
"issuer": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B"
|
|
},
|
|
"taker_pays": {
|
|
"currency": "USD",
|
|
"issuer": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B"
|
|
}
|
|
}
|
|
];
|
|
|
|
request.books(books);
|
|
|
|
assert.deepEqual(request.message.books, books);
|
|
});
|
|
|
|
it('Add book', function() {
|
|
var remote = new Remote();
|
|
remote._connected = true;
|
|
|
|
var request = new Request(remote, 'server_info');
|
|
|
|
var books = [
|
|
{
|
|
"taker_gets": {
|
|
"currency": "EUR",
|
|
"issuer": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B"
|
|
},
|
|
"taker_pays": {
|
|
"currency": "USD",
|
|
"issuer": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B"
|
|
}
|
|
}
|
|
];
|
|
|
|
request.books(books);
|
|
|
|
request.addBook({
|
|
"taker_gets": {
|
|
"currency": "CNY",
|
|
"issuer": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B"
|
|
},
|
|
"taker_pays": {
|
|
"currency": "USD",
|
|
"issuer": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B"
|
|
}
|
|
});
|
|
|
|
assert.deepEqual(request.message.books, [
|
|
{
|
|
"taker_gets": {
|
|
"currency": "EUR",
|
|
"issuer": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B"
|
|
},
|
|
"taker_pays": {
|
|
"currency": "USD",
|
|
"issuer": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B"
|
|
}
|
|
},
|
|
|
|
{
|
|
"taker_gets": {
|
|
"currency": "CNY",
|
|
"issuer": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B"
|
|
},
|
|
"taker_pays": {
|
|
"currency": "USD",
|
|
"issuer": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B"
|
|
}
|
|
}
|
|
]);
|
|
});
|
|
});
|