SendOperationTest.java
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
package com.azure.spring.integration.test.support.reactor;
import com.google.common.collect.ImmutableMap;
import com.azure.spring.integration.core.api.reactor.SendOperation;
import org.junit.Test;
import org.springframework.core.NestedRuntimeException;
import org.springframework.messaging.Message;
import org.springframework.messaging.support.GenericMessage;
import reactor.core.publisher.Mono;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.fail;
public abstract class SendOperationTest<O extends SendOperation> {
protected O sendOperation;
protected String payload = "payload";
protected Mono<Void> mono = Mono.empty();
protected String destination = "event-hub";
protected String consumerGroup = "consumer-group";
protected Message<?> message =
new GenericMessage<>("testPayload", ImmutableMap.of("key1", "value1", "key2", "value2"));
public O getSendOperation() {
return sendOperation;
}
public void setSendOperation(O sendOperation) {
this.sendOperation = sendOperation;
}
public String getPayload() {
return payload;
}
public void setPayload(String payload) {
this.payload = payload;
}
public Mono<Void> getMono() {
return mono;
}
public void setMono(Mono<Void> mono) {
this.mono = mono;
}
public String getDestination() {
return destination;
}
public void setDestination(String destination) {
this.destination = destination;
}
public String getConsumerGroup() {
return consumerGroup;
}
public void setConsumerGroup(String consumerGroup) {
this.consumerGroup = consumerGroup;
}
public Message<?> getMessage() {
return message;
}
public void setMessage(Message<?> message) {
this.message = message;
}
@Test
public void testSend() {
final Mono<Void> mono = this.sendOperation.sendAsync(destination, message, null);
assertNull(mono.block());
verifySendCalled(1);
}
@Test(expected = NestedRuntimeException.class)
public void testSendCreateSenderFailure() {
whenSendWithException();
this.sendOperation.sendAsync(destination, this.message, null).block();
}
@Test
public void testSendFailure() {
String errorMessage = "Send failed.";
setupError(errorMessage);
Mono<Void> mono = this.sendOperation.sendAsync(destination, this.message, null);
try {
mono.block();
fail("Test should fail.");
} catch (Exception e) {
assertEquals(errorMessage, e.getMessage());
}
}
protected abstract void setupError(String errorMessage);
protected abstract void verifySendCalled(int times);
protected abstract void whenSendWithException();
protected abstract void verifyGetClientCreator(int times);
}