package org.infinispan.test.integration.as.client; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import java.util.List; import org.infinispan.client.hotrod.RemoteCache; import org.infinispan.client.hotrod.RemoteCacheManager; import org.infinispan.client.hotrod.Search; import org.infinispan.client.hotrod.configuration.Configuration; import org.infinispan.client.hotrod.configuration.ConfigurationBuilder; import org.infinispan.client.hotrod.marshall.ProtoStreamMarshaller; import org.infinispan.protostream.SerializationContext; import org.infinispan.protostream.annotations.ProtoSchemaBuilder; import org.infinispan.query.dsl.Query; import org.infinispan.query.dsl.QueryFactory; import org.infinispan.query.remote.client.ProtobufMetadataManagerConstants; import org.junit.Test; /** * @since 9.0 */ public class BaseHotRodQueryIT { private static RemoteCacheManager createCacheManager() { return new RemoteCacheManager(createConfiguration(), true); } private static Configuration createConfiguration() { ConfigurationBuilder config = new ConfigurationBuilder(); config.addServer().host("127.0.0.1"); config.marshaller(new ProtoStreamMarshaller()); return config.build(); } @Test public void testRemoteQuery() throws Exception { RemoteCacheManager rcm = createCacheManager(); SerializationContext serializationContext = ProtoStreamMarshaller.getSerializationContext(rcm); ProtoSchemaBuilder protoSchemaBuilder = new ProtoSchemaBuilder(); String protoFile = protoSchemaBuilder.fileName("test.proto") .addClass(Person.class) .build(serializationContext); RemoteCache<String, String> metadataCache = rcm.getCache(ProtobufMetadataManagerConstants.PROTOBUF_METADATA_CACHE_NAME); metadataCache.put("test.proto", protoFile); assertFalse(metadataCache.containsKey(ProtobufMetadataManagerConstants.ERRORS_KEY_SUFFIX)); RemoteCache<String, Person> cache = rcm.getCache(); cache.clear(); cache.put("Adrian", new Person("Adrian")); assertTrue(cache.containsKey("Adrian")); QueryFactory qf = Search.getQueryFactory(cache); Query query = qf.from(Person.class) .having("name").eq("Adrian") .build(); List<Person> list = query.list(); assertNotNull(list); assertEquals(1, list.size()); assertEquals(Person.class, list.get(0).getClass()); assertEquals("Adrian", list.get(0).name); rcm.stop(); } /** * Sorting on a field that does not contain DocValues so Hibernate Search is forced to uninvert it. * @see <a href="https://issues.jboss.org/browse/ISPN-5729">https://issues.jboss.org/browse/ISPN-5729</a> */ @Test public void testUninverting() throws Exception { RemoteCacheManager rcm = createCacheManager(); SerializationContext serializationContext = ProtoStreamMarshaller.getSerializationContext(rcm); ProtoSchemaBuilder protoSchemaBuilder = new ProtoSchemaBuilder(); String protoFile = protoSchemaBuilder.fileName("test.proto") .addClass(Person.class) .build(serializationContext); RemoteCache<String, String> metadataCache = rcm.getCache(ProtobufMetadataManagerConstants.PROTOBUF_METADATA_CACHE_NAME); metadataCache.put("test.proto", protoFile); assertFalse(metadataCache.containsKey(ProtobufMetadataManagerConstants.ERRORS_KEY_SUFFIX)); RemoteCache<String, Person> cache = rcm.getCache(); cache.clear(); QueryFactory qf = Search.getQueryFactory(cache); Query query = qf.from(Person.class) .having("name").eq("John") .orderBy("id") .build(); assertEquals(0, query.list().size()); rcm.stop(); } }