/* (c) 2014 Open Source Geospatial Foundation - all rights reserved
* (c) 2014 Boundless
* This code is licensed under the GPL 2.0 license, available at the root
* application directory.
*/
package org.geoserver.cluster.hazelcast;
import static org.easymock.EasyMock.capture;
import static org.easymock.EasyMock.createMock;
import static org.easymock.EasyMock.expect;
import static org.easymock.EasyMock.expectLastCall;
import static org.geoserver.cluster.ConfigChangeEventMatcher.configChangeEvent;
import java.util.UUID;
import java.util.concurrent.ScheduledExecutorService;
import org.easymock.Capture;
import org.easymock.EasyMock;
import org.geoserver.catalog.DataStoreInfo;
import org.geoserver.catalog.WorkspaceInfo;
import org.geoserver.catalog.event.CatalogListener;
import org.geoserver.catalog.event.impl.CatalogRemoveEventImpl;
import org.geoserver.cluster.ConfigChangeEvent;
import org.geoserver.cluster.ConfigChangeEvent.Type;
import org.geoserver.cluster.Event;
import org.junit.Ignore;
import org.junit.Test;
import com.hazelcast.core.Member;
import com.hazelcast.core.Message;
import com.hazelcast.core.MessageListener;
public class EventHzSynchronizerSendTest extends HzSynchronizerSendTest {
@Override
protected HzSynchronizer getSynchronizer() {
return new EventHzSynchronizer(cluster, getGeoServer()) {
@Override
ScheduledExecutorService getNewExecutor() {
return getMockExecutor();
}
@Override
public boolean isStarted(){
return true;
}
};
}
@Ignore // Spin lock based wait makes this hard to test KS
@Test
public void testWaitForAck() throws Exception {
DataStoreInfo info;
WorkspaceInfo wsInfo;
final String storeName = "testStore";
final String storeId = "Store-TEST";
final String storeWorkspace = "Workspace-TEST";
final Capture<ConfigChangeEvent> capture = new Capture<ConfigChangeEvent>();
{
info = createMock(DataStoreInfo.class);
wsInfo = createMock(WorkspaceInfo.class);
expect(info.getName()).andStubReturn(storeName);
expect(info.getId()).andStubReturn(storeId);
expect(info.getWorkspace()).andStubReturn(wsInfo);
expect(wsInfo.getId()).andStubReturn(storeWorkspace);
topic.publish(capture(capture));expectLastCall();
}
replay(info, wsInfo);
{
HzSynchronizer sync = getSynchronizer();
// Mock the result of doing this:
// getCatalog().remove(info);
CatalogRemoveEventImpl event = new CatalogRemoveEventImpl();
event.setSource(info);
for(CatalogListener listener: catListenerCapture.getValues()) {
listener.handleRemoveEvent(event);
}
for (MessageListener<UUID> listener : this.captureAckTopicListener.getValues()) {
String topicName = "geoserver.config.ack";
UUID messageObject = capture.getValue().getUUID();
int publishTime = 0;
Member publishingMember = null;
Message<UUID> message = new Message<UUID>(topicName, messageObject, publishTime, publishingMember);
listener.onMessage(message);
}
}
waitForSync();
verify(info, wsInfo);
}
}