package org.sdnplatform.sync.test;
import java.util.Collection;
import java.util.HashMap;
import org.sdnplatform.sync.ISyncService;
import org.sdnplatform.sync.error.SyncException;
import org.sdnplatform.sync.error.UnknownStoreException;
import org.sdnplatform.sync.internal.AbstractSyncManager;
import org.sdnplatform.sync.internal.store.IStorageEngine;
import org.sdnplatform.sync.internal.store.IStore;
import org.sdnplatform.sync.internal.store.InMemoryStorageEngine;
import org.sdnplatform.sync.internal.store.ListenerStorageEngine;
import org.sdnplatform.sync.internal.store.MappingStoreListener;
import org.sdnplatform.sync.internal.util.ByteArray;
import net.floodlightcontroller.core.module.FloodlightModuleContext;
import net.floodlightcontroller.core.module.FloodlightModuleException;
import net.floodlightcontroller.core.module.IFloodlightService;
/**
* Mock sync service useful for testing
* @author readams
*/
public class MockSyncService extends AbstractSyncManager {
/**
* The storage engines that contain the locally-stored data
*/
private HashMap<String,ListenerStorageEngine> localStores =
new HashMap<String, ListenerStorageEngine>();
// ************
// ISyncService
// ************
@Override
public void registerStore(String storeName, Scope scope)
throws SyncException {
ListenerStorageEngine store = localStores.get(storeName);
if (store != null) return;
IStorageEngine<ByteArray, byte[]> memstore =
new InMemoryStorageEngine<ByteArray, byte[]>(storeName);
store = new ListenerStorageEngine(memstore, null);
localStores.put(storeName, store);
}
/**
* Persistent stores are not actually persistent in the mock sync service
* @see ISyncService#registerPersistentStore(String,
* org.sdnplatform.sync.ISyncService.Scope)
*/
@Override
public void registerPersistentStore(String storeName, Scope scope)
throws SyncException {
registerStore(storeName, scope);
}
// *****************
// IFloodlightModule
// *****************
@Override
public void init(FloodlightModuleContext context)
throws FloodlightModuleException {
}
@Override
public void startUp(FloodlightModuleContext context)
throws FloodlightModuleException {
}
@Override
public Collection<Class<? extends IFloodlightService>>
getModuleDependencies() {
return null;
}
// *******************
// AbstractSyncManager
// *******************
@Override
public IStore<ByteArray, byte[]>
getStore(String storeName) throws UnknownStoreException {
return localStores.get(storeName);
}
@Override
public short getLocalNodeId() {
return Short.MAX_VALUE;
}
@Override
public void addListener(String storeName, MappingStoreListener listener)
throws UnknownStoreException {
ListenerStorageEngine store = localStores.get(storeName);
if (store == null)
throw new UnknownStoreException("Store " + storeName +
" has not been registered");
store.addListener(listener);
}
@Override
public void shutdown() {
}
// ***************
// MockSyncService
// ***************
/**
* Reset to pristine condition
*/
public void reset() {
localStores = new HashMap<String, ListenerStorageEngine>();
}
}