package brave.spring.beans;
import java.util.concurrent.TimeUnit;
import org.junit.After;
import org.junit.Test;
import zipkin.reporter.AsyncReporter;
import zipkin.reporter.Encoding;
import zipkin.reporter.ReporterMetrics;
import zipkin.reporter.Sender;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
public class AsyncReporterFactoryBeanTest {
public static Sender SENDER = mock(Sender.class);
public static ReporterMetrics METRICS = mock(ReporterMetrics.class);
static {
when(SENDER.encoding()).thenReturn(Encoding.JSON);
when(SENDER.messageMaxBytes()).thenReturn(1024);
}
XmlBeans context;
@After public void close() {
if (context != null) context.close();
}
@Test public void sender() {
context = new XmlBeans(""
+ "<bean id=\"asyncReporter\" class=\"brave.spring.beans.AsyncReporterFactoryBean\">\n"
+ " <property name=\"sender\">\n"
+ " <util:constant static-field=\"" + getClass().getName() + ".SENDER\"/>\n"
+ " </property>\n"
+ "</bean>"
);
context.refresh();
assertThat(context.getBean(AsyncReporter.class))
.extracting("sender")
.containsExactly(SENDER);
}
@Test public void metrics() {
context = new XmlBeans(""
+ "<bean id=\"asyncReporter\" class=\"brave.spring.beans.AsyncReporterFactoryBean\">\n"
+ " <property name=\"sender\">\n"
+ " <util:constant static-field=\"" + getClass().getName() + ".SENDER\"/>\n"
+ " </property>\n"
+ " <property name=\"metrics\">\n"
+ " <util:constant static-field=\"" + getClass().getName() + ".METRICS\"/>\n"
+ " </property>\n"
+ "</bean>"
);
context.refresh();
assertThat(context.getBean(AsyncReporter.class))
.extracting("metrics")
.containsExactly(METRICS);
}
@Test public void messageMaxBytes() {
context = new XmlBeans(""
+ "<bean id=\"asyncReporter\" class=\"brave.spring.beans.AsyncReporterFactoryBean\">\n"
+ " <property name=\"sender\">\n"
+ " <util:constant static-field=\"" + getClass().getName() + ".SENDER\"/>\n"
+ " </property>\n"
+ " <property name=\"messageMaxBytes\" value=\"512\"/>\n"
+ "</bean>"
);
context.refresh();
assertThat(context.getBean(AsyncReporter.class))
.extracting("messageMaxBytes")
.containsExactly(512);
}
@Test public void messageTimeout() {
context = new XmlBeans(""
+ "<bean id=\"asyncReporter\" class=\"brave.spring.beans.AsyncReporterFactoryBean\">\n"
+ " <property name=\"sender\">\n"
+ " <util:constant static-field=\"" + getClass().getName() + ".SENDER\"/>\n"
+ " </property>\n"
+ " <property name=\"messageTimeout\" value=\"500\"/>\n"
+ "</bean>"
);
context.refresh();
assertThat(context.getBean(AsyncReporter.class))
.extracting("messageTimeoutNanos")
.containsExactly(TimeUnit.MILLISECONDS.toNanos(500));
}
@Test public void closeTimeout() {
context = new XmlBeans(""
+ "<bean id=\"asyncReporter\" class=\"brave.spring.beans.AsyncReporterFactoryBean\">\n"
+ " <property name=\"sender\">\n"
+ " <util:constant static-field=\"" + getClass().getName() + ".SENDER\"/>\n"
+ " </property>\n"
+ " <property name=\"closeTimeout\" value=\"500\"/>\n"
+ "</bean>"
);
context.refresh();
assertThat(context.getBean(AsyncReporter.class))
.extracting("closeTimeoutNanos")
.containsExactly(TimeUnit.MILLISECONDS.toNanos(500));
}
@Test public void queuedMaxSpans() {
context = new XmlBeans(""
+ "<bean id=\"asyncReporter\" class=\"brave.spring.beans.AsyncReporterFactoryBean\">\n"
+ " <property name=\"sender\">\n"
+ " <util:constant static-field=\"" + getClass().getName() + ".SENDER\"/>\n"
+ " </property>\n"
+ " <property name=\"queuedMaxSpans\" value=\"10\"/>\n"
+ "</bean>"
);
context.refresh();
assertThat(context.getBean(AsyncReporter.class))
.extracting("pending.maxSize")
.containsExactly(10);
}
@Test public void queuedMaxBytes() {
context = new XmlBeans(""
+ "<bean id=\"asyncReporter\" class=\"brave.spring.beans.AsyncReporterFactoryBean\">\n"
+ " <property name=\"sender\">\n"
+ " <util:constant static-field=\"" + getClass().getName() + ".SENDER\"/>\n"
+ " </property>\n"
+ " <property name=\"queuedMaxBytes\" value=\"512\"/>\n"
+ "</bean>"
);
context.refresh();
assertThat(context.getBean(AsyncReporter.class))
.extracting("pending.maxBytes")
.containsExactly(512);
}
}