Search in sources :

Example 21 with ProducerMessages

use of org.apache.pulsar.websocket.data.ProducerMessages in project incubator-pulsar by apache.

the class TopicsTest method testProduceToPartitionedTopic.

@Test
public void testProduceToPartitionedTopic() throws Exception {
    admin.topics().createPartitionedTopic("persistent://" + testTenant + "/" + testNamespace + "/" + testTopicName + "-p", 5);
    AsyncResponse asyncResponse = mock(AsyncResponse.class);
    Schema<String> schema = StringSchema.utf8();
    ProducerMessages producerMessages = new ProducerMessages();
    producerMessages.setKeySchema(ObjectMapperFactory.getThreadLocal().writeValueAsString(schema.getSchemaInfo()));
    producerMessages.setValueSchema(ObjectMapperFactory.getThreadLocal().writeValueAsString(schema.getSchemaInfo()));
    String message = "[" + "{\"key\":\"my-key\",\"payload\":\"RestProducer:1\",\"eventTime\":1603045262772,\"sequenceId\":1}," + "{\"key\":\"my-key\",\"payload\":\"RestProducer:2\",\"eventTime\":1603045262772,\"sequenceId\":2}," + "{\"key\":\"my-key\",\"payload\":\"RestProducer:3\",\"eventTime\":1603045262772,\"sequenceId\":3}," + "{\"key\":\"my-key\",\"payload\":\"RestProducer:4\",\"eventTime\":1603045262772,\"sequenceId\":4}," + "{\"key\":\"my-key\",\"payload\":\"RestProducer:5\",\"eventTime\":1603045262772,\"sequenceId\":5}," + "{\"key\":\"my-key\",\"payload\":\"RestProducer:6\",\"eventTime\":1603045262772,\"sequenceId\":6}," + "{\"key\":\"my-key\",\"payload\":\"RestProducer:7\",\"eventTime\":1603045262772,\"sequenceId\":7}," + "{\"key\":\"my-key\",\"payload\":\"RestProducer:8\",\"eventTime\":1603045262772,\"sequenceId\":8}," + "{\"key\":\"my-key\",\"payload\":\"RestProducer:9\",\"eventTime\":1603045262772,\"sequenceId\":9}," + "{\"key\":\"my-key\",\"payload\":\"RestProducer:10\",\"eventTime\":1603045262772,\"sequenceId\":10}]";
    producerMessages.setMessages(ObjectMapperFactory.getThreadLocal().readValue(message, new TypeReference<List<ProducerMessage>>() {
    }));
    topics.produceOnPersistentTopic(asyncResponse, testTenant, testNamespace, testTopicName + "-p", false, producerMessages);
    ArgumentCaptor<Response> responseCaptor = ArgumentCaptor.forClass(Response.class);
    verify(asyncResponse, timeout(5000).times(1)).resume(responseCaptor.capture());
    Assert.assertEquals(responseCaptor.getValue().getStatus(), Response.Status.OK.getStatusCode());
    Object responseEntity = responseCaptor.getValue().getEntity();
    Assert.assertTrue(responseEntity instanceof ProducerAcks);
    ProducerAcks response = (ProducerAcks) responseEntity;
    Assert.assertEquals(response.getMessagePublishResults().size(), 10);
    Assert.assertEquals(response.getSchemaVersion(), 0);
    int[] messagePerPartition = new int[5];
    for (int index = 0; index < response.getMessagePublishResults().size(); index++) {
        messagePerPartition[Integer.parseInt(response.getMessagePublishResults().get(index).getMessageId().split(":")[2])]++;
        Assert.assertEquals(response.getMessagePublishResults().get(index).getErrorCode(), 0);
        Assert.assertTrue(response.getMessagePublishResults().get(index).getMessageId().length() > 0);
    }
    for (int index = 0; index < messagePerPartition.length; index++) {
        // We publish to each partition in round robin mode so each partition should get at most 2 message.
        Assert.assertTrue(messagePerPartition[index] <= 2);
    }
}
Also used : AsyncResponse(javax.ws.rs.container.AsyncResponse) Response(javax.ws.rs.core.Response) ProducerMessages(org.apache.pulsar.websocket.data.ProducerMessages) ProducerMessage(org.apache.pulsar.websocket.data.ProducerMessage) ArgumentMatchers.anyString(org.mockito.ArgumentMatchers.anyString) TypeReference(com.fasterxml.jackson.core.type.TypeReference) AsyncResponse(javax.ws.rs.container.AsyncResponse) ProducerAcks(org.apache.pulsar.websocket.data.ProducerAcks) Test(org.testng.annotations.Test) MockedPulsarServiceBaseTest(org.apache.pulsar.broker.auth.MockedPulsarServiceBaseTest)

Example 22 with ProducerMessages

use of org.apache.pulsar.websocket.data.ProducerMessages in project incubator-pulsar by apache.

the class TopicsTest method testProduceNoSchema.

// Default schema is String schema
@Test
public void testProduceNoSchema() throws Exception {
    String topicName = "persistent://" + testTenant + "/" + testNamespace + "/" + testTopicName;
    admin.topics().createNonPartitionedTopic(topicName);
    AsyncResponse asyncResponse = mock(AsyncResponse.class);
    Consumer consumer = pulsarClient.newConsumer(StringSchema.utf8()).topic(topicName).subscriptionName("my-sub").subscriptionType(SubscriptionType.Exclusive).subscriptionInitialPosition(SubscriptionInitialPosition.Earliest).subscribe();
    ProducerMessages producerMessages = new ProducerMessages();
    String message = "[" + "{\"key\":\"my-key\",\"payload\":\"RestProducer:1\",\"eventTime\":1603045262772,\"sequenceId\":1}," + "{\"key\":\"my-key\",\"payload\":\"RestProducer:2\",\"eventTime\":1603045262772,\"sequenceId\":2}," + "{\"key\":\"my-key\",\"payload\":\"RestProducer:3\",\"eventTime\":1603045262772,\"sequenceId\":3}," + "{\"key\":\"my-key\",\"payload\":\"RestProducer:4\",\"eventTime\":1603045262772,\"sequenceId\":4}," + "{\"key\":\"my-key\",\"payload\":\"RestProducer:5\",\"eventTime\":1603045262772,\"sequenceId\":5}]";
    producerMessages.setMessages(ObjectMapperFactory.getThreadLocal().readValue(message, new TypeReference<List<ProducerMessage>>() {
    }));
    topics.produceOnPersistentTopic(asyncResponse, testTenant, testNamespace, testTopicName, false, producerMessages);
    ArgumentCaptor<Response> responseCaptor = ArgumentCaptor.forClass(Response.class);
    verify(asyncResponse, timeout(5000).times(1)).resume(responseCaptor.capture());
    Assert.assertEquals(responseCaptor.getValue().getStatus(), Response.Status.OK.getStatusCode());
    Object responseEntity = responseCaptor.getValue().getEntity();
    Assert.assertTrue(responseEntity instanceof ProducerAcks);
    ProducerAcks response = (ProducerAcks) responseEntity;
    Assert.assertEquals(response.getMessagePublishResults().size(), 5);
    Assert.assertEquals(response.getSchemaVersion(), 0);
    for (int index = 0; index < response.getMessagePublishResults().size(); index++) {
        Assert.assertEquals(Integer.parseInt(response.getMessagePublishResults().get(index).getMessageId().split(":")[2]), -1);
        Assert.assertEquals(response.getMessagePublishResults().get(index).getErrorCode(), 0);
        Assert.assertTrue(response.getMessagePublishResults().get(index).getMessageId().length() > 0);
    }
    List<String> expectedMsg = Arrays.asList("RestProducer:1", "RestProducer:2", "RestProducer:3", "RestProducer:4", "RestProducer:5");
    Message<String> msg = null;
    // Assert all messages published by REST producer can be received by consumer in expected order.
    for (int i = 0; i < 5; i++) {
        msg = consumer.receive(2, TimeUnit.SECONDS);
        Assert.assertEquals(expectedMsg.get(i), StringSchema.utf8().decode(msg.getData()));
        Assert.assertEquals("my-key", msg.getKey());
    }
}
Also used : ProducerMessage(org.apache.pulsar.websocket.data.ProducerMessage) ArgumentMatchers.anyString(org.mockito.ArgumentMatchers.anyString) AsyncResponse(javax.ws.rs.container.AsyncResponse) Response(javax.ws.rs.core.Response) Consumer(org.apache.pulsar.client.api.Consumer) ProducerMessages(org.apache.pulsar.websocket.data.ProducerMessages) TypeReference(com.fasterxml.jackson.core.type.TypeReference) AsyncResponse(javax.ws.rs.container.AsyncResponse) ProducerAcks(org.apache.pulsar.websocket.data.ProducerAcks) Test(org.testng.annotations.Test) MockedPulsarServiceBaseTest(org.apache.pulsar.broker.auth.MockedPulsarServiceBaseTest)

Example 23 with ProducerMessages

use of org.apache.pulsar.websocket.data.ProducerMessages in project incubator-pulsar by apache.

the class TopicsTest method testLookUpTopicNotExist.

