use of org.apache.bookkeeper.clients.StorageClientBuilder in project incubator-pulsar by apache.
the class CmdFunctionsTest method testStateGetter.
@Test
public void testStateGetter() throws Exception {
String tenant = TEST_NAME + "_tenant";
String namespace = TEST_NAME + "_namespace";
String fnName = TEST_NAME + "_function";
mockStatic(StorageClientBuilder.class);
StorageClientBuilder builder = mock(StorageClientBuilder.class);
when(builder.withSettings(any(StorageClientSettings.class))).thenReturn(builder);
when(builder.withNamespace(eq(tenant + "_" + namespace))).thenReturn(builder);
StorageClient client = mock(StorageClient.class);
when(builder.build()).thenReturn(client);
PowerMockito.when(StorageClientBuilder.class, "newBuilder").thenReturn(builder);
Table<ByteBuf, ByteBuf> table = mock(Table.class);
when(client.openTable(eq(fnName))).thenReturn(FutureUtils.value(table));
AtomicReference<ByteBuf> keyHolder = new AtomicReference<>();
doAnswer(invocationOnMock -> {
ByteBuf buf = invocationOnMock.getArgumentAt(0, ByteBuf.class);
keyHolder.set(buf);
return FutureUtils.value(null);
}).when(table).getKv(any(ByteBuf.class));
cmd.run(new String[] { "querystate", "--tenant", tenant, "--namespace", namespace, "--name", fnName, "--key", "test-key", "--storage-service-url", "127.0.0.1:4181" });
assertEquals("test-key", new String(ByteBufUtil.getBytes(keyHolder.get()), UTF_8));
}
use of org.apache.bookkeeper.clients.StorageClientBuilder in project incubator-pulsar by apache.
the class JavaInstanceRunnableProcessTest method setup.
@BeforeMethod
public void setup() throws Exception {
mockProducers.clear();
mockConsumers.clear();
fnConfig = FunctionConfig.newBuilder().setAutoAck(true).setClassName(TestFunction.class.getName()).addInputs("test-src-topic").setName("test-function").setOutput("test-output-topic").setProcessingGuarantees(ProcessingGuarantees.ATLEAST_ONCE).setTenant("test-tenant").setNamespace("test-namespace").build();
config = new InstanceConfig();
config.setFunctionId("test-function-id");
config.setFunctionVersion("v1");
config.setInstanceId("test-instance-id");
config.setMaxBufferedTuples(1000);
config.setFunctionConfig(fnConfig);
mockClient = mock(PulsarClientImpl.class);
// mock FunctionCacheManager
fnCache = mock(FunctionCacheManager.class);
doNothing().when(fnCache).registerFunctionInstance(anyString(), anyString(), anyList(), anyList());
doNothing().when(fnCache).unregisterFunctionInstance(anyString(), anyString());
ClassLoader clsLoader = JavaInstanceRunnableTest.class.getClassLoader();
when(fnCache.getClassLoader(anyString())).thenReturn(clsLoader);
// mock producer & consumer
when(mockClient.createProducer(anyString(), any(ProducerConfiguration.class))).thenAnswer(invocationOnMock -> {
String topic = invocationOnMock.getArgumentAt(0, String.class);
ProducerConfiguration conf = invocationOnMock.getArgumentAt(1, ProducerConfiguration.class);
String producerName = conf.getProducerName();
Pair<String, String> pair = Pair.of(topic, producerName);
ProducerInstance producerInstance = mockProducers.get(pair);
if (null == producerInstance) {
Producer producer = mock(Producer.class);
LinkedBlockingQueue<Message> msgQueue = new LinkedBlockingQueue<>();
final ProducerInstance instance = new ProducerInstance(producer, msgQueue);
producerInstance = instance;
when(producer.getProducerName()).thenReturn(producerName);
when(producer.getTopic()).thenReturn(topic);
when(producer.sendAsync(any(Message.class))).thenAnswer(invocationOnMock1 -> {
Message msg = invocationOnMock1.getArgumentAt(0, Message.class);
log.info("producer send message {}", msg);
CompletableFuture<MessageId> future = new CompletableFuture<>();
instance.addSendFuture(future);
msgQueue.put(msg);
return future;
});
when(producer.closeAsync()).thenReturn(FutureUtils.Void());
mockProducers.put(pair, producerInstance);
}
return producerInstance.getProducer();
});
when(mockClient.subscribe(anyString(), anyString(), any(ConsumerConfiguration.class))).thenAnswer(invocationOnMock -> {
String topic = invocationOnMock.getArgumentAt(0, String.class);
String subscription = invocationOnMock.getArgumentAt(1, String.class);
ConsumerConfiguration conf = invocationOnMock.getArgumentAt(2, ConsumerConfiguration.class);
Pair<String, String> pair = Pair.of(topic, subscription);
ConsumerInstance consumerInstance = mockConsumers.get(pair);
if (null == consumerInstance) {
Consumer consumer = mock(Consumer.class);
ConsumerInstance instance = new ConsumerInstance(consumer, conf);
consumerInstance = instance;
when(consumer.getTopic()).thenReturn(topic);
when(consumer.getSubscription()).thenReturn(subscription);
when(consumer.acknowledgeAsync(any(Message.class))).thenAnswer(invocationOnMock1 -> {
Message msg = invocationOnMock1.getArgumentAt(0, Message.class);
log.info("Ack message {} : message id = {}", msg, msg.getMessageId());
instance.removeMessage(msg.getMessageId());
return FutureUtils.Void();
});
when(consumer.acknowledgeCumulativeAsync(any(Message.class))).thenAnswer(invocationOnMock1 -> {
Message msg = invocationOnMock1.getArgumentAt(0, Message.class);
log.info("Ack message cumulatively message id = {}", msg, msg.getMessageId());
instance.removeMessagesBefore(msg.getMessageId());
return FutureUtils.Void();
});
when(consumer.closeAsync()).thenAnswer(invocationOnMock1 -> {
mockConsumers.remove(pair, instance);
return FutureUtils.Void();
});
doAnswer(invocationOnMock1 -> {
mockConsumers.remove(pair, instance);
return null;
}).when(consumer).close();
mockConsumers.put(pair, consumerInstance);
}
return consumerInstance.getConsumer();
});
//
// Mock State Store
//
StorageClientBuilder mockBuilder = mock(StorageClientBuilder.class);
when(mockBuilder.withNamespace(anyString())).thenReturn(mockBuilder);
when(mockBuilder.withSettings(any(StorageClientSettings.class))).thenReturn(mockBuilder);
this.mockStorageClient = mock(StorageClient.class);
when(mockBuilder.build()).thenReturn(mockStorageClient);
StorageAdminClient adminClient = mock(StorageAdminClient.class);
when(mockBuilder.buildAdmin()).thenReturn(adminClient);
PowerMockito.mockStatic(StorageClientBuilder.class);
PowerMockito.when(StorageClientBuilder.newBuilder()).thenReturn(mockBuilder);
when(adminClient.getStream(anyString(), anyString())).thenReturn(FutureUtils.value(StreamProperties.newBuilder().build()));
mockTable = mock(Table.class);
when(mockStorageClient.openTable(anyString())).thenReturn(FutureUtils.value(mockTable));
//
// Mock Function Stats
//
mockFunctionStats = spy(new FunctionStats());
PowerMockito.whenNew(FunctionStats.class).withNoArguments().thenReturn(mockFunctionStats);
// Mock message builder
PowerMockito.mockStatic(MessageBuilder.class);
PowerMockito.when(MessageBuilder.create()).thenAnswer(invocationOnMock -> {
Message msg = mock(Message.class);
MessageBuilder builder = mock(MessageBuilder.class);
when(builder.setContent(any(byte[].class))).thenAnswer(invocationOnMock1 -> {
byte[] content = invocationOnMock1.getArgumentAt(0, byte[].class);
when(msg.getData()).thenReturn(content);
return builder;
});
when(builder.setSequenceId(anyLong())).thenAnswer(invocationOnMock1 -> {
long seqId = invocationOnMock1.getArgumentAt(0, long.class);
when(msg.getSequenceId()).thenReturn(seqId);
return builder;
});
when(builder.setProperty(anyString(), anyString())).thenAnswer(invocationOnMock1 -> {
String key = invocationOnMock1.getArgumentAt(0, String.class);
String value = invocationOnMock1.getArgumentAt(1, String.class);
when(msg.getProperty(eq(key))).thenReturn(value);
return builder;
});
when(builder.build()).thenReturn(msg);
return builder;
});
}
Aggregations