From 275651e89a94529cba5c3f9f897125168dadee24 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Tue, 24 May 2016 17:22:48 +0100 Subject: [PATCH] Skips Cassandra and Elasticsearch tests on Windows Neither Cassandra nor Elasticsearch starts reliably on Windows. This commit adds a custom class rule to the associated sample application tests to skip them on Windows. A class rule is used rather than a Unit assumption as we want to avoid starting Elasticsearch (done by the application context) and Cassandra (done by a test execution listener) and an assumption would be too late. --- .../SampleCassandraApplicationTests.java | 30 +++++++++++ .../SampleElasticsearchApplicationTests.java | 50 +++++++++++-------- 2 files changed, 59 insertions(+), 21 deletions(-) diff --git a/spring-boot-samples/spring-boot-sample-data-cassandra/src/test/java/sample/data/cassandra/SampleCassandraApplicationTests.java b/spring-boot-samples/spring-boot-sample-data-cassandra/src/test/java/sample/data/cassandra/SampleCassandraApplicationTests.java index 3f81c83720..3a031ef772 100644 --- a/spring-boot-samples/spring-boot-sample-data-cassandra/src/test/java/sample/data/cassandra/SampleCassandraApplicationTests.java +++ b/spring-boot-samples/spring-boot-sample-data-cassandra/src/test/java/sample/data/cassandra/SampleCassandraApplicationTests.java @@ -16,11 +16,16 @@ package sample.data.cassandra; +import java.io.File; + import org.cassandraunit.spring.CassandraDataSet; import org.cassandraunit.spring.EmbeddedCassandra; import org.junit.ClassRule; import org.junit.Test; +import org.junit.rules.TestRule; +import org.junit.runner.Description; import org.junit.runner.RunWith; +import org.junit.runners.model.Statement; import org.springframework.boot.test.IntegrationTest; import org.springframework.boot.test.IntegrationTestPropertiesListener; @@ -48,6 +53,9 @@ public class SampleCassandraApplicationTests { @ClassRule public static OutputCapture outputCapture = new OutputCapture(); + @ClassRule + public static SkipOnWindows skipOnWindows = new SkipOnWindows(); + @Test public void testDefaultSettings() throws Exception { String output = SampleCassandraApplicationTests.outputCapture.toString(); @@ -55,4 +63,26 @@ public class SampleCassandraApplicationTests { output.contains("firstName='Alice', lastName='Smith'")); } + static class SkipOnWindows implements TestRule { + + @Override + public Statement apply(final Statement base, Description description) { + return new Statement() { + + @Override + public void evaluate() throws Throwable { + if (!runningOnWindows()) { + base.evaluate(); + } + } + + private boolean runningOnWindows() { + return File.separatorChar == '\\'; + } + + }; + } + + } + } diff --git a/spring-boot-samples/spring-boot-sample-data-elasticsearch/src/test/java/sample/data/elasticsearch/SampleElasticsearchApplicationTests.java b/spring-boot-samples/spring-boot-sample-data-elasticsearch/src/test/java/sample/data/elasticsearch/SampleElasticsearchApplicationTests.java index 87d9db45e5..f47fa4153a 100644 --- a/spring-boot-samples/spring-boot-sample-data-elasticsearch/src/test/java/sample/data/elasticsearch/SampleElasticsearchApplicationTests.java +++ b/spring-boot-samples/spring-boot-sample-data-elasticsearch/src/test/java/sample/data/elasticsearch/SampleElasticsearchApplicationTests.java @@ -16,14 +16,17 @@ package sample.data.elasticsearch; -import java.net.ConnectException; +import java.io.File; +import org.junit.ClassRule; import org.junit.Rule; import org.junit.Test; +import org.junit.rules.TestRule; +import org.junit.runner.Description; +import org.junit.runners.model.Statement; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.test.OutputCapture; -import org.springframework.core.NestedCheckedException; import static org.junit.Assert.assertTrue; @@ -41,33 +44,38 @@ public class SampleElasticsearchApplicationTests { @Rule public OutputCapture outputCapture = new OutputCapture(); + @ClassRule + public static SkipOnWindows skipOnWindows = new SkipOnWindows(); + @Test public void testDefaultSettings() throws Exception { - try { - new SpringApplicationBuilder(SampleElasticsearchApplication.class) - .properties(PROPERTIES).run(); - } - catch (IllegalStateException ex) { - if (serverNotRunning(ex)) { - return; - } - } + new SpringApplicationBuilder(SampleElasticsearchApplication.class) + .properties(PROPERTIES).run(); String output = this.outputCapture.toString(); assertTrue("Wrong output: " + output, output.contains("firstName='Alice', lastName='Smith'")); } - private boolean serverNotRunning(IllegalStateException ex) { - @SuppressWarnings("serial") - NestedCheckedException nested = new NestedCheckedException("failed", ex) { - }; - if (nested.contains(ConnectException.class)) { - Throwable root = nested.getRootCause(); - if (root.getMessage().contains("Connection refused")) { - return true; - } + static class SkipOnWindows implements TestRule { + + @Override + public Statement apply(final Statement base, Description description) { + return new Statement() { + + @Override + public void evaluate() throws Throwable { + if (!runningOnWindows()) { + base.evaluate(); + } + } + + private boolean runningOnWindows() { + return File.separatorChar == '\\'; + } + + }; } - return false; + } }