@Test
public void testLookUpTopicNotExist() throws Exception {
    String topicName = "persistent://" + testTenant + "/" + testNamespace + "/" + testTopicName;
    NamespaceService nameSpaceService = mock(NamespaceService.class);
    CompletableFuture existFuture = new CompletableFuture();
    existFuture.complete(false);
    doReturn(existFuture).when(nameSpaceService).checkTopicExists(any());
    doReturn(nameSpaceService).when(pulsar).getNamespaceService();
    AsyncResponse asyncResponse = mock(AsyncResponse.class);
    ProducerMessages producerMessages = new ProducerMessages();
    producerMessages.setValueSchema(ObjectMapperFactory.getThreadLocal().writeValueAsString(Schema.INT64.getSchemaInfo()));
    String message = "[]";
    producerMessages.setMessages(ObjectMapperFactory.getThreadLocal().readValue(message, new TypeReference<List<ProducerMessage>>() {
    }));
    topics.produceOnPersistentTopic(asyncResponse, testTenant, testNamespace, testTopicName, false, producerMessages);
    ArgumentCaptor<RestException> responseCaptor = ArgumentCaptor.forClass(RestException.class);
    verify(asyncResponse, timeout(5000).times(1)).resume(responseCaptor.capture());
    System.out.println(responseCaptor.getValue().getMessage());
    Assert.assertTrue(responseCaptor.getValue().getMessage().contains(String.format("Topic %s not found", topicName)));
}
Also used : CompletableFuture(java.util.concurrent.CompletableFuture) NamespaceService(org.apache.pulsar.broker.namespace.NamespaceService) RestException(org.apache.pulsar.broker.web.RestException) ProducerMessages(org.apache.pulsar.websocket.data.ProducerMessages) ProducerMessage(org.apache.pulsar.websocket.data.ProducerMessage) ArgumentMatchers.anyString(org.mockito.ArgumentMatchers.anyString) TypeReference(com.fasterxml.jackson.core.type.TypeReference) AsyncResponse(javax.ws.rs.container.AsyncResponse) Test(org.testng.annotations.Test) MockedPulsarServiceBaseTest(org.apache.pulsar.broker.auth.MockedPulsarServiceBaseTest)

Example 24 with ProducerMessages

use of org.apache.pulsar.websocket.data.ProducerMessages in project incubator-pulsar by apache.

the class TopicsTest method testLookUpWithException.

@Test
public void testLookUpWithException() throws Exception {
    String topicName = "persistent://" + testTenant + "/" + testNamespace + "/" + testTopicName;
    admin.topics().createNonPartitionedTopic(topicName);
    NamespaceService nameSpaceService = mock(NamespaceService.class);
    CompletableFuture future = new CompletableFuture();
    future.completeExceptionally(new BrokerServiceException("Fake Exception"));
    CompletableFuture existFuture = new CompletableFuture();
    existFuture.complete(true);
    doReturn(future).when(nameSpaceService).getBrokerServiceUrlAsync(any(), any());
    doReturn(existFuture).when(nameSpaceService).checkTopicExists(any());
    doReturn(nameSpaceService).when(pulsar).getNamespaceService();
    AsyncResponse asyncResponse = mock(AsyncResponse.class);
    ProducerMessages producerMessages = new ProducerMessages();
    producerMessages.setValueSchema(ObjectMapperFactory.getThreadLocal().writeValueAsString(Schema.INT64.getSchemaInfo()));
    String message = "[]";
    producerMessages.setMessages(ObjectMapperFactory.getThreadLocal().readValue(message, new TypeReference<List<ProducerMessage>>() {
    }));
    topics.produceOnPersistentTopic(asyncResponse, testTenant, testNamespace, testTopicName, false, producerMessages);
    ArgumentCaptor<RestException> responseCaptor = ArgumentCaptor.forClass(RestException.class);
    verify(asyncResponse, timeout(5000).times(1)).resume(responseCaptor.capture());
    Assert.assertEquals(responseCaptor.getValue().getMessage(), "Can't find owner of given topic.");
}
Also used : CompletableFuture(java.util.concurrent.CompletableFuture) NamespaceService(org.apache.pulsar.broker.namespace.NamespaceService) BrokerServiceException(org.apache.pulsar.broker.service.BrokerServiceException) RestException(org.apache.pulsar.broker.web.RestException) ProducerMessages(org.apache.pulsar.websocket.data.ProducerMessages) ProducerMessage(org.apache.pulsar.websocket.data.ProducerMessage) ArgumentMatchers.anyString(org.mockito.ArgumentMatchers.anyString) TypeReference(com.fasterxml.jackson.core.type.TypeReference) AsyncResponse(javax.ws.rs.container.AsyncResponse) Test(org.testng.annotations.Test) MockedPulsarServiceBaseTest(org.apache.pulsar.broker.auth.MockedPulsarServiceBaseTest)

Example 25 with ProducerMessages

use of org.apache.pulsar.websocket.data.ProducerMessages in project incubator-pulsar by apache.

the class TopicsTest method testProduceToNonPartitionedTopic.

