add new tests for new reconnect feature
This commit is contained in:
parent
fe177eaba2
commit
86016de19d
2 changed files with 98 additions and 56 deletions
|
|
@ -7,8 +7,14 @@ function Network(opts) {
|
||||||
|
|
||||||
Network.parent=EventEmitter;
|
Network.parent=EventEmitter;
|
||||||
|
|
||||||
Network.prototype.start = function(openCallback, opts) {
|
Network.prototype.start = function(opts, cb) {
|
||||||
// start! :D
|
// start! :D
|
||||||
|
this.peer = {
|
||||||
|
options: {
|
||||||
|
token: "asd"
|
||||||
|
}
|
||||||
|
};
|
||||||
|
if (cb) cb();
|
||||||
};
|
};
|
||||||
|
|
||||||
Network.prototype.send = function(peerIds, data, cb) {
|
Network.prototype.send = function(peerIds, data, cb) {
|
||||||
|
|
@ -24,4 +30,16 @@ Network.prototype.disconnect = function(cb) {
|
||||||
// disconect :c
|
// disconect :c
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Network.prototype.lockIncommingConnections = function() {
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
Network.prototype.getPeer = function() {
|
||||||
|
};
|
||||||
|
Network.prototype.connectToCopayers = function(cps) {
|
||||||
|
};
|
||||||
|
Network.prototype.isOnline = function() {
|
||||||
|
return true;
|
||||||
|
};
|
||||||
|
|
||||||
module.exports = require('soop')(Network);
|
module.exports = require('soop')(Network);
|
||||||
|
|
|
||||||
|
|
@ -2,14 +2,15 @@
|
||||||
|
|
||||||
var chai = chai || require('chai');
|
var chai = chai || require('chai');
|
||||||
var should = chai.should();
|
var should = chai.should();
|
||||||
|
var sinon = require('sinon');
|
||||||
var copay = copay || require('../copay');
|
var copay = copay || require('../copay');
|
||||||
var Wallet = require('../js/models/core/Wallet');
|
var Wallet = require('../js/models/core/Wallet');
|
||||||
var Storage= require('./mocks/FakeStorage');
|
var Storage = require('./mocks/FakeStorage');
|
||||||
var Network= require('./mocks/FakeNetwork');
|
var Network = require('./mocks/FakeNetwork');
|
||||||
var Blockchain= copay.Insight;
|
var Blockchain = copay.Insight;
|
||||||
|
|
||||||
var addCopayers = function (w) {
|
var addCopayers = function(w) {
|
||||||
for(var i=0; i<4; i++) {
|
for (var i = 0; i < 4; i++) {
|
||||||
w.publicKeyRing.addCopayer();
|
w.publicKeyRing.addCopayer();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
@ -28,15 +29,20 @@ describe('Wallet model', function() {
|
||||||
networkName: 'testnet',
|
networkName: 'testnet',
|
||||||
};
|
};
|
||||||
|
|
||||||
it('should fail to create an instance', function () {
|
it('should fail to create an instance', function() {
|
||||||
(function(){new Wallet(config)}).should.throw();
|
(function() {
|
||||||
|
new Wallet(config)
|
||||||
|
}).should.
|
||||||
|
throw ();
|
||||||
});
|
});
|
||||||
|
|
||||||
var createW = function (netKey) {
|
var createW = function(netKey) {
|
||||||
var c = JSON.parse(JSON.stringify(config));
|
var c = JSON.parse(JSON.stringify(config));
|
||||||
|
|
||||||
if (netKey) c.netKey = netKey;
|
if (netKey) c.netKey = netKey;
|
||||||
c.privateKey = new copay.PrivateKey({ networkName: c.networkName });
|
c.privateKey = new copay.PrivateKey({
|
||||||
|
networkName: c.networkName
|
||||||
|
});
|
||||||
|
|
||||||
c.publicKeyRing = new copay.PublicKeyRing({
|
c.publicKeyRing = new copay.PublicKeyRing({
|
||||||
networkName: c.networkName,
|
networkName: c.networkName,
|
||||||
|
|
@ -49,18 +55,18 @@ describe('Wallet model', function() {
|
||||||
c.txProposals = new copay.TxProposals({
|
c.txProposals = new copay.TxProposals({
|
||||||
networkName: c.networkName,
|
networkName: c.networkName,
|
||||||
});
|
});
|
||||||
c.storage = new Storage(config.storage);
|
c.storage = new Storage(config.storage);
|
||||||
c.network = new Network(config.network);
|
c.network = new Network(config.network);
|
||||||
c.blockchain = new Blockchain(config.blockchain);
|
c.blockchain = new Blockchain(config.blockchain);
|
||||||
|
|
||||||
c.networkName = config.networkName;
|
c.networkName = config.networkName;
|
||||||
c.verbose = config.verbose;
|
c.verbose = config.verbose;
|
||||||
c.version = '0.0.1';
|
c.version = '0.0.1';
|
||||||
|
|
||||||
return new Wallet(c);
|
return new Wallet(c);
|
||||||
}
|
}
|
||||||
|
|
||||||
it('should create an instance', function () {
|
it('should create an instance', function() {
|
||||||
var w = createW();
|
var w = createW();
|
||||||
should.exist(w);
|
should.exist(w);
|
||||||
w.publicKeyRing.walletId.should.equal(w.id);
|
w.publicKeyRing.walletId.should.equal(w.id);
|
||||||
|
|
@ -71,11 +77,11 @@ describe('Wallet model', function() {
|
||||||
should.exist(w.privateKey);
|
should.exist(w.privateKey);
|
||||||
should.exist(w.txProposals);
|
should.exist(w.txProposals);
|
||||||
should.exist(w.netKey);
|
should.exist(w.netKey);
|
||||||
var b = new Buffer(w.netKey,'base64');
|
var b = new Buffer(w.netKey, 'base64');
|
||||||
b.toString('hex').length.should.equal(16);
|
b.toString('hex').length.should.equal(16);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should provide some basic features', function () {
|
it('should provide some basic features', function() {
|
||||||
var opts = {};
|
var opts = {};
|
||||||
var w = createW();
|
var w = createW();
|
||||||
addCopayers(w);
|
addCopayers(w);
|
||||||
|
|
@ -83,28 +89,26 @@ describe('Wallet model', function() {
|
||||||
w.publicKeyRing.isComplete().should.equal(true);
|
w.publicKeyRing.isComplete().should.equal(true);
|
||||||
});
|
});
|
||||||
|
|
||||||
var unspentTest = [
|
var unspentTest = [{
|
||||||
{
|
|
||||||
"address": "dummy",
|
"address": "dummy",
|
||||||
"scriptPubKey": "dummy",
|
"scriptPubKey": "dummy",
|
||||||
"txid": "2ac165fa7a3a2b535d106a0041c7568d03b531e58aeccdd3199d7289ab12cfc1",
|
"txid": "2ac165fa7a3a2b535d106a0041c7568d03b531e58aeccdd3199d7289ab12cfc1",
|
||||||
"vout": 1,
|
"vout": 1,
|
||||||
"amount": 10,
|
"amount": 10,
|
||||||
"confirmations":7
|
"confirmations": 7
|
||||||
}
|
}];
|
||||||
];
|
|
||||||
|
|
||||||
var createW2 = function (privateKeys) {
|
var createW2 = function(privateKeys) {
|
||||||
var netKey = 'T0FbU2JLby0=';
|
var netKey = 'T0FbU2JLby0=';
|
||||||
var w = createW(netKey);
|
var w = createW(netKey);
|
||||||
should.exist(w);
|
should.exist(w);
|
||||||
|
|
||||||
var pkr = w.publicKeyRing;
|
var pkr = w.publicKeyRing;
|
||||||
|
|
||||||
for(var i=0; i<4; i++) {
|
for (var i = 0; i < 4; i++) {
|
||||||
if (privateKeys) {
|
if (privateKeys) {
|
||||||
var k=privateKeys[i];
|
var k = privateKeys[i];
|
||||||
pkr.addCopayer(k?k.deriveBIP45Branch().extendedPublicKeyString():null);
|
pkr.addCopayer(k ? k.deriveBIP45Branch().extendedPublicKeyString() : null);
|
||||||
} else {
|
} else {
|
||||||
pkr.addCopayer();
|
pkr.addCopayer();
|
||||||
}
|
}
|
||||||
|
|
@ -120,16 +124,16 @@ describe('Wallet model', function() {
|
||||||
return w;
|
return w;
|
||||||
};
|
};
|
||||||
|
|
||||||
it('#create, 1 sign', function () {
|
it('#create, 1 sign', function() {
|
||||||
|
|
||||||
var w = createW2();
|
var w = createW2();
|
||||||
|
|
||||||
unspentTest[0].address = w.publicKeyRing.getAddress(1, true).toString();
|
unspentTest[0].address = w.publicKeyRing.getAddress(1, true).toString();
|
||||||
unspentTest[0].scriptPubKey = w.publicKeyRing.getScriptPubKeyHex(1, true);
|
unspentTest[0].scriptPubKey = w.publicKeyRing.getScriptPubKeyHex(1, true);
|
||||||
|
|
||||||
var ntxid = w.createTxSync(
|
var ntxid = w.createTxSync(
|
||||||
'15q6HKjWHAksHcH91JW23BJEuzZgFwydBt',
|
'15q6HKjWHAksHcH91JW23BJEuzZgFwydBt',
|
||||||
'123456789',
|
'123456789',
|
||||||
unspentTest
|
unspentTest
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
@ -142,30 +146,32 @@ describe('Wallet model', function() {
|
||||||
Object.keys(txp.signedBy).length.should.equal(1);
|
Object.keys(txp.signedBy).length.should.equal(1);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('#addressIsOwn', function () {
|
it('#addressIsOwn', function() {
|
||||||
var w = createW2();
|
var w = createW2();
|
||||||
var l = w.getAddressesStr();
|
var l = w.getAddressesStr();
|
||||||
for (var i=0; i<l.length; i++)
|
for (var i = 0; i < l.length; i++)
|
||||||
w.addressIsOwn(l[i]).should.equal(true);
|
w.addressIsOwn(l[i]).should.equal(true);
|
||||||
|
|
||||||
w.addressIsOwn(l[0], {excludeMain:true}).should.equal(false);
|
w.addressIsOwn(l[0], {
|
||||||
|
excludeMain: true
|
||||||
|
}).should.equal(false);
|
||||||
|
|
||||||
w.addressIsOwn('mmHqhvTVbxgJTnePa7cfweSRjBCy9bQQXJ').should.equal(false);
|
w.addressIsOwn('mmHqhvTVbxgJTnePa7cfweSRjBCy9bQQXJ').should.equal(false);
|
||||||
w.addressIsOwn('mgtUfP9sTJ6vPLoBxZLPEccGpcjNVryaCX').should.equal(false);
|
w.addressIsOwn('mgtUfP9sTJ6vPLoBxZLPEccGpcjNVryaCX').should.equal(false);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('#create. Signing with derivate keys', function () {
|
it('#create. Signing with derivate keys', function() {
|
||||||
|
|
||||||
var w = createW2();
|
var w = createW2();
|
||||||
|
|
||||||
var ts = Date.now();
|
var ts = Date.now();
|
||||||
for (var isChange=0; isChange<2; isChange++) {
|
for (var isChange = 0; isChange < 2; isChange++) {
|
||||||
for (var index=0; index<3; index++) {
|
for (var index = 0; index < 3; index++) {
|
||||||
unspentTest[0].address = w.publicKeyRing.getAddress(index, isChange).toString();
|
unspentTest[0].address = w.publicKeyRing.getAddress(index, isChange).toString();
|
||||||
unspentTest[0].scriptPubKey = w.publicKeyRing.getScriptPubKeyHex(index, isChange);
|
unspentTest[0].scriptPubKey = w.publicKeyRing.getScriptPubKeyHex(index, isChange);
|
||||||
w.createTxSync(
|
w.createTxSync(
|
||||||
'15q6HKjWHAksHcH91JW23BJEuzZgFwydBt',
|
'15q6HKjWHAksHcH91JW23BJEuzZgFwydBt',
|
||||||
'123456789',
|
'123456789',
|
||||||
unspentTest
|
unspentTest
|
||||||
);
|
);
|
||||||
var t = w.txProposals;
|
var t = w.txProposals;
|
||||||
|
|
@ -175,13 +181,13 @@ describe('Wallet model', function() {
|
||||||
tx.isComplete().should.equal(false);
|
tx.isComplete().should.equal(false);
|
||||||
tx.countInputMissingSignatures(0).should.equal(2);
|
tx.countInputMissingSignatures(0).should.equal(2);
|
||||||
|
|
||||||
( t.txps[k].signedBy[w.privateKey.getId()] - ts > 0).should.equal(true);
|
(t.txps[k].signedBy[w.privateKey.getId()] - ts > 0).should.equal(true);
|
||||||
( t.txps[k].seenBy[w.privateKey.getId()] - ts > 0).should.equal(true);
|
(t.txps[k].seenBy[w.privateKey.getId()] - ts > 0).should.equal(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
it('#fromObj #toObj round trip', function () {
|
it('#fromObj #toObj round trip', function() {
|
||||||
|
|
||||||
var w = createW2();
|
var w = createW2();
|
||||||
|
|
||||||
|
|
@ -189,9 +195,9 @@ describe('Wallet model', function() {
|
||||||
o = JSON.parse(JSON.stringify(o));
|
o = JSON.parse(JSON.stringify(o));
|
||||||
|
|
||||||
var w2 = Wallet.fromObj(o,
|
var w2 = Wallet.fromObj(o,
|
||||||
new Storage(config.storage),
|
new Storage(config.storage),
|
||||||
new Network(config.network),
|
new Network(config.network),
|
||||||
new Blockchain(config.blockchain));
|
new Blockchain(config.blockchain));
|
||||||
should.exist(w2);
|
should.exist(w2);
|
||||||
w2.publicKeyRing.requiredCopayers.should.equal(w.publicKeyRing.requiredCopayers);
|
w2.publicKeyRing.requiredCopayers.should.equal(w.publicKeyRing.requiredCopayers);
|
||||||
should.exist(w2.publicKeyRing.getCopayerId);
|
should.exist(w2.publicKeyRing.getCopayerId);
|
||||||
|
|
@ -199,21 +205,39 @@ describe('Wallet model', function() {
|
||||||
should.exist(w2.privateKey.toObj);
|
should.exist(w2.privateKey.toObj);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('#getSecret decodeSecret', function () {
|
it('#getSecret decodeSecret', function() {
|
||||||
var w = createW2();
|
var w = createW2();
|
||||||
var id = w.getMyCopayerId();
|
var id = w.getMyCopayerId();
|
||||||
var nk = w.netKey;
|
var nk = w.netKey;
|
||||||
|
|
||||||
var sb= w.getSecret();
|
var sb = w.getSecret();
|
||||||
should.exist(sb);
|
should.exist(sb);
|
||||||
var s = Wallet.decodeSecret(sb);
|
var s = Wallet.decodeSecret(sb);
|
||||||
s.pubKey.should.equal(id);
|
s.pubKey.should.equal(id);
|
||||||
s.netKey.should.equal(nk);
|
s.netKey.should.equal(nk);
|
||||||
|
|
||||||
});
|
});
|
||||||
it('decodeSecret check', function () {
|
it('decodeSecret check', function() {
|
||||||
(function(){Wallet.decodeSecret('4fp61K187CsYmjoRQC5iAdC5eGmbCRsAAXfwEwetSQgHvZs27eWKaLaNHRoKM');}).should.not.throw();
|
(function() {
|
||||||
(function(){Wallet.decodeSecret('4fp61K187CsYmjoRQC5iAdC5eGmbCRsAAXfwEwetSQgHvZs27eWKaLaNHRoK');}).should.throw();
|
Wallet.decodeSecret('4fp61K187CsYmjoRQC5iAdC5eGmbCRsAAXfwEwetSQgHvZs27eWKaLaNHRoKM');
|
||||||
(function(){Wallet.decodeSecret('12345');}).should.throw();
|
}).should.not.
|
||||||
|
throw ();
|
||||||
|
(function() {
|
||||||
|
Wallet.decodeSecret('4fp61K187CsYmjoRQC5iAdC5eGmbCRsAAXfwEwetSQgHvZs27eWKaLaNHRoK');
|
||||||
|
}).should.
|
||||||
|
throw ();
|
||||||
|
(function() {
|
||||||
|
Wallet.decodeSecret('12345');
|
||||||
|
}).should.
|
||||||
|
throw ();
|
||||||
|
});
|
||||||
|
it('call reconnect after interval', function(done) {
|
||||||
|
var w = createW2();
|
||||||
|
var spy = sinon.spy(w, 'scheduleConnect');
|
||||||
|
w.netStart();
|
||||||
|
setTimeout(function() {
|
||||||
|
sinon.assert.callCount(spy, 10);
|
||||||
|
done();
|
||||||
|
}, 1000);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue