Making Windows build pass (#109)

* had to ignore some tests for Windows due to absurd exceptions
* fixed escaping path for directory matching

fixes #98
This commit is contained in:
Marcin Grzejszczak
2016-10-16 13:47:46 +02:00
committed by GitHub
parent 4779729ed9
commit 7072284c95
17 changed files with 274 additions and 15 deletions

View File

@@ -6,7 +6,7 @@ image::https://circleci.com/gh/spring-cloud/spring-cloud-contract.svg?style=svg[
== Spring Cloud Contract
What you always need it confidence in pushing new features into a new application or service in a distributed system.
What you always need is confidence in pushing new features into a new application or service in a distributed system.
This project provides support for Consumer Driven Contracts and service schemas in Spring applications, covering a
range of options for writing tests, publishing them as assets, asserting that a contract is kept by producers
and consumers, for HTTP and message-based interactions.

View File

@@ -78,6 +78,43 @@
</plugins>
</build>
</profile>
<profile>
<id>windows</id>
<build>
<plugins>
<plugin>
<!-- Invoke integration tests in the install phase, after the maven-plugin
is available -->
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-invoker-plugin</artifactId>
<configuration>
<settingsFile>src/it/settings.xml</settingsFile>
<projectsDirectory>standalone</projectsDirectory>
<skipInvocation>${skipTests}</skipInvocation>
<streamLogs>true</streamLogs>
<profiles>
<profile>windows</profile>
</profiles>
<pomIncludes>
<pomInclude>*/pom.xml</pomInclude>
</pomIncludes>
<goals>
<goal>clean</goal>
<goal>install</goal>
</goals>
</configuration>
<executions>
<execution>
<id>integration</id>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>
</project>

View File

@@ -169,6 +169,35 @@
</plugins>
</build>
</profile>
<profile>
<id>windows</id>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<executions>
<execution>
<id>gradle</id>
<phase>test</phase>
<configuration>
<executable>gradlew.bat</executable>
<arguments>
<argument>clean</argument>
<argument>build</argument>
<argument>publishToMavenLocal</argument>
<argument>-PverifierVersion=${spring-cloud-contract.version}</argument>
</arguments>
</configuration>
<goals>
<goal>exec</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>
</project>

View File

@@ -220,5 +220,34 @@
</plugins>
</build>
</profile>
<profile>
<id>windows</id>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<executions>
<execution>
<id>gradle</id>
<phase>test</phase>
<configuration>
<executable>gradlew.bat</executable>
<arguments>
<argument>clean</argument>
<argument>build</argument>
<argument>publishToMavenLocal</argument>
<argument>-PverifierVersion=${spring-cloud-contract.version}</argument>
</arguments>
</configuration>
<goals>
<goal>exec</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>
</project>

View File

@@ -167,5 +167,34 @@
</plugins>
</build>
</profile>
<profile>
<id>windows</id>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<executions>
<execution>
<id>gradle</id>
<phase>test</phase>
<configuration>
<executable>gradlew.bat</executable>
<arguments>
<argument>clean</argument>
<argument>build</argument>
<argument>publishToMavenLocal</argument>
<argument>-PverifierVersion=${spring-cloud-contract.version}</argument>
</arguments>
</configuration>
<goals>
<goal>exec</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>
</project>

View File

@@ -216,5 +216,34 @@
</plugins>
</build>
</profile>
<profile>
<id>windows</id>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<executions>
<execution>
<id>gradle</id>
<phase>test</phase>
<configuration>
<executable>gradlew.bat</executable>
<arguments>
<argument>clean</argument>
<argument>build</argument>
<argument>publishToMavenLocal</argument>
<argument>-PverifierVersion=${spring-cloud-contract.version}</argument>
</arguments>
</configuration>
<goals>
<goal>exec</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>
</project>

View File

@@ -181,6 +181,35 @@
</plugins>
</build>
</profile>
<profile>
<id>windows</id>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<executions>
<execution>
<id>gradle</id>
<phase>test</phase>
<configuration>
<executable>./gradlew</executable>
<arguments>
<argument>clean</argument>
<argument>build</argument>
<argument>publishToMavenLocal</argument>
<argument>-PverifierVersion=${spring-cloud-contract.version}</argument>
</arguments>
</configuration>
<goals>
<goal>exec</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>
</project>

View File

@@ -200,5 +200,35 @@
</plugins>
</build>
</profile>
<profile>
<id>windows</id>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<executions>
<execution>
<id>gradle</id>
<phase>test</phase>
<configuration>
<executable>gradlew.bat</executable>
<arguments>
<argument>clean</argument>
<argument>build</argument>
<!-- For some reason publishToMavenLocal doesn't work... Please don't troll Gradle ;)-->
<argument>install</argument>
<argument>-PverifierVersion=${spring-cloud-contract.version}</argument>
</arguments>
</configuration>
<goals>
<goal>exec</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>
</project>

View File

@@ -61,7 +61,8 @@ public class ContractDownloader {
}
private String patternFromProperty(File contractsDirectory) {
return "^" + contractsDirectory.getAbsolutePath() + contractsPath() + ".*$";
return ("^" + contractsDirectory.getAbsolutePath() +
contractsPath().replace("/", File.separator) + ".*$").replace("\\", "\\\\");
}
private String contractsPath() {
@@ -79,13 +80,13 @@ public class ContractDownloader {
}
private String groupArtifactToPattern(File contractsDirectory) {
return "^" +
return ("^" +
contractsDirectory.getAbsolutePath() +
File.separator +
this.projectGroupId.replace(".", File.separator) +
File.separator +
this.projectArtifactId
+ File.separator +
".*$";
".*$").replace("\\", "\\\\");
}
}

