Search in sources :

Example 1 with BatchWorkflowContext

use of com.quorum.tessera.recovery.workflow.BatchWorkflowContext in project tessera by ConsenSys.

the class BatchResendManagerImpl method resendBatch.

@Override
public ResendBatchResponse resendBatch(ResendBatchRequest request) {
    final int batchSize = validateRequestBatchSize(request.getBatchSize());
    final byte[] publicKeyData = Base64.getDecoder().decode(request.getPublicKey());
    final PublicKey recipientPublicKey = PublicKey.from(publicKeyData);
    final long transactionCount = encryptedTransactionDAO.transactionCount();
    final long batchCount = calculateBatchCount(maxResults, transactionCount);
    final BatchWorkflow batchWorkflow = batchWorkflowFactory.create(transactionCount);
    IntStream.range(0, (int) batchCount).map(i -> i * maxResults).mapToObj(offset -> encryptedTransactionDAO.retrieveTransactions(offset, maxResults)).flatMap(List::stream).forEach(encryptedTransaction -> {
        final BatchWorkflowContext context = new BatchWorkflowContext();
        context.setEncryptedTransaction(encryptedTransaction);
        context.setEncodedPayload(encryptedTransaction.getPayload());
        context.setRecipientKey(recipientPublicKey);
        context.setBatchSize(batchSize);
        batchWorkflow.execute(context);
    });
    return ResendBatchResponse.from(batchWorkflow.getPublishedMessageCount());
}
Also used : ResendBatchRequest(com.quorum.tessera.recovery.resend.ResendBatchRequest) IntStream(java.util.stream.IntStream) PublicKey(com.quorum.tessera.encryption.PublicKey) BatchWorkflowFactory(com.quorum.tessera.recovery.workflow.BatchWorkflowFactory) BatchResendManager(com.quorum.tessera.recovery.workflow.BatchResendManager) BatchWorkflow(com.quorum.tessera.recovery.workflow.BatchWorkflow) Objects(java.util.Objects) StagingTransactionUtils(com.quorum.tessera.data.staging.StagingTransactionUtils) PushBatchRequest(com.quorum.tessera.recovery.resend.PushBatchRequest) BatchWorkflowContext(com.quorum.tessera.recovery.workflow.BatchWorkflowContext) Base64(java.util.Base64) List(java.util.List) StagingEntityDAO(com.quorum.tessera.data.staging.StagingEntityDAO) ResendBatchResponse(com.quorum.tessera.recovery.resend.ResendBatchResponse) EncryptedTransactionDAO(com.quorum.tessera.data.EncryptedTransactionDAO) PublicKey(com.quorum.tessera.encryption.PublicKey) BatchWorkflow(com.quorum.tessera.recovery.workflow.BatchWorkflow) BatchWorkflowContext(com.quorum.tessera.recovery.workflow.BatchWorkflowContext)

Example 2 with BatchWorkflowContext

use of com.quorum.tessera.recovery.workflow.BatchWorkflowContext in project tessera by ConsenSys.

the class BatchWorkflowFactoryImplTest method workflowExecutedReturnFalse.

@Test
public void workflowExecutedReturnFalse() {
    BatchWorkflowFactoryImpl batchWorkflowFactory = new BatchWorkflowFactoryImpl(enclave, discovery, resendBatchPublisher);
    BatchWorkflow batchWorkflow = batchWorkflowFactory.create(999L);
    assertThat(batchWorkflow).isNotNull();
    BatchWorkflowContext batchWorkflowContext = new BatchWorkflowContext();
    PublicKey publicKey = mock(PublicKey.class);
    batchWorkflowContext.setRecipientKey(publicKey);
    EncryptedTransaction encryptedTransaction = mock(EncryptedTransaction.class);
    batchWorkflowContext.setEncryptedTransaction(encryptedTransaction);
    batchWorkflowContext.setEncodedPayload(mock(EncodedPayload.class));
    when(enclave.status()).thenReturn(Service.Status.STARTED);
    assertThat(batchWorkflow.execute(batchWorkflowContext)).isFalse();
    assertThat(batchWorkflow.getPublishedMessageCount()).isZero();
    verify(enclave).status();
}
Also used : PublicKey(com.quorum.tessera.encryption.PublicKey) EncodedPayload(com.quorum.tessera.enclave.EncodedPayload) BatchWorkflow(com.quorum.tessera.recovery.workflow.BatchWorkflow) BatchWorkflowContext(com.quorum.tessera.recovery.workflow.BatchWorkflowContext) EncryptedTransaction(com.quorum.tessera.data.EncryptedTransaction) Test(org.junit.Test)

