mirror of
https://github.com/Xahau/xahaud.git
synced 2025-12-06 17:27:52 +00:00
Merge branch 'new-master'
This commit is contained in:
@@ -14,7 +14,7 @@
|
||||
// VFALCO TODO Roll this together into ripple_BuildVersion
|
||||
#define SERVER_VERSION_MAJOR 0
|
||||
#define SERVER_VERSION_MINOR 9
|
||||
#define SERVER_VERSION_SUB "-b"
|
||||
#define SERVER_VERSION_SUB "-c"
|
||||
#define SERVER_NAME "Ripple"
|
||||
|
||||
#define SV_STRINGIZE(x) SV_STRINGIZE2(x)
|
||||
|
||||
101
modules/ripple_app/node/ripple_MemoryBackendFactory.cpp
Normal file
101
modules/ripple_app/node/ripple_MemoryBackendFactory.cpp
Normal file
@@ -0,0 +1,101 @@
|
||||
//------------------------------------------------------------------------------
|
||||
/*
|
||||
Copyright (c) 2011-2013, OpenCoin, Inc.
|
||||
*/
|
||||
//==============================================================================
|
||||
|
||||
class MemoryBackendFactory::Backend : public NodeStore::Backend
|
||||
{
|
||||
private:
|
||||
typedef std::map <uint256 const, NodeObject::pointer> Map;
|
||||
|
||||
public:
|
||||
Backend (size_t keyBytes, StringPairArray const& keyValues)
|
||||
: m_keyBytes (keyBytes)
|
||||
{
|
||||
}
|
||||
|
||||
~Backend ()
|
||||
{
|
||||
}
|
||||
|
||||
std::string getDataBaseName ()
|
||||
{
|
||||
return "memory";
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------
|
||||
|
||||
NodeObject::pointer retrieve (uint256 const &hash)
|
||||
{
|
||||
Map::iterator iter = m_map.find (hash);
|
||||
|
||||
if (iter != m_map.end ())
|
||||
return iter->second;
|
||||
|
||||
return NodeObject::pointer ();
|
||||
}
|
||||
|
||||
bool store (NodeObject::ref object)
|
||||
{
|
||||
Map::iterator iter = m_map.find (object->getHash ());
|
||||
|
||||
if (iter == m_map.end ())
|
||||
{
|
||||
m_map.insert (std::make_pair (object->getHash (), object));
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool bulkStore (const std::vector< NodeObject::pointer >& batch)
|
||||
{
|
||||
for (int i = 0; i < batch.size (); ++i)
|
||||
store (batch [i]);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void visitAll (FUNCTION_TYPE <void (NodeObject::pointer)> f)
|
||||
{
|
||||
for (Map::const_iterator iter = m_map.begin (); iter != m_map.end (); ++iter)
|
||||
f (iter->second);
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------
|
||||
|
||||
private:
|
||||
size_t const m_keyBytes;
|
||||
|
||||
Map m_map;
|
||||
};
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
MemoryBackendFactory::MemoryBackendFactory ()
|
||||
{
|
||||
}
|
||||
|
||||
MemoryBackendFactory::~MemoryBackendFactory ()
|
||||
{
|
||||
}
|
||||
|
||||
MemoryBackendFactory& MemoryBackendFactory::getInstance ()
|
||||
{
|
||||
static MemoryBackendFactory instance;
|
||||
|
||||
return instance;
|
||||
}
|
||||
|
||||
String MemoryBackendFactory::getName () const
|
||||
{
|
||||
return "Memory";
|
||||
}
|
||||
|
||||
NodeStore::Backend* MemoryBackendFactory::createInstance (StringPairArray const& keyValues)
|
||||
{
|
||||
return new MemoryBackendFactory::Backend (32, keyValues);
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
30
modules/ripple_app/node/ripple_MemoryBackendFactory.h
Normal file
30
modules/ripple_app/node/ripple_MemoryBackendFactory.h
Normal file
@@ -0,0 +1,30 @@
|
||||
//------------------------------------------------------------------------------
|
||||
/*
|
||||
Copyright (c) 2011-2013, OpenCoin, Inc.
|
||||
*/
|
||||
//==============================================================================
|
||||
|
||||
#ifndef RIPPLE_MEMORYBACKENDFACTORY_H_INCLUDED
|
||||
#define RIPPLE_MEMORYBACKENDFACTORY_H_INCLUDED
|
||||
|
||||
/** Factory to produce a RAM based backend for the NodeStore.
|
||||
|
||||
@see NodeStore
|
||||
*/
|
||||
class MemoryBackendFactory : public NodeStore::BackendFactory
|
||||
{
|
||||
private:
|
||||
class Backend;
|
||||
|
||||
MemoryBackendFactory ();
|
||||
~MemoryBackendFactory ();
|
||||
|
||||
public:
|
||||
static MemoryBackendFactory& getInstance ();
|
||||
|
||||
String getName () const;
|
||||
|
||||
NodeStore::Backend* createInstance (StringPairArray const& keyValues);
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -103,6 +103,7 @@ namespace ripple
|
||||
#include "node/ripple_NodeObject.h"
|
||||
#include "node/ripple_NodeStore.h"
|
||||
#include "node/ripple_LevelDBBackendFactory.h"
|
||||
#include "node/ripple_MemoryBackendFactory.h"
|
||||
#include "node/ripple_HyperLevelDBBackendFactory.h"
|
||||
#include "node/ripple_MdbBackendFactory.h"
|
||||
#include "node/ripple_NullBackendFactory.h"
|
||||
@@ -246,6 +247,7 @@ static const uint64 tenTo17m1 = tenTo17 - 1;
|
||||
#include "node/ripple_NodeObject.cpp"
|
||||
#include "node/ripple_NodeStore.cpp"
|
||||
#include "node/ripple_LevelDBBackendFactory.cpp"
|
||||
#include "node/ripple_MemoryBackendFactory.cpp"
|
||||
#include "node/ripple_HyperLevelDBBackendFactory.cpp"
|
||||
#include "node/ripple_MdbBackendFactory.cpp"
|
||||
#include "node/ripple_NullBackendFactory.cpp"
|
||||
|
||||
@@ -10,17 +10,18 @@
|
||||
},
|
||||
|
||||
"dependencies": {
|
||||
"ripple-lib": "0.7.10",
|
||||
"ripple-lib": "0.7.18",
|
||||
"async": "~0.1.22",
|
||||
"extend": "~1.1.1",
|
||||
"simple-jsonrpc": "~0.0.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"buster": "~0.6.12"
|
||||
"buster": "~0.6.12",
|
||||
"mocha": "~1.12.0"
|
||||
},
|
||||
|
||||
"scripts": {
|
||||
"test": "./node_modules/buster/bin/buster test"
|
||||
"test": "./node_modules/buster/bin/buster-test"
|
||||
},
|
||||
|
||||
"repository": {
|
||||
|
||||
@@ -194,8 +194,10 @@ int rippleMain (int argc, char** argv)
|
||||
p.add ("parameters", -1);
|
||||
|
||||
// These must be added before the Application object is created
|
||||
NodeStore::addBackendFactory (MemoryBackendFactory::getInstance ());
|
||||
NodeStore::addBackendFactory (SqliteBackendFactory::getInstance ());
|
||||
NodeStore::addBackendFactory (LevelDBBackendFactory::getInstance ());
|
||||
NodeStore::addBackendFactory (NullBackendFactory::getInstance ());
|
||||
#if RIPPLE_HYPERLEVELDB_AVAILABLE
|
||||
NodeStore::addBackendFactory (HyperLevelDBBackendFactory::getInstance ());
|
||||
#endif
|
||||
@@ -243,7 +245,7 @@ int rippleMain (int argc, char** argv)
|
||||
if (HaveSustain () &&
|
||||
!iResult && !vm.count ("parameters") && !vm.count ("fg") && !vm.count ("standalone") && !vm.count ("unittest"))
|
||||
{
|
||||
std::string logMe = DoSustain (theConfig.DEBUG_LOGFILE.c_str());
|
||||
std::string logMe = DoSustain (theConfig.DEBUG_LOGFILE.string());
|
||||
|
||||
if (!logMe.empty ())
|
||||
Log (lsWARNING) << logMe;
|
||||
|
||||
@@ -7,8 +7,7 @@ var Request = require("ripple-lib").Request;
|
||||
var Server = require("./server").Server;
|
||||
|
||||
var testutils = require("./testutils");
|
||||
|
||||
var config = require('ripple-lib').config.load(require('./config'));
|
||||
var config = testutils.init_config();
|
||||
|
||||
// How long to wait for server to start.
|
||||
var serverDelay = 1500;
|
||||
|
||||
@@ -6,9 +6,8 @@ var Remote = require("ripple-lib").Remote;
|
||||
var Transaction = require("ripple-lib").Transaction;
|
||||
var Server = require("./server").Server;
|
||||
|
||||
var testutils = require("./testutils");
|
||||
|
||||
require('ripple-lib').config.load(require('./config'));
|
||||
var testutils = require("./testutils");
|
||||
var config = testutils.init_config();
|
||||
|
||||
buster.testRunner.timeout = 350000; //This is a very long test!
|
||||
|
||||
|
||||
@@ -7,11 +7,13 @@ var testconfig = require("./testconfig.js");
|
||||
|
||||
exports.accounts = testconfig.accounts;
|
||||
|
||||
// Where to find the binary.
|
||||
exports.rippled = path.resolve("build/rippled");
|
||||
|
||||
exports.server_default = "alpha";
|
||||
|
||||
exports.default_server_config = {
|
||||
// Where to find the binary.
|
||||
rippled_path: path.resolve(__dirname, "../build/rippled")
|
||||
};
|
||||
|
||||
//
|
||||
// Configuration for servers.
|
||||
//
|
||||
@@ -33,6 +35,7 @@ exports.servers = {
|
||||
// 'validation_seed' : "shhDFVsmS2GSu5vUyZSPXYfj1r79h",
|
||||
// 'validators' : "n9L8LZZCwsdXzKUN9zoVxs4YznYXZ9hEhsQZY7aVpxtFaSceiyDZ beta",
|
||||
'local_signing' : false,
|
||||
'node_db': 'type=Memory'
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@ var Server = require("./server").Server;
|
||||
|
||||
var testutils = require("./testutils");
|
||||
|
||||
var config = require('ripple-lib').config.load(require('./config'));
|
||||
var config = testutils.init_config();
|
||||
|
||||
// How long to wait for server to start.
|
||||
var serverDelay = 1500;
|
||||
|
||||
@@ -6,8 +6,7 @@ var Remote = require("ripple-lib").Remote;
|
||||
var Server = require("./server").Server;
|
||||
|
||||
var testutils = require("./testutils");
|
||||
|
||||
require('ripple-lib').config.load(require('./config'));
|
||||
var config = testutils.init_config();
|
||||
|
||||
buster.testRunner.timeout = 5000;
|
||||
|
||||
|
||||
@@ -7,9 +7,8 @@ var Remote = require("ripple-lib").Remote;
|
||||
var Transaction = require("ripple-lib").Transaction;
|
||||
var Server = require("./server").Server;
|
||||
|
||||
var testutils = require("./testutils");
|
||||
|
||||
require('ripple-lib').config.load(require('./config'));
|
||||
var testutils = require("./testutils");
|
||||
var config = testutils.init_config();
|
||||
|
||||
buster.testRunner.timeout = 5000;
|
||||
|
||||
@@ -67,7 +66,7 @@ buster.testCase("Offer tests", {
|
||||
}
|
||||
], function (error) {
|
||||
// console.log("result: error=%s", error);
|
||||
buster.refute(error);
|
||||
buster.refute(error, self.what || "Unspecifide Error");
|
||||
|
||||
done();
|
||||
});
|
||||
@@ -95,7 +94,7 @@ buster.testCase("Offer tests", {
|
||||
buster.assert.equals('tesSUCCESS', m.metadata.TransactionResult);
|
||||
buster.assert(final_create);
|
||||
|
||||
if (3 === ++dones)
|
||||
if (3 === ++dones)
|
||||
done();
|
||||
})
|
||||
.submit();
|
||||
@@ -116,7 +115,7 @@ buster.testCase("Offer tests", {
|
||||
buster.assert.equals('tesSUCCESS', m.metadata.TransactionResult);
|
||||
buster.assert(final_create);
|
||||
|
||||
if (3 === ++dones)
|
||||
if (3 === ++dones)
|
||||
done();
|
||||
})
|
||||
.submit();
|
||||
@@ -146,7 +145,7 @@ buster.testCase("Offer tests", {
|
||||
buster.assert.equals('tesSUCCESS', m.metadata.TransactionResult);
|
||||
buster.assert(final_create);
|
||||
|
||||
if (3 === ++dones)
|
||||
if (3 === ++dones)
|
||||
done();
|
||||
})
|
||||
.submit();
|
||||
@@ -161,7 +160,7 @@ buster.testCase("Offer tests", {
|
||||
}
|
||||
], function (error) {
|
||||
// console.log("result: error=%s", error);
|
||||
buster.refute(error);
|
||||
buster.refute(error, self.what);
|
||||
|
||||
done();
|
||||
});
|
||||
@@ -207,21 +206,23 @@ buster.testCase("Offer tests", {
|
||||
function (done) {
|
||||
var self = this;
|
||||
|
||||
var alices_initial_balance = 499946999680;
|
||||
var bobs_initial_balance = 10199999920;
|
||||
|
||||
async.waterfall([
|
||||
function (callback) {
|
||||
self.what = "Create mtgox account.";
|
||||
|
||||
testutils.payment(self.remote, "root", "mtgox", "1149999730", callback);
|
||||
testutils.payment(self.remote, "root", "mtgox", 1149999730, callback);
|
||||
},
|
||||
function (callback) {
|
||||
self.what = "Create alice account.";
|
||||
|
||||
testutils.payment(self.remote, "root", "alice", "499946999680", callback);
|
||||
testutils.payment(self.remote, "root", "alice", alices_initial_balance, callback);
|
||||
},
|
||||
function (callback) {
|
||||
self.what = "Create bob account.";
|
||||
|
||||
testutils.payment(self.remote, "root", "bob", "10199999920", callback);
|
||||
testutils.payment(self.remote, "root", "bob", bobs_initial_balance, callback);
|
||||
},
|
||||
function (callback) {
|
||||
self.what = "Set transfer rate.";
|
||||
@@ -286,7 +287,7 @@ buster.testCase("Offer tests", {
|
||||
callback);
|
||||
},
|
||||
function (callback) {
|
||||
self.what = "Verify balances.";
|
||||
self.what = "Verify balances. 1";
|
||||
|
||||
testutils.verify_balances(self.remote,
|
||||
{
|
||||
@@ -308,12 +309,36 @@ buster.testCase("Offer tests", {
|
||||
.submit();
|
||||
},
|
||||
function (callback) {
|
||||
self.what = "Verify balances.";
|
||||
self.what = "Verify balances. 2";
|
||||
|
||||
var alices_fees, alices_num_transactions, alices_tx_fee_units_total,
|
||||
alices_tx_fee_units_total, alices_final_balance,
|
||||
|
||||
bobs_fees, bobs_num_transactions, bobs_tx_fee_units_total,
|
||||
bobs_tx_fee_units_total, bobs_final_balance;
|
||||
|
||||
alices_num_transactions = 3;
|
||||
alices_tx_fee_units_total = alices_num_transactions * Transaction.fee_units["default"]
|
||||
alices_tx_fees_total = self.remote.fee_tx(alices_tx_fee_units_total);
|
||||
alices_final_balance = Amount.from_json(alices_initial_balance)
|
||||
.subtract(alices_tx_fees_total);
|
||||
|
||||
bobs_num_transactions = 2;
|
||||
bobs_tx_fee_units_total = bobs_num_transactions * Transaction.fee_units["default"]
|
||||
bobs_tx_fees_total = self.remote.fee_tx(bobs_tx_fee_units_total);
|
||||
bobs_final_balance = Amount.from_json(bobs_initial_balance)
|
||||
.subtract(bobs_tx_fees_total);
|
||||
|
||||
testutils.verify_balances(self.remote,
|
||||
{
|
||||
"alice" : [ "-50/USD/mtgox", String(499946999680-3*(Transaction.fees['default'].to_number())) ],
|
||||
"bob" : [ "2710505431213761e-33/USD/mtgox", String(10199999920-2*(Transaction.fees['default'].to_number())) ],
|
||||
"alice" : [ "-50/USD/mtgox", alices_final_balance.to_json()],
|
||||
"bob" : [ "2710505431213761e-33/USD/mtgox",
|
||||
|
||||
bobs_final_balance.to_json()
|
||||
|
||||
// bobs_final_balance.to_json()
|
||||
// String(10199999920-(self.remote.fee_tx(2*(Transaction.fee_units['default'])))).to_number()
|
||||
],
|
||||
},
|
||||
callback);
|
||||
},
|
||||
@@ -397,8 +422,9 @@ buster.testCase("Offer tests", {
|
||||
|
||||
testutils.verify_balances(self.remote,
|
||||
{
|
||||
"alice" : [ "499/USD/mtgox", String(100000000000+4000000000-2*(Transaction.fees['default'].to_number())) ],
|
||||
"bob" : [ "1/USD/mtgox", String(100000000000-4000000000-2*(Transaction.fees['default'].to_number())) ],
|
||||
// "bob" : [ "1/USD/mtgox", String(100000000000-4000000000-(Number(self.remote.fee_tx(Transaction.fee_units['default'] * 2).to_json()))) ],
|
||||
"bob" : [ "1/USD/mtgox", String(100000000000-4000000000-(self.remote.fee_tx(Transaction.fee_units['default'] * 2).to_number())) ],
|
||||
"alice" : [ "499/USD/mtgox", String(100000000000+4000000000-(self.remote.fee_tx(Transaction.fee_units['default'] * 2).to_number())) ],
|
||||
},
|
||||
callback);
|
||||
},
|
||||
@@ -482,8 +508,8 @@ buster.testCase("Offer tests", {
|
||||
|
||||
testutils.verify_balances(self.remote,
|
||||
{
|
||||
"alice" : [ "499/USD/mtgox", String(100000000000+3000000000-2*(Transaction.fees['default'].to_number())) ],
|
||||
"bob" : [ "1/USD/mtgox", String(100000000000-3000000000-2*(Transaction.fees['default'].to_number())) ],
|
||||
"alice" : [ "499/USD/mtgox", String(100000000000+3000000000-(self.remote.fee_tx(2*(Transaction.fee_units['default'])).to_number())) ],
|
||||
"bob" : [ "1/USD/mtgox", String(100000000000-3000000000-(self.remote.fee_tx(2*(Transaction.fee_units['default'])).to_number())) ],
|
||||
},
|
||||
callback);
|
||||
},
|
||||
@@ -561,7 +587,7 @@ buster.testCase("Offer tests", {
|
||||
self.what = "Create crossing offer.";
|
||||
|
||||
self.remote.transaction()
|
||||
.offer_create("bob", "1/USD/mtgox", "3000.0") //
|
||||
.offer_create("bob", "1/USD/mtgox", "3000.0") //
|
||||
.on('proposed', function (m) {
|
||||
// console.log("PROPOSED: offer_create: %s", JSON.stringify(m));
|
||||
|
||||
@@ -574,8 +600,8 @@ buster.testCase("Offer tests", {
|
||||
|
||||
testutils.verify_balances(self.remote,
|
||||
{
|
||||
"alice" : [ "499/USD/mtgox", String(100000000000+3000000000-2*(Transaction.fees['default'].to_number())) ],
|
||||
"bob" : [ "1/USD/mtgox", String(100000000000-3000000000-1*(Transaction.fees['default'].to_number())) ],
|
||||
"alice" : [ "499/USD/mtgox", String(100000000000+3000000000-(self.remote.fee_tx(2*(Transaction.fee_units['default'])).to_number())) ],
|
||||
"bob" : [ "1/USD/mtgox", String(100000000000-3000000000-(self.remote.fee_tx(1*(Transaction.fee_units['default'])).to_number())) ],
|
||||
},
|
||||
callback);
|
||||
},
|
||||
@@ -676,7 +702,7 @@ buster.testCase("Offer tests", {
|
||||
},
|
||||
], function (error) {
|
||||
// console.log("result: error=%s", error);
|
||||
buster.refute(error);
|
||||
buster.refute(error, self.what);
|
||||
|
||||
if (error) done();
|
||||
});
|
||||
@@ -771,7 +797,7 @@ buster.testCase("Offer tests", {
|
||||
},
|
||||
], function (error) {
|
||||
// console.log("result: error=%s", error);
|
||||
buster.refute(error);
|
||||
buster.refute(error, self.what);
|
||||
if (error) done();
|
||||
});
|
||||
},
|
||||
@@ -849,7 +875,7 @@ buster.testCase("Offer tests", {
|
||||
}
|
||||
], function (error) {
|
||||
// console.log("result: error=%s", error);
|
||||
buster.refute(error);
|
||||
buster.refute(error, self.what);
|
||||
|
||||
done();
|
||||
});
|
||||
@@ -947,7 +973,7 @@ buster.testCase("Offer tests", {
|
||||
|
||||
testutils.verify_balances(self.remote,
|
||||
{
|
||||
"alice" : [ "0/USD/mtgox", String(10000000000+500-2*(Transaction.fees['default'].to_number())) ],
|
||||
"alice" : [ "0/USD/mtgox", String(10000000000+500-(self.remote.fee_tx(2*(Transaction.fee_units['default'])).to_number())) ],
|
||||
"bob" : "100/USD/mtgox",
|
||||
},
|
||||
callback);
|
||||
@@ -1110,7 +1136,7 @@ buster.testCase("Offer tests", {
|
||||
|
||||
testutils.verify_balances(self.remote,
|
||||
{
|
||||
"alice" : [ "160/USD/mtgox", String(10000000000+200-2*(Transaction.fees['default'].to_number())) ],
|
||||
"alice" : [ "160/USD/mtgox", String(10000000000+200-(self.remote.fee_tx(2*(Transaction.fee_units['default'])).to_number())) ],
|
||||
"bob" : "40/USD/mtgox",
|
||||
},
|
||||
callback);
|
||||
@@ -1152,7 +1178,7 @@ buster.testCase("Offer tests", {
|
||||
|
||||
testutils.verify_balances(self.remote,
|
||||
{
|
||||
"alice" : [ "100/USD/mtgox", String(10000000000+200+300-4*(Transaction.fees['default'].to_number())) ],
|
||||
"alice" : [ "100/USD/mtgox", String(10000000000+200+300-(self.remote.fee_tx(4*(Transaction.fee_units['default'])).to_number())) ],
|
||||
"bob" : "100/USD/mtgox",
|
||||
},
|
||||
callback);
|
||||
@@ -1456,15 +1482,43 @@ buster.testCase("Offer tests 3", {
|
||||
// Provide micro amounts to compensate for fees to make results round nice.
|
||||
self.what = "Create accounts.";
|
||||
|
||||
testutils.create_accounts(self.remote, "root", "350.000020", ["alice", "bob", "mtgox"], callback);
|
||||
// Alice has 3 entries in the ledger, via trust lines
|
||||
var max_owner_count = 3; //
|
||||
// We start off with a
|
||||
var reserve_amount = self.remote.reserve(max_owner_count);
|
||||
// console.log("\n");
|
||||
// console.log("reserve_amount reserve(max_owner_count=%s): %s", max_owner_count, reserve_amount.to_human());
|
||||
|
||||
// this.tx_json.Fee = this.remote.fee_tx(this.fee_units()).to_json();
|
||||
|
||||
// 1 for each trust limit == 3 (alice < mtgox/amazon/bitstamp)
|
||||
// 1 for payment == 4
|
||||
var max_txs_per_user = 4;
|
||||
|
||||
// We don't have access to the tx object[s] created below so we
|
||||
// just dig into fee_units straight away
|
||||
var fee_units_for_all_txs = ( Transaction.fee_units["default"] *
|
||||
max_txs_per_user );
|
||||
|
||||
starting_xrp = reserve_amount.add(self.remote.fee_tx(fee_units_for_all_txs))
|
||||
// console.log("starting_xrp after %s fee units: ", fee_units_for_all_txs, starting_xrp.to_human());
|
||||
|
||||
starting_xrp = starting_xrp.add(Amount.from_json('100.0'));
|
||||
// console.log("starting_xrp adding 100 xrp to sell", starting_xrp.to_human());
|
||||
|
||||
testutils.create_accounts(self.remote,
|
||||
"root",
|
||||
starting_xrp.to_json(),
|
||||
["alice", "bob", "mtgox", "amazon", "bitstamp"],
|
||||
callback);
|
||||
},
|
||||
function (callback) {
|
||||
self.what = "Set limits.";
|
||||
|
||||
testutils.credit_limits(self.remote,
|
||||
{
|
||||
"alice" : "1000/USD/mtgox",
|
||||
"bob" : "1000/USD/mtgox",
|
||||
"alice" : ["1000/USD/mtgox", "1000/USD/amazon","1000/USD/bitstamp"],
|
||||
"bob" : ["1000/USD/mtgox", "1000/USD/amazon"],
|
||||
},
|
||||
callback);
|
||||
},
|
||||
@@ -1485,7 +1539,6 @@ buster.testCase("Offer tests 3", {
|
||||
.on('proposed', function (m) {
|
||||
// console.log("proposed: offer_create: %s", json.stringify(m));
|
||||
callback(m.result !== 'tesSUCCESS');
|
||||
|
||||
seq_carol = m.tx_json.sequence;
|
||||
})
|
||||
.submit();
|
||||
@@ -1521,14 +1574,14 @@ buster.testCase("Offer tests 3", {
|
||||
|
||||
testutils.verify_balances(self.remote,
|
||||
{
|
||||
"alice" : [ "100/USD/mtgox", "250.0" ],
|
||||
"bob" : "400/USD/mtgox",
|
||||
"alice" : [ "100/USD/mtgox", "350.0"],
|
||||
"bob" : ["400/USD/mtgox", ],
|
||||
},
|
||||
callback);
|
||||
},
|
||||
], function (error) {
|
||||
// console.log("result: error=%s", error);
|
||||
buster.refute(error);
|
||||
buster.refute(error, self.what);
|
||||
|
||||
done();
|
||||
});
|
||||
@@ -1635,7 +1688,7 @@ buster.testCase("Offer tests 3", {
|
||||
},
|
||||
], function (error) {
|
||||
// console.log("result: error=%s", error);
|
||||
buster.refute(error);
|
||||
buster.refute(error, self.what);
|
||||
|
||||
done();
|
||||
});
|
||||
@@ -1651,14 +1704,16 @@ buster.testCase("Offer tfSell", {
|
||||
"basic sell" :
|
||||
function (done) {
|
||||
var self = this;
|
||||
var final_create;
|
||||
var final_create, seq_carol;
|
||||
|
||||
async.waterfall([
|
||||
function (callback) {
|
||||
// Provide micro amounts to compensate for fees to make results round nice.
|
||||
self.what = "Create accounts.";
|
||||
|
||||
testutils.create_accounts(self.remote, "root", "350.000020", ["alice", "bob", "mtgox"], callback);
|
||||
var req_amount = self.remote.reserve(1).add(self.remote.fee_tx(20)).add(100000000);
|
||||
testutils.create_accounts(self.remote, "root", req_amount.to_json(),
|
||||
["alice", "bob", "mtgox"], callback);
|
||||
},
|
||||
function (callback) {
|
||||
self.what = "Set limits.";
|
||||
@@ -1687,19 +1742,21 @@ buster.testCase("Offer tfSell", {
|
||||
.set_flags('Sell') // Should not matter at all.
|
||||
.on('proposed', function (m) {
|
||||
// console.log("proposed: offer_create: %s", json.stringify(m));
|
||||
callback(m.result !== 'tesSUCCESS');
|
||||
if (m.result !== 'tesSUCCESS') {
|
||||
throw new Error("Bob's OfferCreate tx did not succeed: "+m.result);
|
||||
} else callback(null);
|
||||
|
||||
seq_carol = m.tx_json.sequence;
|
||||
})
|
||||
.submit();
|
||||
},
|
||||
function (callback) {
|
||||
// Alice has 350 fees - a reserve of 50 = 250 reserve = 100 available.
|
||||
// Alice has 350 + fees - a reserve of 50 = 250 reserve = 100 available.
|
||||
// Ask for more than available to prove reserve works.
|
||||
self.what = "Create offer alice.";
|
||||
|
||||
self.remote.transaction()
|
||||
.offer_create("alice", "100/USD/mtgox", "100.0")
|
||||
.offer_create("alice", "200/USD/mtgox", "200.0")
|
||||
.set_flags('Sell') // Should not matter at all.
|
||||
.on('proposed', function (m) {
|
||||
// console.log("proposed: offer_create: %s", json.stringify(m));
|
||||
@@ -1732,7 +1789,7 @@ buster.testCase("Offer tfSell", {
|
||||
},
|
||||
], function (error) {
|
||||
// console.log("result: error=%s", error);
|
||||
buster.refute(error);
|
||||
buster.refute(error, self.what);
|
||||
|
||||
done();
|
||||
});
|
||||
@@ -1741,14 +1798,19 @@ buster.testCase("Offer tfSell", {
|
||||
"2x sell exceed limit" :
|
||||
function (done) {
|
||||
var self = this;
|
||||
var final_create;
|
||||
var final_create, seq_carol;
|
||||
|
||||
async.waterfall([
|
||||
function (callback) {
|
||||
// Provide micro amounts to compensate for fees to make results round nice.
|
||||
self.what = "Create accounts.";
|
||||
|
||||
testutils.create_accounts(self.remote, "root", "350.000020", ["alice", "bob", "mtgox"], callback);
|
||||
|
||||
var starting_xrp = self.amount_for({
|
||||
ledger_entries: 1,
|
||||
default_transactions: 2,
|
||||
extra: '100.0'
|
||||
});
|
||||
testutils.create_accounts(self.remote, "root", starting_xrp, ["alice", "bob", "mtgox"], callback);
|
||||
},
|
||||
function (callback) {
|
||||
self.what = "Set limits.";
|
||||
@@ -1779,7 +1841,6 @@ buster.testCase("Offer tfSell", {
|
||||
.on('proposed', function (m) {
|
||||
// console.log("proposed: offer_create: %s", json.stringify(m));
|
||||
callback(m.result !== 'tesSUCCESS');
|
||||
|
||||
seq_carol = m.tx_json.sequence;
|
||||
})
|
||||
.submit();
|
||||
@@ -1797,7 +1858,9 @@ buster.testCase("Offer tfSell", {
|
||||
.set_flags('Sell')
|
||||
.on('proposed', function (m) {
|
||||
// console.log("proposed: offer_create: %s", json.stringify(m));
|
||||
callback(m.result !== 'tesSUCCESS');
|
||||
if (m.result !== 'tesSUCCESS') {
|
||||
callback(new Error("Alice's OfferCreate didn't succeed: "+m.result));
|
||||
} else callback(null);
|
||||
|
||||
seq_carol = m.tx_json.sequence;
|
||||
})
|
||||
@@ -1826,7 +1889,7 @@ buster.testCase("Offer tfSell", {
|
||||
},
|
||||
], function (error) {
|
||||
// console.log("result: error=%s", error);
|
||||
buster.refute(error);
|
||||
buster.refute(error, self.what);
|
||||
|
||||
done();
|
||||
});
|
||||
@@ -1848,8 +1911,14 @@ buster.testCase("Client Issue #535", {
|
||||
function (callback) {
|
||||
// Provide micro amounts to compensate for fees to make results round nice.
|
||||
self.what = "Create accounts.";
|
||||
|
||||
var starting_xrp = self.amount_for({
|
||||
ledger_entries: 1,
|
||||
default_transactions: 2,
|
||||
extra: '100.0'
|
||||
});
|
||||
|
||||
testutils.create_accounts(self.remote, "root", "350.000020", ["alice", "bob", "mtgox"], callback);
|
||||
testutils.create_accounts(self.remote, "root", starting_xrp, ["alice", "bob", "mtgox"], callback);
|
||||
},
|
||||
function (callback) {
|
||||
self.what = "Set limits.";
|
||||
@@ -1922,7 +1991,7 @@ buster.testCase("Client Issue #535", {
|
||||
], function (error) {
|
||||
if (error)
|
||||
console.log("result: %s: error=%s", self.what, error);
|
||||
buster.refute(error);
|
||||
buster.refute(error, self.what);
|
||||
|
||||
done();
|
||||
});
|
||||
|
||||
@@ -6,9 +6,9 @@ var Remote = require("ripple-lib").Remote;
|
||||
var Transaction = require("ripple-lib").Transaction;
|
||||
var Server = require("./server").Server;
|
||||
|
||||
var testutils = require("./testutils");
|
||||
var testutils = require("./testutils");
|
||||
var config = testutils.init_config();
|
||||
|
||||
require('ripple-lib').config.load(require('./config'));
|
||||
|
||||
buster.testRunner.timeout = 5000;
|
||||
|
||||
|
||||
@@ -5,8 +5,7 @@ var Remote = require("ripple-lib").Remote;
|
||||
var Server = require("./server.js").Server;
|
||||
|
||||
var testutils = require("./testutils.js");
|
||||
|
||||
var config = require('ripple-lib').config.load(require('./config'));
|
||||
var config = testutils.init_config();
|
||||
|
||||
// How long to wait for server to start.
|
||||
var serverDelay = 1500; // XXX Not implemented.
|
||||
|
||||
@@ -6,8 +6,7 @@ var Remote = require("ripple-lib").Remote;
|
||||
var Server = require("./server").Server;
|
||||
|
||||
var testutils = require("./testutils");
|
||||
|
||||
var config = require('ripple-lib').config.load(require('./config'));
|
||||
var config = testutils.init_config();
|
||||
|
||||
// How long to wait for server to start.
|
||||
var serverDelay = 1500;
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
var buster = require("buster");
|
||||
var buster = require("buster");
|
||||
var extend = require("extend");
|
||||
var Server = require("./server").Server;
|
||||
|
||||
var testutils = require("./testutils");
|
||||
var Server = require("./server").Server;
|
||||
var config = testutils.init_config();
|
||||
|
||||
// How long to wait for server to start.
|
||||
// var serverDelay = 1500;
|
||||
@@ -9,19 +12,22 @@ var alpha;
|
||||
|
||||
buster.testCase("Standalone server startup", {
|
||||
"server start and stop" : function (done) {
|
||||
alpha = Server.from_config("alpha", false); //ADD ,true for verbosity
|
||||
var cfg = extend({}, config.default_server_config,
|
||||
config.servers.alpha);
|
||||
|
||||
alpha
|
||||
.on('started', function () {
|
||||
alpha
|
||||
.on('stopped', function () {
|
||||
buster.assert(true);
|
||||
alpha = Server.from_config("alpha", cfg);
|
||||
|
||||
done();
|
||||
})
|
||||
.stop();
|
||||
alpha
|
||||
.on('started', function () {
|
||||
alpha
|
||||
.on('stopped', function () {
|
||||
buster.assert(true);
|
||||
|
||||
done();
|
||||
})
|
||||
.start();
|
||||
.stop();
|
||||
})
|
||||
.start();
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@@ -22,7 +22,6 @@ var path = require("path");
|
||||
var util = require("util");
|
||||
var EventEmitter = require('events').EventEmitter;
|
||||
|
||||
var config = require("./config");
|
||||
var nodeutils = require("./nodeutils");
|
||||
|
||||
// Create a server object
|
||||
@@ -58,8 +57,8 @@ var Server = function (name, config, verbose) {
|
||||
|
||||
util.inherits(Server, EventEmitter);
|
||||
|
||||
Server.from_config = function (name, verbose) {
|
||||
return new Server(name, config.servers[name], verbose);
|
||||
Server.from_config = function (name, config, verbose) {
|
||||
return new Server(name, config, verbose);
|
||||
};
|
||||
|
||||
Server.prototype.on = function (e, c) {
|
||||
@@ -106,7 +105,7 @@ Server.prototype._serverSpawnSync = function() {
|
||||
|
||||
// Spawn in standalone mode for now.
|
||||
this.child = child.spawn(
|
||||
config.rippled,
|
||||
this.config.rippled_path,
|
||||
args,
|
||||
{
|
||||
cwd: this.serverPath(),
|
||||
@@ -116,7 +115,10 @@ Server.prototype._serverSpawnSync = function() {
|
||||
|
||||
if (!this.quiet)
|
||||
console.log("server: start %s: %s --conf=%s",
|
||||
this.child.pid, config.rippled, args.join(" "), this.configPath());
|
||||
this.child.pid,
|
||||
this.config.rippled_path,
|
||||
args.join(" "),
|
||||
this.configPath());
|
||||
|
||||
// By default, just log exits.
|
||||
this.child.on('exit', function(code, signal) {
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
var async = require("async");
|
||||
var async = require("async");
|
||||
var extend = require("extend");
|
||||
|
||||
var Amount = require("ripple-lib").Amount;
|
||||
var Remote = require("ripple-lib").Remote;
|
||||
var Server = require("./server").Server;
|
||||
|
||||
var config = require('ripple-lib').config.load(require('./config'));
|
||||
var Amount = require("ripple-lib").Amount;
|
||||
var Remote = require("ripple-lib").Remote;
|
||||
var Server = require("./server").Server;
|
||||
var Transaction = require("ripple-lib").Transaction;
|
||||
|
||||
var account_dump = function (remote, account, callback) {
|
||||
var self = this;
|
||||
@@ -64,6 +64,8 @@ var account_dump = function (remote, account, callback) {
|
||||
* @param host {String} Identifier for the host configuration to be used.
|
||||
*/
|
||||
var build_setup = function (opts, host) {
|
||||
var config = get_config();
|
||||
|
||||
opts = opts || {};
|
||||
|
||||
// Normalize options
|
||||
@@ -74,6 +76,18 @@ var build_setup = function (opts, host) {
|
||||
|
||||
return function (done) {
|
||||
var self = this;
|
||||
|
||||
self.compute_fees_amount_for_txs = function(txs) {
|
||||
var fee_units = Transaction.fee_units["default"] * txs;
|
||||
return self.remote.fee_tx(fee_units);
|
||||
};
|
||||
|
||||
self.amount_for = function(options) {
|
||||
var reserve = self.remote.reserve(options.ledger_entries || 0);
|
||||
var fees = self.compute_fees_amount_for_txs(options.default_transactions || 0)
|
||||
return reserve.add(fees)
|
||||
.add(options.extra || 0);
|
||||
};
|
||||
|
||||
host = host || config.server_default;
|
||||
|
||||
@@ -87,8 +101,12 @@ var build_setup = function (opts, host) {
|
||||
function runServerStep(callback) {
|
||||
if (opts.no_server) return callback();
|
||||
|
||||
var server_config = extend({}, config.default_server_config,
|
||||
config.servers[host]);
|
||||
|
||||
data.server = Server
|
||||
.from_config(host, !!opts.verbose_server)
|
||||
.from_config(host, server_config,
|
||||
!!opts.verbose_server)
|
||||
.on('started', callback)
|
||||
.on('exited', function () {
|
||||
// If know the remote, tell it server is gone.
|
||||
@@ -114,6 +132,7 @@ var build_setup = function (opts, host) {
|
||||
* @param host {String} Identifier for the host configuration to be used.
|
||||
*/
|
||||
var build_teardown = function (host) {
|
||||
var config = get_config();
|
||||
|
||||
return function (done) {
|
||||
host = host || config.server_default;
|
||||
@@ -160,7 +179,9 @@ var create_accounts = function (remote, src, amount, accounts, callback) {
|
||||
.on('proposed', function (m) {
|
||||
// console.log("proposed: %s", JSON.stringify(m));
|
||||
|
||||
callback(m.result != 'tesSUCCESS');
|
||||
if (m.result != 'tesSUCCESS') {
|
||||
callback(new Error("Payment to create account did not succeed."));
|
||||
} else callback(null);
|
||||
})
|
||||
.on('error', function (m) {
|
||||
// console.log("error: %s", JSON.stringify(m));
|
||||
@@ -203,6 +224,24 @@ var credit_limit = function (remote, src, amount, callback) {
|
||||
}
|
||||
};
|
||||
|
||||
function get_config() {
|
||||
var cfg = require('./config-example');
|
||||
|
||||
// See if the person testing wants to override the configuration by creating a
|
||||
// file called test/config.js.
|
||||
try {
|
||||
cfg = extend({}, cfg, require('./config'));
|
||||
} catch (e) { }
|
||||
|
||||
return cfg;
|
||||
}
|
||||
|
||||
function init_config() {
|
||||
var cfg = get_config();
|
||||
|
||||
return require('ripple-lib').config.load(cfg);
|
||||
}
|
||||
|
||||
var verify_limit = function (remote, src, amount, callback) {
|
||||
assert(4 === arguments.length);
|
||||
|
||||
@@ -214,6 +253,7 @@ var verify_limit = function (remote, src, amount, callback) {
|
||||
}
|
||||
else
|
||||
{
|
||||
// console.log("_m", _m.length, _m);
|
||||
// console.log("verify_limit: parsed: %s", JSON.stringify(_m, undefined, 2));
|
||||
var _account_limit = _m[1];
|
||||
var _quality_in = _m[2];
|
||||
@@ -470,6 +510,8 @@ exports.build_teardown = build_teardown;
|
||||
exports.create_accounts = create_accounts;
|
||||
exports.credit_limit = credit_limit;
|
||||
exports.credit_limits = credit_limits;
|
||||
exports.get_config = get_config;
|
||||
exports.init_config = init_config;
|
||||
exports.ledger_close = ledger_close;
|
||||
exports.payment = payment;
|
||||
exports.payments = payments;
|
||||
|
||||
@@ -1,18 +1,35 @@
|
||||
var buster = require("buster");
|
||||
var buster = require("buster");
|
||||
var extend = require("extend");
|
||||
|
||||
var Server = require("./server").Server;
|
||||
var Remote = require("ripple-lib").Remote;
|
||||
var Server = require("./server").Server;
|
||||
var Remote = require("ripple-lib").Remote;
|
||||
|
||||
var config = require('ripple-lib').config.load(require('./config'));
|
||||
var testutils = require('./testutils');
|
||||
var config = testutils.init_config();
|
||||
|
||||
buster.testRunner.timeout = 5000;
|
||||
|
||||
var server;
|
||||
buster.testCase("WebSocket connection", {
|
||||
'setUp' :
|
||||
function (done) { if (config.servers.alpha.no_server) done(); else server = Server.from_config("alpha").on('started', done).start(); },
|
||||
function (done) {
|
||||
var cfg = extend({}, config.default_server_config,
|
||||
config.servers.alpha);
|
||||
if (cfg.no_server) {
|
||||
done();
|
||||
} else {
|
||||
server = Server.from_config("alpha", cfg).on('started', done).start();
|
||||
}
|
||||
},
|
||||
|
||||
'tearDown' :
|
||||
function (done) { if (config.servers.alpha.no_server) done(); else server.on('stopped', done).stop(); },
|
||||
function (done) {
|
||||
if (config.servers.alpha.no_server) {
|
||||
done();
|
||||
} else {
|
||||
server.on('stopped', done).stop();
|
||||
}
|
||||
},
|
||||
|
||||
"websocket connect and disconnect" :
|
||||
function (done) {
|
||||
|
||||
Reference in New Issue
Block a user