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

Merge branch 'fix/1402' into dev

parents b7c3c922 60266f5d
Branches
Tags
No related merge requests found
......@@ -18,6 +18,7 @@ import { FileDAL } from "../dal/fileDAL";
import { DBBlock } from "../db/DBBlock";
import { Underscore } from "../common-libs/underscore";
import { DataErrors } from "../common-libs/errors";
import { Map } from "../common-libs/crypto/map";
const indexer = require("../indexer").Indexer;
const constants = require("../constants");
......@@ -213,12 +214,21 @@ export class BlockchainContext {
return this.dal.getCurrentBlockOrNull();
}
async checkHaveEnoughLinks(target: string, newLinks: any): Promise<any> {
const links = await this.dal.getValidLinksTo(target);
let count = links.length;
async checkHaveEnoughLinks(
target: string,
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) {
count += newLinks[target].length;
const uniqIssuers = Underscore.uniq(
existingIssuers.concat(newLinks[target])
);
count = uniqIssuers.length;
}
if (count < this.conf.sigQty) {
throw (
"Key " +
......
......@@ -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 })
const c1 = await cat.makeCert(toc) // <-- a renewal ==> this is what we want to observe
const join = await toc.makeMembership('IN')
// toc is **NOT** coming back! not enough certs
const join = await toc.makeMembership('IN');
// 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({
time: now + 13,
joiners: [join],
......@@ -90,13 +99,13 @@ describe('A member coming back with less than `sigQty` valid certs total', () =>
}), 'BLOCK_WASNT_COMMITTED')
// BUT is coming back with 1 more cert
const c2 = await tac.makeCert(toc)
const b = await s1.commit({
const b2 = await s1.commit({
time: now + 13,
joiners: [join],
certifications: [c1, c2]
})
assertEqual(b.membersCount, 3) // <--- toc is welcome back :)
assertEqual(b.number, 12)
assertEqual(b2.membersCount, 3) // <--- toc is welcome back :)
assertEqual(b2.number, 12)
})
after(() => {
......
......@@ -98,7 +98,7 @@ export class TestUser {
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 current = await this.node.server.BlockchainService.current()
const idty = Underscore.filter(lookup.results[0].uids, uidEntry => uidEntry.uid === user.uid)[0]
......
......@@ -528,7 +528,7 @@ export class TestingServer {
return blocksResolved
}
private generateNext(options:any) {
async generateNext(options:any) {
const server = this.server as any
// Brings a priver to the server
if (!server._utProver) {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment