public class TestRollingConfigChange
{
@Test
public void testFailedQuorum() 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
{
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.NOT_SERVING, new RestartSignificantConfig(null));
final AtomicBoolean hasBeenCanceled = new AtomicBoolean(false);
ConfigManager manager = new ConfigManager(mockExhibitor, provider, 10)
{
@Override
public synchronized void cancelRollingConfig(CancelMode mode) throws Exception
{
super.cancelRollingConfig(mode);
hasBeenCanceled.set(true);
}
};
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);
String hostname = manager.getRollingConfigState().getRollingHostNames().get(0);
Assert.assertTrue(manager.isRolling());