From d2830f5265d520e6b8094f6932ab0c785d640435 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mariusz=20Smyku=C5=82a?= Date: Tue, 3 May 2016 20:11:21 +0200 Subject: [PATCH] Fixes to accurest run command, changed default contracts directory and other small changes (#24) --- pom.xml | 26 ++--- .../accurest/maven/ConvertMojo.groovy | 92 ------------------ .../accurest/maven/CopyContracts.groovy | 47 +++++++++ .../accurest/maven/GenerateTestsMojo.groovy | 2 +- .../io/codearte/accurest/maven/RunMojo.groovy | 11 +-- .../ConvertMojo.java | 95 +++++++++++++++++++ .../{ => resources}/accurest/Messaging.groovy | 0 .../{ => resources}/accurest/Sample.groovy | 0 .../projects/complex-configuration/pom.xml | 1 + .../accurest/greetings_ok.groovy | 0 .../greetings_with_default_value.groovy | 0 .../accurest/greetings_ok.groovy | 0 .../greetings_with_default_value.groovy | 0 .../accurest/greetings_ok.groovy | 0 .../greetings_with_default_value.groovy | 0 15 files changed, 164 insertions(+), 110 deletions(-) delete mode 100644 src/main/groovy/io/codearte/accurest/maven/ConvertMojo.groovy create mode 100644 src/main/groovy/io/codearte/accurest/maven/CopyContracts.groovy create mode 100644 src/main/java/io.codearte.accurest.maven/ConvertMojo.java rename src/test/projects/basic/src/test/{ => resources}/accurest/Messaging.groovy (100%) rename src/test/projects/basic/src/test/{ => resources}/accurest/Sample.groovy (100%) rename src/test/projects/plugin-extension/src/test/{ => resources}/accurest/greetings_ok.groovy (100%) rename src/test/projects/plugin-extension/src/test/{ => resources}/accurest/greetings_with_default_value.groovy (100%) rename src/test/projects/spring-boot-groovy/src/test/{ => resources}/accurest/greetings_ok.groovy (100%) rename src/test/projects/spring-boot-groovy/src/test/{ => resources}/accurest/greetings_with_default_value.groovy (100%) rename src/test/projects/spring-boot-java/src/test/{ => resources}/accurest/greetings_ok.groovy (100%) rename src/test/projects/spring-boot-java/src/test/{ => resources}/accurest/greetings_with_default_value.groovy (100%) diff --git a/pom.xml b/pom.xml index 84fc4230ac..81dc775bd0 100644 --- a/pom.xml +++ b/pom.xml @@ -30,14 +30,14 @@ - 3.2.5 - 3.4 + 3.2.5 + 3.4 UTF-8 UTF-8 - 1.1.0-M4 - 1.1.0 + 1.1.0-M4 + 1.1.0 1.7 1.7 @@ -95,7 +95,10 @@ + addSources + generateStubs compile + removeStubs @@ -115,7 +118,7 @@ maven-plugin-plugin - ${mavenPluginPluginVersion} + ${maven.plugin.plugin.version} true @@ -285,7 +288,7 @@ org.eclipse.aether aether-api - ${aetherVersion} + ${aether.version} provided @@ -321,14 +324,14 @@ org.apache.maven maven-core - ${mavenVersion} + ${maven.version} provided org.apache.maven maven-plugin-api - ${mavenVersion} + ${maven.version} provided @@ -348,7 +351,7 @@ org.apache.maven.plugin-tools maven-plugin-annotations - ${mavenPluginPluginVersion} + ${maven.plugin.plugin.version} provided @@ -379,7 +382,7 @@ org.apache.maven maven-compat - ${mavenVersion} + ${maven.version} test @@ -392,6 +395,7 @@ org.assertj assertj-core 2.4.0 + test @@ -400,7 +404,7 @@ maven-plugin-plugin - ${mavenPluginPluginVersion} + ${maven.plugin.plugin.version} org.apache.maven.plugins diff --git a/src/main/groovy/io/codearte/accurest/maven/ConvertMojo.groovy b/src/main/groovy/io/codearte/accurest/maven/ConvertMojo.groovy deleted file mode 100644 index 0b245842af..0000000000 --- a/src/main/groovy/io/codearte/accurest/maven/ConvertMojo.groovy +++ /dev/null @@ -1,92 +0,0 @@ -package io.codearte.accurest.maven - -import groovy.transform.CompileStatic -import io.codearte.accurest.config.AccurestConfigProperties -import io.codearte.accurest.wiremock.DslToWireMockClientConverter -import io.codearte.accurest.wiremock.RecursiveFilesConverter -import org.apache.maven.execution.MavenSession -import org.apache.maven.model.Resource -import org.apache.maven.plugin.AbstractMojo -import org.apache.maven.plugin.MojoExecutionException -import org.apache.maven.plugin.MojoFailureException -import org.apache.maven.plugins.annotations.Component -import org.apache.maven.plugins.annotations.LifecyclePhase -import org.apache.maven.plugins.annotations.Mojo -import org.apache.maven.plugins.annotations.Parameter -import org.apache.maven.project.MavenProject -import org.apache.maven.shared.filtering.MavenFilteringException -import org.apache.maven.shared.filtering.MavenResourcesExecution -import org.apache.maven.shared.filtering.MavenResourcesFiltering - -@Mojo(name = 'convert', requiresProject = false, defaultPhase = LifecyclePhase.PROCESS_TEST_RESOURCES) -@CompileStatic -class ConvertMojo extends AbstractMojo { - - @Parameter(defaultValue = '${basedir}/src/test/accurest') - private File contractsDirectory - - @Parameter(defaultValue = '${project.build.directory}/accurest') - private File outputDirectory - - @Parameter(property = 'contractsDirectory', defaultValue = '${basedir}') - private File source - - @Parameter(property = 'stubsDirectory', defaultValue = '${basedir}') - private File destination - - @Parameter(property = 'accurest.skip', defaultValue = 'false') - private boolean skip - - @Parameter(defaultValue = '${session}', readonly = true) - private MavenSession mavenSession - - @Parameter(defaultValue = '${project}', readonly = true) - private MavenProject project - - @Component(role = MavenResourcesFiltering.class, hint = "default") - private MavenResourcesFiltering mavenResourcesFiltering; - - void execute() throws MojoExecutionException, MojoFailureException { - - if (skip) { - log.info("Skipping accurest execution: accurest.skip=${skip}") - return - } - - copyContracts() - - AccurestConfigProperties config = new AccurestConfigProperties() - config.contractsDslDir = insideProject ? contractsDirectory : source - config.stubsOutputDir = insideProject ? new File(outputDirectory, 'mappings') : destination - - log.info('Converting from accurest contracts written in GroovyDSL to WireMock stubs mappings') - log.info(" Accurest contracts directory: ${config.contractsDslDir}") - log.info("WireMock stubs mappings directory: ${config.stubsOutputDir}") - - RecursiveFilesConverter converter = new RecursiveFilesConverter(new DslToWireMockClientConverter(), config) - converter.processFiles() - } - - private void copyContracts() { - log.info("Copying accurest contracts") - Resource testResource = new Resource(directory: contractsDirectory.absolutePath) - MavenResourcesExecution mavenResourcesExecution = - new MavenResourcesExecution([testResource], - new File(outputDirectory, 'accurest'), project, 'UTF-8', [], [], mavenSession); - mavenResourcesExecution.injectProjectBuildFilters = false - mavenResourcesExecution.overwrite = true - mavenResourcesExecution.includeEmptyDirs = false - mavenResourcesExecution.filterFilenames = false - try { - mavenResourcesFiltering.filterResources(mavenResourcesExecution); - } catch (MavenFilteringException e) { - throw new MojoExecutionException(e.getMessage(), e); - } - } - - private boolean isInsideProject() { - return mavenSession.request.projectPresent - } - - -} diff --git a/src/main/groovy/io/codearte/accurest/maven/CopyContracts.groovy b/src/main/groovy/io/codearte/accurest/maven/CopyContracts.groovy new file mode 100644 index 0000000000..4a5894b65e --- /dev/null +++ b/src/main/groovy/io/codearte/accurest/maven/CopyContracts.groovy @@ -0,0 +1,47 @@ +package io.codearte.accurest.maven + +import groovy.transform.CompileStatic +import groovy.util.logging.Slf4j +import org.apache.maven.execution.MavenSession +import org.apache.maven.model.Resource +import org.apache.maven.plugin.MojoExecutionException +import org.apache.maven.project.MavenProject +import org.apache.maven.shared.filtering.MavenFilteringException +import org.apache.maven.shared.filtering.MavenResourcesExecution +import org.apache.maven.shared.filtering.MavenResourcesFiltering + +@CompileStatic +@Slf4j +class CopyContracts { + + private final MavenProject project + private final MavenSession mavenSession + private final MavenResourcesFiltering mavenResourcesFiltering + + CopyContracts(MavenProject project, MavenSession mavenSession, MavenResourcesFiltering mavenResourcesFiltering) { + this.project = project + this.mavenSession = mavenSession + this.mavenResourcesFiltering = mavenResourcesFiltering + } + + void copy(File contractsDirectory, File outputDirectory) { + log.info('Copying accurest contracts') + Resource testResource = new Resource(directory: contractsDirectory.absolutePath) + MavenResourcesExecution mavenResourcesExecution = new MavenResourcesExecution( + resources: [testResource], + outputDirectory: new File(outputDirectory, 'accurest'), + mavenProject: project, + encoding: 'UTF-8', + mavenSession: mavenSession); + mavenResourcesExecution.injectProjectBuildFilters = false + mavenResourcesExecution.overwrite = true + mavenResourcesExecution.includeEmptyDirs = false + mavenResourcesExecution.filterFilenames = false + try { + mavenResourcesFiltering.filterResources(mavenResourcesExecution); + } catch (MavenFilteringException e) { + throw new MojoExecutionException(e.getMessage(), e); + } + } + +} diff --git a/src/main/groovy/io/codearte/accurest/maven/GenerateTestsMojo.groovy b/src/main/groovy/io/codearte/accurest/maven/GenerateTestsMojo.groovy index c68bdc32c2..85557b228c 100644 --- a/src/main/groovy/io/codearte/accurest/maven/GenerateTestsMojo.groovy +++ b/src/main/groovy/io/codearte/accurest/maven/GenerateTestsMojo.groovy @@ -21,7 +21,7 @@ import static java.lang.String.format @CompileStatic class GenerateTestsMojo extends AbstractMojo { - @Parameter(property = 'accurest.contractsDirectory', defaultValue = '${project.basedir}/src/test/accurest') + @Parameter(property = 'accurest.contractsDirectory', defaultValue = '${project.basedir}/src/test/resources/accurest') private File contractsDirectory @Parameter(defaultValue = '${project.build.directory}/generated-test-sources/accurest') diff --git a/src/main/groovy/io/codearte/accurest/maven/RunMojo.groovy b/src/main/groovy/io/codearte/accurest/maven/RunMojo.groovy index 74c6b23ccd..b644319285 100644 --- a/src/main/groovy/io/codearte/accurest/maven/RunMojo.groovy +++ b/src/main/groovy/io/codearte/accurest/maven/RunMojo.groovy @@ -67,7 +67,7 @@ class RunMojo extends AbstractMojo { } BatchStubRunner batchStubRunner if (!stubs) { - StubRunnerOptions options = new StubRunnerOptions(httpPort, httpPort + 1, "", false, stubsClassifier) + StubRunnerOptions options = new StubRunnerOptions(httpPort, httpPort, "", false, stubsClassifier) StubRunner stubRunner = localStubRunner.run(resolveStubsDirectory().absolutePath, options) batchStubRunner = new BatchStubRunner(Arrays.asList(stubRunner)) } else { @@ -77,11 +77,10 @@ class RunMojo extends AbstractMojo { batchStubRunner = remoteStubRunner.run(options, repoSession) } - if (!insideProject) { - pressAnyKeyToContinue() - if (batchStubRunner) { - batchStubRunner.close() - } + pressAnyKeyToContinue() + + if (batchStubRunner) { + batchStubRunner.close() } } diff --git a/src/main/java/io.codearte.accurest.maven/ConvertMojo.java b/src/main/java/io.codearte.accurest.maven/ConvertMojo.java new file mode 100644 index 0000000000..c1646cc12a --- /dev/null +++ b/src/main/java/io.codearte.accurest.maven/ConvertMojo.java @@ -0,0 +1,95 @@ +package io.codearte.accurest.maven; + +import groovy.transform.CompileStatic; +import io.codearte.accurest.config.AccurestConfigProperties; +import io.codearte.accurest.wiremock.DslToWireMockClientConverter; +import io.codearte.accurest.wiremock.RecursiveFilesConverter; +import org.apache.maven.execution.MavenSession; +import org.apache.maven.model.Resource; +import org.apache.maven.plugin.AbstractMojo; +import org.apache.maven.plugin.MojoExecutionException; +import org.apache.maven.plugin.MojoFailureException; +import org.apache.maven.plugins.annotations.*; +import org.apache.maven.project.MavenProject; +import org.apache.maven.shared.filtering.MavenFilteringException; +import org.apache.maven.shared.filtering.MavenResourcesExecution; +import org.apache.maven.shared.filtering.MavenResourcesFiltering; + +import java.io.File; +import java.util.ArrayList; +import java.util.Arrays; + +/** + * + * Convert Accurest contracts into WireMock stubs mappings. + * + * This goal allow to generate `stubs-jar` or execute `accurest:run` with generated WireMock mappings. + * + */ +@Mojo(name = "convert", requiresProject = false, defaultPhase = LifecyclePhase.PROCESS_TEST_RESOURCES) +@CompileStatic +public class ConvertMojo extends AbstractMojo { + + /** + * Directory containing Accurest contracts written using the GroovyDSL + */ + @Parameter(defaultValue = "${basedir}/src/test/resources/accurest") + private File contractsDirectory; + + /** + * Directory where the generated WireMock stubs from Groovy DSL should be placed. + * You can then mention them in your packaging task to create jar with stubs + */ + @Parameter(defaultValue = "${project.build.directory}/accurest") + private File outputDirectory; + + /** + * Directory containing contracts written using the GroovyDSL + * + * This parameter is only used when goal is executed outside of maven project. + */ + @Parameter(property = "contractsDirectory", defaultValue = "${basedir}") + private File source; + + @Parameter(property = "stubsDirectory", defaultValue = "${basedir}") + private File destination; + + @Parameter(property = "accurest.skip", defaultValue = "false") + private boolean skip; + + @Parameter(defaultValue = "${session}", readonly = true) + private MavenSession mavenSession; + + @Parameter(defaultValue = "${project}", readonly = true) + private MavenProject project; + + @Component(role = MavenResourcesFiltering.class, hint = "default") + private MavenResourcesFiltering mavenResourcesFiltering; + + public void execute() throws MojoExecutionException, MojoFailureException { + + if (skip) { + getLog().info(String.format("Skipping accurest execution: accurest.skip=%s", skip)); + return; + } + + new CopyContracts(project, mavenSession, mavenResourcesFiltering).copy(contractsDirectory, outputDirectory); + + final AccurestConfigProperties config = new AccurestConfigProperties(); + config.setContractsDslDir(isInsideProject() ? contractsDirectory : source); + config.setStubsOutputDir(isInsideProject() ? new File(outputDirectory, "mappings") : destination); + + getLog().info("Converting from accurest contracts written in GroovyDSL to WireMock stubs mappings"); + getLog().info(String.format(" Accurest contracts directory: %s", config.getContractsDslDir())); + getLog().info(String.format("WireMock stubs mappings directory: %s", config.getStubsOutputDir())); + + RecursiveFilesConverter converter = new RecursiveFilesConverter(new DslToWireMockClientConverter(), config); + converter.processFiles(); + } + + private boolean isInsideProject() { + return mavenSession.getRequest().isProjectPresent(); + } + + +} diff --git a/src/test/projects/basic/src/test/accurest/Messaging.groovy b/src/test/projects/basic/src/test/resources/accurest/Messaging.groovy similarity index 100% rename from src/test/projects/basic/src/test/accurest/Messaging.groovy rename to src/test/projects/basic/src/test/resources/accurest/Messaging.groovy diff --git a/src/test/projects/basic/src/test/accurest/Sample.groovy b/src/test/projects/basic/src/test/resources/accurest/Sample.groovy similarity index 100% rename from src/test/projects/basic/src/test/accurest/Sample.groovy rename to src/test/projects/basic/src/test/resources/accurest/Sample.groovy diff --git a/src/test/projects/complex-configuration/pom.xml b/src/test/projects/complex-configuration/pom.xml index 32eed3c57e..a96596d6df 100644 --- a/src/test/projects/complex-configuration/pom.xml +++ b/src/test/projects/complex-configuration/pom.xml @@ -81,6 +81,7 @@ generateTests + src/test/accurest com.blogspot.toomuchcoding.frauddetection MOCKMVC JUNIT diff --git a/src/test/projects/plugin-extension/src/test/accurest/greetings_ok.groovy b/src/test/projects/plugin-extension/src/test/resources/accurest/greetings_ok.groovy similarity index 100% rename from src/test/projects/plugin-extension/src/test/accurest/greetings_ok.groovy rename to src/test/projects/plugin-extension/src/test/resources/accurest/greetings_ok.groovy diff --git a/src/test/projects/plugin-extension/src/test/accurest/greetings_with_default_value.groovy b/src/test/projects/plugin-extension/src/test/resources/accurest/greetings_with_default_value.groovy similarity index 100% rename from src/test/projects/plugin-extension/src/test/accurest/greetings_with_default_value.groovy rename to src/test/projects/plugin-extension/src/test/resources/accurest/greetings_with_default_value.groovy diff --git a/src/test/projects/spring-boot-groovy/src/test/accurest/greetings_ok.groovy b/src/test/projects/spring-boot-groovy/src/test/resources/accurest/greetings_ok.groovy similarity index 100% rename from src/test/projects/spring-boot-groovy/src/test/accurest/greetings_ok.groovy rename to src/test/projects/spring-boot-groovy/src/test/resources/accurest/greetings_ok.groovy diff --git a/src/test/projects/spring-boot-groovy/src/test/accurest/greetings_with_default_value.groovy b/src/test/projects/spring-boot-groovy/src/test/resources/accurest/greetings_with_default_value.groovy similarity index 100% rename from src/test/projects/spring-boot-groovy/src/test/accurest/greetings_with_default_value.groovy rename to src/test/projects/spring-boot-groovy/src/test/resources/accurest/greetings_with_default_value.groovy diff --git a/src/test/projects/spring-boot-java/src/test/accurest/greetings_ok.groovy b/src/test/projects/spring-boot-java/src/test/resources/accurest/greetings_ok.groovy similarity index 100% rename from src/test/projects/spring-boot-java/src/test/accurest/greetings_ok.groovy rename to src/test/projects/spring-boot-java/src/test/resources/accurest/greetings_ok.groovy diff --git a/src/test/projects/spring-boot-java/src/test/accurest/greetings_with_default_value.groovy b/src/test/projects/spring-boot-java/src/test/resources/accurest/greetings_with_default_value.groovy similarity index 100% rename from src/test/projects/spring-boot-java/src/test/accurest/greetings_with_default_value.groovy rename to src/test/projects/spring-boot-java/src/test/resources/accurest/greetings_with_default_value.groovy