diff --git a/pom.xml b/pom.xml index 37a8a3c..519418c 100644 --- a/pom.xml +++ b/pom.xml @@ -47,7 +47,7 @@ 3.6.2 ${project.basedir} 5.10.2 - 1.9.0-M14 + 1.9.0-M17 1.6.13 3.12.0 diff --git a/src/main/java/io/gatling/mojo/AbstractEnterprisePluginMojo.java b/src/main/java/io/gatling/mojo/AbstractEnterprisePluginMojo.java index ea9b166..ad979fe 100644 --- a/src/main/java/io/gatling/mojo/AbstractEnterprisePluginMojo.java +++ b/src/main/java/io/gatling/mojo/AbstractEnterprisePluginMojo.java @@ -17,13 +17,13 @@ package io.gatling.mojo; import io.gatling.plugin.*; -import io.gatling.plugin.client.EnterpriseClient; -import io.gatling.plugin.client.HttpEnterpriseClient; +import io.gatling.plugin.exceptions.EnterprisePluginException; import io.gatling.plugin.exceptions.UnsupportedClientException; import io.gatling.plugin.io.JavaPluginScanner; import io.gatling.plugin.io.PluginIO; import io.gatling.plugin.io.PluginLogger; import io.gatling.plugin.io.PluginScanner; +import io.gatling.plugin.model.BuildTool; import java.net.URL; import java.util.Scanner; import org.apache.maven.plugin.MojoFailureException; @@ -81,16 +81,8 @@ public PluginScanner getScanner() { } }; - protected BatchEnterprisePlugin initBatchEnterprisePlugin() throws MojoFailureException { - return new BatchEnterprisePluginClient(initEnterpriseClient(), pluginLogger); - } - - protected InteractiveEnterprisePlugin initInteractiveEnterprisePlugin() + private PluginConfiguration pluginConfiguration(Boolean forceBatchMode) throws MojoFailureException { - return new InteractiveEnterprisePluginClient(initEnterpriseClient(), pluginIO); - } - - private EnterpriseClient initEnterpriseClient() throws MojoFailureException { if (apiToken == null) { final String msg = "Missing API token\n" @@ -103,21 +95,33 @@ private EnterpriseClient initEnterpriseClient() throws MojoFailureException { "MY_API_TOKEN_VALUE"); throw new MojoFailureException(msg); } - final String pluginTitle = getClass().getPackage().getImplementationTitle(); - final String pluginVersion = getClass().getPackage().getImplementationVersion(); - if (pluginTitle == null || pluginVersion == null) { - // Should no happen if the plugin is built and packaged properly - throw new IllegalStateException("Gatling plugin title and version not found"); + return new PluginConfiguration( + enterpriseUrl, + apiToken, + controlPlaneUrl, + BuildTool.MAVEN, + pluginVersion(), + forceBatchMode, + pluginIO); + } + + protected BatchEnterprisePlugin initBatchEnterprisePlugin() throws MojoFailureException { + try { + return EnterprisePluginProvider.getBatchInstance(pluginConfiguration(true)); + } catch (UnsupportedClientException e) { + throw new UnsupportedClientMojoException(e); + } catch (EnterprisePluginException e) { + throw new MojoFailureException(e.getMessage(), e); } + } + protected EnterprisePlugin initEnterprisePlugin(Boolean forceBatchMode) + throws MojoFailureException { try { - return new HttpEnterpriseClient( - enterpriseUrl, apiToken, pluginTitle, pluginVersion, controlPlaneUrl); + return EnterprisePluginProvider.getInstance(pluginConfiguration(forceBatchMode)); } catch (UnsupportedClientException e) { - throw new MojoFailureException( - "Please update the Gatling Maven plugin to the latest version for compatibility with Gatling Enterprise. See https://gatling.io/docs/gatling/reference/current/extensions/maven_plugin/ for more information about this plugin.", - e); - } catch (Exception e) { + throw new UnsupportedClientMojoException(e); + } catch (EnterprisePluginException e) { throw new MojoFailureException(e.getMessage(), e); } } diff --git a/src/main/java/io/gatling/mojo/AbstractGatlingMojo.java b/src/main/java/io/gatling/mojo/AbstractGatlingMojo.java index ade1c70..f25ff68 100644 --- a/src/main/java/io/gatling/mojo/AbstractGatlingMojo.java +++ b/src/main/java/io/gatling/mojo/AbstractGatlingMojo.java @@ -17,6 +17,7 @@ package io.gatling.mojo; import io.gatling.plugin.io.PluginLogger; +import io.gatling.plugin.model.BuildTool; import io.gatling.plugin.util.Fork; import io.gatling.plugin.util.ForkMain; import io.gatling.plugin.util.JavaLocator; @@ -48,18 +49,19 @@ public abstract class AbstractGatlingMojo extends AbstractMojo { /** Maven's repository. */ @Component protected RepositorySystem repository; - /** - * Uses 2 different mechanisms to detect if the plugin is in interactive mode: - * - * - * - * @return if the plugin is in interactive mode - */ - protected boolean interactive() { - return session.getRequest().isInteractiveMode() && !Boolean.parseBoolean(System.getenv("CI")); + protected BuildTool buildTool = BuildTool.MAVEN; + + protected String pluginVersion() { + final String pluginVersion = getClass().getPackage().getImplementationVersion(); + if (pluginVersion == null) { + // Should not happen if the plugin is built and packaged properly + throw new IllegalStateException("Gatling plugin title and version not found"); + } + return pluginVersion; + } + + protected Boolean requireBatchMode() { + return !session.getRequest().isInteractiveMode(); } protected List buildTestClasspath() throws Exception { diff --git a/src/main/java/io/gatling/mojo/CommonLogMessage.java b/src/main/java/io/gatling/mojo/CommonLogMessage.java index d273490..94d4f4b 100644 --- a/src/main/java/io/gatling/mojo/CommonLogMessage.java +++ b/src/main/java/io/gatling/mojo/CommonLogMessage.java @@ -23,7 +23,9 @@ public final class CommonLogMessage { private CommonLogMessage() {} public static String simulationStartSuccess(URL enterpriseUrl, String reportsPath) { - return "Simulation successfully started; reports are available at " + enterpriseUrl + reportsPath; + return "Simulation successfully started; reports are available at " + + enterpriseUrl + + reportsPath; } /** diff --git a/src/main/java/io/gatling/mojo/EnterpriseDeployMojo.java b/src/main/java/io/gatling/mojo/EnterpriseDeployMojo.java index b23a11c..450c071 100644 --- a/src/main/java/io/gatling/mojo/EnterpriseDeployMojo.java +++ b/src/main/java/io/gatling/mojo/EnterpriseDeployMojo.java @@ -19,7 +19,6 @@ import io.gatling.plugin.BatchEnterprisePlugin; import io.gatling.plugin.deployment.DeploymentConfiguration; import io.gatling.plugin.exceptions.EnterprisePluginException; -import io.gatling.plugin.model.BuildTool; import io.gatling.plugin.model.DeploymentInfo; import java.io.File; import org.apache.maven.plugin.MojoFailureException; @@ -45,9 +44,7 @@ public void execute() throws MojoFailureException { deploymentFile, packageFile, mavenProject.getArtifactId(), - isPrivateRepositoryEnabled, - BuildTool.MAVEN, - getClass().getPackage().getImplementationVersion()); + isPrivateRepositoryEnabled); getPluginContext().put(CONTEXT_ENTERPRISE_DEPLOY_INFO, deploymentInfo); } catch (EnterprisePluginException e) { diff --git a/src/main/java/io/gatling/mojo/EnterpriseStartMojo.java b/src/main/java/io/gatling/mojo/EnterpriseStartMojo.java index 90fd2d4..66277a4 100644 --- a/src/main/java/io/gatling/mojo/EnterpriseStartMojo.java +++ b/src/main/java/io/gatling/mojo/EnterpriseStartMojo.java @@ -59,7 +59,7 @@ public void execute() throws MojoFailureException { final Map context = getPluginContext(); final DeploymentInfo deploymentInfo = (DeploymentInfo) context.get(EnterpriseDeployMojo.CONTEXT_ENTERPRISE_DEPLOY_INFO); - final EnterprisePlugin plugin = initEnterprisePlugin(interactive()); + final EnterprisePlugin plugin = initEnterprisePlugin(requireBatchMode()); try { RunSummary runSummary = plugin.startSimulation(simulationName, deploymentInfo); @@ -71,10 +71,6 @@ public void execute() throws MojoFailureException { } } - private EnterprisePlugin initEnterprisePlugin(boolean isInteractive) throws MojoFailureException { - return isInteractive ? initInteractiveEnterprisePlugin() : initBatchEnterprisePlugin(); - } - private void waitForRunEnd(EnterprisePlugin plugin, RunSummary startedRun) throws MojoFailureException { if (waitForRunEnd) { diff --git a/src/main/java/io/gatling/mojo/GatlingMojo.java b/src/main/java/io/gatling/mojo/GatlingMojo.java index 9ac350c..aac0b65 100644 --- a/src/main/java/io/gatling/mojo/GatlingMojo.java +++ b/src/main/java/io/gatling/mojo/GatlingMojo.java @@ -22,6 +22,7 @@ import io.gatling.plugin.GatlingConstants; import io.gatling.plugin.SimulationSelector; +import io.gatling.plugin.model.BuildPlugin; import io.gatling.plugin.util.Fork; import java.io.BufferedWriter; import java.io.File; @@ -354,7 +355,7 @@ private List simulations() throws MojoFailureException { includes, excludes, runMultipleSimulations, - interactive()); + BuildPlugin.getInstance(buildTool, pluginVersion(), requireBatchMode()).interactive); SimulationSelector.Result.Error error = result.error; diff --git a/src/main/java/io/gatling/mojo/RecoverEnterprisePluginException.java b/src/main/java/io/gatling/mojo/RecoverEnterprisePluginException.java index 6825e52..2eb4872 100644 --- a/src/main/java/io/gatling/mojo/RecoverEnterprisePluginException.java +++ b/src/main/java/io/gatling/mojo/RecoverEnterprisePluginException.java @@ -16,7 +16,6 @@ */ package io.gatling.mojo; -import io.gatling.plugin.EmptyChoicesException; import io.gatling.plugin.exceptions.EnterprisePluginException; import io.gatling.plugin.exceptions.UnsupportedJavaVersionException; import org.apache.maven.plugin.MojoFailureException; @@ -46,8 +45,6 @@ static R handle(EnterprisePluginExceptionFunction f, Log log) throws Mojo + e.supportedVersion + " or lower."; throw new MojoFailureException(msg); - } catch (EmptyChoicesException e) { - throw new MojoFailureException(e.getMessage(), e); } catch (EnterprisePluginException e) { throw new MojoFailureException( "Unhandled Gatling Enterprise plugin exception: " + e.getMessage(), e); diff --git a/src/main/java/io/gatling/mojo/UnsupportedClientMojoException.java b/src/main/java/io/gatling/mojo/UnsupportedClientMojoException.java new file mode 100644 index 0000000..0c7932e --- /dev/null +++ b/src/main/java/io/gatling/mojo/UnsupportedClientMojoException.java @@ -0,0 +1,28 @@ + +/* + * Copyright 2011-2022 GatlingCorp (https://gatling.io) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package io.gatling.mojo; + +import io.gatling.plugin.exceptions.UnsupportedClientException; +import org.apache.maven.plugin.MojoFailureException; + +public class UnsupportedClientMojoException extends MojoFailureException { + public UnsupportedClientMojoException(UnsupportedClientException e) { + super( + "Please update the Gatling Maven plugin to the latest version for compatibility with Gatling Enterprise. See https://gatling.io/docs/gatling/reference/current/extensions/maven_plugin/ for more information about this plugin.", + e); + } +}