Skip to content

Commit 01679a0

Browse files
committed
Add final tests
1 parent 3940dc8 commit 01679a0

File tree

1 file changed

+169
-71
lines changed

1 file changed

+169
-71
lines changed

test/byContract/IexecPoco/IexecPoco2-contribute-and-finalize.test.ts

Lines changed: 169 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@ const teeDealTag = '0x0000000000000000000000000000000000000000000000000000000000
3737
const standardDealTag = HashZero;
3838
const emptyEnclaveAddress = AddressZero;
3939
const emptyEnclaveSignature = '0x';
40+
const noCallbackData = '0x';
41+
const noResultsData = '0x';
4042
const { results, resultDigest } = buildUtf8ResultAndDigest('result');
4143

4244
let proxyAddress: string;
@@ -125,20 +127,22 @@ describe('IexecPoco2#contributeAndFinalize', () => {
125127
worker,
126128
);
127129
const contributeAndFinalizeBlockTimestamp = await setNextBlockTimestamp();
128-
const contributeAndFinalizeTx = await iexecPoco.connect(worker).contributeAndFinalize(
129-
taskId,
130-
resultsCallbackDigest,
131-
'0x', // Result data
132-
resultsCallback,
133-
enclave.address,
134-
await buildAndSignPocoClassicEnclaveMessage(resultHash, resultSeal, enclave),
135-
await buildAndSignContributionAuthorizationMessage(
136-
worker.address,
130+
const contributeAndFinalizeTx = await iexecPoco
131+
.connect(worker)
132+
.contributeAndFinalize(
137133
taskId,
134+
resultsCallbackDigest,
135+
noResultsData,
136+
resultsCallback,
138137
enclave.address,
139-
sms,
140-
),
141-
);
138+
await buildAndSignPocoClassicEnclaveMessage(resultHash, resultSeal, enclave),
139+
await buildAndSignContributionAuthorizationMessage(
140+
worker.address,
141+
taskId,
142+
enclave.address,
143+
sms,
144+
),
145+
);
142146
await contributeAndFinalizeTx.wait();
143147
// Check state.
144148
const deal = await iexecPoco.viewDeal(dealId);
@@ -156,7 +160,7 @@ describe('IexecPoco2#contributeAndFinalize', () => {
156160
expect(task.revealCounter).to.equal(1);
157161
expect(task.winnerCounter).to.equal(1);
158162
expect(task.resultDigest).to.equal(resultsCallbackDigest);
159-
expect(task.results).to.equal('0x');
163+
expect(task.results).to.equal(noResultsData);
160164
expect(task.resultsCallback).to.equal(resultsCallback);
161165
expect(task.contributors.length).to.equal(1);
162166
expect(task.contributors[0]).to.equal(worker.address);
@@ -225,7 +229,7 @@ describe('IexecPoco2#contributeAndFinalize', () => {
225229
.to.emit(iexecPoco, 'TaskReveal')
226230
.withArgs(taskId, worker.address, resultsCallbackDigest)
227231
.to.emit(iexecPoco, 'TaskFinalize')
228-
.withArgs(taskId, '0x');
232+
.withArgs(taskId, noResultsData);
229233
// Callback events.
230234
await expect(contributeAndFinalizeTx)
231235
.to.emit(callbackConsumer, 'GotResult')
@@ -247,20 +251,22 @@ describe('IexecPoco2#contributeAndFinalize', () => {
247251
await iexecPoco.initialize(dealId, taskIndex).then((tx) => tx.wait());
248252
// Run contributeAndFinalize.
249253
const { resultHash } = buildResultHashAndResultSeal(taskId, resultDigest, worker);
250-
const contributeAndFinalizeTx = await iexecPoco.connect(worker).contributeAndFinalize(
251-
taskId,
252-
resultDigest,
253-
results,
254-
'0x', // callback data
255-
emptyEnclaveAddress,
256-
emptyEnclaveSignature,
257-
await buildAndSignContributionAuthorizationMessage(
258-
worker.address,
254+
const contributeAndFinalizeTx = await iexecPoco
255+
.connect(worker)
256+
.contributeAndFinalize(
259257
taskId,
258+
resultDigest,
259+
results,
260+
noCallbackData,
260261
emptyEnclaveAddress,
261-
scheduler,
262-
),
263-
);
262+
emptyEnclaveSignature,
263+
await buildAndSignContributionAuthorizationMessage(
264+
worker.address,
265+
taskId,
266+
emptyEnclaveAddress,
267+
scheduler,
268+
),
269+
);
264270
await contributeAndFinalizeTx.wait();
265271
// Check relevant state.
266272
const deal = await iexecPoco.viewDeal(dealId);
@@ -269,7 +275,7 @@ describe('IexecPoco2#contributeAndFinalize', () => {
269275
expect(task.status).to.equal(TaskStatusEnum.COMPLETED);
270276
expect(task.resultDigest).to.equal(resultDigest);
271277
expect(task.results).to.equal(ethers.utils.hexlify(results));
272-
expect(task.resultsCallback).to.equal('0x');
278+
expect(task.resultsCallback).to.equal(noCallbackData);
273279
// Check events.
274280
await expect(contributeAndFinalizeTx)
275281
.to.emit(iexecPoco, 'TaskContribute')
@@ -296,20 +302,22 @@ describe('IexecPoco2#contributeAndFinalize', () => {
296302
);
297303
// No initialize.
298304
await expect(
299-
iexecPoco.connect(worker).contributeAndFinalize(
300-
taskId,
301-
resultDigest,
302-
results,
303-
'0x', // callback data
304-
emptyEnclaveAddress,
305-
emptyEnclaveSignature,
306-
await buildAndSignContributionAuthorizationMessage(
307-
worker.address,
305+
iexecPoco
306+
.connect(worker)
307+
.contributeAndFinalize(
308308
taskId,
309+
resultDigest,
310+
results,
311+
noCallbackData,
309312
emptyEnclaveAddress,
310-
scheduler,
313+
emptyEnclaveSignature,
314+
await buildAndSignContributionAuthorizationMessage(
315+
worker.address,
316+
taskId,
317+
emptyEnclaveAddress,
318+
scheduler,
319+
),
311320
),
312-
),
313321
).to.be.revertedWithoutReason(); // require#1
314322
});
315323

@@ -330,20 +338,22 @@ describe('IexecPoco2#contributeAndFinalize', () => {
330338
await time.setNextBlockTimestamp(task.contributionDeadline);
331339
// Task is active but after deadline.
332340
await expect(
333-
iexecPoco.connect(worker).contributeAndFinalize(
334-
taskId,
335-
resultDigest,
336-
results,
337-
'0x', // callback data
338-
emptyEnclaveAddress,
339-
emptyEnclaveSignature,
340-
await buildAndSignContributionAuthorizationMessage(
341-
worker.address,
341+
iexecPoco
342+
.connect(worker)
343+
.contributeAndFinalize(
342344
taskId,
345+
resultDigest,
346+
results,
347+
noCallbackData,
343348
emptyEnclaveAddress,
344-
scheduler,
349+
emptyEnclaveSignature,
350+
await buildAndSignContributionAuthorizationMessage(
351+
worker.address,
352+
taskId,
353+
emptyEnclaveAddress,
354+
scheduler,
355+
),
345356
),
346-
),
347357
).to.be.revertedWithoutReason(); // require#2
348358
});
349359

@@ -365,20 +375,22 @@ describe('IexecPoco2#contributeAndFinalize', () => {
365375
await iexecPoco.initialize(dealId, taskIndex).then((tx) => tx.wait());
366376
// Task active, before deadline, but bad trust.
367377
await expect(
368-
iexecPoco.connect(worker).contributeAndFinalize(
369-
taskId,
370-
resultDigest,
371-
results,
372-
'0x', // callback data
373-
emptyEnclaveAddress,
374-
emptyEnclaveSignature,
375-
await buildAndSignContributionAuthorizationMessage(
376-
worker.address,
378+
iexecPoco
379+
.connect(worker)
380+
.contributeAndFinalize(
377381
taskId,
382+
resultDigest,
383+
results,
384+
noCallbackData,
378385
emptyEnclaveAddress,
379-
scheduler,
386+
emptyEnclaveSignature,
387+
await buildAndSignContributionAuthorizationMessage(
388+
worker.address,
389+
taskId,
390+
emptyEnclaveAddress,
391+
scheduler,
392+
),
380393
),
381-
),
382394
).to.be.revertedWithoutReason(); // require#4
383395
});
384396

@@ -399,28 +411,114 @@ describe('IexecPoco2#contributeAndFinalize', () => {
399411
// Task active, before deadline, good trust, but missing callback data.
400412
const { callbackResultDigest: resultsCallbackDigest } =
401413
buildResultCallbackAndDigest(123);
414+
await expect(
415+
iexecPoco
416+
.connect(worker)
417+
.contributeAndFinalize(
418+
taskId,
419+
resultsCallbackDigest,
420+
noResultsData,
421+
noCallbackData,
422+
emptyEnclaveAddress,
423+
emptyEnclaveSignature,
424+
await buildAndSignContributionAuthorizationMessage(
425+
worker.address,
426+
taskId,
427+
emptyEnclaveAddress,
428+
scheduler,
429+
),
430+
),
431+
).to.be.revertedWithoutReason(); // require#5
432+
});
433+
434+
it('Should not contributeAndFinalize when enclave challenge is missing (TEE)', async () => {
435+
const { dealId, taskIndex, taskId } = await iexecWrapper.signAndMatchOrders(
436+
...buildOrders({
437+
assets: ordersAssets,
438+
requester: requester.address,
439+
prices: ordersPrices,
440+
volume,
441+
trust,
442+
tag: teeDealTag,
443+
}).toArray(),
444+
);
445+
await iexecPoco.initialize(dealId, taskIndex).then((tx) => tx.wait());
446+
// Task active, before deadline, good trust, but missing enclave challenge.
447+
await expect(
448+
iexecPoco
449+
.connect(worker)
450+
.contributeAndFinalize(
451+
taskId,
452+
resultDigest,
453+
results,
454+
noCallbackData,
455+
emptyEnclaveAddress,
456+
emptyEnclaveSignature,
457+
await buildAndSignContributionAuthorizationMessage(
458+
worker.address,
459+
taskId,
460+
emptyEnclaveAddress,
461+
scheduler,
462+
),
463+
),
464+
).to.be.revertedWithoutReason(); // require#6
465+
});
466+
467+
it('Should not contributeAndFinalize when scheduler signature is invalid', async () => {
468+
const { dealId, taskIndex, taskId } = await iexecWrapper.signAndMatchOrders(
469+
...buildOrders({
470+
assets: ordersAssets,
471+
requester: requester.address,
472+
prices: ordersPrices,
473+
volume,
474+
trust,
475+
tag: standardDealTag,
476+
}).toArray(),
477+
);
478+
await iexecPoco.initialize(dealId, taskIndex).then((tx) => tx.wait());
479+
// Task active, before deadline, good trust, but invalid scheduler signature.
402480
await expect(
403481
iexecPoco.connect(worker).contributeAndFinalize(
404482
taskId,
405-
resultsCallbackDigest,
406-
'0x', // Results
407-
'0x', // No callback data
483+
resultDigest,
484+
results,
485+
noCallbackData,
408486
emptyEnclaveAddress,
409487
emptyEnclaveSignature,
488+
'0xbadd', // Bad scheduler signature
489+
),
490+
).to.be.revertedWith('invalid-signature-format'); // require#7
491+
});
492+
493+
it('Should not contributeAndFinalize when enclave signature is invalid (TEE)', async () => {
494+
const { dealId, taskIndex, taskId } = await iexecWrapper.signAndMatchOrders(
495+
...buildOrders({
496+
assets: ordersAssets,
497+
requester: requester.address,
498+
prices: ordersPrices,
499+
volume,
500+
trust,
501+
tag: teeDealTag,
502+
}).toArray(),
503+
);
504+
await iexecPoco.initialize(dealId, taskIndex).then((tx) => tx.wait());
505+
// Task active, before deadline, good trust, good enclave challenge, but invalid enclave signature.
506+
await expect(
507+
iexecPoco.connect(worker).contributeAndFinalize(
508+
taskId,
509+
resultDigest,
510+
results,
511+
noCallbackData,
512+
enclave.address,
513+
'0xbadd', // Bad enclave signature
410514
await buildAndSignContributionAuthorizationMessage(
411515
worker.address,
412516
taskId,
413-
emptyEnclaveAddress,
517+
enclave.address,
414518
scheduler,
415519
),
416520
),
417-
).to.be.revertedWithoutReason(); // require#5
521+
).to.be.revertedWith('invalid-signature-format'); // require#8
418522
});
419-
420-
it('Should not contributeAndFinalize when enclave challenge for TEE task is missing', async () => {});
421-
422-
it('Should not contributeAndFinalize when scheduler signature is invalid', async () => {});
423-
424-
it('Should not contributeAndFinalize when enclave signature is invalid', async () => {});
425523
});
426524
});

0 commit comments

Comments
 (0)