Improve transaction-test coverage

This commit is contained in:
wltsmrz
2014-06-12 00:20:56 -07:00
parent 2afce7cf54
commit a4f22d8b42
2 changed files with 190 additions and 19 deletions

View File

@@ -773,10 +773,6 @@ Transaction.prototype.payment = function(src, dst, amount) {
src = options.source || options.from || options.account;
}
if (src.invoiceID) {
this.invoiceID(src.invoiceID);
}
if (!UInt160.is_valid(src)) {
throw new Error('Payment source address invalid');
}
@@ -785,10 +781,6 @@ Transaction.prototype.payment = function(src, dst, amount) {
throw new Error('Payment destination address invalid');
}
if (/^[\d]+[A-Z]{3}$/.test(amount)) {
amount = Amount.from_human(amount);
}
this.tx_json.TransactionType = 'Payment';
this.tx_json.Account = UInt160.json_rewrite(src);
this.tx_json.Amount = Amount.json_rewrite(amount);
@@ -856,8 +848,8 @@ Transaction.prototype.submit = function(callback) {
var account = this.tx_json.Account;
if (typeof account !== 'string') {
return this.emit('error', new RippleError('tejInvalidAccount', 'Account is unspecified'));
if (!UInt160.is_valid(account)) {
return this.emit('error', new RippleError('tejInvalidAccount', 'Account is missing or invalid'));
}
// YYY Might check paths for invalid accounts.
@@ -866,10 +858,6 @@ Transaction.prototype.submit = function(callback) {
return this;
};
Transaction.prototype.transactionManager = function() {
return this.remote.account(this.tx_json.Account)._transactionManager;
};
Transaction.prototype.abort = function(callback) {
var callback = (typeof callback === 'function') ? callback : function(){};
if (!this.finalized) {

View File

@@ -73,6 +73,61 @@ describe('Transaction', function() {
assert.strictEqual(transaction.state, 'pending');
});
it('Check response code is tel', function() {
var transaction = new Transaction();
assert(!transaction.isTelLocal(-400));
assert(transaction.isTelLocal(-399));
assert(transaction.isTelLocal(-300));
assert(!transaction.isTelLocal(-299));
});
it('Check response code is tem', function() {
var transaction = new Transaction();
assert(!transaction.isTemMalformed(-300));
assert(transaction.isTemMalformed(-299));
assert(transaction.isTemMalformed(-200));
assert(!transaction.isTemMalformed(-199));
});
it('Check response code is tef', function() {
var transaction = new Transaction();
assert(!transaction.isTefFailure(-200));
assert(transaction.isTefFailure(-199));
assert(transaction.isTefFailure(-100));
assert(!transaction.isTefFailure(-99));
});
it('Check response code is ter', function() {
var transaction = new Transaction();
assert(!transaction.isTerRetry(-100));
assert(transaction.isTerRetry(-99));
assert(transaction.isTerRetry(-1));
assert(!transaction.isTerRetry(0));
});
it('Check response code is tep', function() {
var transaction = new Transaction();
assert(!transaction.isTepSuccess(-1));
assert(transaction.isTepSuccess(0));
assert(transaction.isTepSuccess(1e3));
});
it('Check response code is tec', function() {
var transaction = new Transaction();
assert(!transaction.isTecClaimed(99));
assert(transaction.isTecClaimed(100));
assert(transaction.isTecClaimed(1e3));
});
it('Check response code is rejected', function() {
var transaction = new Transaction();
assert(!transaction.isRejected(0));
assert(!transaction.isRejected(-99));
assert(transaction.isRejected(-100));
assert(transaction.isRejected(-399));
assert(!transaction.isRejected(-400));
});
it('Set state', function(done) {
var transaction = new Transaction();
transaction.state = 'pending';
@@ -153,15 +208,25 @@ describe('Transaction', function() {
s3._connected = true;
s3._load_factor = 256 * 8;
remote._servers = [ s1, s2, s3 ];
var s4 = new Server(remote, 'wss://s-west.ripple.com:443');
s4._connected = true;
s4._load_factor = 256 * 8;
var s5 = new Server(remote, 'wss://s-west.ripple.com:443');
s5._connected = true;
s5._load_factor = 256 * 7;
remote._servers = [ s2, s3, s1, s4 ];
assert.strictEqual(s1._computeFee(10), '12');
assert.strictEqual(s2._computeFee(10), '48');
assert.strictEqual(s3._computeFee(10), '96');
assert.strictEqual(s4._computeFee(10), '96');
assert.strictEqual(s5._computeFee(10), '84');
var transaction = new Transaction(remote);
assert.strictEqual(transaction._computeFee(), '48');
assert.strictEqual(transaction._computeFee(), '72');
});
it('Compute fee - no connected server', function() {
@@ -245,6 +310,26 @@ describe('Transaction', function() {
assert.strictEqual(transaction._computeFee(), '72');
});
it('Complete transaction', function(done) {
var remote = new Remote();
var s1 = new Server(remote, 'wss://s-west.ripple.com:443');
s1._connected = true;
remote._servers = [ s1 ];
remote.trusted = true;
remote.local_signing = true;
var transaction = new Transaction(remote);
transaction._secret = 'sh2pTicynUEG46jjR4EoexHcQEoij';
transaction.tx_json.Account = 'rMWwx3Ma16HnqSd4H6saPisihX9aKpXxHJ';
transaction.tx_json.Flags = 0;
assert(transaction.complete());
done();
});
it('Complete transaction - untrusted', function(done) {
var remote = new Remote();
var transaction = new Transaction(remote);
@@ -430,6 +515,23 @@ describe('Transaction', function() {
done();
});
it('Get hash - invalid prefix', function(done) {
var transaction = new Transaction();
transaction._secret = 'sh2pTicynUEG46jjR4EoexHcQEoij';
transaction.tx_json.SigningPubKey = '021FED5FD081CE5C4356431267D04C6E2167E4112C897D5E10335D4E22B4DA49ED';
transaction.tx_json.Account = 'rMWwx3Ma16HnqSd4H6saPisihX9aKpXxHJ';
transaction.tx_json.Flags = 0;
transaction.tx_json.Fee = 10;
transaction.tx_json.Sequence = 1;
transaction.tx_json.TransactionType = 'AccountSet';
assert.throws(function() {
transaction.hash('HASH_TX_SIGNZ');
});
done();
});
it('Get hash - complex transaction', function() {
var input_json = {
Account : 'r4qLSAzv4LZ9TLsR7diphGwKnSEAMQTSjS',
@@ -686,7 +788,7 @@ describe('Transaction', function() {
{
account: 'rP51ycDJw5ZhgvdKiRjBYZKYjsyoCcHmnY',
issuer: 'rsLEU1TPdCJPPysqhWYw9jD97xtG5WqSJm',
currency: 'USD'
type_hex: '0000000000000001'
},
{
account: 'rP51ycDJw5ZhgvdKiRjBYZKYjsyoCcHmnY',
@@ -705,7 +807,7 @@ describe('Transaction', function() {
{
account: 'rP51ycDJw5ZhgvdKiRjBYZKYjsyoCcHmnY',
issuer: 'rsLEU1TPdCJPPysqhWYw9jD97xtG5WqSJm',
currency: 'USD'
type_hex: '0000000000000001'
},
{
account: 'rP51ycDJw5ZhgvdKiRjBYZKYjsyoCcHmnY',
@@ -715,6 +817,10 @@ describe('Transaction', function() {
]);
});
it('Rewrite transaction path - invalid path', function() {
assert.strictEqual(Transaction._pathRewrite(1), void(0));
});
it('Add transaction path', function() {
var transaction = new Transaction();
@@ -1231,7 +1337,6 @@ describe('Transaction', function() {
it('Submit transaction', function(done) {
var remote = new Remote();
var transaction = new Transaction(remote).accountSet('r36xtKNKR43SeXnGn7kN4r4JdQzcrkqpWe');
assert.strictEqual(transaction.callback, void(0));
@@ -1272,6 +1377,84 @@ describe('Transaction', function() {
assert.strictEqual(typeof transaction._errorHandler, 'function');
assert.strictEqual(typeof transaction._successHandler, 'function');
});
it('Submit transaction - submission error', function(done) {
var remote = new Remote();
var transaction = new Transaction(remote).accountSet('r36xtKNKR43SeXnGn7kN4r4JdQzcrkqpWe');
var account = remote.addAccount('r36xtKNKR43SeXnGn7kN4r4JdQzcrkqpWe');
account._transactionManager._nextSequence = 1;
account._transactionManager._request = function(tx) {
tx.emit('error', new Error('Test error'));
};
transaction.complete = function() {
return this;
};
var receivedError = false;
transaction.once('error', function() {
receivedError = true;
});
function submitCallback(err, res) {
setImmediate(function() {
assert(err);
assert.strictEqual(err.constructor.name, 'RippleError');
assert(receivedError);
done();
});
};
transaction.submit(submitCallback);
});
it('Submit transaction - invalid account', function(done) {
var remote = new Remote();
var transaction = new Transaction(remote).accountSet('r36xtKNKR43SeXnGn7kN4r4JdQzcrkqpWe');
transaction.tx_json.Account += 'z';
transaction.once('error', function(err) {
assert.strictEqual(err.result, 'tejInvalidAccount');
done();
});
transaction.submit();
});
it.skip('Abort submission', function(done) {
var remote = new Remote();
var transaction = new Transaction(remote).accountSet('r36xtKNKR43SeXnGn7kN4r4JdQzcrkqpWe');
var account = remote.addAccount('r36xtKNKR43SeXnGn7kN4r4JdQzcrkqpWe');
account._transactionManager._nextSequence = 1;
account._transactionManager._request = function(tx) {
setTimeout(function() {
tx.emit('success', { });
}, 20);
};
transaction.complete = function() {
return this;
};
function submitCallback(err, res) {
setImmediate(function() {
assert(err);
assert.strictEqual(err.result, 'tejAbort');
done();
});
};
transaction.submit(submitCallback);
transaction.abort();
});
});
// vim:sw=2:sts=2:ts=8:et