Index: server/tests/pom.xml IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== diff --git a/server/tests/pom.xml b/server/tests/pom.xml --- a/server/tests/pom.xml (revision e453ed4c95a0f7349e7616f54c6d3b6587fee4ab) +++ b/server/tests/pom.xml (revision c4dc69b29774e72b3eeb2b6b9c8b251364c17047) @@ -52,6 +52,11 @@ test + org.infinispan.protostream + protostream-processor + test + + org.infinispan infinispan-server-rest test-jar Index: server/tests/src/test/java/org/infinispan/server/functional/protobuf/Person.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== diff --git a/server/tests/src/test/java/org/infinispan/server/functional/protobuf/Person.java b/server/tests/src/test/java/org/infinispan/server/functional/protobuf/Person.java new file mode 100644 --- /dev/null (revision c4dc69b29774e72b3eeb2b6b9c8b251364c17047) +++ b/server/tests/src/test/java/org/infinispan/server/functional/protobuf/Person.java (revision c4dc69b29774e72b3eeb2b6b9c8b251364c17047) @@ -0,0 +1,41 @@ +package org.infinispan.server.functional.protobuf; + +import org.infinispan.protostream.annotations.ProtoFactory; +import org.infinispan.protostream.annotations.ProtoField; + +/** + * This class is annotated with the infinispan Protostream support annotations. + * With this method, you don't need to define a protobuf file and a marshaller for the object. + */ +public final class Person { + + @ProtoField(number = 1) + String firstName; + + @ProtoField(number = 2) + String lastName; + + @ProtoField(number = 3, defaultValue = "-1") + int bornYear; + + @ProtoField(number = 4) + String bornIn; + + @ProtoFactory + public Person(String firstName, String lastName, int bornYear, String bornIn) { + this.firstName = firstName; + this.lastName = lastName; + this.bornYear = bornYear; + this.bornIn = bornIn; + } + + @Override + public String toString() { + return "Person{" + + "firstName='" + firstName + '\'' + + ", lastName='" + lastName + '\'' + + ", bornYear='" + bornYear + '\'' + + ", bornIn='" + bornIn + '\'' + + '}'; + } +} Index: server/tests/src/test/java/org/infinispan/server/functional/protobuf/ProtobufHotRodRestEntityIT.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== diff --git a/server/tests/src/test/java/org/infinispan/server/functional/protobuf/ProtobufHotRodRestEntityIT.java b/server/tests/src/test/java/org/infinispan/server/functional/protobuf/ProtobufHotRodRestEntityIT.java new file mode 100644 --- /dev/null (revision c4dc69b29774e72b3eeb2b6b9c8b251364c17047) +++ b/server/tests/src/test/java/org/infinispan/server/functional/protobuf/ProtobufHotRodRestEntityIT.java (revision c4dc69b29774e72b3eeb2b6b9c8b251364c17047) @@ -0,0 +1,99 @@ +package org.infinispan.server.functional.protobuf; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.fail; +import static org.infinispan.query.remote.client.ProtobufMetadataManagerConstants.PROTOBUF_METADATA_CACHE_NAME; +import static org.infinispan.server.test.core.Common.sync; + +import java.util.Collection; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.infinispan.client.hotrod.RemoteCache; +import org.infinispan.client.hotrod.RemoteCacheManager; +import org.infinispan.client.hotrod.Search; +import org.infinispan.client.hotrod.configuration.ConfigurationBuilder; +import org.infinispan.client.rest.RestClient; +import org.infinispan.client.rest.RestResponse; +import org.infinispan.commons.dataconversion.internal.Json; +import org.infinispan.protostream.GeneratedSchema; +import org.infinispan.query.dsl.Query; +import org.infinispan.query.dsl.QueryFactory; +import org.infinispan.server.test.core.ServerRunMode; +import org.infinispan.server.test.junit4.InfinispanServerRule; +import org.infinispan.server.test.junit4.InfinispanServerRuleBuilder; +import org.infinispan.server.test.junit4.InfinispanServerTestMethodRule; +import org.junit.ClassRule; +import org.junit.Rule; +import org.junit.Test; + +public class ProtobufHotRodRestEntityIT { + + private static final String CACHE_NAME = "test"; + + private static final String CACHE_CONFIG = + "\n" + + " \n" + + ""; + + @ClassRule + public static InfinispanServerRule SERVERS = InfinispanServerRuleBuilder.config("configuration/BasicServerTest.xml") + .runMode(ServerRunMode.FORKED) + .numServers(1) + .build(); + + @Rule + public InfinispanServerTestMethodRule SERVER_TEST = new InfinispanServerTestMethodRule(SERVERS); + + @Test + public void test() { + RemoteCacheManager hotRodClient = getHotRodClient(); + try { + testQueries(hotRodClient); + } finally { + hotRodClient.stop(); + } + + RestClient restClient = SERVER_TEST.rest().create(); + RestResponse response = sync(restClient.cache(CACHE_NAME).entries(1000)); + + if (response.getStatus() != 200) { + fail(response.getBody()); + } + + Collection entities = (Collection) Json.read(response.getBody()).getValue(); + assertThat(entities).hasSize(4); + } + + private static void testQueries(RemoteCacheManager client) { + RemoteCache peopleCache = client.getCache(CACHE_NAME); + + Map people = new HashMap<>(); + people.put("1", new Person("Oihana", "Rossignol", 2016, "Paris")); + people.put("2", new Person("Elaia", "Rossignol", 2018, "Paris")); + people.put("3", new Person("Yago", "Steiner", 2013, "Saint-Mandé")); + people.put("4", new Person("Alberto", "Steiner", 2016, "Paris")); + peopleCache.putAll(people); + + QueryFactory queryFactory = Search.getQueryFactory(peopleCache); + Query query = queryFactory.create("FROM tutorial.Person p where p.lastName = :lastName"); + query.setParameter("lastName", "Rossignol"); + List rossignols = query.execute().list(); + assertThat(rossignols).extracting("firstName").containsExactlyInAnyOrder("Oihana", "Elaia"); + } + + private static RemoteCacheManager getHotRodClient() { + GeneratedSchema schema = new QuerySchemaBuilderImpl(); + + ConfigurationBuilder builder = new ConfigurationBuilder(); + builder.remoteCache(CACHE_NAME).configuration(CACHE_CONFIG.replace("CACHE_NAME", CACHE_NAME)); + + builder.addContextInitializer(schema); + RemoteCacheManager client = new RemoteCacheManager(builder.build()); + + RemoteCache metadataCache = client.getCache(PROTOBUF_METADATA_CACHE_NAME); + metadataCache.put(schema.getProtoFileName(), schema.getProtoFile()); + return client; + } +} Index: server/tests/src/test/java/org/infinispan/server/functional/protobuf/QuerySchemaBuilder.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== diff --git a/server/tests/src/test/java/org/infinispan/server/functional/protobuf/QuerySchemaBuilder.java b/server/tests/src/test/java/org/infinispan/server/functional/protobuf/QuerySchemaBuilder.java new file mode 100644 --- /dev/null (revision c4dc69b29774e72b3eeb2b6b9c8b251364c17047) +++ b/server/tests/src/test/java/org/infinispan/server/functional/protobuf/QuerySchemaBuilder.java (revision c4dc69b29774e72b3eeb2b6b9c8b251364c17047) @@ -0,0 +1,8 @@ +package org.infinispan.server.functional.protobuf; + +import org.infinispan.protostream.GeneratedSchema; +import org.infinispan.protostream.annotations.AutoProtoSchemaBuilder; + +@AutoProtoSchemaBuilder(schemaPackageName = "tutorial", includeClasses = Person.class) +public interface QuerySchemaBuilder extends GeneratedSchema { +} Index: server/tests/src/test/resources/configuration/BasicServerTest.xml IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== diff --git a/server/tests/src/test/resources/configuration/BasicServerTest.xml b/server/tests/src/test/resources/configuration/BasicServerTest.xml new file mode 100644 --- /dev/null (revision c4dc69b29774e72b3eeb2b6b9c8b251364c17047) +++ b/server/tests/src/test/resources/configuration/BasicServerTest.xml (revision c4dc69b29774e72b3eeb2b6b9c8b251364c17047) @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + Index: server/tests/src/test/resources/configuration/jgroups/none.xml IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== diff --git a/server/tests/src/test/resources/configuration/jgroups/none.xml b/server/tests/src/test/resources/configuration/jgroups/none.xml new file mode 100644 --- /dev/null (revision c4dc69b29774e72b3eeb2b6b9c8b251364c17047) +++ b/server/tests/src/test/resources/configuration/jgroups/none.xml (revision c4dc69b29774e72b3eeb2b6b9c8b251364c17047) @@ -0,0 +1,4 @@ + +