Skip to content

Commit b136bec

Browse files
committed
Update implementation to test BrokerService#fireMatchOrders
1 parent 16be941 commit b136bec

File tree

2 files changed

+41
-11
lines changed

2 files changed

+41
-11
lines changed

src/main/java/com/iexec/blockchain/broker/BrokerService.java

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
import com.iexec.blockchain.tool.IexecHubService;
2020
import com.iexec.common.sdk.broker.BrokerOrder;
2121
import com.iexec.commons.poco.chain.ChainAccount;
22-
import com.iexec.commons.poco.contract.generated.IexecHubContract;
2322
import com.iexec.commons.poco.order.AppOrder;
2423
import com.iexec.commons.poco.order.DatasetOrder;
2524
import com.iexec.commons.poco.order.RequestOrder;
@@ -29,7 +28,10 @@
2928
import org.apache.commons.lang3.StringUtils;
3029
import org.springframework.context.annotation.Profile;
3130
import org.springframework.stereotype.Service;
31+
import org.web3j.crypto.Hash;
32+
import org.web3j.protocol.core.methods.response.Log;
3233
import org.web3j.protocol.core.methods.response.TransactionReceipt;
34+
import org.web3j.utils.Numeric;
3335

3436
import java.math.BigInteger;
3537
import java.text.MessageFormat;
@@ -43,6 +45,8 @@
4345
@Profile("itest")
4446
public class BrokerService {
4547

48+
static final String SCHEDULER_NOTICE = Hash.sha3String("SchedulerNotice(address,bytes32)");
49+
4650
private final IexecHubService iexecHubService;
4751

4852

@@ -141,13 +145,13 @@ Optional<String> fireMatchOrders(
141145
log.info("block {}, hash {}, status {}", receipt.getBlockNumber(), receipt.getTransactionHash(), receipt.getStatus());
142146
log.info("logs count {}", receipt.getLogs().size());
143147

144-
String workerpoolAddress = workerpoolOrder.getWorkerpool();
145-
List<String> events = IexecHubContract.getSchedulerNoticeEvents(receipt)
146-
.stream()
147-
.filter(event -> workerpoolAddress.equals(event.workerpool))
148-
.map(event -> BytesUtils.bytesToString(event.dealid))
148+
String workerpoolAddress = Numeric.toHexStringWithPrefixZeroPadded(
149+
Numeric.toBigInt(workerpoolOrder.getWorkerpool()), 64);
150+
List<String> events = receipt.getLogs().stream()
151+
.filter(log -> List.of(SCHEDULER_NOTICE, workerpoolAddress).equals(log.getTopics()))
152+
.map(Log::getData)
149153
.collect(Collectors.toList());
150-
log.info("events count {}", events.size());
154+
log.info("logs {}", events);
151155
if (events.size() != 1) {
152156
throw new IllegalStateException("A single deal should have been created, not " + events.size());
153157
}

src/test/java/com/iexec/blockchain/broker/BrokerServiceTests.java

Lines changed: 30 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,13 +33,17 @@
3333
import org.web3j.crypto.ECKeyPair;
3434
import org.web3j.crypto.Keys;
3535
import org.web3j.protocol.core.RemoteFunctionCall;
36+
import org.web3j.protocol.core.methods.response.Log;
3637
import org.web3j.protocol.core.methods.response.TransactionReceipt;
38+
import org.web3j.utils.Numeric;
3739

3840
import java.io.IOException;
3941
import java.math.BigInteger;
4042
import java.text.MessageFormat;
43+
import java.util.List;
4144
import java.util.Optional;
4245

46+
import static com.iexec.blockchain.broker.BrokerService.SCHEDULER_NOTICE;
4347
import static org.assertj.core.api.Assertions.assertThat;
4448
import static org.assertj.core.api.Assertions.assertThatThrownBy;
4549
import static org.mockito.ArgumentMatchers.any;
@@ -426,8 +430,6 @@ void shouldFailToMatchOrdersWithDataset() throws Exception {
426430
when(remoteCall.send()).thenThrow(IOException.class);
427431
assertThat(brokerService.fireMatchOrders(appOrder, datasetOrder,workerpoolOrder, requestOrder))
428432
.isEmpty();
429-
assertThat(brokerService.fireMatchOrders(appOrder, datasetOrder, workerpoolOrder, requestOrder))
430-
.isEmpty();
431433
}
432434

433435
@Test
@@ -443,10 +445,34 @@ void shouldFailToMatchOrdersWithoutDataset() throws Exception {
443445
when(remoteCall.send()).thenThrow(IOException.class);
444446
assertThat(brokerService.fireMatchOrders(appOrder, datasetOrder,workerpoolOrder, requestOrder))
445447
.isEmpty();
446-
assertThat(brokerService.fireMatchOrders(appOrder, datasetOrder, workerpoolOrder, requestOrder))
447-
.isEmpty();
448448
}
449449

450+
@Test
451+
void shouldMatchOrdersWithDataset() throws Exception {
452+
String dealId = "dealId";
453+
AppOrder appOrder = generateAppOrder();
454+
DatasetOrder datasetOrder = generateDatasetOrder(true);
455+
WorkerpoolOrder workerpoolOrder = generateWorkerpoolOrder();
456+
RequestOrder requestOrder = generateRequestOrder(
457+
appOrder, datasetOrder, workerpoolOrder);
458+
IexecHubContract iexecHubContract = mock(IexecHubContract.class);
459+
when(iexecHubService.getHubContract()).thenReturn(iexecHubContract);
460+
when(iexecHubContract.matchOrders(any(), any(), any(), any())).thenReturn(remoteCall);
461+
String workerpoolAddress = Numeric.toHexStringWithPrefixZeroPadded(
462+
Numeric.toBigInt(workerpoolOrder.getWorkerpool()), 64);
463+
Log web3Log = new Log();
464+
web3Log.setData(dealId);
465+
web3Log.setTopics(List.of(SCHEDULER_NOTICE, workerpoolAddress));
466+
TransactionReceipt receipt = new TransactionReceipt();
467+
receipt.setTransactionHash("txHash");
468+
receipt.setBlockNumber("0x1");
469+
receipt.setStatus("1");
470+
receipt.setLogs(List.of(web3Log));
471+
when(remoteCall.send()).thenReturn(receipt);
472+
assertThat(brokerService.fireMatchOrders(appOrder, datasetOrder,workerpoolOrder, requestOrder))
473+
.isNotEmpty()
474+
.contains(dealId);
475+
}
450476
//endregion
451477

452478
//region hasRequesterAcceptedPrices

0 commit comments

Comments
 (0)