Package org.springframework.data.gemfire.test

Source Code of org.springframework.data.gemfire.test.StubCache

package org.springframework.data.gemfire.test;

import static org.mockito.Mockito.anyInt;
import static org.mockito.Mockito.anyString;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;

import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Properties;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import javax.naming.Context;

import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;

import com.gemstone.gemfire.CancelCriterion;
import com.gemstone.gemfire.LogWriter;
import com.gemstone.gemfire.cache.Cache;
import com.gemstone.gemfire.cache.CacheTransactionManager;
import com.gemstone.gemfire.cache.CacheWriterException;
import com.gemstone.gemfire.cache.Declarable;
import com.gemstone.gemfire.cache.DiskStore;
import com.gemstone.gemfire.cache.DiskStoreFactory;
import com.gemstone.gemfire.cache.GatewayException;
import com.gemstone.gemfire.cache.Region;
import com.gemstone.gemfire.cache.RegionAttributes;
import com.gemstone.gemfire.cache.RegionExistsException;
import com.gemstone.gemfire.cache.RegionFactory;
import com.gemstone.gemfire.cache.RegionShortcut;
import com.gemstone.gemfire.cache.TimeoutException;
import com.gemstone.gemfire.cache.asyncqueue.AsyncEventQueue;
import com.gemstone.gemfire.cache.asyncqueue.AsyncEventQueueFactory;
import com.gemstone.gemfire.cache.control.ResourceManager;
import com.gemstone.gemfire.cache.query.Index;
import com.gemstone.gemfire.cache.query.IndexExistsException;
import com.gemstone.gemfire.cache.query.IndexInvalidException;
import com.gemstone.gemfire.cache.query.IndexNameConflictException;
import com.gemstone.gemfire.cache.query.QueryService;
import com.gemstone.gemfire.cache.query.RegionNotFoundException;
import com.gemstone.gemfire.cache.server.CacheServer;
import com.gemstone.gemfire.cache.snapshot.CacheSnapshotService;
import com.gemstone.gemfire.cache.util.Gateway;
import com.gemstone.gemfire.cache.util.GatewayConflictResolver;
import com.gemstone.gemfire.cache.util.GatewayHub;
import com.gemstone.gemfire.cache.util.GatewayQueueAttributes;
import com.gemstone.gemfire.cache.wan.GatewayReceiver;
import com.gemstone.gemfire.cache.wan.GatewayReceiverFactory;
import com.gemstone.gemfire.cache.wan.GatewaySender;
import com.gemstone.gemfire.cache.wan.GatewaySenderFactory;
import com.gemstone.gemfire.distributed.DistributedMember;
import com.gemstone.gemfire.distributed.DistributedSystem;
import com.gemstone.gemfire.i18n.LogWriterI18n;
import com.gemstone.gemfire.pdx.PdxInstance;
import com.gemstone.gemfire.pdx.PdxInstanceFactory;
import com.gemstone.gemfire.pdx.PdxSerializer;

@SuppressWarnings({ "deprecation", "unused" })
public class StubCache implements Cache {

  protected static final String NOT_IMPLEMENTED = "Not Implemented!";

  private CacheTransactionManager cacheTransactionManager;

  private boolean closed;
  private boolean copyOnRead;
  private boolean pdxIgnoreUnreadFields;
  private boolean pdxPersistent;
  private boolean pdxReadSerialized;
  private boolean server;

  private int lockLease;
  private int lockTimeout;
  private int messageSyncInterval;
  private int searchTimeout;

  private Context jndiContext;

  private Declarable initializer;

  private DistributedSystem distributedSystem;

  private GatewayConflictResolver gatewayConflictResolver;

  private HashMap<String, Region> allRegions;

  private List<GatewayHub> gatewayHubs;

  private LogWriter logWriter;
  private LogWriter securityLogWriter;

  private PdxSerializer pdxSerializer;

  private Properties properties;

  private ResourceManager resourceManager;

  private Set<GatewayReceiver> gatewayReceivers;
  private Set<GatewaySender> gatewaySenders;

  private String pdxDiskStore;
  private String name;

  public StubCache(){
    this.allRegions = new HashMap<String,Region>();
  }
 
  /* (non-Javadoc)
   * @see com.gemstone.gemfire.cache.GemFireCache#createDiskStoreFactory()
   */
  @Override
  public DiskStoreFactory createDiskStoreFactory() {
    return new StubDiskStore();
  }

  /* (non-Javadoc)
   * @see com.gemstone.gemfire.cache.GemFireCache#findDiskStore(java.lang.String)
   */
  @Override
  public DiskStore findDiskStore(String name) {
    return StubDiskStore.getDiskStore(name);
  }

  /* (non-Javadoc)
   * @see com.gemstone.gemfire.cache.GemFireCache#getCacheTransactionManager()
   */
  @Override
  public CacheTransactionManager getCacheTransactionManager() {
    if (cacheTransactionManager == null) {
      cacheTransactionManager = new StubCacheTransactionMananger();
    }
    return cacheTransactionManager;
  }

  /* (non-Javadoc)
   * @see com.gemstone.gemfire.cache.GemFireCache#getCopyOnRead()
   */
  @Override
  public boolean getCopyOnRead() {
    return this.copyOnRead;
  }

  /* (non-Javadoc)
   * @see com.gemstone.gemfire.cache.GemFireCache#getDistributedSystem()
   */
  @Override
  public DistributedSystem getDistributedSystem() {
    if (distributedSystem == null) {
      distributedSystem = mockDistributedSystem();
   
    }
    return distributedSystem;
  }


  /* (non-Javadoc)
   * @see com.gemstone.gemfire.cache.GemFireCache#getInitializer()
   */
  @Override
  public Declarable getInitializer() {
    return this.initializer;
  }

  /* (non-Javadoc)
   * @see com.gemstone.gemfire.cache.GemFireCache#getInitializerProps()
   */
  @Override
  public Properties getInitializerProps() {
    return this.properties;
  }

  /* (non-Javadoc)
   * @see com.gemstone.gemfire.cache.GemFireCache#getJNDIContext()
   */
  @Override
  public Context getJNDIContext() {
    return this.jndiContext;
  }

  /* (non-Javadoc)
   * @see com.gemstone.gemfire.cache.GemFireCache#getLogger()
   */
  @Override
  public LogWriter getLogger() {
    return this.logWriter;
  }

  /* (non-Javadoc)
   * @see com.gemstone.gemfire.cache.GemFireCache#getName()
   */
  @Override
  public String getName() {
    return this.properties == null? null: (String)this.properties.get("name");
  }

  /* (non-Javadoc)
   * @see com.gemstone.gemfire.cache.GemFireCache#getPdxDiskStore()
   */
  @Override
  public String getPdxDiskStore() {
    return this.pdxDiskStore;
  }

  /* (non-Javadoc)
   * @see com.gemstone.gemfire.cache.GemFireCache#getPdxIgnoreUnreadFields()
   */
  @Override
  public boolean getPdxIgnoreUnreadFields() {
    return this.pdxIgnoreUnreadFields;
  }

  /* (non-Javadoc)
   * @see com.gemstone.gemfire.cache.GemFireCache#getPdxPersistent()
   */
  @Override
  public boolean getPdxPersistent() {
    return this.pdxPersistent;
  }

  /* (non-Javadoc)
   * @see com.gemstone.gemfire.cache.GemFireCache#getPdxReadSerialized()
   */
  @Override
  public boolean getPdxReadSerialized() {
    return this.pdxReadSerialized;
  }

  /* (non-Javadoc)
   * @see com.gemstone.gemfire.cache.GemFireCache#getPdxSerializer()
   */
  @Override
  public PdxSerializer getPdxSerializer() {
    return this.pdxSerializer;
  }

  /* (non-Javadoc)
   * @see com.gemstone.gemfire.cache.GemFireCache#getRegionAttributes(java.lang.String)
   */
  @SuppressWarnings("unchecked")
  @Override
  public <K, V> RegionAttributes<K, V> getRegionAttributes(String region) {
    return allRegions().get(region).getAttributes();
  }

  /* (non-Javadoc)
   * @see com.gemstone.gemfire.cache.GemFireCache#getResourceManager()
   */
  @Override
  public ResourceManager getResourceManager() {
    return this.resourceManager;
  }

  /* (non-Javadoc)
   * @see com.gemstone.gemfire.cache.GemFireCache#getSecurityLogger()
   */
  @Override
  public LogWriter getSecurityLogger() {
    return this.securityLogWriter;
  }

  /* (non-Javadoc)
   * @see com.gemstone.gemfire.cache.GemFireCache#listRegionAttributes()
   */
  @SuppressWarnings({ "rawtypes", "unchecked" })
  @Override
  public <K, V> Map<String, RegionAttributes<K, V>> listRegionAttributes() {
    Map<String, RegionAttributes<K, V>> attributes = new HashMap<String, RegionAttributes<K, V>>();
    for (Entry<String, Region> entry: allRegions().entrySet()) {
      attributes.put(entry.getKey(), entry.getValue().getAttributes());
    }
    return attributes;
  }

  /* (non-Javadoc)
   * @see com.gemstone.gemfire.cache.GemFireCache#loadCacheXml(java.io.InputStream)
   */
  @Override
  public void loadCacheXml(InputStream is) throws TimeoutException, CacheWriterException, GatewayException, RegionExistsException {
  }

  /* (non-Javadoc)
   * @see com.gemstone.gemfire.cache.GemFireCache#setCopyOnRead(boolean)
   */
  @Override
  public void setCopyOnRead(boolean arg0) {
    this.copyOnRead = arg0;
  }

  /* (non-Javadoc)
   * @see com.gemstone.gemfire.cache.GemFireCache#setRegionAttributes(java.lang.String, com.gemstone.gemfire.cache.RegionAttributes)
   */
  @Override
  public <K, V> void setRegionAttributes(String region, RegionAttributes<K, V> attributes) {
    RegionFactory<K,V> rf = new MockRegionFactory<K, V>(this).createMockRegionFactory(attributes);
    rf.create(region);
  }

  /* (non-Javadoc)
   * @see com.gemstone.gemfire.cache.RegionService#close()
   */
  @Override
  public void close() {
    this.closed = true;
  }

  /* (non-Javadoc)
   * @see com.gemstone.gemfire.cache.RegionService#createPdxEnum(java.lang.String, java.lang.String, int)
   */
  @Override
  public PdxInstance createPdxEnum(String arg0, String arg1, int arg2) {
    throw new UnsupportedOperationException(NOT_IMPLEMENTED);
  }

  /* (non-Javadoc)
   * @see com.gemstone.gemfire.cache.RegionService#createPdxInstanceFactory(java.lang.String)
   */
  @Override
  public PdxInstanceFactory createPdxInstanceFactory(String arg0) {
    throw new UnsupportedOperationException(NOT_IMPLEMENTED);
  }

  /* (non-Javadoc)
   * @see com.gemstone.gemfire.cache.RegionService#getCancelCriterion()
   */
  @Override
  public CancelCriterion getCancelCriterion() {
    throw new UnsupportedOperationException(NOT_IMPLEMENTED);
  }

