copay/test/test.publickeyring.js

155 lines
3.9 KiB
JavaScript
Raw Normal View History

2014-04-04 11:57:28 -07:00
'use strict';
var chai = chai || require('chai');
var should = chai.should();
var bitcore = bitcore || require('../node_modules/bitcore');
var Address = bitcore.Address;
var buffertools = bitcore.buffertools;
var copay = copay || {};
var fakeStorage = require('./FakeStorage');
var PublicKeyRing = copay.PublicKeyRing || require('soop').load('../js/models/PublicKeyRing', {Storage: fakeStorage});
var aMasterPubKey = 'tprv8ZgxMBicQKsPdSVTiWXEqCCzqRaRr9EAQdn5UVMpT9UHX67Dh1FmzEMbavPumpAicsUm2XvC6NTdcWB89yN5DUWx5HQ7z3KByUg7Ht74VRZ';
var config = {
network:'livenet',
};
var createW = function (network) {
2014-04-04 11:57:28 -07:00
var config = {
network: network || 'livenet',
};
var w = new PublicKeyRing(config);
should.exist(w);
var copayers = [];
for(var i=0; i<5; i++) {
2014-04-04 11:57:28 -07:00
w.haveAllRequiredPubKeys().should.equal(false);
var newEpk = w.addCopayer();
copayers.push(newEpk);
2014-04-04 11:57:28 -07:00
}
return {w:w, copayers: copayers};
};
describe('PublicKeyRing model', function() {
it('should create an instance (livenet)', function () {
var w = new PublicKeyRing({
network: config.network
});
should.exist(w);
w.network.name.should.equal('livenet');
});
it('should create an instance (testnet)', function () {
var w2 = new PublicKeyRing();
should.exist(w2);
w2.network.name.should.equal('testnet');
});
it('should fail to generate shared pub keys wo extended key', function () {
var w2 = new PublicKeyRing(config);
should.exist(w2);
w2.registeredCopayers().should.equal(0);
2014-04-04 11:57:28 -07:00
w2.haveAllRequiredPubKeys().should.equal(false);
w2.getAddress.bind(false).should.throw();
});
it('should add and check when adding shared pub keys', function () {
var k = createW();
var w = k.w;
var copayers = k.copayers;
w.haveAllRequiredPubKeys().should.equal(true);
w.addCopayer.bind().should.throw();
for(var i =0; i<5; i++)
w.addCopayer.bind(copayers[i]).should.throw();
2014-04-04 11:57:28 -07:00
});
it('show be able to store and retrieve', function () {
var k = createW();
var w = k.w;
var copayers = k.copayers;
2014-04-04 16:16:15 -07:00
for(var i=0; i<3; i++)
w.generateAddress(true);
for(var i=0; i<5; i++)
w.generateAddress(false);
2014-04-04 11:57:28 -07:00
w.store().should.equal(true);
var ID = w.id;
delete w['id'];
w.store.bind().should.throw();
var w2 = PublicKeyRing.read(ID);
w2.haveAllRequiredPubKeys().should.equal(true);
w2.addCopayer.bind().should.throw();
for(var i =0; i<5; i++)
w2.addCopayer.bind(copayers[i]).should.throw();
2014-04-04 16:16:15 -07:00
w2.changeAddressIndex.should.equal(3);
w2.addressIndex.should.equal(5);
2014-04-04 11:57:28 -07:00
});
it('should generate some p2sh addresses', function () {
var k = createW();
var w = k.w;
for(var isChange=0; isChange<2; isChange++) {
for(var i=0; i<5; i++) {
var addr = w.generateAddress(isChange);
var a = new Address(addr);
a.isValid().should.equal(true);
a.isScript().should.equal(true);
a.network().name.should.equal('livenet');
2014-04-04 15:59:00 -07:00
if (i>1) {
w.getAddress(i-1,isChange).should
.not.equal(w.getAddress(i-2,isChange));
}
2014-04-04 11:57:28 -07:00
}
}
});
it('should return PublicKeyRing addresses', function () {
var k = createW();
var w = k.w;
var a = w.getAddresses();
a.length.should.equal(0);
for(var isChange=0; isChange<2; isChange++)
for(var i=0; i<6; i++)
w.generateAddress(isChange);
var as = w.getAddresses();
as.length.should.equal(12);
2014-04-04 16:16:15 -07:00
for(var j in as) {
var a = new Address(as[j]);
2014-04-04 11:57:28 -07:00
a.isValid().should.equal(true);
}
});
2014-04-04 16:16:15 -07:00
it('should count generation indexes', function () {
var k = createW();
var w = k.w;
for(var i=0; i<3; i++)
w.generateAddress(true);
for(var i=0; i<5; i++)
w.generateAddress(false);
w.changeAddressIndex.should.equal(3);
w.addressIndex.should.equal(5);
});
2014-04-04 11:57:28 -07:00
});