}
@Test
public void testDownLastInstance() throws Exception
{
ServerList serverList = new ServerList("1:one,2:two,3:three");
RemoteInstanceRequestClient mockClient = new RemoteInstanceRequestClient()
{
@Override
public void close() throws IOException
{
}
@Override
public <T> T getWebResource(URI remoteUri, MediaType type, Class<T> clazz) throws Exception
{
if ( remoteUri.getHost().equals("two") )
{
throw new Exception();
}
return clazz.cast("foo");
}
};
ActivityLog log = new ActivityLog(100);
ActivityQueue activityQueue = new ActivityQueue();
Exhibitor mockExhibitor = Mockito.mock(Exhibitor.class);
MonitorRunningInstance mockMonitorRunningInstance = makeMockMonitorRunningInstance();
Mockito.when(mockExhibitor.getMonitorRunningInstance()).thenReturn(mockMonitorRunningInstance);
Mockito.when(mockExhibitor.getLog()).thenReturn(log);
Mockito.when(mockExhibitor.getActivityQueue()).thenReturn(activityQueue);
Mockito.when(mockExhibitor.getThisJVMHostname()).thenReturn("one");
Mockito.when(mockExhibitor.getRemoteInstanceRequestClient()).thenReturn(mockClient);
final AtomicLong modified = new AtomicLong(1);
ConfigProvider provider = new ConfigProvider()
{
private volatile ConfigCollection config = new PropertyBasedInstanceConfig(new Properties(), new Properties());
@Override
public void start() throws Exception
{
}
@Override
public void close() throws IOException
{
}
@Override
public LoadedInstanceConfig loadConfig() throws Exception
{
return new LoadedInstanceConfig(config, modified.get());
}
@Override
public PseudoLock newPseudoLock() throws Exception
{
return null;
}
@Override
public LoadedInstanceConfig storeConfig(ConfigCollection config, long compareVersion) throws Exception
{
this.config = config;
modified.incrementAndGet();
return loadConfig();
}
};
InstanceState state = new InstanceState(serverList, InstanceStateTypes.SERVING, new RestartSignificantConfig(null));
ConfigManager manager = new ConfigManager(mockExhibitor, provider, 10);
manager.start();
try
{
Properties properties = new Properties();
properties.setProperty(PropertyBasedInstanceConfig.toName(StringConfigs.SERVERS_SPEC, PropertyBasedInstanceConfig.ROOT_PROPERTY_PREFIX), serverList.toSpecString());
PropertyBasedInstanceConfig config = new PropertyBasedInstanceConfig(properties, DefaultProperties.get(null));
manager.startRollingConfig(config.getRootConfig(), null);
for ( String hostname : manager.getRollingConfigState().getRollingHostNames() )
{