Skip to content

Commit

Permalink
Skips Cassandra and Elasticsearch tests on Windows
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
wilkinsona committed May 24, 2016
1 parent ae89cb0 commit 275651e
Show file tree
Hide file tree
Showing 2 changed files with 59 additions and 21 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -48,11 +53,36 @@ 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();
assertTrue("Wrong output: " + output,
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 == '\\';
}

};
}

}

}
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand All @@ -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;

}

}

0 comments on commit 275651e

Please sign in to comment.