Add npm test for ledger_data command.

This commit is contained in:
Nicholas Dudfield
2015-08-10 11:36:12 +07:00
committed by Edward Hennis
parent d655fdca56
commit 4eb6020813
3 changed files with 123 additions and 0 deletions

57
test/declarative-suite.js Normal file
View File

@@ -0,0 +1,57 @@
/* global test, suite, suiteSetup, suiteTeardown */
var lodash = require('lodash');
var testutils = require('./testutils');
var LedgerState = require('./ledger-state').LedgerState;
var assert = require('assert-diff');
var config = testutils.init_config();
// We just use equal instead of strictEqual everywhere.
assert.options.strict = true;
function makeSuite (name, ledger_state, tests) {
suite(name, function () {
// build_(setup|teardown) utils functions set state on this context var.
var context = {};
// This runs only once
suiteSetup(function (done) {
var opts = {};
if (ledger_state.dump) {
opts.ledger_file = ledger_state.dump;
}
testutils.build_setup(opts).call(context, function () {
if (opts.ledger_file) {
done();
} else {
var ledger = context.ledger = new LedgerState(ledger_state,
assert, context.remote,
config);
// Run the ledger setup util. This compiles the declarative description
// into a series of transactions and executes them.
ledger.setup(lodash.noop/* logger */, function () {
done();
});
}
});
});
suiteTeardown(function (done) {
testutils.build_teardown().call(context, done);
});
lodash.forOwn(tests, function (func, name) {
test(name, function (done) {
var args = [context, context.ledger, context.remote, done];
while (args.length > func.length && args.length > 1) {
args.shift();
}
func.apply(this, args);
});
});
});
}
module.exports = {
makeSuite: makeSuite
};

1
test/fixtures/ledger-full-40000.json vendored Normal file

File diff suppressed because one or more lines are too long

65
test/ledger-data-test.js Normal file
View File

@@ -0,0 +1,65 @@
var assert = require('assert');
var Request = require('ripple-lib').Request;
var makeSuite = require('./declarative-suite').makeSuite;
makeSuite('ledger_data', {dump: 'ledger-full-40000.json'},
{
ledger_data: function (remote, done) {
var limit = 20;
// keep track of indexes we've seen
var indexes = {};
// keep all the ledger_data items from multiple requests in one array
var merged = [];
function requestData (marker, callback) {
if (typeof marker === 'function') {
callback = marker;
marker = undefined;
}
var req = new Request(remote, 'ledger_data');
var params = req.message;
params.ledger_index = 'validated';
params.marker = marker;
params.limit = limit;
params.binary = false;
req.callback(function (e, m) {
assert.equal(typeof m.ledger_index, 'number');
assert.equal(typeof m.ledger_hash, 'string');
// make sure we didn't get some error
assert.ifError(e);
// make sure we aren't getting indexes we've seen before
m.state.forEach(function (s) {
assert(indexes[s.index] === undefined);
indexes[s.index] = true;
merged.push(s);
});
// make another request if we have a marker
if (m.marker) {
// make sure our limit was honoured
assert(m.state.length == limit);
requestData(m.marker, callback);
} else {
// make sure our limit was honoured
assert(m.state.length <= limit);
callback();
}
});
}
requestData(function () {
remote.request_ledger({validated: true, full: true}, function (e, m) {
// compare our stitched together account state array with one from
// the ledegr data command
assert.deepEqual(merged/* .concat('watch me fail') */,
m.ledger.accountState);
done();
});
});
}
}
);