Skip to main content
Sign in
Snippets Groups Projects
Commit 4000c830 authored by Éloïs's avatar Éloïs
Browse files

Merge branch 'fix/1402' into dev

parents b7c3c922 60266f5d
No related branches found
No related tags found
No related merge requests found
...@@ -18,6 +18,7 @@ import { FileDAL } from "../dal/fileDAL"; ...@@ -18,6 +18,7 @@ import { FileDAL } from "../dal/fileDAL";
import { DBBlock } from "../db/DBBlock"; import { DBBlock } from "../db/DBBlock";
import { Underscore } from "../common-libs/underscore"; import { Underscore } from "../common-libs/underscore";
import { DataErrors } from "../common-libs/errors"; import { DataErrors } from "../common-libs/errors";
import { Map } from "../common-libs/crypto/map";
const indexer = require("../indexer").Indexer; const indexer = require("../indexer").Indexer;
const constants = require("../constants"); const constants = require("../constants");
...@@ -213,12 +214,21 @@ export class BlockchainContext { ...@@ -213,12 +214,21 @@ export class BlockchainContext {
return this.dal.getCurrentBlockOrNull(); return this.dal.getCurrentBlockOrNull();
} }
async checkHaveEnoughLinks(target: string, newLinks: any): Promise<any> { async checkHaveEnoughLinks(
const links = await this.dal.getValidLinksTo(target); target: string,
let count = links.length; newLinks: Map<string[]>
): Promise<void> {
const existingLinks = await this.dal.getValidLinksTo(target);
const existingIssuers = existingLinks.map((value) => value.issuer);
let count = existingIssuers.length;
if (newLinks[target] && newLinks[target].length) { if (newLinks[target] && newLinks[target].length) {
count += newLinks[target].length; const uniqIssuers = Underscore.uniq(
existingIssuers.concat(newLinks[target])
);
count = uniqIssuers.length;
} }
if (count < this.conf.sigQty) { if (count < this.conf.sigQty) {
throw ( throw (
"Key " + "Key " +
... ...
......
...@@ -81,8 +81,17 @@ describe('A member coming back with less than `sigQty` valid certs total', () => ...@@ -81,8 +81,17 @@ describe('A member coming back with less than `sigQty` valid certs total', () =>
await s1.commit({ time: now + 13 }) await s1.commit({ time: now + 13 })
await s1.commit({ time: now + 13 }) await s1.commit({ time: now + 13 })
const c1 = await cat.makeCert(toc) // <-- a renewal ==> this is what we want to observe const c1 = await cat.makeCert(toc) // <-- a renewal ==> this is what we want to observe
const join = await toc.makeMembership('IN') const join = await toc.makeMembership('IN');
// toc is **NOT** coming back! not enough certs
// Inject c1 & join in mempool
await cat.sendCert(c1)
await toc.sendMembership(join)
// Generate potential next bloc, must NOT include toc join (#1402)
const b_gen = s1.generateNext({ time: now + 13 })
assertEqual((await b_gen).joiners.length, 0);
// Try to force toc coming back, must be fail because toc not have enough certs (#1394)
await assertThrows(s1.commit({ await assertThrows(s1.commit({
time: now + 13, time: now + 13,
joiners: [join], joiners: [join],
...@@ -90,13 +99,13 @@ describe('A member coming back with less than `sigQty` valid certs total', () => ...@@ -90,13 +99,13 @@ describe('A member coming back with less than `sigQty` valid certs total', () =>
}), 'BLOCK_WASNT_COMMITTED') }), 'BLOCK_WASNT_COMMITTED')
// BUT is coming back with 1 more cert // BUT is coming back with 1 more cert
const c2 = await tac.makeCert(toc) const c2 = await tac.makeCert(toc)
const b = await s1.commit({ const b2 = await s1.commit({
time: now + 13, time: now + 13,
joiners: [join], joiners: [join],
certifications: [c1, c2] certifications: [c1, c2]
}) })
assertEqual(b.membersCount, 3) // <--- toc is welcome back :) assertEqual(b2.membersCount, 3) // <--- toc is welcome back :)
assertEqual(b.number, 12) assertEqual(b2.number, 12)
}) })
after(() => { after(() => {
... ...
......
...@@ -98,7 +98,7 @@ export class TestUser { ...@@ -98,7 +98,7 @@ export class TestUser {
return this.createdIdentity return this.createdIdentity
} }
public async makeCert(user:TestUser, fromServer?:TestingServer, overrideProps?:any) { public async makeCert(user:TestUser, fromServer?:TestingServer, overrideProps?:any): Promise<CertificationDTO> {
const lookup = await this.lookup(user.pub, fromServer) const lookup = await this.lookup(user.pub, fromServer)
const current = await this.node.server.BlockchainService.current() const current = await this.node.server.BlockchainService.current()
const idty = Underscore.filter(lookup.results[0].uids, uidEntry => uidEntry.uid === user.uid)[0] const idty = Underscore.filter(lookup.results[0].uids, uidEntry => uidEntry.uid === user.uid)[0]
... ...
......
...@@ -528,7 +528,7 @@ export class TestingServer { ...@@ -528,7 +528,7 @@ export class TestingServer {
return blocksResolved return blocksResolved
} }
private generateNext(options:any) { async generateNext(options:any) {
const server = this.server as any const server = this.server as any
// Brings a priver to the server // Brings a priver to the server
if (!server._utProver) { if (!server._utProver) {
... ...
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment