From b6c86c67c87426dde88c2eb567ead9edfe3e9926 Mon Sep 17 00:00:00 2001 From: Christoph Strobl Date: Tue, 12 Mar 2019 14:25:02 +0100 Subject: [PATCH] #514 - Fix test setup of Spring Data for Apache Solr examples. Guard test execution of Spring Data for Apache Solr examples with collection requirement. We now make sure to register required Beans just once and check if a specific collection is available via Apache Solr. Move off deprecated API in Solr example. --- .../solr/AdvancedSolrRepositoryTests.java | 12 +++++++----- .../solr/BasicSolrRepositoryTests.java | 2 +- .../springdata/solr/SolrRepositoryTests.java | 2 +- .../solr/test/util/RequiresSolrServer.java | 18 +++++++++++++++++- 4 files changed, 26 insertions(+), 8 deletions(-) diff --git a/solr/example/src/test/java/example/springdata/solr/AdvancedSolrRepositoryTests.java b/solr/example/src/test/java/example/springdata/solr/AdvancedSolrRepositoryTests.java index aa828acb..4860623a 100644 --- a/solr/example/src/test/java/example/springdata/solr/AdvancedSolrRepositoryTests.java +++ b/solr/example/src/test/java/example/springdata/solr/AdvancedSolrRepositoryTests.java @@ -28,6 +28,8 @@ import java.time.Duration; import java.util.Arrays; import java.util.Optional; +import javax.annotation.PostConstruct; + import org.junit.ClassRule; import org.junit.Test; import org.junit.runner.RunWith; @@ -50,15 +52,15 @@ import org.springframework.test.context.junit4.SpringRunner; * @author Mark Paluch */ @RunWith(SpringRunner.class) -@SpringBootTest +@SpringBootTest(classes = SolrTestConfiguration.class) public class AdvancedSolrRepositoryTests { - public static @ClassRule RequiresSolrServer requiresRunningServer = RequiresSolrServer.onLocalhost(); + public static @ClassRule RequiresSolrServer requiresRunningServer = RequiresSolrServer.onLocalhost().withCollection("techproducts"); @Configuration - static class Config extends SolrTestConfiguration { + static class Config { - @Override + @PostConstruct protected void doInitTestData(CrudRepository repository) { Product playstation = Product.builder().id("id-1").name("Playstation") @@ -82,7 +84,7 @@ public class AdvancedSolrRepositoryTests { @Test public void annotationBasedHighlighting() { - HighlightPage products = repository.findByDescriptionStartingWith("play", new PageRequest(0, 10)); + HighlightPage products = repository.findByDescriptionStartingWith("play", PageRequest.of(0, 10)); products.getHighlighted().forEach(entry -> entry.getHighlights().forEach(highligh -> System.out .println(entry.getEntity().getId() + " | " + highligh.getField() + ":\t" + highligh.getSnipplets()))); diff --git a/solr/example/src/test/java/example/springdata/solr/BasicSolrRepositoryTests.java b/solr/example/src/test/java/example/springdata/solr/BasicSolrRepositoryTests.java index 1a1ac500..e1d50927 100644 --- a/solr/example/src/test/java/example/springdata/solr/BasicSolrRepositoryTests.java +++ b/solr/example/src/test/java/example/springdata/solr/BasicSolrRepositoryTests.java @@ -32,7 +32,7 @@ import org.springframework.test.context.junit4.SpringRunner; @SpringBootTest(classes = SolrTestConfiguration.class) public class BasicSolrRepositoryTests { - public static @ClassRule RequiresSolrServer requiresRunningServer = RequiresSolrServer.onLocalhost(); + public static @ClassRule RequiresSolrServer requiresRunningServer = RequiresSolrServer.onLocalhost().withCollection("techproducts"); @Autowired ProductRepository repository; diff --git a/solr/managed-schema/src/test/java/example/springdata/solr/SolrRepositoryTests.java b/solr/managed-schema/src/test/java/example/springdata/solr/SolrRepositoryTests.java index 270ae360..d5bc5ff3 100644 --- a/solr/managed-schema/src/test/java/example/springdata/solr/SolrRepositoryTests.java +++ b/solr/managed-schema/src/test/java/example/springdata/solr/SolrRepositoryTests.java @@ -33,7 +33,7 @@ import org.springframework.test.context.junit4.SpringRunner; @SpringBootTest public class SolrRepositoryTests { - public static @ClassRule RequiresSolrServer requiresRunningServer = RequiresSolrServer.onLocalhost(); + public static @ClassRule RequiresSolrServer requiresRunningServer = RequiresSolrServer.onLocalhost().withCollection("gettingstarted"); @Autowired ProductRepository repo; diff --git a/solr/util/src/main/java/example/springdata/solr/test/util/RequiresSolrServer.java b/solr/util/src/main/java/example/springdata/solr/test/util/RequiresSolrServer.java index 8f5185fa..43812dc9 100644 --- a/solr/util/src/main/java/example/springdata/solr/test/util/RequiresSolrServer.java +++ b/solr/util/src/main/java/example/springdata/solr/test/util/RequiresSolrServer.java @@ -27,6 +27,8 @@ import org.junit.AssumptionViolatedException; import org.junit.rules.TestRule; import org.junit.runner.Description; import org.junit.runners.model.Statement; +import org.springframework.lang.Nullable; +import org.springframework.util.StringUtils; /** * {@link TestRule} implementation using {@link CloseableHttpClient} to check if Solr is running by sending @@ -39,15 +41,26 @@ public class RequiresSolrServer implements TestRule { private static final String PING_PATH = "/admin/info/system"; private final String baseUrl; + private final @Nullable String collection; private RequiresSolrServer(String baseUrl) { + this(baseUrl, null); + } + + private RequiresSolrServer(String baseUrl, @Nullable String collection) { + this.baseUrl = baseUrl; + this.collection = collection; } public static RequiresSolrServer onLocalhost() { return new RequiresSolrServer("http://localhost:8983/solr"); } + public RequiresSolrServer withCollection(String collection) { + return new RequiresSolrServer(baseUrl, collection); + } + @Override public Statement apply(Statement base, Description description) { return new Statement() { @@ -64,7 +77,10 @@ public class RequiresSolrServer implements TestRule { private void checkServerRunning() { try (CloseableHttpClient client = HttpClientBuilder.create().build()) { - CloseableHttpResponse response = client.execute(new HttpGet(baseUrl + PING_PATH)); + + String url = StringUtils.hasText(collection) ? baseUrl + "/" + collection + "/select?q=*:*" : baseUrl + PING_PATH; + + CloseableHttpResponse response = client.execute(new HttpGet(url)); if (response != null && response.getStatusLine() != null) { Assume.assumeThat(response.getStatusLine().getStatusCode(), Is.is(200)); }