  /* (non-Javadoc)
   * @see com.gemstone.gemfire.cache.RegionService#getQueryService()
   */
  @Override
  public QueryService getQueryService() {
    QueryService qs = null;
    try {
      qs =  mockQueryService();
    } catch (Exception e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
    return qs;
  }

  /* (non-Javadoc)
   * @see com.gemstone.gemfire.cache.RegionService#getRegion(java.lang.String)
   */
  @SuppressWarnings("unchecked")
  @Override
  public <K, V> Region<K, V> getRegion(String name) {
    return allRegions().get(name);
  }

  /* (non-Javadoc)
   * @see com.gemstone.gemfire.cache.RegionService#isClosed()
   */
  @Override
  public boolean isClosed() {
    return this.closed;
  }

  /* (non-Javadoc)
   * @see com.gemstone.gemfire.cache.RegionService#rootRegions()
   */
  @Override
  public Set<Region<?, ?>> rootRegions() {
    Set<Region<?,?>> rootRegions = new HashSet<Region<?,?>>();
    for (String key: allRegions().keySet()) {
      if (!key.contains("/")) {
        rootRegions.add(allRegions().get(key));
      }
    }
    return rootRegions;
  }

  /* (non-Javadoc)
   * @see com.gemstone.gemfire.cache.Cache#addBridgeServer()
   */
  @Override
  @Deprecated
  public com.gemstone.gemfire.cache.util.BridgeServer addBridgeServer() {
    throw new UnsupportedOperationException(NOT_IMPLEMENTED);
  }

  /* (non-Javadoc)
   * @see com.gemstone.gemfire.cache.Cache#addCacheServer()
   */
  @Override
  public CacheServer addCacheServer() {
    return mockCacheServer();
  }


  /* (non-Javadoc)
   * @see com.gemstone.gemfire.cache.Cache#addGatewayHub(java.lang.String, int)
   */
  @Override
  public GatewayHub addGatewayHub(String name, int port) {
    return mockGatewayHub();
  }

  /* (non-Javadoc)
   * @see com.gemstone.gemfire.cache.Cache#close(boolean)
   */
  @Override
  @Deprecated
  public void close(boolean arg0) {
    this.closed = true;
   
  }

  /* (non-Javadoc)
   * @see com.gemstone.gemfire.cache.Cache#createAsyncEventQueueFactory()
   */
  @Override
  public AsyncEventQueueFactory createAsyncEventQueueFactory() {
    return new StubAsyncEventQueueFactory();
  }

  /* (non-Javadoc)
   * @see com.gemstone.gemfire.cache.Cache#createGatewayReceiverFactory()
   */
  @Override
  public GatewayReceiverFactory createGatewayReceiverFactory() {
    return new StubGatewayReceiverFactory();
  }

  /* (non-Javadoc)
   * @see com.gemstone.gemfire.cache.Cache#createGatewaySenderFactory()
   */
  @Override
  public GatewaySenderFactory createGatewaySenderFactory() {
    return new StubGatewaySenderFactory();
  }

  /* (non-Javadoc)
   * @see com.gemstone.gemfire.cache.Cache#createRegion(java.lang.String, com.gemstone.gemfire.cache.RegionAttributes)
   */
  @Override
  @Deprecated
  public <K, V> Region<K, V> createRegion(String arg0, RegionAttributes<K, V> arg1) throws RegionExistsException, TimeoutException {
    throw new UnsupportedOperationException(NOT_IMPLEMENTED);
  }

  /* (non-Javadoc)
   * @see com.gemstone.gemfire.cache.Cache#createRegionFactory()
   */
  @Override
  @SuppressWarnings("unchecked")
  public <K, V> RegionFactory<K, V> createRegionFactory() {
    return new MockRegionFactory<K,V>(this).createRegionFactory();
  }

  /* (non-Javadoc)
   * @see com.gemstone.gemfire.cache.Cache#createRegionFactory(com.gemstone.gemfire.cache.RegionAttributes)
   */
  @Override
  public <K, V> RegionFactory<K, V> createRegionFactory(RegionAttributes<K, V> regionAttributes) {
    return new MockRegionFactory<K,V>(this).createMockRegionFactory(regionAttributes);
  }

  /* (non-Javadoc)
   * @see com.gemstone.gemfire.cache.Cache#createRegionFactory(com.gemstone.gemfire.cache.RegionShortcut)
   */
  @Override
  @SuppressWarnings("unchecked")
  public <K, V> RegionFactory<K, V> createRegionFactory(RegionShortcut shortcut) {
    return new MockRegionFactory<K,V>(this).createRegionFactory();
  }

  /* (non-Javadoc)
   * @see com.gemstone.gemfire.cache.Cache#createRegionFactory(java.lang.String)
   */
  @Override
  @SuppressWarnings("unchecked")
  public <K, V> RegionFactory<K, V> createRegionFactory(String regionAttributesId) {
    return new MockRegionFactory<K,V>(this).createRegionFactory();
  }

  /* (non-Javadoc)
   * @see com.gemstone.gemfire.cache.Cache#createVMRegion(java.lang.String, com.gemstone.gemfire.cache.RegionAttributes)
   */
  @Override
  @Deprecated
  public <K, V> Region<K, V> createVMRegion(String arg0, RegionAttributes<K, V> arg1) throws RegionExistsException, TimeoutException {
    throw new UnsupportedOperationException(NOT_IMPLEMENTED);
  }

  /* (non-Javadoc)
   * @see com.gemstone.gemfire.cache.Cache#getAdminMembers()
   */
  @Override
  public Set<DistributedMember> getAdminMembers() {
    throw new UnsupportedOperationException(NOT_IMPLEMENTED);
  }

  /* (non-Javadoc)
   * @see com.gemstone.gemfire.cache.Cache#getAsyncEventQueue(java.lang.String)
   */
  @Override
  public AsyncEventQueue getAsyncEventQueue(String name) {
    throw new UnsupportedOperationException(NOT_IMPLEMENTED);
  }

  /* (non-Javadoc)
   * @see com.gemstone.gemfire.cache.Cache#getAsyncEventQueues()
   */
  @Override
  public Set<AsyncEventQueue> getAsyncEventQueues() {
    throw new UnsupportedOperationException(NOT_IMPLEMENTED);
  }

  /* (non-Javadoc)
   * @see com.gemstone.gemfire.cache.Cache#getBridgeServers()
   */
  @Override
  @Deprecated
  public List<CacheServer> getBridgeServers() {
    throw new UnsupportedOperationException(NOT_IMPLEMENTED);
  }

  /* (non-Javadoc)
   * @see com.gemstone.gemfire.cache.Cache#getCacheServers()
   */
  @Override
  public List<CacheServer> getCacheServers() {
    throw new UnsupportedOperationException(NOT_IMPLEMENTED);
  }

  /* (non-Javadoc)
   * @see com.gemstone.gemfire.cache.Cache#getGatewayConflictResolver()
   */
  @Override
  public GatewayConflictResolver getGatewayConflictResolver() {
    return this.gatewayConflictResolver;
  }

  /* (non-Javadoc)
   * @see com.gemstone.gemfire.cache.Cache#getGatewayHub()
   */
  @Override
  @Deprecated
  public GatewayHub getGatewayHub() {
    return mockGatewayHub();
  }

  /* (non-Javadoc)
   * @see com.gemstone.gemfire.cache.Cache#getGatewayHub(java.lang.String)
   */
  @Override
  public GatewayHub getGatewayHub(String name) {
    return mockGatewayHub();
  }

  /* (non-Javadoc)
   * @see com.gemstone.gemfire.cache.Cache#getGatewayHubs()
   */
  @Override
  public List<GatewayHub> getGatewayHubs() {
    return this.gatewayHubs;
  }

  /* (non-Javadoc)
   * @see com.gemstone.gemfire.cache.Cache#getGatewayReceivers()
   */
  @Override
  public Set<GatewayReceiver> getGatewayReceivers() {
    return this.gatewayReceivers;
  }

  /* (non-Javadoc)
   * @see com.gemstone.gemfire.cache.Cache#getGatewaySender(java.lang.String)
   */
  @Override
  public GatewaySender getGatewaySender(String name) {
    throw new UnsupportedOperationException(NOT_IMPLEMENTED);
  }

  /* (non-Javadoc)
   * @see com.gemstone.gemfire.cache.Cache#getGatewaySenders()
   */
  @Override
  public Set<GatewaySender> getGatewaySenders() {
    return this.gatewaySenders;
  }

  /* (non-Javadoc)
   * @see com.gemstone.gemfire.cache.Cache#getLockLease()
   */
  @Override
  public int getLockLease() {
    return this.lockLease;
  }

  /* (non-Javadoc)
   * @see com.gemstone.gemfire.cache.Cache#getLockTimeout()
   */
  @Override
  public int getLockTimeout() {
    return this.lockTimeout;
  }

  /* (non-Javadoc)
   * @see com.gemstone.gemfire.cache.Cache#getLoggerI18n()
   */
  @Override
  @Deprecated
  public LogWriterI18n getLoggerI18n() {
    throw new UnsupportedOperationException(NOT_IMPLEMENTED);
  }

  /* (non-Javadoc)
   * @see com.gemstone.gemfire.cache.Cache#getMembers()
   */
  @Override
  public Set<DistributedMember> getMembers() {
    throw new UnsupportedOperationException(NOT_IMPLEMENTED);
  }

  /* (non-Javadoc)
   * @see com.gemstone.gemfire.cache.Cache#getMembers(com.gemstone.gemfire.cache.Region)
   */
  @SuppressWarnings({"rawtypes"})
  @Override
  public Set<DistributedMember> getMembers(Region arg0) {
    throw new UnsupportedOperationException(NOT_IMPLEMENTED);
  }

  /* (non-Javadoc)
   * @see com.gemstone.gemfire.cache.Cache#getMessageSyncInterval()
   */
  @Override
  public int getMessageSyncInterval() {
    return this.messageSyncInterval;
  }

  /* (non-Javadoc)
   * @see com.gemstone.gemfire.cache.Cache#getSearchTimeout()
   */
  @Override
  public int getSearchTimeout() {
    return this.searchTimeout;
  }

  /* (non-Javadoc)
   * @see com.gemstone.gemfire.cache.Cache#getSecurityLoggerI18n()
   */
  @Override
  @Deprecated
  public LogWriterI18n getSecurityLoggerI18n() {
    throw new UnsupportedOperationException(NOT_IMPLEMENTED);
  }

  /* (non-Javadoc)
   * @see com.gemstone.gemfire.cache.Cache#getSnapshotService()
   */
  @Override
  public CacheSnapshotService getSnapshotService() {
    throw new UnsupportedOperationException(NOT_IMPLEMENTED);
  }

  /* (non-Javadoc)
   * @see com.gemstone.gemfire.cache.Cache#isServer()
   */
  @Override
  public boolean isServer() {
    return this.server;
  }

  /* (non-Javadoc)
   * @see com.gemstone.gemfire.cache.Cache#readyForEvents()
   */
  @Override
  @Deprecated
  public void readyForEvents() {
  }

  /* (non-Javadoc)
   * @see com.gemstone.gemfire.cache.Cache#setGatewayConflictResolver(com.gemstone.gemfire.cache.util.GatewayConflictResolver)
   */
  @Override
  public void setGatewayConflictResolver(GatewayConflictResolver arg0) {
    this.gatewayConflictResolver = arg0;
  }

  /* (non-Javadoc)
   * @see com.gemstone.gemfire.cache.Cache#setGatewayHub(java.lang.String, int)
   */
  @Override
  @Deprecated
  public GatewayHub setGatewayHub(String arg0, int arg1) {
    throw new UnsupportedOperationException(NOT_IMPLEMENTED);
  }

  /* (non-Javadoc)
   * @see com.gemstone.gemfire.cache.Cache#setIsServer(boolean)
   */
  @Override
  public void setIsServer(boolean arg0) {
    this.server = arg0;
   
  }

  /* (non-Javadoc)
   * @see com.gemstone.gemfire.cache.Cache#setLockLease(int)
   */
  @Override
  public void setLockLease(int arg0) {
    this.lockLease = arg0;
  }

  /* (non-Javadoc)
   * @see com.gemstone.gemfire.cache.Cache#setLockTimeout(int)
   */
  @Override
  public void setLockTimeout(int arg0) {
    this.lockTimeout = arg0;
  }

  /* (non-Javadoc)
   * @see com.gemstone.gemfire.cache.Cache#setMessageSyncInterval(int)
   */
  @Override
  public void setMessageSyncInterval(int arg0) {
    this.messageSyncInterval = arg0;
  }

  /* (non-Javadoc)
   * @see com.gemstone.gemfire.cache.Cache#setSearchTimeout(int)
   */
  @Override
  public void setSearchTimeout(int arg0) {
    this.searchTimeout = arg0;
  }

  DistributedSystem mockDistributedSystem() {
    DistributedSystem mockDistributedSystem = mock(DistributedSystem.class);

    when(mockDistributedSystem.getName()).thenAnswer(new Answer<String>() {
      @Override
      public String answer(InvocationOnMock invocation) throws Throwable {
        return getName();
      }
    });

    when(mockDistributedSystem.getProperties()).thenReturn(this.properties);

    DistributedMember mockDistributedMember = mockDistributedMember();

    when(mockDistributedSystem.getDistributedMember()).thenReturn(mockDistributedMember);

    return mockDistributedSystem;
  }

  DistributedMember mockDistributedMember() {
    DistributedMember mockDistributedMember = mock(DistributedMember.class);
    when(mockDistributedMember.getHost()).thenReturn("mockDistributedMember.host");
    when(mockDistributedMember.getName()).thenReturn("mockDistributedMember");
    return mockDistributedMember;
  }

  CacheServer mockCacheServer() {
    return new StubCacheServer();
  }

  GatewayHub mockGatewayHub() {
    final Gateway gateway = mock(Gateway.class);

      when(gateway.getQueueAttributes()).thenReturn(mock(GatewayQueueAttributes.class));

    GatewayHub gatewayHub = mock(GatewayHub.class);

    when(gatewayHub.addGateway(anyString(),anyInt())).thenAnswer(new Answer<Gateway>() {
      @Override
      public Gateway answer(InvocationOnMock invocation) throws Throwable {
        return gateway;
      }

    });

    return gatewayHub;
  }

  QueryService mockQueryService() throws RegionNotFoundException, IndexInvalidException, IndexNameConflictException, IndexExistsException, UnsupportedOperationException {
    QueryService queryService = mock(QueryService.class);

    when(queryService.getIndexes()).thenReturn(new ArrayList<Index>());

    when(queryService.createIndex(anyString(), anyString(),anyString())).thenAnswer(new Answer<Index>() {
      @Override
      public Index answer(InvocationOnMock invocation) throws Throwable {
        String indexName = (String) invocation.getArguments()[0];
        String indexedExpression = (String) invocation.getArguments()[1];
        String fromClause = (String) invocation.getArguments()[2];
        return mockIndex(indexName, com.gemstone.gemfire.cache.query.IndexType.FUNCTIONAL, indexedExpression,
          fromClause, null);
      }
    });

    when(queryService.createIndex(anyString(), anyString(),anyString(),anyString())).thenAnswer(new Answer<Index>() {
      @Override
      public Index answer(InvocationOnMock invocation) throws Throwable {
        String indexName = (String) invocation.getArguments()[0];
        String indexedExpression = (String) invocation.getArguments()[1];
        String fromClause = (String) invocation.getArguments()[2];
        String imports = (String) invocation.getArguments()[3];
        return mockIndex(indexName, com.gemstone.gemfire.cache.query.IndexType.FUNCTIONAL, indexedExpression,
          fromClause, imports);
      }
    });

    when(queryService.createKeyIndex(anyString(), anyString(),anyString())).thenAnswer(new Answer<Index>() {
      @Override
      public Index answer(InvocationOnMock invocation) throws Throwable {
        String indexName = (String) invocation.getArguments()[0];
        String indexedExpression = (String) invocation.getArguments()[1];
        String fromClause = (String) invocation.getArguments()[2];

        return mockIndex(indexName, com.gemstone.gemfire.cache.query.IndexType.PRIMARY_KEY, indexedExpression,
          fromClause, null);
      }
    });

    when(queryService.createHashIndex(anyString(), anyString(),anyString())).thenAnswer(new Answer<Index>() {
      @Override
      public Index answer(InvocationOnMock invocation) throws Throwable {
        String indexName = (String) invocation.getArguments()[0];
        String indexedExpression = (String) invocation.getArguments()[1];
        String fromClause = (String) invocation.getArguments()[2];

        return mockIndex(indexName, com.gemstone.gemfire.cache.query.IndexType.HASH, indexedExpression,
          fromClause, null);
      }
    });

    when(queryService.createHashIndex(anyString(), anyString(),anyString(),anyString())).thenAnswer(new Answer<Index>() {
      @Override
      public Index answer(InvocationOnMock invocation) throws Throwable {
        String indexName = (String) invocation.getArguments()[0];
        String indexedExpression = (String) invocation.getArguments()[1];
        String fromClause = (String) invocation.getArguments()[2];
        String imports = (String) invocation.getArguments()[3];

        return mockIndex(indexName, com.gemstone.gemfire.cache.query.IndexType.HASH, indexedExpression,
          fromClause, imports);
      }
    });

    return queryService;
  }

  @SuppressWarnings({ "rawtypes", "unchecked", "unused" })
  Index mockIndex(String indexName, com.gemstone.gemfire.cache.query.IndexType indexType, String indexedExpression,
      String fromClause, String imports){
    Index idx = mock(Index.class);
    when(idx.getFromClause()).thenReturn(fromClause);
    when(idx.getIndexedExpression()).thenReturn(indexedExpression);
    when(idx.getName()).thenReturn(indexName);
    when(idx.getType()).thenReturn(indexType);
   
   
    if (fromClause != null && fromClause.length() >= 2) {
      Region region = mock(Region.class);
      String name = fromClause.substring(1).split(" ")[0];
      when(region.getName()).thenReturn(name);
      when(idx.getRegion()).thenReturn(region);
    }
    return idx;
  }

  @SuppressWarnings("rawtypes")
  public Map<String,Region> allRegions() {
    return this.allRegions;
  }

  public void setProperties(Properties gemfireProperties) {
    this.properties = gemfireProperties;
  }

  @Override
  public boolean isReconnecting() {
    return false;
  }

  @Override
  public Cache getReconnectedCache() {
    return this;
  }

  @Override
  public void stopReconnecting() {
  }

  @Override
  public boolean waitUntilReconnected(final long l, final TimeUnit timeUnit) throws InterruptedException {
    return false;
  }

}
TOP

Related Classes of org.springframework.data.gemfire.test.StubCache

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.