package org.infinispan.server.test.query;
import static org.junit.Assert.assertFalse;
import java.io.IOException;
import org.infinispan.arquillian.core.RemoteInfinispanServer;
import org.infinispan.client.hotrod.RemoteCache;
import org.infinispan.client.hotrod.RemoteCacheManager;
import org.infinispan.client.hotrod.configuration.ConfigurationBuilder;
import org.infinispan.client.hotrod.marshall.ProtoStreamMarshaller;
import org.infinispan.commons.util.Util;
import org.infinispan.protostream.sampledomain.User;
import org.infinispan.protostream.sampledomain.marshallers.MarshallerRegistration;
import org.infinispan.query.remote.client.ProtobufMetadataManagerConstants;
import org.infinispan.server.test.util.RemoteCacheManagerFactory;
import org.junit.After;
import org.junit.Before;
/**
* Base class for tests for remote queries over HotRod.
*
* @author Adrian Nistor
* @author Martin Gencur
*/
public abstract class RemoteQueryBaseIT {
protected final String cacheContainerName;
protected final String cacheName;
protected RemoteCacheManager remoteCacheManager;
protected RemoteCache<Integer, User> remoteCache;
protected RemoteCacheManagerFactory rcmFactory;
protected RemoteQueryBaseIT(String cacheContainerName, String cacheName) {
this.cacheContainerName = cacheContainerName;
this.cacheName = cacheName;
}
protected abstract RemoteInfinispanServer getServer();
@Before
public void setUp() throws Exception {
rcmFactory = new RemoteCacheManagerFactory();
ConfigurationBuilder clientBuilder = new ConfigurationBuilder();
clientBuilder.addServer()
.host(getServer().getHotrodEndpoint().getInetAddress().getHostName())
.port(getServer().getHotrodEndpoint().getPort())
.marshaller(new ProtoStreamMarshaller());
remoteCacheManager = rcmFactory.createManager(clientBuilder);
remoteCache = remoteCacheManager.getCache(cacheName);
//initialize server-side serialization context
RemoteCache<String, String> metadataCache = remoteCacheManager.getCache(ProtobufMetadataManagerConstants.PROTOBUF_METADATA_CACHE_NAME);
metadataCache.put("sample_bank_account/bank.proto", read("/sample_bank_account/bank.proto"));
assertFalse(metadataCache.containsKey(ProtobufMetadataManagerConstants.ERRORS_KEY_SUFFIX));
//initialize client-side serialization context
MarshallerRegistration.registerMarshallers(ProtoStreamMarshaller.getSerializationContext(remoteCacheManager));
}
@After
public void tearDown() {
if (remoteCache != null) {
remoteCache.clear();
}
if (rcmFactory != null) {
rcmFactory.stopManagers();
}
rcmFactory = null;
}
private String read(String resourcePath) throws IOException {
return Util.read(getClass().getResourceAsStream(resourcePath));
}
}