Add binary <--> json encoding integration tests

* Add full json ledger dumps of ledgers 38129 and 40000 to test/fixtures
* Use `Ledger` to calculate account and transaction hashes and verify
  against dumps
This commit is contained in:
Nicholas Dudfield
2014-05-18 17:27:47 +07:00
parent 5280d994a2
commit 80bdce970a
7 changed files with 101 additions and 22 deletions

View File

@@ -37,26 +37,40 @@ Ledger.prototype.calc_tx_hash = function () {
return tx_map.hash();
};
Ledger.prototype.calc_account_hash = function (hardcore) {
/**
* @param options.sanity_test {Boolean}
*
* If `true`, will serialize each accountState item to binary and then back to
* json before finally serializing for hashing. This is mostly to expose any
* issues with ripple-lib's binary <--> json codecs.
*
*/
Ledger.prototype.calc_account_hash = function (options) {
var account_map = new SHAMap();
var erred;
this.ledger_json.accountState.forEach(function (le) {
var data = SerializedObject.from_json(le);
if (hardcore) {
if (options != null && options.sanity_test) {
try {
var json = data.to_json();
data = SerializedObject.from_json(json);
} catch (e) {
console.log("erred on", le);
console.log("to_json() was", json);
console.log("e", e);
console.log("account state item: ", le);
console.log("to_json() ",json);
console.log("exception: ", e);
erred = true;
}
};
account_map.add_item(le.index, data, SHAMapTreeNode.TYPE_ACCOUNT_STATE);
});
if (erred) {
throw new Error("There were errors with sanity_test"); // all logged above
}
return account_map.hash();
};

View File

@@ -53,7 +53,7 @@ SerializedObject.from_json = function (obj) {
}
}
if ("number" === typeof obj.TransactionType) {
if ("number" === typeof obj.LedgerEntryType) {
obj.LedgerEntryType = SerializedObject.lookup_type_le(obj.LedgerEntryType);
if (!obj.LedgerEntryType) {

View File

@@ -60,9 +60,9 @@ function SHAMapTreeNodeInner(depth) {
util.inherits(SHAMapTreeNodeInner, SHAMapTreeNode);
/*
* @param tag {String} (equates to a ledger entries `index`)
*/
/**
* @param tag {String} (equates to a ledger entries `index`)
*/
SHAMapTreeNodeInner.prototype.add_item = function (tag, node) {
var depth = this.depth;
var existing_node = this.get_node(tag[depth]);