UT: Share setUp and tearDown code.

This commit is contained in:
Arthur Britto
2012-10-21 15:30:16 -07:00
parent 59a61d7b35
commit cc3c640322
5 changed files with 123 additions and 109 deletions

View File

@@ -7,10 +7,12 @@ var path = require("path");
// Where to find the binary. // Where to find the binary.
exports.rippled = path.join(process.cwd(), "rippled"); exports.rippled = path.join(process.cwd(), "rippled");
exports.server_default = "alpha";
// Configuration for servers. // Configuration for servers.
exports.servers = { exports.servers = {
// A local test server. // A local test server.
'alpha' : { "alpha" : {
'trusted' : true, 'trusted' : true,
// "peer_ip" : "0.0.0.0", // "peer_ip" : "0.0.0.0",
// "peer_port" : 51235, // "peer_port" : 51235,
@@ -26,39 +28,39 @@ exports.servers = {
// Configuration for test accounts. // Configuration for test accounts.
exports.accounts = { exports.accounts = {
// Users // Users
'alice' : { "alice" : {
'account' : 'rG1QQv2nh2gr7RCZ1P8YYcBUKCCN633jCn', 'account' : "rG1QQv2nh2gr7RCZ1P8YYcBUKCCN633jCn",
'secret' : 'alice', 'secret' : "alice",
}, },
'bob' : { "bob" : {
'account' : 'rPMh7Pi9ct699iZUTWaytJUoHcJ7cgyziK', 'account' : "rPMh7Pi9ct699iZUTWaytJUoHcJ7cgyziK",
'secret' : 'bob', 'secret' : "bob",
}, },
'carol' : { "carol" : {
'account' : 'rH4KEcG9dEwGwpn6AyoWK9cZPLL4RLSmWW', 'account' : "rH4KEcG9dEwGwpn6AyoWK9cZPLL4RLSmWW",
'secret' : 'carol', 'secret' : "carol",
}, },
// Nexuses // Nexuses
'bitstamp' : { "bitstamp" : {
'account' : 'r4jKmc2nQb5yEU6eycefiNKGHTU5NQJASx', 'account' : "r4jKmc2nQb5yEU6eycefiNKGHTU5NQJASx",
'secret' : 'bitstamp', 'secret' : "bitstamp",
}, },
'mtgox' : { "mtgox" : {
'account' : 'rGihwhaqU8g7ahwAvTq6iX5rvsfcbgZw6v', 'account' : "rGihwhaqU8g7ahwAvTq6iX5rvsfcbgZw6v",
'secret' : 'mtgox', 'secret' : "mtgox",
}, },
// Merchants // Merchants
'amazon' : { "amazon" : {
'account' : 'rhheXqX7bDnXePJeMHhubDDvw2uUTtenPd', 'account' : "rhheXqX7bDnXePJeMHhubDDvw2uUTtenPd",
'secret' : 'amazon', 'secret' : "amazon",
}, },
// Master account // Master account
'root' : { "root" : {
'account' : 'rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh', 'account' : "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
'secret' : 'masterpassphrase', 'secret' : "masterpassphrase",
}, },
}; };

View File

@@ -6,34 +6,22 @@ var Amount = require("../js/amount.js").Amount;
var Remote = require("../js/remote.js").Remote; var Remote = require("../js/remote.js").Remote;
var Server = require("./server.js").Server; var Server = require("./server.js").Server;
var testutils = require("./testutils.js");
buster.testRunner.timeout = 5000; buster.testRunner.timeout = 5000;
var alpha;
buster.testCase("Offer tests", { buster.testCase("Offer tests", {
'setUp' : 'setUp' : testutils.test_setup,
function (done) { 'tearDown' : testutils.test_teardown,
server = Server.from_config("alpha").on('started', function () {
alpha = Remote.from_config("alpha").once('ledger_closed', done) .connect();
}).start();
},
'tearDown' :
function (done) {
alpha
.on('disconnected', function () {
server.on('stopped', done).stop();
})
.connect(false);
},
"offer create then cancel in one ledger" : "offer create then cancel in one ledger" :
function (done) { function (done) {
var self = this;
var final_create; var final_create;
async.waterfall([ async.waterfall([
function (callback) { function (callback) {
alpha.transaction() self.remote.transaction()
.offer_create("root", "500", "100/USD/root") .offer_create("root", "500", "100/USD/root")
.on("proposed", function (m) { .on("proposed", function (m) {
// console.log("PROPOSED: offer_create: %s", JSON.stringify(m)); // console.log("PROPOSED: offer_create: %s", JSON.stringify(m));
@@ -49,7 +37,7 @@ buster.testCase("Offer tests", {
.submit(); .submit();
}, },
function (m, callback) { function (m, callback) {
alpha.transaction() self.remote.transaction()
.offer_cancel("root", m.transaction.Sequence) .offer_cancel("root", m.transaction.Sequence)
.on("proposed", function (m) { .on("proposed", function (m) {
// console.log("PROPOSED: offer_cancel: %s", JSON.stringify(m)); // console.log("PROPOSED: offer_cancel: %s", JSON.stringify(m));
@@ -65,7 +53,7 @@ buster.testCase("Offer tests", {
.submit(); .submit();
}, },
function (m, callback) { function (m, callback) {
alpha self.remote
.once("ledger_closed", function (ledger_closed, ledger_closed_index) { .once("ledger_closed", function (ledger_closed, ledger_closed_index) {
// console.log("LEDGER_CLOSED: %d: %s", ledger_closed_index, ledger_closed); // console.log("LEDGER_CLOSED: %d: %s", ledger_closed_index, ledger_closed);
}) })
@@ -81,12 +69,13 @@ buster.testCase("Offer tests", {
"offer_create then ledger_accept then offer_cancel then ledger_accept." : "offer_create then ledger_accept then offer_cancel then ledger_accept." :
function (done) { function (done) {
var self = this;
var final_create; var final_create;
var offer_seq; var offer_seq;
async.waterfall([ async.waterfall([
function (callback) { function (callback) {
alpha.transaction() self.remote.transaction()
.offer_create("root", "500", "100/USD/root") .offer_create("root", "500", "100/USD/root")
.on("proposed", function (m) { .on("proposed", function (m) {
// console.log("PROPOSED: offer_create: %s", JSON.stringify(m)); // console.log("PROPOSED: offer_create: %s", JSON.stringify(m));
@@ -108,7 +97,7 @@ buster.testCase("Offer tests", {
}, },
function (callback) { function (callback) {
if (!final_create) { if (!final_create) {
alpha self.remote
.once("ledger_closed", function (ledger_closed, ledger_closed_index) { .once("ledger_closed", function (ledger_closed, ledger_closed_index) {
// console.log("LEDGER_CLOSED: %d: %s", ledger_closed_index, ledger_closed); // console.log("LEDGER_CLOSED: %d: %s", ledger_closed_index, ledger_closed);
@@ -122,7 +111,7 @@ buster.testCase("Offer tests", {
function (callback) { function (callback) {
// console.log("CANCEL: offer_cancel: %d", offer_seq); // console.log("CANCEL: offer_cancel: %d", offer_seq);
alpha.transaction() self.remote.transaction()
.offer_cancel("root", offer_seq) .offer_cancel("root", offer_seq)
.on("proposed", function (m) { .on("proposed", function (m) {
// console.log("PROPOSED: offer_cancel: %s", JSON.stringify(m)); // console.log("PROPOSED: offer_cancel: %s", JSON.stringify(m));
@@ -140,7 +129,7 @@ buster.testCase("Offer tests", {
}, },
// See if ledger_accept will crash. // See if ledger_accept will crash.
function (callback) { function (callback) {
alpha self.remote
.once("ledger_closed", function (ledger_closed, ledger_closed_index) { .once("ledger_closed", function (ledger_closed, ledger_closed_index) {
// console.log("LEDGER_CLOSED: A: %d: %s", ledger_closed_index, ledger_closed); // console.log("LEDGER_CLOSED: A: %d: %s", ledger_closed_index, ledger_closed);
callback(); callback();
@@ -148,7 +137,7 @@ buster.testCase("Offer tests", {
.ledger_accept(); .ledger_accept();
}, },
function (callback) { function (callback) {
alpha self.remote
.once("ledger_closed", function (ledger_closed, ledger_closed_index) { .once("ledger_closed", function (ledger_closed, ledger_closed_index) {
// console.log("LEDGER_CLOSED: B: %d: %s", ledger_closed_index, ledger_closed); // console.log("LEDGER_CLOSED: B: %d: %s", ledger_closed_index, ledger_closed);
callback(); callback();
@@ -166,12 +155,13 @@ buster.testCase("Offer tests", {
"new user offer_create then ledger_accept then offer_cancel then ledger_accept." : "new user offer_create then ledger_accept then offer_cancel then ledger_accept." :
function (done) { function (done) {
var self = this;
var final_create; var final_create;
var offer_seq; var offer_seq;
async.waterfall([ async.waterfall([
function (callback) { function (callback) {
alpha.transaction() self.remote.transaction()
.payment('root', 'alice', "1000") .payment('root', 'alice', "1000")
.set_flags('CreateAccount') .set_flags('CreateAccount')
.on('proposed', function (m) { .on('proposed', function (m) {
@@ -182,7 +172,7 @@ buster.testCase("Offer tests", {
.submit() .submit()
}, },
function (callback) { function (callback) {
alpha.transaction() self.remote.transaction()
.offer_create("alice", "500", "100/USD/alice") .offer_create("alice", "500", "100/USD/alice")
.on("proposed", function (m) { .on("proposed", function (m) {
// console.log("PROPOSED: offer_create: %s", JSON.stringify(m)); // console.log("PROPOSED: offer_create: %s", JSON.stringify(m));
@@ -204,7 +194,7 @@ buster.testCase("Offer tests", {
}, },
function (callback) { function (callback) {
if (!final_create) { if (!final_create) {
alpha self.remote
.once("ledger_closed", function (ledger_closed, ledger_closed_index) { .once("ledger_closed", function (ledger_closed, ledger_closed_index) {
// console.log("LEDGER_CLOSED: %d: %s", ledger_closed_index, ledger_closed); // console.log("LEDGER_CLOSED: %d: %s", ledger_closed_index, ledger_closed);
@@ -218,7 +208,7 @@ buster.testCase("Offer tests", {
function (callback) { function (callback) {
// console.log("CANCEL: offer_cancel: %d", offer_seq); // console.log("CANCEL: offer_cancel: %d", offer_seq);
alpha.transaction() self.remote.transaction()
.offer_cancel("alice", offer_seq) .offer_cancel("alice", offer_seq)
.on("proposed", function (m) { .on("proposed", function (m) {
// console.log("PROPOSED: offer_cancel: %s", JSON.stringify(m)); // console.log("PROPOSED: offer_cancel: %s", JSON.stringify(m));
@@ -236,7 +226,7 @@ buster.testCase("Offer tests", {
}, },
// See if ledger_accept will crash. // See if ledger_accept will crash.
function (callback) { function (callback) {
alpha self.remote
.once("ledger_closed", function (ledger_closed, ledger_closed_index) { .once("ledger_closed", function (ledger_closed, ledger_closed_index) {
// console.log("LEDGER_CLOSED: A: %d: %s", ledger_closed_index, ledger_closed); // console.log("LEDGER_CLOSED: A: %d: %s", ledger_closed_index, ledger_closed);
callback(); callback();
@@ -244,7 +234,7 @@ buster.testCase("Offer tests", {
.ledger_accept(); .ledger_accept();
}, },
function (callback) { function (callback) {
alpha self.remote
.once("ledger_closed", function (ledger_closed, ledger_closed_index) { .once("ledger_closed", function (ledger_closed, ledger_closed_index) {
// console.log("LEDGER_CLOSED: B: %d: %s", ledger_closed_index, ledger_closed); // console.log("LEDGER_CLOSED: B: %d: %s", ledger_closed_index, ledger_closed);
callback(); callback();
@@ -260,11 +250,12 @@ buster.testCase("Offer tests", {
"offer cancel past and future sequence" : "offer cancel past and future sequence" :
function (done) { function (done) {
var self = this;
var final_create; var final_create;
async.waterfall([ async.waterfall([
function (callback) { function (callback) {
alpha.transaction() self.remote.transaction()
.payment('root', 'alice', Amount.from_json("10000")) .payment('root', 'alice', Amount.from_json("10000"))
.set_flags('CreateAccount') .set_flags('CreateAccount')
.on("proposed", function (m) { .on("proposed", function (m) {
@@ -281,7 +272,7 @@ buster.testCase("Offer tests", {
}, },
// Past sequence but wrong // Past sequence but wrong
function (m, callback) { function (m, callback) {
alpha.transaction() self.remote.transaction()
.offer_cancel("root", m.transaction.Sequence) .offer_cancel("root", m.transaction.Sequence)
.on("proposed", function (m) { .on("proposed", function (m) {
// console.log("PROPOSED: offer_cancel past: %s", JSON.stringify(m)); // console.log("PROPOSED: offer_cancel past: %s", JSON.stringify(m));
@@ -291,7 +282,7 @@ buster.testCase("Offer tests", {
}, },
// Same sequence // Same sequence
function (m, callback) { function (m, callback) {
alpha.transaction() self.remote.transaction()
.offer_cancel("root", m.transaction.Sequence+1) .offer_cancel("root", m.transaction.Sequence+1)
.on("proposed", function (m) { .on("proposed", function (m) {
// console.log("PROPOSED: offer_cancel same: %s", JSON.stringify(m)); // console.log("PROPOSED: offer_cancel same: %s", JSON.stringify(m));
@@ -302,9 +293,9 @@ buster.testCase("Offer tests", {
// Future sequence // Future sequence
function (m, callback) { function (m, callback) {
// After a malformed transaction, need to recover correct sequence. // After a malformed transaction, need to recover correct sequence.
alpha.set_account_seq("root", alpha.account_seq("root")-1); self.remote.set_account_seq("root", self.remote.account_seq("root")-1);
alpha.transaction() self.remote.transaction()
.offer_cancel("root", m.transaction.Sequence+2) .offer_cancel("root", m.transaction.Sequence+2)
.on("proposed", function (m) { .on("proposed", function (m) {
// console.log("ERROR: offer_cancel future: %s", JSON.stringify(m)); // console.log("ERROR: offer_cancel future: %s", JSON.stringify(m));
@@ -314,7 +305,7 @@ buster.testCase("Offer tests", {
}, },
// See if ledger_accept will crash. // See if ledger_accept will crash.
function (callback) { function (callback) {
alpha self.remote
.once("ledger_closed", function (ledger_closed, ledger_closed_index) { .once("ledger_closed", function (ledger_closed, ledger_closed_index) {
// console.log("LEDGER_CLOSED: A: %d: %s", ledger_closed_index, ledger_closed); // console.log("LEDGER_CLOSED: A: %d: %s", ledger_closed_index, ledger_closed);
callback(); callback();
@@ -322,7 +313,7 @@ buster.testCase("Offer tests", {
.ledger_accept(); .ledger_accept();
}, },
function (callback) { function (callback) {
alpha self.remote
.once("ledger_closed", function (ledger_closed, ledger_closed_index) { .once("ledger_closed", function (ledger_closed, ledger_closed_index) {
// console.log("LEDGER_CLOSED: B: %d: %s", ledger_closed_index, ledger_closed); // console.log("LEDGER_CLOSED: B: %d: %s", ledger_closed_index, ledger_closed);
callback(); callback();

View File

@@ -4,6 +4,8 @@ var Amount = require("../js/amount.js").Amount;
var Remote = require("../js/remote.js").Remote; var Remote = require("../js/remote.js").Remote;
var Server = require("./server.js").Server; var Server = require("./server.js").Server;
var testutils = require("./testutils.js");
var fastTearDown = true; var fastTearDown = true;
// How long to wait for server to start. // How long to wait for server to start.
@@ -12,25 +14,12 @@ var serverDelay = 1500; // XXX Not implemented.
buster.testRunner.timeout = 5000; buster.testRunner.timeout = 5000;
buster.testCase("Remote functions", { buster.testCase("Remote functions", {
'setUp' : 'setUp' : testutils.test_setup,
function (done) { 'tearDown' : testutils.test_teardown,
server = Server.from_config("alpha").on('started', function () {
alpha = Remote.from_config("alpha").once('ledger_closed', done) .connect();
}).start();
},
'tearDown' :
function (done) {
alpha
.on('disconnected', function () {
server.on('stopped', done).stop();
})
.connect(false);
},
'request_ledger_current' : 'request_ledger_current' :
function (done) { function (done) {
alpha.request_ledger_current().on('success', function (m) { this.remote.request_ledger_current().on('success', function (m) {
// console.log(m); // console.log(m);
buster.assert.equals(m.ledger_current_index, 3); buster.assert.equals(m.ledger_current_index, 3);
@@ -46,7 +35,7 @@ buster.testCase("Remote functions", {
'request_ledger_closed' : 'request_ledger_closed' :
function (done) { function (done) {
alpha.request_ledger_closed().on('success', function (m) { this.remote.request_ledger_closed().on('success', function (m) {
// console.log("result: %s", JSON.stringify(m)); // console.log("result: %s", JSON.stringify(m));
buster.assert.equals(m.ledger_closed_index, 2); buster.assert.equals(m.ledger_closed_index, 2);
@@ -62,10 +51,12 @@ buster.testCase("Remote functions", {
'manual account_root success' : 'manual account_root success' :
function (done) { function (done) {
alpha.request_ledger_closed().on('success', function (r) { var self = this;
this.remote.request_ledger_closed().on('success', function (r) {
// console.log("result: %s", JSON.stringify(r)); // console.log("result: %s", JSON.stringify(r));
alpha self.remote
.request_ledger_entry('account_root') .request_ledger_entry('account_root')
.ledger_closed(r.ledger_closed) .ledger_closed(r.ledger_closed)
.account_root("rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh") .account_root("rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh")
@@ -93,10 +84,12 @@ buster.testCase("Remote functions", {
// XXX This should be detected locally. // XXX This should be detected locally.
'account_root remote malformedAddress' : 'account_root remote malformedAddress' :
function (done) { function (done) {
alpha.request_ledger_closed().on('success', function (r) { var self = this;
this.remote.request_ledger_closed().on('success', function (r) {
// console.log("result: %s", JSON.stringify(r)); // console.log("result: %s", JSON.stringify(r));
alpha self.remote
.request_ledger_entry('account_root') .request_ledger_entry('account_root')
.ledger_closed(r.ledger_closed) .ledger_closed(r.ledger_closed)
.account_root("zHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh") .account_root("zHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh")
@@ -124,10 +117,12 @@ buster.testCase("Remote functions", {
'account_root entryNotFound' : 'account_root entryNotFound' :
function (done) { function (done) {
alpha.request_ledger_closed().on('success', function (r) { var self = this;
this.remote.request_ledger_closed().on('success', function (r) {
// console.log("result: %s", JSON.stringify(r)); // console.log("result: %s", JSON.stringify(r));
alpha self.remote
.request_ledger_entry('account_root') .request_ledger_entry('account_root')
.ledger_closed(r.ledger_closed) .ledger_closed(r.ledger_closed)
.account_root("alice") .account_root("alice")
@@ -154,10 +149,12 @@ buster.testCase("Remote functions", {
'ledger_entry index' : 'ledger_entry index' :
function (done) { function (done) {
alpha.request_ledger_closed().on('success', function (r) { var self = this;
this.remote.request_ledger_closed().on('success', function (r) {
// console.log("result: %s", JSON.stringify(r)); // console.log("result: %s", JSON.stringify(r));
alpha self.remote
.request_ledger_entry('index') .request_ledger_entry('index')
.ledger_closed(r.ledger_closed) .ledger_closed(r.ledger_closed)
.account_root("alice") .account_root("alice")
@@ -185,7 +182,7 @@ buster.testCase("Remote functions", {
'create account' : 'create account' :
function (done) { function (done) {
alpha.transaction() this.remote.transaction()
.payment('root', 'alice', Amount.from_json("10000")) .payment('root', 'alice', Amount.from_json("10000"))
.set_flags('CreateAccount') .set_flags('CreateAccount')
.on('success', function (r) { .on('success', function (r) {
@@ -204,10 +201,12 @@ buster.testCase("Remote functions", {
"create account final" : "create account final" :
function (done) { function (done) {
var self = this;
var got_proposed; var got_proposed;
var got_success; var got_success;
alpha.transaction() this.remote.transaction()
.payment('root', 'alice', Amount.from_json("10000")) .payment('root', 'alice', Amount.from_json("10000"))
.set_flags('CreateAccount') .set_flags('CreateAccount')
.on('success', function (r) { .on('success', function (r) {
@@ -234,7 +233,7 @@ buster.testCase("Remote functions", {
got_proposed = true; got_proposed = true;
alpha.ledger_accept(); self.remote.ledger_accept();
}) })
.on('status', function (s) { .on('status', function (s) {
// console.log("status: %s", JSON.stringify(s)); // console.log("status: %s", JSON.stringify(s));

View File

@@ -4,36 +4,24 @@ var Amount = require("../js/amount.js").Amount;
var Remote = require("../js/remote.js").Remote; var Remote = require("../js/remote.js").Remote;
var Server = require("./server.js").Server; var Server = require("./server.js").Server;
var testutils = require("./testutils.js");
// How long to wait for server to start. // How long to wait for server to start.
var serverDelay = 1500; var serverDelay = 1500;
buster.testRunner.timeout = 5000; buster.testRunner.timeout = 5000;
var alpha;
buster.testCase("Sending", { buster.testCase("Sending", {
'setUp' : 'setUp' : testutils.test_setup,
function (done) { 'tearDown' : testutils.test_teardown,
server = Server.from_config("alpha").on('started', function () {
alpha = Remote.from_config("alpha").once('ledger_closed', done) .connect();
}).start();
},
'tearDown' :
function (done) {
alpha
.on('disconnected', function () {
server.on('stopped', done).stop();
})
.connect(false);
},
"send to non-existant account without create." : "send to non-existant account without create." :
function (done) { function (done) {
var self = this;
var ledgers = 20;
var got_proposed; var got_proposed;
var ledgers = 20;
alpha.transaction() this.remote.transaction()
.payment('root', 'alice', Amount.from_json("10000")) .payment('root', 'alice', Amount.from_json("10000"))
.on('success', function (r) { .on('success', function (r) {
// Transaction sent. // Transaction sent.
@@ -46,7 +34,7 @@ buster.testCase("Sending", {
ledgers -= 1; ledgers -= 1;
if (ledgers) { if (ledgers) {
alpha.ledger_accept(); self.remote.ledger_accept();
} }
else { else {
buster.assert(false, "Final never received."); buster.assert(false, "Final never received.");
@@ -68,7 +56,7 @@ buster.testCase("Sending", {
got_proposed = true; got_proposed = true;
alpha.ledger_accept(); // Move it along. self.remote.ledger_accept(); // Move it along.
}) })
.on('final', function (m) { .on('final', function (m) {
// console.log("final: %s", JSON.stringify(m)); // console.log("final: %s", JSON.stringify(m));

34
test/testutils.js Normal file
View File

@@ -0,0 +1,34 @@
var Remote = require("../js/remote.js").Remote;
var Server = require("./server.js").Server;
var config = require("./config.js");
var test_setup = function (done, host) {
var self = this;
var host = host || config.server_default;
this.store = this.store || {};
var data = this.store[host] = this.store[host] || {};
data.server = Server.from_config(host).on('started', function () {
self.remote = data.remote = Remote.from_config(host).once('ledger_closed', done).connect();
}).start();
};
var test_teardown = function (done, host) {
var host = host || config.server_default;
var data = this.store[host];
data.remote
.on('disconnected', function () {
data.server.on('stopped', done).stop();
})
.connect(false);
};
exports.test_setup = test_setup;
exports.test_teardown = test_teardown;
// vim:sw=2:sts=2:ts=8