package com.yammer.breakerbox.turbine.tests;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
import com.google.common.io.Resources;
import com.google.common.net.HostAndPort;
import com.netflix.turbine.discovery.Instance;
import com.yammer.breakerbox.turbine.config.YamlInstanceConfiguration;
import io.dropwizard.configuration.ConfigurationFactory;
import io.dropwizard.configuration.YamlConfigurationFactory;
import io.dropwizard.jackson.Jackson;
import io.dropwizard.jersey.validation.Validators;
import org.junit.Test;
import java.io.File;
import static org.assertj.core.api.Assertions.assertThat;
public class YamlInstanceConfigurationTest {
private ConfigurationFactory<YamlInstanceConfiguration> configFactory = new YamlConfigurationFactory<>(
YamlInstanceConfiguration.class,
Validators.newValidator(),
Jackson.newObjectMapper(),
"dw");
@Test
public void defaultConfiguration() throws Exception {
final YamlInstanceConfiguration configuration = configFactory.build(
new File(Resources.getResource("turbineConfigurations/default.yml").toURI()));
assertThat(configuration.getClusters()).isEqualTo(ImmutableMap.of(
"breakerbox", YamlInstanceConfiguration.Cluster.withInstances(HostAndPort.fromParts("localhost", 8080)),
"production", YamlInstanceConfiguration.Cluster.withClusters("breakerbox")));
assertThat(configuration.getAllInstances()).isEqualTo(ImmutableSet.of(
new Instance("localhost:8080", "breakerbox", true),
new Instance("localhost:8080", "production", true)));
}
@Test
public void multipleClusters() throws Exception {
final YamlInstanceConfiguration configuration = configFactory.build(
new File(Resources.getResource("turbineConfigurations/multipleClusters.yml").toURI()));
assertThat(configuration.getClusters()).isEqualTo(ImmutableMap.of(
"one", new YamlInstanceConfiguration.Cluster(
ImmutableSet.of(HostAndPort.fromParts("localhost", 1234), HostAndPort.fromParts("localhost", 5678)),
ImmutableSet.of("two")),
"two", new YamlInstanceConfiguration.Cluster(
ImmutableSet.of(HostAndPort.fromParts("localhost", 4321), HostAndPort.fromParts("localhost", 9876)),
ImmutableSet.of("one")),
"three", YamlInstanceConfiguration.Cluster.withClusters("one", "two")));
assertThat(configuration.getAllInstances()).isEqualTo(
ImmutableSet.of(
new Instance("localhost:1234", "one", true), new Instance("localhost:5678", "one", true),
new Instance("localhost:4321", "one", true), new Instance("localhost:9876", "one", true),
new Instance("localhost:4321", "two", true), new Instance("localhost:9876", "two", true),
new Instance("localhost:1234", "two", true), new Instance("localhost:5678", "two", true),
new Instance("localhost:4321", "three", true), new Instance("localhost:9876", "three", true),
new Instance("localhost:1234", "three", true), new Instance("localhost:5678", "three", true)));
}
@Test
public void selfReference() throws Exception {
final YamlInstanceConfiguration configuration = configFactory.build(
new File(Resources.getResource("turbineConfigurations/selfReference.yml").toURI()));
assertThat(configuration.getClusters()).isEqualTo(ImmutableMap.of(
"one", new YamlInstanceConfiguration.Cluster(
ImmutableSet.of(HostAndPort.fromParts("localhost", 1234)),
ImmutableSet.of("one"))));
assertThat(configuration.getAllInstances()).isEqualTo(ImmutableSet.of(new Instance("localhost:1234", "one", true)));
}
@Test
public void urlSuffix() throws Exception {
final YamlInstanceConfiguration configuration = configFactory.build(
new File(Resources.getResource("turbineConfigurations/urlSuffix.yml").toURI()));
assertThat(configuration.getUrlSuffix()).isEqualTo("/foo/bar");
}
}