package com.bazaarvoice.ostrich.discovery;
import com.bazaarvoice.ostrich.HostDiscovery;
import com.bazaarvoice.ostrich.HostDiscoverySource;
import com.bazaarvoice.ostrich.ServiceEndPoint;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Lists;
import org.junit.Test;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
public class ConfiguredFixedHostDiscoverySourceTest {
@Test(expected = NullPointerException.class)
public void testNullMap() {
new ConfiguredFixedHostDiscoverySource<Void>(null);
}
@Test
public void testDefaultConstructor() {
HostDiscoverySource source = new ConfiguredFixedHostDiscoverySource<Void>();
assertNull(source.forService("payload"));
}
@Test
public void testEmptyMap() {
HostDiscoverySource source = new ConfiguredFixedHostDiscoverySource<Void>(Collections.<String, Void>emptyMap());
assertNull(source.forService("payload"));
}
@Test
public void testNonEmptyMap() {
Map<String, String> endPoints = ImmutableMap.of("id", "payload");
HostDiscoverySource source = new ConfiguredFixedHostDiscoverySource<String>(endPoints);
assertNotNull(source.forService("service"));
}
@Test
public void testSingleEndPoint() {
Map<String, String> endPoints = ImmutableMap.of("id", "payload");
HostDiscoverySource source = new ConfiguredFixedHostDiscoverySource<String>(endPoints);
HostDiscovery hostDiscovery = source.forService("service");
assertNotNull(hostDiscovery);
List<ServiceEndPoint> hosts = Lists.newArrayList(hostDiscovery.getHosts());
assertEquals(1, hosts.size());
ServiceEndPoint endPoint = hosts.get(0);
assertEquals("service", endPoint.getServiceName());
assertEquals("id", endPoint.getId());
assertEquals("payload", endPoint.getPayload());
}
@Test
public void testOverridePayloadSerialize() {
final Object customPayload = new Object();
Map<String, Object> endPoints = ImmutableMap.of("id", customPayload);
HostDiscoverySource source = new ConfiguredFixedHostDiscoverySource<Object>(endPoints) {
@Override
protected String serialize(String serviceName, String id, Object payload) {
assertEquals("service", serviceName);
assertEquals("id", id);
assertEquals(customPayload, payload);
return "custom-payload";
}
};
HostDiscovery hostDiscovery = source.forService("service");
assertNotNull(hostDiscovery);
List<ServiceEndPoint> hosts = Lists.newArrayList(hostDiscovery.getHosts());
assertEquals("custom-payload", hosts.get(0).getPayload());
}
}