@Test
public void testProduceToNonPartitionedTopic() throws Exception {
    admin.topics().createNonPartitionedTopic("persistent://" + testTenant + "/" + testNamespace + "/" + testTopicName);
    AsyncResponse asyncResponse = mock(AsyncResponse.class);
    Schema<String> schema = StringSchema.utf8();
    ProducerMessages producerMessages = new ProducerMessages();
    producerMessages.setKeySchema(ObjectMapperFactory.getThreadLocal().writeValueAsString(schema.getSchemaInfo()));
    producerMessages.setValueSchema(ObjectMapperFactory.getThreadLocal().writeValueAsString(schema.getSchemaInfo()));
    String message = "[" + "{\"key\":\"my-key\",\"payload\":\"RestProducer:1\",\"eventTime\":1603045262772,\"sequenceId\":1}," + "{\"key\":\"my-key\",\"payload\":\"RestProducer:2\",\"eventTime\":1603045262772,\"sequenceId\":2}," + "{\"key\":\"my-key\",\"payload\":\"RestProducer:3\",\"eventTime\":1603045262772,\"sequenceId\":3}]";
    producerMessages.setMessages(ObjectMapperFactory.getThreadLocal().readValue(message, new TypeReference<List<ProducerMessage>>() {
    }));
    topics.produceOnPersistentTopic(asyncResponse, testTenant, testNamespace, testTopicName, false, producerMessages);
    ArgumentCaptor<Response> responseCaptor = ArgumentCaptor.forClass(Response.class);
    verify(asyncResponse, timeout(5000).times(1)).resume(responseCaptor.capture());
    Assert.assertEquals(responseCaptor.getValue().getStatus(), Response.Status.OK.getStatusCode());
    Object responseEntity = responseCaptor.getValue().getEntity();
    Assert.assertTrue(responseEntity instanceof ProducerAcks);
    ProducerAcks response = (ProducerAcks) responseEntity;
    Assert.assertEquals(response.getMessagePublishResults().size(), 3);
    Assert.assertEquals(response.getSchemaVersion(), 0);
    for (int index = 0; index < response.getMessagePublishResults().size(); index++) {
        Assert.assertEquals(Integer.parseInt(response.getMessagePublishResults().get(index).getMessageId().split(":")[2]), -1);
        Assert.assertEquals(response.getMessagePublishResults().get(index).getErrorCode(), 0);
        Assert.assertTrue(response.getMessagePublishResults().get(index).getMessageId().length() > 0);
    }
}
Also used : AsyncResponse(javax.ws.rs.container.AsyncResponse) Response(javax.ws.rs.core.Response) ProducerMessages(org.apache.pulsar.websocket.data.ProducerMessages) ProducerMessage(org.apache.pulsar.websocket.data.ProducerMessage) ArgumentMatchers.anyString(org.mockito.ArgumentMatchers.anyString) TypeReference(com.fasterxml.jackson.core.type.TypeReference) AsyncResponse(javax.ws.rs.container.AsyncResponse) ProducerAcks(org.apache.pulsar.websocket.data.ProducerAcks) Test(org.testng.annotations.Test) MockedPulsarServiceBaseTest(org.apache.pulsar.broker.auth.MockedPulsarServiceBaseTest)

Aggregations

TypeReference (com.fasterxml.jackson.core.type.TypeReference)45 ProducerMessage (org.apache.pulsar.websocket.data.ProducerMessage)45 ProducerMessages (org.apache.pulsar.websocket.data.ProducerMessages)45 AsyncResponse (javax.ws.rs.container.AsyncResponse)42 MockedPulsarServiceBaseTest (org.apache.pulsar.broker.auth.MockedPulsarServiceBaseTest)42 ArgumentMatchers.anyString (org.mockito.ArgumentMatchers.anyString)42 Test (org.testng.annotations.Test)42 Response (javax.ws.rs.core.Response)36 ProducerAcks (org.apache.pulsar.websocket.data.ProducerAcks)30 Consumer (org.apache.pulsar.client.api.Consumer)21 RestException (org.apache.pulsar.broker.web.RestException)12 GenericSchema (org.apache.pulsar.client.api.schema.GenericSchema)12 CompletableFuture (java.util.concurrent.CompletableFuture)9 NamespaceService (org.apache.pulsar.broker.namespace.NamespaceService)9 Producer (org.apache.pulsar.client.api.Producer)9 Schema (org.apache.pulsar.client.api.Schema)9 AvroSchema (org.apache.pulsar.client.impl.schema.AvroSchema)9 JSONSchema (org.apache.pulsar.client.impl.schema.JSONSchema)9 StringSchema (org.apache.pulsar.client.impl.schema.StringSchema)9 GenericAvroSchema (org.apache.pulsar.client.impl.schema.generic.GenericAvroSchema)9