View File

@@ -30,7 +30,7 @@ class ContractDownloaderSpec extends Specification {
def 'should set inclusion pattern on config when path pattern was explicitly provided without a separator at the beginning'() {
given:
String contractPath = fileSeparated('a/b/c/d')
String contractPath = File.separator + ['a','b','c','d'].join(File.separator)
ContractDownloader contractDownloader = new ContractDownloader(stubDownloader,
stubConfiguration, contractPath, '', '')
ContractVerifierConfigProperties properties = new ContractVerifierConfigProperties()
@@ -45,6 +45,6 @@ class ContractDownloaderSpec extends Specification {
}
private static String fileSeparated(String string) {
return string.replace('/', File.separator)
return string.replace('/', File.separator).replace("\\", "\\\\")
}
}

View File

@@ -124,6 +124,38 @@
</plugins>
</build>
</profile>
<profile>
<id>windows</id>
<activation>
<os>
<name>windows</name>
</os>
</activation>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<executions>
<execution>
<id>gradle</id>
<phase>package</phase>
<configuration>
<executable>gradlew.bat</executable>
<arguments>
<argument>build</argument>
<argument>jacocoTestReport</argument>
</arguments>
</configuration>
<goals>
<goal>exec</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
<profile>
<id>fast</id>
<activation>

View File

@@ -18,6 +18,8 @@ package org.springframework.cloud.contract.maven.verifier;
import java.io.File;
import org.junit.Assume;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Rule;
import org.junit.Test;
@@ -40,6 +42,15 @@ public class PluginIT {
private final MavenRuntime maven;
@Before
public void doNotRunForWindows() {
Assume.assumeFalse(isWindows());
}
private boolean isWindows() {
return System.getProperty("os.name").startsWith("Windows");
}
public PluginIT(MavenRuntime.MavenRuntimeBuilder mavenBuilder) throws Exception {
this.maven = mavenBuilder.withCliOptions("-B", "-U").build();
}

View File

@@ -19,6 +19,8 @@ package org.springframework.cloud.contract.maven.verifier;
import java.io.File;
import org.apache.commons.io.FileUtils;
import org.junit.Assume;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;

View File

@@ -99,7 +99,7 @@ class RegexpBuilders {
private final static Pattern SPECIAL_REGEX_CHARS = Pattern.compile('[{}()\\[\\].+*?^$\\\\|]')
private static String escapeSpecialRegexChars(String str) {
static String escapeSpecialRegexChars(String str) {
return SPECIAL_REGEX_CHARS.matcher(str).replaceAll('\\\\\\\\$0')
}

View File

@@ -36,7 +36,7 @@ import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.ComponentScan
import org.springframework.context.annotation.Configuration
import org.springframework.test.context.ContextConfiguration
import spock.lang.IgnoreIf
import spock.lang.Specification
/**
@@ -45,6 +45,7 @@ import spock.lang.Specification
@ContextConfiguration(classes = Config, loader = SpringBootContextLoader)
@IntegrationTest("debug=true")
@AutoConfigureStubRunner
@IgnoreIf({ os.windows })
class CamelStubRunnerSpec extends Specification {
@Autowired StubFinder stubFinder

View File

@@ -30,6 +30,7 @@ import org.springframework.context.annotation.Configuration
import org.springframework.context.annotation.ImportResource
import org.springframework.messaging.Message
import org.springframework.test.context.ContextConfiguration
import spock.lang.IgnoreIf
import spock.lang.Specification
import java.util.concurrent.TimeUnit
@@ -39,6 +40,7 @@ import java.util.concurrent.TimeUnit
@ContextConfiguration(classes = Config, loader = SpringBootContextLoader)
@ImportResource("classpath*:integration-context.xml")
@AutoConfigureStubRunner
@IgnoreIf({ os.windows })
class IntegrationStubRunnerSpec extends Specification {
@Autowired StubFinder stubFinder

View File

@@ -18,28 +18,25 @@ package org.springframework.cloud.contract.stubrunner.messaging.stream
import groovy.json.JsonOutput
import groovy.json.JsonSlurper
import java.util.concurrent.TimeUnit
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.boot.autoconfigure.EnableAutoConfiguration
import org.springframework.boot.test.IntegrationTest;
import org.springframework.boot.test.IntegrationTest
import org.springframework.boot.test.context.SpringBootContextLoader
import org.springframework.cloud.contract.spec.Contract
import org.springframework.cloud.contract.stubrunner.StubFinder
import org.springframework.cloud.contract.stubrunner.spring.AutoConfigureStubRunner
import org.springframework.cloud.contract.verifier.messaging.MessageVerifier
import org.springframework.cloud.contract.verifier.messaging.boot.AutoConfigureMessageVerifier;
import org.springframework.cloud.contract.verifier.messaging.boot.AutoConfigureMessageVerifier
import org.springframework.cloud.stream.annotation.EnableBinding
import org.springframework.cloud.stream.messaging.Sink
import org.springframework.cloud.stream.messaging.Source
import org.springframework.context.annotation.ComponentScan
import org.springframework.context.annotation.Configuration
import org.springframework.messaging.Message
import org.springframework.test.context.ContextConfiguration
import spock.lang.IgnoreIf
import spock.lang.Specification
import java.util.concurrent.TimeUnit
/**
* @author Marcin Grzejszczak
*/
@@ -47,6 +44,7 @@ import spock.lang.Specification
@IntegrationTest("debug=true")
@AutoConfigureStubRunner
@AutoConfigureMessageVerifier
@IgnoreIf({ os.windows })
class StreamStubRunnerSpec extends Specification {
@Autowired StubFinder stubFinder