Example 3 with BatchWorkflowContext

use of com.quorum.tessera.recovery.workflow.BatchWorkflowContext in project tessera by ConsenSys.

the class BatchWorkflowFactoryImplTest method createBatchWorkflowFactoryImplAndExecuteWorkflow.

@Test
public void createBatchWorkflowFactoryImplAndExecuteWorkflow() {
    BatchWorkflowFactoryImpl batchWorkflowFactory = new BatchWorkflowFactoryImpl(enclave, discovery, resendBatchPublisher);
    BatchWorkflow batchWorkflow = batchWorkflowFactory.create(1L);
    assertThat(batchWorkflow).isNotNull();
    BatchWorkflowContext batchWorkflowContext = new BatchWorkflowContext();
    PublicKey recipientKey = mock(PublicKey.class);
    batchWorkflowContext.setRecipientKey(recipientKey);
    PublicKey ownedKey = mock(PublicKey.class);
    EncodedPayload encodedPayload = mock(EncodedPayload.class);
    when(encodedPayload.getSenderKey()).thenReturn(ownedKey);
    when(encodedPayload.getRecipientKeys()).thenReturn(List.of(recipientKey));
    EncryptedTransaction encryptedTransaction = mock(EncryptedTransaction.class);
    when(encryptedTransaction.getPayload()).thenReturn(encodedPayload);
    batchWorkflowContext.setEncryptedTransaction(encryptedTransaction);
    batchWorkflowContext.setEncodedPayload(encodedPayload);
    batchWorkflowContext.setBatchSize(100);
    when(mockPayloadBuilder.build()).thenReturn(encodedPayload);
    when(enclave.status()).thenReturn(Service.Status.STARTED);
    when(enclave.getPublicKeys()).thenReturn(Set.of(ownedKey));
    NodeInfo nodeInfo = mock(NodeInfo.class);
    when(nodeInfo.getRecipients()).thenReturn(Set.of(Recipient.of(recipientKey, "url")));
    when(discovery.getCurrent()).thenReturn(nodeInfo);
    assertThat(batchWorkflow.execute(batchWorkflowContext)).isTrue();
    assertThat(batchWorkflow.getPublishedMessageCount()).isOne();
    verify(enclave).status();
    verify(enclave, times(2)).getPublicKeys();
    mockStaticPayloadBuilder.verify(() -> EncodedPayload.Builder.forRecipient(any(), any()));
    verify(mockPayloadBuilder).build();
    verify(discovery).getCurrent();
    verify(resendBatchPublisher).publishBatch(any(), any());
}
Also used : PublicKey(com.quorum.tessera.encryption.PublicKey) NodeInfo(com.quorum.tessera.partyinfo.node.NodeInfo) EncodedPayload(com.quorum.tessera.enclave.EncodedPayload) BatchWorkflow(com.quorum.tessera.recovery.workflow.BatchWorkflow) BatchWorkflowContext(com.quorum.tessera.recovery.workflow.BatchWorkflowContext) EncryptedTransaction(com.quorum.tessera.data.EncryptedTransaction) Test(org.junit.Test)

Aggregations

PublicKey (com.quorum.tessera.encryption.PublicKey)3 BatchWorkflow (com.quorum.tessera.recovery.workflow.BatchWorkflow)3 BatchWorkflowContext (com.quorum.tessera.recovery.workflow.BatchWorkflowContext)3 EncryptedTransaction (com.quorum.tessera.data.EncryptedTransaction)2 EncodedPayload (com.quorum.tessera.enclave.EncodedPayload)2 Test (org.junit.Test)2 EncryptedTransactionDAO (com.quorum.tessera.data.EncryptedTransactionDAO)1 StagingEntityDAO (com.quorum.tessera.data.staging.StagingEntityDAO)1 StagingTransactionUtils (com.quorum.tessera.data.staging.StagingTransactionUtils)1 NodeInfo (com.quorum.tessera.partyinfo.node.NodeInfo)1 PushBatchRequest (com.quorum.tessera.recovery.resend.PushBatchRequest)1 ResendBatchRequest (com.quorum.tessera.recovery.resend.ResendBatchRequest)1 ResendBatchResponse (com.quorum.tessera.recovery.resend.ResendBatchResponse)1 BatchResendManager (com.quorum.tessera.recovery.workflow.BatchResendManager)1 BatchWorkflowFactory (com.quorum.tessera.recovery.workflow.BatchWorkflowFactory)1 Base64 (java.util.Base64)1 List (java.util.List)1 Objects (java.util.Objects)1 IntStream (java.util.stream.IntStream)1