Skip to content

Commit eaa50d4

Browse files
committed
migrate IT full chain with 1 bad worker
1 parent 3aa8743 commit eaa50d4

File tree

2 files changed

+129
-0
lines changed

2 files changed

+129
-0
lines changed

test/000_fullchain.test.ts

Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -299,6 +299,135 @@ describe('Integration tests', function () {
299299
for (let i = 0; i < workerNumber; i++) {
300300
if (workerNumber == 1) {
301301
expect(await iexecPoco.viewScore(workers[i].address)).to.be.equal(0);
302+
} else {
303+
expect(await iexecPoco.viewScore(workers[i].address)).to.be.equal(1);
304+
}
305+
}
306+
});
307+
}
308+
for (let workerNumber = 4; workerNumber < 6; workerNumber++) {
309+
let goodWorkersNumber = workerNumber - 1;
310+
// Worker2 will contribute badly
311+
it(`[7.${workerNumber - 3}] No sponsorship, no beneficiary, no callback, no BoT, up to ${workerNumber} workers with 1 bad actor`, async function () {
312+
const volume = 1;
313+
const workers = [worker1, worker2, worker3, worker4, worker5];
314+
const disposableWokers = workers.slice(0, workerNumber);
315+
const acounts = [
316+
requester,
317+
scheduler,
318+
appProvider,
319+
datasetProvider,
320+
...disposableWokers,
321+
];
322+
// Create deal.
323+
const orders = buildOrders({
324+
assets: ordersAssets,
325+
prices: ordersPrices,
326+
requester: requester.address,
327+
tag: standardDealTag,
328+
beneficiary: beneficiary.address,
329+
volume,
330+
trust: goodWorkersNumber,
331+
});
332+
333+
const { dealId, dealPrice, schedulerStakePerDeal } =
334+
await iexecWrapper.signAndMatchOrders(...orders.toArray());
335+
const taskPrice = appPrice + datasetPrice + workerpoolPrice;
336+
const schedulerStakePerTask = schedulerStakePerDeal / volume;
337+
const workerRewardPerTask = await iexecWrapper.computeWorkerRewardPerTask(
338+
dealId,
339+
PocoMode.CLASSIC,
340+
);
341+
const schedulerRewardPerTask = workerpoolPrice - workerRewardPerTask;
342+
// Check initial balances.
343+
let accountsInitBalances = [
344+
{
345+
address: proxyAddress,
346+
frozen: (await iexecPoco.frozenOf(proxyAddress)).toNumber(),
347+
},
348+
];
349+
for (const account of acounts) {
350+
let address = account.address;
351+
let frozen = (await iexecPoco.frozenOf(account.address)).toNumber();
352+
accountsInitBalances.push({ address, frozen });
353+
}
354+
for (let i = 0; i < workerNumber; i++) {
355+
expect(await iexecPoco.viewScore(workers[i].address)).to.be.equal(0);
356+
}
357+
const taskId = await iexecWrapper.initializeTask(dealId, 0);
358+
// Finalize each task and check balance changes.
359+
const workerStake = await iexecPoco
360+
.viewDeal(dealId)
361+
.then((deal) => deal.workerStake.toNumber());
362+
363+
for (let i = 0; i < workerNumber; i++) {
364+
if (i == 1) {
365+
const { resultDigest: badResultDigest } =
366+
buildUtf8ResultAndDigest('bad-result');
367+
await iexecWrapper.contributeToTask(
368+
dealId,
369+
0,
370+
badResultDigest,
371+
disposableWokers[i],
372+
);
373+
} else {
374+
await iexecWrapper.contributeToTask(
375+
dealId,
376+
0,
377+
resultDigest,
378+
disposableWokers[i],
379+
);
380+
}
381+
}
382+
for (let i = 0; i < workerNumber; i++) {
383+
if (i !== 1) {
384+
await iexecPoco
385+
.connect(disposableWokers[i])
386+
.reveal(taskId, resultDigest)
387+
.then((tx) => tx.wait());
388+
}
389+
}
390+
const finalizeTx = await iexecPoco
391+
.connect(scheduler)
392+
.finalize(taskId, results, '0x');
393+
expect(finalizeTx).to.changeTokenBalances(
394+
iexecPoco,
395+
[proxyAddress, requester, scheduler, appProvider, datasetProvider],
396+
[
397+
-(dealPrice + schedulerStakePerDeal),
398+
0,
399+
schedulerStakePerTask + schedulerRewardPerTask,
400+
appPrice,
401+
datasetPrice,
402+
],
403+
);
404+
for (let i = 0; i < workerNumber; i++) {
405+
if (i !== 1) {
406+
expect(finalizeTx).to.changeTokenBalances(
407+
iexecPoco,
408+
[workers[i]],
409+
[workerStake + workerRewardPerTask / goodWorkersNumber],
410+
);
411+
} else {
412+
expect(finalizeTx).to.changeTokenBalances(iexecPoco, [workers[i]], [0]);
413+
}
414+
}
415+
expect((await iexecPoco.viewTask(taskId)).status).to.equal(
416+
TaskStatusEnum.COMPLETED,
417+
);
418+
const expectedFrozenChanges = [0, -taskPrice, -schedulerStakePerTask, 0, 0];
419+
for (let i = 0; i < workerNumber; i++) {
420+
expectedFrozenChanges.push(0);
421+
}
422+
await changesInFrozen({
423+
accountsInitBalances,
424+
frozenChanges: expectedFrozenChanges,
425+
});
426+
for (let i = 0; i < workerNumber; i++) {
427+
if (i !== 1) {
428+
expect(await iexecPoco.viewScore(workers[i].address)).to.be.equal(1);
429+
} else {
430+
expect(await iexecPoco.viewScore(workers[i].address)).to.be.equal(0);
302431
}
303432
}
304433
});
File renamed without changes.

0 commit comments

Comments
 (0)