From bb26241a37736e4526e4c34e3e8563ba9dad9f51 Mon Sep 17 00:00:00 2001 From: olivier lamy Date: Thu, 14 May 2020 14:54:23 +1000 Subject: [PATCH] add RemoteQueryManagerTest to use infinispan via testcontainer, simplify how we start infinispan Signed-off-by: olivier lamy --- .../infinispan-remote-query/pom.xml | 18 +- .../infinispan/RemoteQueryManagerTest.java | 73 +++- .../test/resources/simplelogger.properties | 3 + .../test-infinispan-sessions/pom.xml | 4 +- .../remote/RemoteInfinispanTestSupport.java | 7 +- .../test/resources/remote-session-test.xml | 392 ------------------ 6 files changed, 82 insertions(+), 415 deletions(-) create mode 100644 jetty-infinispan/infinispan-remote-query/src/test/resources/simplelogger.properties delete mode 100644 tests/test-sessions/test-infinispan-sessions/src/test/resources/remote-session-test.xml diff --git a/jetty-infinispan/infinispan-remote-query/pom.xml b/jetty-infinispan/infinispan-remote-query/pom.xml index a9ec47afbaa..4cb8d9bbb6a 100644 --- a/jetty-infinispan/infinispan-remote-query/pom.xml +++ b/jetty-infinispan/infinispan-remote-query/pom.xml @@ -7,12 +7,11 @@ 4.0.0 infinispan-remote-query Jetty :: Infinispan Session Manager Remote - http://www.eclipse.org/jetty ${project.groupId}.infinispan.remote.query + 9.4.8.Final - install org.apache.maven.plugins @@ -127,10 +126,20 @@ infinispan-remote-query-client ${infinispan.version} + + org.slf4j + slf4j-simple + test + + + org.testcontainers + testcontainers + test + - remote + remote-session-tests hotrod.enabled @@ -144,6 +153,9 @@ maven-surefire-plugin false + + ${infinispan.docker.image.version} + diff --git a/jetty-infinispan/infinispan-remote-query/src/test/java/org/eclipse/jetty/server/session/infinispan/RemoteQueryManagerTest.java b/jetty-infinispan/infinispan-remote-query/src/test/java/org/eclipse/jetty/server/session/infinispan/RemoteQueryManagerTest.java index 6fd5521e9f0..53b04adeb25 100644 --- a/jetty-infinispan/infinispan-remote-query/src/test/java/org/eclipse/jetty/server/session/infinispan/RemoteQueryManagerTest.java +++ b/jetty-infinispan/infinispan-remote-query/src/test/java/org/eclipse/jetty/server/session/infinispan/RemoteQueryManagerTest.java @@ -27,6 +27,7 @@ import java.util.Random; import java.util.Set; import org.eclipse.jetty.server.session.SessionData; +import org.eclipse.jetty.session.infinispan.InfinispanSessionData; import org.eclipse.jetty.session.infinispan.QueryManager; import org.eclipse.jetty.session.infinispan.RemoteQueryManager; import org.eclipse.jetty.session.infinispan.SessionDataMarshaller; @@ -35,11 +36,23 @@ import org.hibernate.search.cfg.Environment; import org.hibernate.search.cfg.SearchMapping; import org.infinispan.client.hotrod.RemoteCache; import org.infinispan.client.hotrod.RemoteCacheManager; +import org.infinispan.client.hotrod.configuration.ClientIntelligence; import org.infinispan.client.hotrod.configuration.ConfigurationBuilder; import org.infinispan.client.hotrod.marshall.ProtoStreamMarshaller; import org.infinispan.protostream.FileDescriptorSource; import org.infinispan.protostream.SerializationContext; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import org.junit.runner.RunWith; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.testcontainers.containers.GenericContainer; +import org.testcontainers.containers.output.Slf4jLogConsumer; +import org.testcontainers.containers.wait.strategy.LogMessageWaitStrategy; +import org.testcontainers.utility.MountableFile; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; @@ -49,8 +62,45 @@ public class RemoteQueryManagerTest { public static final String DEFAULT_CACHE_NAME = "remote-session-test"; + private static final Logger LOG = LoggerFactory.getLogger(RemoteQueryManagerTest.class); + + private static final Logger INFINISPAN_LOG = + LoggerFactory.getLogger("org.eclipse.jetty.server.session.infinispan.infinispanLogs"); + + private String host; + private int port; + + GenericContainer infinispan = + new GenericContainer(System.getProperty("infinispan.docker.image.name", "jboss/infinispan-server") + + ":" + System.getProperty("infinispan.docker.image.version", "9.4.8.Final")) + .withEnv("APP_USER","theuser") + .withEnv("APP_PASS","foobar") + .withEnv("MGMT_USER", "admin") + .withEnv("MGMT_PASS", "admin") + .waitingFor(new LogMessageWaitStrategy() + .withRegEx(".*Infinispan Server.*started in.*\\s")) + .withExposedPorts(4712,4713,8088,8089,8443,9990,9993,11211,11222,11223,11224) + .withLogConsumer(new Slf4jLogConsumer(INFINISPAN_LOG)); + + @BeforeEach + public void setup() throws Exception + { + long start = System.currentTimeMillis(); + infinispan.start(); + host = infinispan.getContainerIpAddress(); + port = infinispan.getMappedPort(11222); + LOG.info("Infinispan container started for {}:{} - {}ms", host, port, + System.currentTimeMillis() - start); + } + + @AfterEach + public void stop() throws Exception + { + infinispan.stop(); + } + @Test - public void test() throws Exception + public void testQuery() throws Exception { SearchMapping mapping = new SearchMapping(); mapping.entity(SessionData.class).indexed().providedId().property("expiry", ElementType.FIELD).field(); @@ -59,9 +109,13 @@ public class RemoteQueryManagerTest properties.put(Environment.MODEL_MAPPING, mapping); ConfigurationBuilder clientBuilder = new ConfigurationBuilder(); - clientBuilder.withProperties(properties).addServer().host("127.0.0.1").marshaller(new ProtoStreamMarshaller()); + clientBuilder.withProperties(properties).addServer() + .host(this.host).port(this.port) + .clientIntelligence(ClientIntelligence.BASIC) + .marshaller(new ProtoStreamMarshaller()); RemoteCacheManager remoteCacheManager = new RemoteCacheManager(clientBuilder.build()); + remoteCacheManager.administration().getOrCreateCache("remote-session-test", (String)null); FileDescriptorSource fds = new FileDescriptorSource(); fds.addProtoFiles("/session.proto"); @@ -70,20 +124,17 @@ public class RemoteQueryManagerTest serCtx.registerProtoFiles(fds); serCtx.registerMarshaller(new SessionDataMarshaller()); - RemoteCache cache = remoteCacheManager.getCache(DEFAULT_CACHE_NAME); - - ByteArrayOutputStream baos; - try (InputStream is = RemoteQueryManagerTest.class.getClassLoader().getResourceAsStream("session.proto")) + try (InputStream is = RemoteQueryManagerTest.class.getClassLoader().getResourceAsStream("session.proto"); + ByteArrayOutputStream baos = new ByteArrayOutputStream()) { if (is == null) throw new IllegalStateException("inputstream is null"); - - baos = new ByteArrayOutputStream(); IO.copy(is, baos); + String content = baos.toString("UTF-8"); + remoteCacheManager.getCache("___protobuf_metadata").put("session.proto", content); } - String content = baos.toString("UTF-8"); - remoteCacheManager.getCache("___protobuf_metadata").put("session.proto", content); + RemoteCache cache = remoteCacheManager.getCache(DEFAULT_CACHE_NAME); //put some sessions into the remote cache int numSessions = 10; @@ -97,7 +148,7 @@ public class RemoteQueryManagerTest String id = "sd" + i; //create new sessiondata with random expiry time long expiryTime = r.nextInt(maxExpiryTime); - SessionData sd = new SessionData(id, "", "", 0, 0, 0, 0); + InfinispanSessionData sd = new InfinispanSessionData(id, "", "", 0, 0, 0, 0); sd.setLastNode("lastNode"); sd.setExpiry(expiryTime); diff --git a/jetty-infinispan/infinispan-remote-query/src/test/resources/simplelogger.properties b/jetty-infinispan/infinispan-remote-query/src/test/resources/simplelogger.properties new file mode 100644 index 00000000000..0bd8aee936e --- /dev/null +++ b/jetty-infinispan/infinispan-remote-query/src/test/resources/simplelogger.properties @@ -0,0 +1,3 @@ +org.slf4j.simpleLogger.defaultLogLevel=info +org.slf4j.simpleLogger.log.org.eclipse.jetty.server.session.infinispan.infinispanLogs=debug +org.slf4j.simpleLogger.log.org.eclipse.jetty.server.session.infinispan.RemoteQueryManagerTest=debug diff --git a/tests/test-sessions/test-infinispan-sessions/pom.xml b/tests/test-sessions/test-infinispan-sessions/pom.xml index bd2ee0d6e6a..ba31c16285f 100644 --- a/tests/test-sessions/test-infinispan-sessions/pom.xml +++ b/tests/test-sessions/test-infinispan-sessions/pom.xml @@ -12,9 +12,7 @@ ${project.groupId}.sessions.infinispan - - - 9.4.8.Final + ${infinispan.version} jboss/infinispan-server diff --git a/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/remote/RemoteInfinispanTestSupport.java b/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/remote/RemoteInfinispanTestSupport.java index 05849c0831f..c94cb71ca73 100644 --- a/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/remote/RemoteInfinispanTestSupport.java +++ b/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/remote/RemoteInfinispanTestSupport.java @@ -39,7 +39,6 @@ import org.infinispan.protostream.FileDescriptorSource; import org.infinispan.protostream.SerializationContext; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.testcontainers.Testcontainers; import org.testcontainers.containers.GenericContainer; import org.testcontainers.containers.output.Slf4jLogConsumer; import org.testcontainers.containers.wait.strategy.LogMessageWaitStrategy; @@ -67,7 +66,7 @@ public class RemoteInfinispanTestSupport { try { - Testcontainers.exposeHostPorts(11222); + //Testcontainers.exposeHostPorts(11222); long start = System.currentTimeMillis(); String infinispanVersion = System.getProperty("infinispan.docker.image.version", "9.4.8.Final"); infinispan = @@ -80,11 +79,7 @@ public class RemoteInfinispanTestSupport .waitingFor(new LogMessageWaitStrategy() .withRegEx(".*Infinispan Server.*started in.*\\s")) .withExposedPorts(4712,4713,8088,8089,8443,9990,9993,11211,11222,11223,11224) - .withCopyFileToContainer(MountableFile.forClasspathResource("remote-session-test.xml"), - "/opt/jboss/infinispan-server/standalone/configuration/remote-session-test.xml") .withLogConsumer(new Slf4jLogConsumer(INFINISPAN_LOG)); - // we could simply use `standalone` as well but... :) - infinispan = infinispan.withCommand("-c remote-session-test.xml"); infinispan.start(); String host = infinispan.getContainerIpAddress(); System.setProperty("hotrod.host", host); diff --git a/tests/test-sessions/test-infinispan-sessions/src/test/resources/remote-session-test.xml b/tests/test-sessions/test-infinispan-sessions/src/test/resources/remote-session-test.xml deleted file mode 100644 index eebc11417e3..00000000000 --- a/tests/test-sessions/test-infinispan-sessions/src/test/resources/remote-session-test.xml +++ /dev/null @@ -1,392 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE - h2 - - sa - sa - - - - - org.h2.jdbcx.JdbcDataSource - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -