Mise à jour de GitLab prévue ce samedi 8 mai 2021 à partir de 9h00 CET | GitLab upgrade planned this Saturday May 4th of 2021 from 9:00 AM CET

Commit 34e2e364 authored by Cédric Moreau's avatar Cédric Moreau

TDD: Block:Global: joiner must have enough links to join

parent d8cd97ff
......@@ -28,8 +28,8 @@ function GlobalValidator (conf, dao) {
async.apply(checkCertificationsAreMadeByMembers, block),
async.apply(checkCertificationsAreMadeToMembers, block),
async.apply(checkCertificationsDelayIsRespected, block),
async.apply(checkNewcomersHaveEnoughCertifications, block),
async.apply(checkNewcomersAreNotOudistanced, block)
async.apply(checkJoinersHaveEnoughCertifications, block),
async.apply(checkJoinersAreNotOudistanced, block)
], done);
};
......@@ -165,12 +165,37 @@ function GlobalValidator (conf, dao) {
}, done);
}
function checkNewcomersHaveEnoughCertifications (block, done) {
done();
function checkJoinersHaveEnoughCertifications (block, done) {
var newLinks = getNewLinks(block);
async.forEach(block.joiners, function(inlineMembership, callback){
var ms = Membership.fromInline(inlineMembership);
async.waterfall([
function (next){
dao.getValidLinksTo(ms.issuer, next);
},
function (links, next){
var nbCerts = links.length + (newLinks[ms.issuer] || []).length;
if (nbCerts < conf.sigQty)
next('Joiner does not gathers enough certifications');
else
next();
},
], callback);
}, done);
}
function checkNewcomersAreNotOudistanced (block, done) {
function checkJoinersAreNotOudistanced (block, done) {
done();
}
}
function getNewLinks (block) {
var newLinks = {};
block.certifications.forEach(function(inlineCert){
var cert = Certification.fromInline(inlineCert);
newLinks[cert.to] = newLinks[cert.to] || [];
newLinks[cert.to].push(cert.from);
});
return newLinks;
}
\ No newline at end of file
......@@ -652,4 +652,32 @@ module.exports = {
"CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC:F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:1411844659:kr2JA6wCGfbNKGpyM86BscsFk22aA9oiAon8mWRPl4G8UpJKZs3tjuPRAw5+04KLCRWl/TT1TumDCkeEjev7DA==\n" +
"Transactions:\n" +
"kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
NOT_ENOUGH_CERTIFICATIONS_JOINER:
"Version: 1\n" +
"Type: Block\n" +
"Currency: beta_brousouf\n" +
"Nonce: 11\n" +
"Number: 0\n" +
"Date: 1411776000\n" +
"ConfirmedDate: 1411776000\n" +
"Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
"MembersCount: 3\n" +
"Identities:\n" +
"HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:Die9lYNW1u/w50AfuaXwb4MJc3aKA3WfJwiy+31TqHIGC+VNnRKjMmrwMptN+a+dL6INjLrhMrPqoK60IkTlDQ==:1411837451:CAT\n" +
"G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:NJE8nYU4Im+KQDRdoAn5gcfic+Gjjzp0Pp0iji/Fzh9JIThoQeUDDew4Q5vJBEg/Aw7gPnIg+11TbLkIGa/ODQ==:1411837452:TAC\n" +
"F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:1V/QnQcnJtQSSvhOFBhl7kGXBea8gKEQ6iqPNCVb41yI9gN79XGtUeHhjlumhQkPeizlzpkcNBkL8bhokiNcBQ==:1411837457:SNOW\n" +
"Joiners:\n" +
"HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:iSQvl1VVc6+b1AUaBJ/VTTurGGHgaIcjASBhIlzI7M/7KVQV2Wi3oGUZUzLWqCAtGUsPcsj1HCV2/sRyxHmqAw==:1411837455:1411837451:CAT\n" +
"G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:25xK7+ph7IYeN9Hu8PvuIBjYdVURYtvKayPHZg7zrrYTs6ii2fMtk5J65a3bT/NKr2Qsd7I5TCL29QyiAXa7BA==:1411837456:1411837452:TAC\n" +
"F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:ze+ftHWFLYmjfvXyrx4a15N2VQjf6oen8kkMiYNYrVllbpb5IUcb28CenlOQbVd9cZCNGSkTP7xP5bt8KAqUAw==:1411837462:1411837457:SNOW\n" +
"Leavers:\n" +
"Excluded:\n" +
"Certifications:\n" +
"G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:1411844654:vTvKYvjTYUT30t/9h7uNE/2LFJiYuA4YleIetFkb62XxDoxGizKC9VvVs7WRNArcfHvJ+RLyOoawQzpmw2DyCw==\n" +
"F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:1411844658:2KmmmIL8eK/TACjOqTqO5ZG/tgMYWWV8zRICWFQJuqWyYVg/y5wzXyHrgfpdMYhwYMRBhwbMk1sPNLo/kzp0AA==\n" +
"HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:1411844653:DU4JlHxJtIb2Z7Ag4Jy+z0qjNNo5jzN5EvTUWOTRRzeb6LbOClw2X+pmb0mV/wpVKd/lJrUHAWeKMDHG4MukCA==\n" +
"F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:1411844660:tY5J+g3sM421sx0WNUuESUL8Zz2BU0UbtXT+nRsTlYThaDubMg/GmhsxWa0ccRJcZvftEwpENtVjyd6hyPSQCw==\n" +
"Transactions:\n" +
"kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
};
......@@ -11,7 +11,8 @@ var Identity = mongoose.model('Identity', require('../../../app/models/iden
var Configuration = mongoose.model('Configuration', require('../../../app/models/configuration'));
var conf = new Configuration({
sigDelay: 365.25*24*3600 // 1 year
sigDelay: 365.25*24*3600, // 1 year
sigQty: 1
});
describe("Block local coherence", function(){
......@@ -57,6 +58,12 @@ describe("Block local coherence", function(){
done();
}));
it('a block with at least one joiner without enough certifications should fail', validate(blocks.NOT_ENOUGH_CERTIFICATIONS_JOINER, function (err, done) {
should.exist(err);
err.should.equal('Joiner does not gathers enough certifications');
done();
}));
});
function validate (raw, callback) {
......@@ -120,4 +127,8 @@ function BlockCheckerDao (block) {
done(null, null);
}
}
this.getValidLinksTo = function (to, done) {
done(null, []);
}
}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment