Search in sources :

Example 1 with ResendRequest

use of com.quorum.tessera.p2p.resend.ResendRequest in project tessera by ConsenSys.

the class ResendAllIT method transactionsAreReconstructedFromMultipleParties.

@Test
public void transactionsAreReconstructedFromMultipleParties() throws UnsupportedEncodingException, SQLException {
    // setup (sending in a tx)
    Response sendRawResponse = partyOne.getRestClient().target(partyOne.getQ2TUri()).path("/sendraw").request().header("c11n-from", partyOne.getPublicKey()).header("c11n-to", partyTwo.getPublicKey() + "," + partyThree.getPublicKey()).post(Entity.entity(transactionData, MediaType.APPLICATION_OCTET_STREAM));
    URI location = sendRawResponse.getLocation();
    String hash = sendRawResponse.readEntity(String.class);
    final String encodedHash = URLEncoder.encode(hash, UTF_8.toString());
    // delete it from the sender node
    final Response deleteReq = partyOne.getRestClient().target(location).request().delete();
    assertThat(deleteReq).isNotNull();
    assertThat(deleteReq.getStatus()).isEqualTo(204);
    // check it is deleted
    final Response deleteCheck = partyOne.getRestClient().target(partyOne.getQ2TUri()).path("transaction").path(encodedHash).request().get();
    assertThat(deleteCheck).isNotNull();
    assertThat(deleteCheck.getStatus()).isEqualTo(404);
    // request resend from recipients
    final ResendRequest req = new ResendRequest();
    req.setType(RESEND_ALL_VALUE);
    req.setPublicKey(partyOne.getPublicKey());
    final Response resendRequest = vanillaHttpOnlyClient.target(partyTwo.getP2PUri()).path(RESEND_PATH).request().buildPost(Entity.entity(req, MediaType.APPLICATION_JSON_TYPE)).invoke();
    assertThat(resendRequest).isNotNull();
    assertThat(resendRequest.getStatus()).isEqualTo(200);
    final Response resendRequestNode3 = vanillaHttpOnlyClient.target(partyThree.getP2PUri()).path(RESEND_PATH).request().buildPost(Entity.entity(req, MediaType.APPLICATION_JSON_TYPE)).invoke();
    assertThat(resendRequestNode3).isNotNull();
    assertThat(resendRequestNode3.getStatus()).isEqualTo(200);
    final String fetch = "SELECT ENCODED_PAYLOAD, PAYLOAD_CODEC FROM ENCRYPTED_TRANSACTION WHERE HASH = ?";
    final Connection databaseConnection = PartyHelper.create().findByPublicKey(partyOne.getPublicKey()).getDatabaseConnection();
    try (PreparedStatement statement = databaseConnection.prepareStatement(fetch)) {
        statement.setBytes(1, Base64.getDecoder().decode(hash));
        try (ResultSet rs = statement.executeQuery()) {
            assertThat(rs.next()).isTrue();
            final byte[] output = rs.getBytes(1);
            final EncodedPayloadCodec codec = EncodedPayloadCodec.valueOf(rs.getString(2));
            final PayloadEncoder encoderToUse = PayloadEncoder.create(codec);
            final EncodedPayload payload = encoderToUse.decode(output);
            assertThat(payload.getRecipientKeys()).hasSize(3);
            assertThat(payload.getSenderKey().encodeToBase64()).isEqualTo(partyOne.getPublicKey());
            assertThat(payload.getRecipientBoxes()).hasSize(3);
        }
    }
}
Also used : Response(jakarta.ws.rs.core.Response) PayloadEncoder(com.quorum.tessera.enclave.PayloadEncoder) Connection(java.sql.Connection) ResultSet(java.sql.ResultSet) PreparedStatement(java.sql.PreparedStatement) EncodedPayload(com.quorum.tessera.enclave.EncodedPayload) URI(java.net.URI) ResendRequest(com.quorum.tessera.p2p.resend.ResendRequest) EncodedPayloadCodec(com.quorum.tessera.enclave.EncodedPayloadCodec) Test(org.junit.Test)

Example 2 with ResendRequest

use of com.quorum.tessera.p2p.resend.ResendRequest in project tessera by ConsenSys.

the class ResendIndividualIT method resendTransactionsForGivenKey.

@Test
public void resendTransactionsForGivenKey() {
    final ResendRequest request = new ResendRequest();
    request.setType(RESEND_INDIVIDUAL_VALUE);
    request.setKey(this.hash);
    request.setPublicKey(recipient.getPublicKey());
    final Response response = vanillaHttpOnlyClient.target(sender.getP2PUri()).path(RESEND_PATH).request().post(Entity.entity(request, MediaType.APPLICATION_JSON_TYPE));
    assertThat(response).isNotNull();
    assertThat(response.getStatus()).isEqualTo(200);
    final byte[] returnValue = response.readEntity(byte[].class);
    final EncodedPayload payload = ENCODER.decode(returnValue);
    assertThat(payload).isNotNull();
    assertThat(payload.getRecipientKeys()).hasSize(1);
    assertThat(payload.getRecipientKeys().get(0).encodeToBase64()).isEqualTo(recipient.getPublicKey());
    assertThat(payload.getSenderKey().encodeToBase64()).isEqualTo(sender.getPublicKey());
}
Also used : Response(jakarta.ws.rs.core.Response) EncodedPayload(com.quorum.tessera.enclave.EncodedPayload) ResendRequest(com.quorum.tessera.p2p.resend.ResendRequest) Test(org.junit.Test)

Example 3 with ResendRequest

use of com.quorum.tessera.p2p.resend.ResendRequest in project tessera by ConsenSys.

the class ResendIndividualIT method resendTransactionThatDoesntExist.

@Test
public void resendTransactionThatDoesntExist() {
    final String unknownHash = "2xTEBlTtYXSBXZD4jDDp83cVJbnkzP6PbUoUJx076BO/FSR75NXwDDpLDu3AIiDV1TlK8nGK4mlhsg4Xzpd5og==";
    final ResendRequest request = new ResendRequest();
    request.setType(RESEND_INDIVIDUAL_VALUE);
    request.setKey(unknownHash);
    request.setPublicKey(partyHelper.getParties().filter(p -> !p.equals(sender)).filter(p -> !p.equals(recipient)).findAny().get().getPublicKey());
    final Response response = vanillaHttpOnlyClient.target(recipient.getP2PUri()).path(RESEND_PATH).request().post(Entity.entity(request, MediaType.APPLICATION_JSON_TYPE));
    assertThat(response).isNotNull();
    assertThat(response.getStatus()).isEqualTo(404);
    assertThat(response.readEntity(String.class)).contains("Message with hash " + unknownHash + " was not found");
}
Also used : Client(jakarta.ws.rs.client.Client) EncodedPayload(com.quorum.tessera.enclave.EncodedPayload) Assertions.assertThat(org.assertj.core.api.Assertions.assertThat) PayloadEncoderImpl(com.quorum.tessera.enclave.PayloadEncoderImpl) Test(org.junit.Test) PayloadEncoder(com.quorum.tessera.enclave.PayloadEncoder) PartyHelper(com.quorum.tessera.test.PartyHelper) Entity(jakarta.ws.rs.client.Entity) Response(jakarta.ws.rs.core.Response) MediaType(jakarta.ws.rs.core.MediaType) Party(com.quorum.tessera.test.Party) ResendRequest(com.quorum.tessera.p2p.resend.ResendRequest) ClientBuilder(jakarta.ws.rs.client.ClientBuilder) Before(org.junit.Before) Response(jakarta.ws.rs.core.Response) ResendRequest(com.quorum.tessera.p2p.resend.ResendRequest) Test(org.junit.Test)

Example 4 with ResendRequest

use of com.quorum.tessera.p2p.resend.ResendRequest in project tessera by ConsenSys.

the class RestRecoveryClientTest method makeResendRequest.

@Test
public void makeResendRequest() {
    try (var entityMockedStatic = mockStatic(Entity.class)) {
        Entity<ResendRequest> outboundEntity = mock(Entity.class);
        ResendRequest resendRequest = mock(ResendRequest.class);
        entityMockedStatic.when(() -> Entity.entity(resendRequest, MediaType.APPLICATION_JSON)).thenReturn(outboundEntity);
        String targetUrl = "targetUrl";
        Client client = mock(Client.class);
        WebTarget webTarget = mock(WebTarget.class);
        when(client.target(targetUrl)).thenReturn(webTarget);
        when(webTarget.path("/resend")).thenReturn(webTarget);
        Invocation.Builder invocationBuilder = mock(Invocation.Builder.class);
        when(webTarget.request()).thenReturn(invocationBuilder);
        Response response = mock(Response.class);
        when(response.getStatus()).thenReturn(expectedResponseStatus.getStatusCode());
        when(invocationBuilder.post(outboundEntity)).thenReturn(response);
        RestRecoveryClient restRecoveryClient = new RestRecoveryClient(client);
        boolean outcome = restRecoveryClient.makeResendRequest(targetUrl, resendRequest);
        if (expectedResponseStatus == Response.Status.OK) {
            assertThat(outcome).isTrue();
        } else {
            assertThat(outcome).isFalse();
        }
        entityMockedStatic.verify(() -> Entity.entity(resendRequest, MediaType.APPLICATION_JSON));
        entityMockedStatic.verifyNoMoreInteractions();
        verify(client).target(targetUrl);
        verify(webTarget).path("/resend");
        verify(webTarget).request();
        verify(invocationBuilder).post(outboundEntity);
        verifyNoMoreInteractions(outboundEntity, resendRequest, client, webTarget, invocationBuilder);
    }
}
Also used : Response(jakarta.ws.rs.core.Response) Invocation(jakarta.ws.rs.client.Invocation) WebTarget(jakarta.ws.rs.client.WebTarget) Client(jakarta.ws.rs.client.Client) ResendRequest(com.quorum.tessera.p2p.resend.ResendRequest) Test(org.junit.Test)

Example 5 with ResendRequest

use of com.quorum.tessera.p2p.resend.ResendRequest in project tessera by ConsenSys.

the class RestBatchTransactionRequester method createLegacyRequest.

/**
 * Creates the legacy entity that should be sent to the legacy target URL
 *
 * @param key the public key that transactions should be resent for
 * @return the request to be sent
 */
private ResendRequest createLegacyRequest(final PublicKey key) {
    final ResendRequest request = new ResendRequest();
    final String encoded = key.encodeToBase64();
    request.setPublicKey(encoded);
    request.setType("ALL");
    return request;
}
Also used : ResendRequest(com.quorum.tessera.p2p.resend.ResendRequest)

Aggregations

ResendRequest (com.quorum.tessera.p2p.resend.ResendRequest)13 Response (jakarta.ws.rs.core.Response)12 Test (org.junit.Test)12 EncodedPayload (com.quorum.tessera.enclave.EncodedPayload)7 PayloadEncoder (com.quorum.tessera.enclave.PayloadEncoder)4 Client (jakarta.ws.rs.client.Client)4 URI (java.net.URI)3 EncodedPayloadCodec (com.quorum.tessera.enclave.EncodedPayloadCodec)2 PayloadEncoderImpl (com.quorum.tessera.enclave.PayloadEncoderImpl)2 Party (com.quorum.tessera.test.Party)2 PartyHelper (com.quorum.tessera.test.PartyHelper)2 ClientBuilder (jakarta.ws.rs.client.ClientBuilder)2 Entity (jakarta.ws.rs.client.Entity)2 Invocation (jakarta.ws.rs.client.Invocation)2 WebTarget (jakarta.ws.rs.client.WebTarget)2 MediaType (jakarta.ws.rs.core.MediaType)2 Connection (java.sql.Connection)2 PreparedStatement (java.sql.PreparedStatement)2 ResultSet (java.sql.ResultSet)2 Assertions.assertThat (org.assertj.core.api.Assertions.assertThat)2