From 52879febb92d876f01f2e4d70871baa07af631fb Mon Sep 17 00:00:00 2001 From: Nicholas Dudfield Date: Sat, 15 Aug 2015 18:11:43 +0700 Subject: [PATCH 1/2] [WIP] Fix reserve calculation --- src/core/server.js | 7 ++++++- test/remote-test.js | 5 ++--- test/server-test.js | 7 +++++++ 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/src/core/server.js b/src/core/server.js index 1f40c90c..c2de2cdc 100644 --- a/src/core/server.js +++ b/src/core/server.js @@ -1,6 +1,8 @@ 'use strict'; + const _ = require('lodash'); +const assert = require('assert'); const util = require('util'); const url = require('url'); const HttpsProxyAgent = require('https-proxy-agent'); @@ -905,6 +907,9 @@ Server.prototype._feeTxUnit = function() { */ Server.prototype._reserve = function(ownerCount) { + // We should be in a valid state before calling this method + assert(this._reserve_base && this._reserve_inc); + const reserve_base = Amount.from_json(String(this._reserve_base)); const reserve_inc = Amount.from_json(String(this._reserve_inc)); const owner_count = ownerCount || 0; @@ -913,7 +918,7 @@ Server.prototype._reserve = function(ownerCount) { throw new Error('Owner count must not be negative.'); } - return reserve_base.add(reserve_inc.product_human(owner_count)); + return reserve_base.add(reserve_inc.multiply(owner_count)); }; /** diff --git a/test/remote-test.js b/test/remote-test.js index f671d5b0..2f9ee053 100644 --- a/test/remote-test.js +++ b/test/remote-test.js @@ -935,11 +935,10 @@ describe('Remote', function() { remote.feeTxUnit(10).to_json(); }); }); - it('Get reserve', function() { + it('reserve() before reserve rate known', function() { remote._connected = true; remote._servers[0]._connected = true; - assert.strictEqual(remote.reserve(1).to_json(), 'NaN'); - remote._servers = []; + // Throws because the server has not had reserve_inc, reserve_base set assert.throws(function() { remote.reserve(10).to_json(); }); diff --git a/test/server-test.js b/test/server-test.js index 3b1fde39..3b7682c2 100644 --- a/test/server-test.js +++ b/test/server-test.js @@ -1063,6 +1063,13 @@ describe('Server', function() { assert.strictEqual(server._reserve().to_json(), '20000000'); }); + it('Compute reserve, positive OwnerCount', function() { + const server = new Server(new Remote(), 'ws://localhost:5748'); + server._reserve_base = 20000000; + server._reserve_inc = 5000000; + assert.strictEqual(server._reserve(4).to_json(), '40000000'); + }); + it('Cache hostid', function(done) { const wss = new ws.Server({ port: 5748 From 300967f0f38e67e12b1f9a721ee89fc0515997e8 Mon Sep 17 00:00:00 2001 From: Nicholas Dudfield Date: Sat, 15 Aug 2015 18:15:36 +0700 Subject: [PATCH 2/2] [WIP] Fix lint issues --- src/core/server.js | 4 ++-- test/server-test.js | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/core/server.js b/src/core/server.js index c2de2cdc..f8e9e579 100644 --- a/src/core/server.js +++ b/src/core/server.js @@ -623,7 +623,7 @@ Server.prototype._handleLedgerClosed = function(message) { Server.prototype._handleServerStatus = function(message) { // This message is only received when online. // As we are connected, it is the definitive final state. - const isOnline = ~Server.onlineStates.indexOf(message.server_status); + const isOnline = _.includes(Server.onlineStates, message.server_status); this._setState(isOnline ? 'online' : 'offline'); @@ -734,7 +734,7 @@ Server.prototype._handleResponseSubscribe = function(message) { this._ledgerRanges.parseAndAddRanges(message.validated_ledgers); } - if (~Server.onlineStates.indexOf(message.server_status)) { + if (_.includes(Server.onlineStates, message.server_status)) { this._setState('online'); } }; diff --git a/test/server-test.js b/test/server-test.js index 3b7682c2..4cd4e7c8 100644 --- a/test/server-test.js +++ b/test/server-test.js @@ -305,7 +305,7 @@ describe('Server', function() { server.emit('message', { type: 'serverStatus', - load_base: 256 * 1, + load_base: 256, load_factor: 256 * 10, server_status: 'full' });