@@ -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 } ) ;
0 commit comments