Skip to content

Commit 4fc4807

Browse files
committed
fix: call retrieveTeeServicesProperties instead of getTeeServicesProperties in TeeService
1 parent 5010b7f commit 4fc4807

File tree

3 files changed

+26
-47
lines changed

3 files changed

+26
-47
lines changed

src/main/java/com/iexec/worker/tee/TeeService.java

Lines changed: 6 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package com.iexec.worker.tee;
1818

1919
import com.github.dockerjava.api.model.Device;
20+
import com.iexec.common.replicate.ReplicateStatusCause;
2021
import com.iexec.commons.poco.chain.WorkerpoolAuthorization;
2122
import com.iexec.commons.poco.task.TaskDescription;
2223
import com.iexec.sms.api.SmsClientCreationException;
@@ -32,8 +33,6 @@
3233
import java.util.Map;
3334
import java.util.concurrent.ConcurrentHashMap;
3435

35-
import static com.iexec.common.replicate.ReplicateStatusCause.*;
36-
3736
@Slf4j
3837
public abstract class TeeService {
3938
private final SmsService smsService;
@@ -49,7 +48,7 @@ protected TeeService(final SmsService smsService,
4948

5049
public List<WorkflowError> areTeePrerequisitesMetForTask(final String chainTaskId) {
5150
if (!isTeeEnabled()) {
52-
return List.of(new WorkflowError(TEE_NOT_SUPPORTED));
51+
return List.of(new WorkflowError(ReplicateStatusCause.TEE_NOT_SUPPORTED));
5352
}
5453

5554
try {
@@ -58,21 +57,12 @@ public List<WorkflowError> areTeePrerequisitesMetForTask(final String chainTaskI
5857
smsService.getSmsClient(chainTaskId);
5958
} catch (SmsClientCreationException e) {
6059
log.error("Couldn't get SmsClient [chainTaskId: {}]", chainTaskId, e);
61-
return List.of(new WorkflowError(UNKNOWN_SMS));
62-
}
63-
try {
64-
// Try to load the `TeeServicesProperties` relative to the task.
65-
// If it can't be loaded, then we won't be able to run the task.
66-
teeServicesPropertiesService.getTeeServicesProperties(chainTaskId);
67-
} catch (NullPointerException e) {
68-
log.error("TEE enclave configuration is null [chainTaskId: {}]", chainTaskId, e);
69-
return List.of(new WorkflowError(PRE_COMPUTE_MISSING_ENCLAVE_CONFIGURATION));
70-
} catch (RuntimeException e) {
71-
log.error("Couldn't get TeeServicesProperties [chainTaskId: {}]", chainTaskId, e);
72-
return List.of(new WorkflowError(GET_TEE_SERVICES_CONFIGURATION_FAILED));
60+
return List.of(new WorkflowError(ReplicateStatusCause.UNKNOWN_SMS));
7361
}
7462

75-
return List.of();
63+
// Try to load the `TeeServicesProperties` relative to the task.
64+
// If it can't be loaded, then we won't be able to run the task.
65+
return teeServicesPropertiesService.retrieveTeeServicesProperties(chainTaskId);
7666
}
7767

7868
public void createTeeSession(final WorkerpoolAuthorization workerpoolAuthorization) throws TeeSessionGenerationException {

src/main/java/com/iexec/worker/tee/TeeServicesPropertiesService.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ public TeeServicesProperties getTeeServicesProperties(final String chainTaskId)
7070
public List<WorkflowError> retrieveTeeServicesProperties(final String chainTaskId) {
7171
final TaskDescription taskDescription = iexecHubService.getTaskDescription(chainTaskId);
7272

73-
// FIXME better errors
73+
// TODO errors could be renamed for APP enclave checks
7474
final TeeEnclaveConfiguration teeEnclaveConfiguration = taskDescription.getAppEnclaveConfiguration();
7575
if (teeEnclaveConfiguration == null) {
7676
log.error("No enclave configuration found for task [chainTaskId:{}]", chainTaskId);
@@ -103,11 +103,11 @@ public List<WorkflowError> retrieveTeeServicesProperties(final String chainTaskI
103103
}
104104

105105
final TeeServicesProperties properties = smsClient.getTeeServicesPropertiesVersion(teeFramework, teeEnclaveConfiguration.getVersion());
106-
log.info("Received TEE services properties [properties:{}]", properties);
107106
if (properties == null) {
108107
return List.of(new WorkflowError(ReplicateStatusCause.GET_TEE_SERVICES_CONFIGURATION_FAILED,
109108
String.format("Missing TEE services properties [chainTaskId:%s]", chainTaskId)));
110109
}
110+
log.info("TEE services properties received [chainTaskId:{}]", chainTaskId);
111111

112112
final String preComputeImage = properties.getPreComputeProperties().getImage();
113113
final String postComputeImage = properties.getPostComputeProperties().getImage();
@@ -118,6 +118,8 @@ public List<WorkflowError> retrieveTeeServicesProperties(final String chainTaskI
118118

119119
if (errors.isEmpty()) {
120120
propertiesForTask.put(chainTaskId, properties);
121+
log.info("TEE services properties storage in cache [chainTaskId:{}, contains-key:{}]",
122+
chainTaskId, propertiesForTask.containsKey(chainTaskId));
121123
}
122124
return List.copyOf(errors);
123125
}
@@ -140,8 +142,9 @@ private List<WorkflowError> checkImageIsPresentOrDownload(final String image, fi
140142
*/
141143
@Override
142144
public boolean purgeTask(final String chainTaskId) {
143-
log.debug("purgeTask [chainTaskId:{}]", chainTaskId);
144145
propertiesForTask.remove(chainTaskId);
146+
log.info("TEE services properties removal from cache [chainTaskId:{}, contains-key:{}]",
147+
chainTaskId, propertiesForTask.containsKey(chainTaskId));
145148
return !propertiesForTask.containsKey(chainTaskId);
146149
}
147150

src/test/java/com/iexec/worker/tee/scone/TeeSconeServiceTests.java

Lines changed: 14 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
package com.iexec.worker.tee.scone;
1818

19+
import com.iexec.common.replicate.ReplicateStatusCause;
1920
import com.iexec.commons.poco.task.TaskDescription;
2021
import com.iexec.commons.poco.tee.TeeEnclaveConfiguration;
2122
import com.iexec.sms.api.SmsClient;
@@ -25,11 +26,12 @@
2526
import com.iexec.sms.api.config.TeeAppProperties;
2627
import com.iexec.worker.sgx.SgxService;
2728
import com.iexec.worker.sms.SmsService;
28-
import com.iexec.worker.tee.TeeServicesPropertiesCreationException;
2929
import com.iexec.worker.tee.TeeServicesPropertiesService;
3030
import com.iexec.worker.workflow.WorkflowError;
3131
import org.junit.jupiter.api.Test;
3232
import org.junit.jupiter.api.extension.ExtendWith;
33+
import org.junit.jupiter.params.ParameterizedTest;
34+
import org.junit.jupiter.params.provider.EnumSource;
3335
import org.mockito.InjectMocks;
3436
import org.mockito.Mock;
3537
import org.mockito.junit.jupiter.MockitoExtension;
@@ -99,7 +101,7 @@ void shouldTeeNotBeEnabled() {
99101
void shouldTeePrerequisiteMetForTask() {
100102
when(sgxService.isSgxEnabled()).thenReturn(true);
101103
when(smsService.getSmsClient(CHAIN_TASK_ID)).thenReturn(smsClient);
102-
when(teeServicesPropertiesService.getTeeServicesProperties(CHAIN_TASK_ID)).thenReturn(null);
104+
when(teeServicesPropertiesService.retrieveTeeServicesProperties(CHAIN_TASK_ID)).thenReturn(List.of());
103105
when(lasServicesManager.startLasService(CHAIN_TASK_ID)).thenReturn(true);
104106

105107
final List<WorkflowError> teePrerequisitesIssue =
@@ -109,7 +111,7 @@ void shouldTeePrerequisiteMetForTask() {
109111

110112
verify(sgxService, times(2)).isSgxEnabled();
111113
verify(smsService).getSmsClient(CHAIN_TASK_ID);
112-
verify(teeServicesPropertiesService).getTeeServicesProperties(CHAIN_TASK_ID);
114+
verify(teeServicesPropertiesService).retrieveTeeServicesProperties(CHAIN_TASK_ID);
113115
verify(lasServicesManager).startLasService(CHAIN_TASK_ID);
114116
}
115117

@@ -143,47 +145,31 @@ void shouldTeePrerequisiteNotMetForTaskSinceSmsClientCantBeLoaded() {
143145
verifyNoInteractions(teeServicesPropertiesService, lasServicesManager);
144146
}
145147

146-
@Test
147-
void shouldTeePrerequisiteNotMetForTaskSinceTeeWorkflowConfigurationCantBeLoaded() {
148+
@ParameterizedTest
149+
@EnumSource(value = ReplicateStatusCause.class, names = {"PRE_COMPUTE_MISSING_ENCLAVE_CONFIGURATION", "GET_TEE_SERVICES_CONFIGURATION_FAILED"})
150+
void shouldTeePrerequisiteNotMetForTaskSinceTeeWorkflowConfigurationCantBeLoaded(final ReplicateStatusCause cause) {
148151
when(sgxService.isSgxEnabled()).thenReturn(true);
149152
when(smsService.getSmsClient(CHAIN_TASK_ID)).thenReturn(smsClient);
150-
when(teeServicesPropertiesService.getTeeServicesProperties(CHAIN_TASK_ID))
151-
.thenThrow(TeeServicesPropertiesCreationException.class);
153+
when(teeServicesPropertiesService.retrieveTeeServicesProperties(CHAIN_TASK_ID))
154+
.thenReturn(List.of(new WorkflowError(cause)));
152155

153156
final List<WorkflowError> teePrerequisitesIssue =
154157
teeSconeService.areTeePrerequisitesMetForTask(CHAIN_TASK_ID);
155158

156159
assertThat(teePrerequisitesIssue)
157-
.containsExactly(new WorkflowError(GET_TEE_SERVICES_CONFIGURATION_FAILED));
160+
.containsExactly(new WorkflowError(cause));
158161

159162
verify(sgxService, times(2)).isSgxEnabled();
160163
verify(smsService).getSmsClient(CHAIN_TASK_ID);
161-
verify(teeServicesPropertiesService).getTeeServicesProperties(CHAIN_TASK_ID);
162-
verifyNoInteractions(lasServicesManager);
163-
}
164-
165-
@Test
166-
void shouldTeePrerequisitesNotBeMetSinceTeeEnclaveConfigurationIsNull() {
167-
when(sgxService.isSgxEnabled()).thenReturn(true);
168-
when(smsService.getSmsClient(CHAIN_TASK_ID)).thenReturn(smsClient);
169-
when(teeServicesPropertiesService.getTeeServicesProperties(CHAIN_TASK_ID))
170-
.thenThrow(NullPointerException.class);
171-
172-
final List<WorkflowError> teePrerequisitesIssue =
173-
teeSconeService.areTeePrerequisitesMetForTask(CHAIN_TASK_ID);
174-
assertThat(teePrerequisitesIssue)
175-
.containsExactly(new WorkflowError(PRE_COMPUTE_MISSING_ENCLAVE_CONFIGURATION));
176-
verify(sgxService, times(2)).isSgxEnabled();
177-
verify(smsService).getSmsClient(CHAIN_TASK_ID);
178-
verify(teeServicesPropertiesService).getTeeServicesProperties(CHAIN_TASK_ID);
164+
verify(teeServicesPropertiesService).retrieveTeeServicesProperties(CHAIN_TASK_ID);
179165
verifyNoInteractions(lasServicesManager);
180166
}
181167

182168
@Test
183169
void shouldTeePrerequisiteNotMetForTaskSinceCantPrepareTee() {
184170
when(sgxService.isSgxEnabled()).thenReturn(true);
185171
when(smsService.getSmsClient(CHAIN_TASK_ID)).thenReturn(smsClient);
186-
when(teeServicesPropertiesService.getTeeServicesProperties(CHAIN_TASK_ID)).thenReturn(null);
172+
when(teeServicesPropertiesService.retrieveTeeServicesProperties(CHAIN_TASK_ID)).thenReturn(List.of());
187173
when(lasServicesManager.startLasService(CHAIN_TASK_ID)).thenReturn(false);
188174

189175
final List<WorkflowError> teePrerequisitesIssue =
@@ -194,7 +180,7 @@ void shouldTeePrerequisiteNotMetForTaskSinceCantPrepareTee() {
194180

195181
verify(sgxService, times(2)).isSgxEnabled();
196182
verify(smsService).getSmsClient(CHAIN_TASK_ID);
197-
verify(teeServicesPropertiesService).getTeeServicesProperties(CHAIN_TASK_ID);
183+
verify(teeServicesPropertiesService).retrieveTeeServicesProperties(CHAIN_TASK_ID);
198184
verify(lasServicesManager).startLasService(CHAIN_TASK_ID);
199185
}
200186
// endregion

0 commit comments

Comments
 (0)