Skip to content

Commit 16f2bda

Browse files
committed
feat: enable TDX tasks support
1 parent 0870c85 commit 16f2bda

File tree

6 files changed

+81
-96
lines changed

6 files changed

+81
-96
lines changed

src/main/java/com/iexec/resultproxy/authorization/AuthorizationService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ public Optional<AuthorizationError> isAuthorizedOnExecutionWithDetailedIssue(fin
9292
}
9393

9494
final boolean isTeeTask = !workerpoolAuthorization.getEnclaveChallenge().equals(BytesUtils.EMPTY_ADDRESS);
95-
final boolean isTeeTaskOnchain = TeeUtils.isTeeTag(chainDeal.getTag());
95+
final boolean isTeeTaskOnchain = TeeUtils.getTeeFramework(chainDeal.getTag()) != null;
9696
if (isTeeTask != isTeeTaskOnchain) {
9797
log.error("Could not match on-chain task type [isTeeTask:{}, isTeeTaskOnchain:{}, chainTaskId:{}, walletAddress:{}]",
9898
isTeeTask, isTeeTaskOnchain, chainTaskId, workerpoolAuthorization.getWorkerWallet());

src/main/java/com/iexec/resultproxy/proxy/ProxyService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ boolean canUploadResult(ResultModel model, String walletAddress) {
103103
return false;
104104
}
105105

106-
final boolean isTeeTask = TeeUtils.isTeeTag(chainDeal.getTag());
106+
final boolean isTeeTask = TeeUtils.getTeeFramework(chainDeal.getTag()) != null;
107107

108108
// Standard tasks
109109
if (!isTeeTask) {

src/main/java/com/iexec/resultproxy/result/Result.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,10 @@
55
import lombok.Data;
66
import lombok.NoArgsConstructor;
77

8+
/**
9+
* @deprecated never used
10+
*/
11+
@Deprecated(forRemoval = true)
812
@Data
913
@AllArgsConstructor
1014
@NoArgsConstructor

src/test/java/com/iexec/resultproxy/TestUtils.java

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,13 @@
1919
import com.iexec.commons.poco.chain.ChainDeal;
2020
import com.iexec.commons.poco.chain.ChainTask;
2121
import com.iexec.commons.poco.chain.ChainTaskStatus;
22-
import com.iexec.commons.poco.tee.TeeUtils;
22+
import com.iexec.commons.poco.order.OrderTag;
2323
import lombok.AccessLevel;
2424
import lombok.NoArgsConstructor;
2525

2626
import java.time.Instant;
2727
import java.time.temporal.ChronoUnit;
28+
import java.util.Optional;
2829

2930
@NoArgsConstructor(access = AccessLevel.PRIVATE)
3031
public class TestUtils {
@@ -36,18 +37,24 @@ public class TestUtils {
3637
public static final String POOL_WRONG_SIGNATURE = "0xf869daaca2407b7eabd27c3c4c5a3f3565172ca7211ac1d8bfacea2beb511a4029446a07cccc0884"
3738
+ "c2193b269dfb341461db8c680a8898bb53862d6e48340c2e1b";
3839

39-
public static ChainDeal getChainDeal() {
40-
return ChainDeal.builder()
40+
public static final String RESULT_DIGEST = "0x3210";
41+
public static final String RESULT_HASH = "0x97f68778e2fa9d60e58ceb64de2c0e72e309400c3168c69499db2140fad28039";
42+
public static final String WALLET_ADDRESS = "0x123abc";
43+
public static final String WORKER_ADDRESS = "0xabc123";
44+
45+
public static Optional<ChainDeal> getChainDeal(final OrderTag tag) {
46+
return Optional.of(ChainDeal.builder()
4147
.poolOwner(POOL_ADDRESS)
42-
.tag(TeeUtils.TEE_SCONE_ONLY_TAG)
43-
.build();
48+
.tag(tag.getValue())
49+
.requester(WALLET_ADDRESS)
50+
.build());
4451
}
4552

46-
public static ChainTask getChainTask(ChainTaskStatus status) {
47-
return ChainTask.builder()
53+
public static Optional<ChainTask> getChainTask(final ChainTaskStatus status) {
54+
return Optional.of(ChainTask.builder()
4855
.dealid(CHAIN_DEAL_ID)
4956
.finalDeadline(Instant.now().plus(5L, ChronoUnit.SECONDS).toEpochMilli())
5057
.status(status)
51-
.build();
58+
.build());
5259
}
5360
}

src/test/java/com/iexec/resultproxy/authorization/AuthorizationServiceTests.java

Lines changed: 21 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,9 @@
1717
package com.iexec.resultproxy.authorization;
1818

1919
import com.iexec.common.result.ResultModel;
20-
import com.iexec.commons.poco.chain.ChainDeal;
2120
import com.iexec.commons.poco.chain.ChainTask;
2221
import com.iexec.commons.poco.chain.WorkerpoolAuthorization;
22+
import com.iexec.commons.poco.order.OrderTag;
2323
import com.iexec.commons.poco.security.Signature;
2424
import com.iexec.commons.poco.utils.BytesUtils;
2525
import com.iexec.commons.poco.utils.HashUtils;
@@ -28,6 +28,8 @@
2828
import org.junit.jupiter.api.BeforeEach;
2929
import org.junit.jupiter.api.Test;
3030
import org.junit.jupiter.api.extension.ExtendWith;
31+
import org.junit.jupiter.params.ParameterizedTest;
32+
import org.junit.jupiter.params.provider.EnumSource;
3133
import org.mockito.Mock;
3234
import org.mockito.junit.jupiter.MockitoExtension;
3335
import org.springframework.beans.factory.annotation.Autowired;
@@ -63,8 +65,6 @@
6365
@ExtendWith(MockitoExtension.class)
6466
class AuthorizationServiceTests {
6567

66-
private static final String RESULT_DIGEST = "0x3210";
67-
6868
@Container
6969
private static final MongoDBContainer mongoDBContainer = new MongoDBContainer(DockerImageName.parse(System.getProperty("mongo.image")));
7070

@@ -93,13 +93,12 @@ void beforeEach() throws GeneralSecurityException {
9393
}
9494

9595
// region isAuthorizedOnExecutionWithDetailedIssue
96-
@Test
97-
void shouldBeAuthorizedOnExecutionOfTeeTaskWithDetails() {
98-
final ChainDeal chainDeal = getChainDeal();
99-
final ChainTask chainTask = getChainTask(ACTIVE);
96+
@ParameterizedTest
97+
@EnumSource(value = OrderTag.class, names = "STANDARD", mode = EnumSource.Mode.EXCLUDE)
98+
void shouldBeAuthorizedOnExecutionOfTeeTaskWithDetails(final OrderTag tag) {
10099
final WorkerpoolAuthorization auth = getWorkerpoolAuthorization(true);
101-
when(iexecHubService.getChainTask(auth.getChainTaskId())).thenReturn(Optional.of(chainTask));
102-
when(iexecHubService.getChainDeal(chainTask.getDealid())).thenReturn(Optional.of(chainDeal));
100+
when(iexecHubService.getChainTask(auth.getChainTaskId())).thenReturn(getChainTask(ACTIVE));
101+
when(iexecHubService.getChainDeal(CHAIN_DEAL_ID)).thenReturn(getChainDeal(tag));
103102

104103
final Optional<AuthorizationError> isAuth = authorizationService.isAuthorizedOnExecutionWithDetailedIssue(auth);
105104
assertThat(isAuth).isEmpty();
@@ -118,17 +117,16 @@ void shouldNotBeAuthorizedOnExecutionOfTeeTaskWithEmptyAuthorizationWithDetails(
118117
assertThat(isAuth).isEqualTo(Optional.of(EMPTY_PARAMS_UNAUTHORIZED));
119118
}
120119

121-
@Test
122-
void shouldNotBeAuthorizedOnExecutionOfTeeTaskWhenTaskTypeNotMatchedOnchainWithDetails() {
123-
final ChainDeal chainDeal = getChainDeal();
124-
final ChainTask chainTask = getChainTask(ACTIVE);
120+
@ParameterizedTest
121+
@EnumSource(value = OrderTag.class, names = "STANDARD", mode = EnumSource.Mode.EXCLUDE)
122+
void shouldNotBeAuthorizedOnExecutionOfTeeTaskWhenTaskTypeNotMatchedOnchainWithDetails(final OrderTag tag) {
125123
final WorkerpoolAuthorization auth = WorkerpoolAuthorization.builder()
126124
.chainTaskId("0x1111111111111111111111111111111111111111111111111111111111111111")
127125
.workerWallet("0x87ae2b87b5db23830572988fb1f51242fbc471ce")
128126
.enclaveChallenge(BytesUtils.EMPTY_ADDRESS)
129127
.build();
130-
when(iexecHubService.getChainTask(auth.getChainTaskId())).thenReturn(Optional.of(chainTask));
131-
when(iexecHubService.getChainDeal(chainTask.getDealid())).thenReturn(Optional.of(chainDeal));
128+
when(iexecHubService.getChainTask(auth.getChainTaskId())).thenReturn(getChainTask(ACTIVE));
129+
when(iexecHubService.getChainDeal(CHAIN_DEAL_ID)).thenReturn(getChainDeal(tag));
132130

133131
final Optional<AuthorizationError> isAuth = authorizationService.isAuthorizedOnExecutionWithDetailedIssue(auth);
134132
assertThat(isAuth).isEqualTo(Optional.of(NO_MATCH_ONCHAIN_TYPE));
@@ -158,26 +156,24 @@ void shouldNotBeAuthorizedOnExecutionOfTeeTaskWhenFinalDeadlineReached() {
158156

159157
@Test
160158
void shouldNotBeAuthorizedOnExecutionOfTeeTaskWhenGetDealFailedWithDetails() {
161-
final ChainTask chainTask = getChainTask(ACTIVE);
162159
final Signature wrongSignature = new Signature(POOL_WRONG_SIGNATURE);
163160
final WorkerpoolAuthorization auth = getWorkerpoolAuthorizationWithWrongSignature(wrongSignature);
164161

165-
when(iexecHubService.getChainTask(auth.getChainTaskId())).thenReturn(Optional.of(chainTask));
166-
when(iexecHubService.getChainDeal(chainTask.getDealid())).thenReturn(Optional.empty());
162+
when(iexecHubService.getChainTask(CHAIN_TASK_ID)).thenReturn(getChainTask(ACTIVE));
163+
when(iexecHubService.getChainDeal(CHAIN_DEAL_ID)).thenReturn(Optional.empty());
167164

168165
final Optional<AuthorizationError> isAuth = authorizationService.isAuthorizedOnExecutionWithDetailedIssue(auth);
169166
assertThat(isAuth).isEqualTo(Optional.of(GET_CHAIN_DEAL_FAILED));
170167
}
171168

172-
@Test
173-
void shouldNotBeAuthorizedOnExecutionOfTeeTaskWhenPoolSignatureIsNotValidWithDetails() {
174-
final ChainDeal chainDeal = getChainDeal();
175-
final ChainTask chainTask = getChainTask(ACTIVE);
169+
@ParameterizedTest
170+
@EnumSource(value = OrderTag.class, names = "STANDARD", mode = EnumSource.Mode.EXCLUDE)
171+
void shouldNotBeAuthorizedOnExecutionOfTeeTaskWhenPoolSignatureIsNotValidWithDetails(final OrderTag tag) {
176172
final Signature wrongSignature = new Signature(POOL_WRONG_SIGNATURE);
177173
final WorkerpoolAuthorization auth = getWorkerpoolAuthorizationWithWrongSignature(wrongSignature);
178174

179-
when(iexecHubService.getChainTask(auth.getChainTaskId())).thenReturn(Optional.of(chainTask));
180-
when(iexecHubService.getChainDeal(chainTask.getDealid())).thenReturn(Optional.of(chainDeal));
175+
when(iexecHubService.getChainTask(auth.getChainTaskId())).thenReturn(getChainTask(ACTIVE));
176+
when(iexecHubService.getChainDeal(CHAIN_DEAL_ID)).thenReturn(getChainDeal(tag));
181177

182178
final Optional<AuthorizationError> isAuth = authorizationService.isAuthorizedOnExecutionWithDetailedIssue(auth);
183179
assertThat(isAuth).isEqualTo(Optional.of(INVALID_SIGNATURE));
@@ -277,7 +273,7 @@ void shouldNotAddAuthorizationTwiceInCollection() {
277273
// endregion
278274

279275
// region utils
280-
String getEnclaveSignature(final ECKeyPair ecKeyPair) {
276+
private String getEnclaveSignature(final ECKeyPair ecKeyPair) {
281277
final String resultHash = HashUtils.concatenateAndHash(CHAIN_TASK_ID, RESULT_DIGEST);
282278
final String resultSeal = HashUtils.concatenateAndHash(workerCreds.getAddress(), CHAIN_TASK_ID, RESULT_DIGEST);
283279
final String messageHash = HashUtils.concatenateAndHash(resultHash, resultSeal);

0 commit comments

Comments
 (0)