diff --git a/client/src/main/java/org/mvndaemon/mvnd/client/DefaultClient.java b/client/src/main/java/org/mvndaemon/mvnd/client/DefaultClient.java index 7caa30d26..a08d72e98 100644 --- a/client/src/main/java/org/mvndaemon/mvnd/client/DefaultClient.java +++ b/client/src/main/java/org/mvndaemon/mvnd/client/DefaultClient.java @@ -366,11 +366,11 @@ private DefaultResult(List args, Exception exception, int exitCode) { @Override public ExecutionResult assertSuccess() { if (exception != null) { - throw new AssertionError(appendCommand(new StringBuilder("Build failed: ")).toString(), exception); + throw new AssertionError(ExecutionResult.appendCommand(new StringBuilder("Build failed: "), args).toString(), exception); } if (exitCode != 0) { throw new AssertionError( - appendCommand(new StringBuilder("Build exited with non-zero exit code " + exitCode + ": ")).toString(), + ExecutionResult.appendCommand(new StringBuilder("Build exited with non-zero exit code " + exitCode + ": "), args).toString(), exception); } return this; @@ -379,7 +379,7 @@ public ExecutionResult assertSuccess() { @Override public ExecutionResult assertFailure() { if (exception == null && exitCode == 0) { - throw new AssertionError(appendCommand(new StringBuilder("Build did not fail: "))); + throw new AssertionError(ExecutionResult.appendCommand(new StringBuilder("Build did not fail: "), args)); } return this; } @@ -394,13 +394,6 @@ public boolean isSuccess() { return exception == null; } - StringBuilder appendCommand(StringBuilder sb) { - sb.append("mvnd"); - for (String arg : args) { - sb.append(" \"").append(arg).append('"'); - } - return sb; - } } } diff --git a/client/src/main/java/org/mvndaemon/mvnd/client/ExecutionResult.java b/client/src/main/java/org/mvndaemon/mvnd/client/ExecutionResult.java index 9fdf18980..0c87f0112 100644 --- a/client/src/main/java/org/mvndaemon/mvnd/client/ExecutionResult.java +++ b/client/src/main/java/org/mvndaemon/mvnd/client/ExecutionResult.java @@ -15,6 +15,8 @@ */ package org.mvndaemon.mvnd.client; +import java.util.List; + /** * A result of a {@code mvnd} build. */ @@ -28,4 +30,12 @@ public interface ExecutionResult { int getExitCode(); + public static StringBuilder appendCommand(StringBuilder sb, List args) { + sb.append("mvnd"); + for (String arg : args) { + sb.append(" \"").append(arg).append('"'); + } + return sb; + } + } diff --git a/integration-tests/src/test/java/org/mvndaemon/mvnd/junit/JvmTestClient.java b/integration-tests/src/test/java/org/mvndaemon/mvnd/junit/JvmTestClient.java new file mode 100644 index 000000000..aeff2f11c --- /dev/null +++ b/integration-tests/src/test/java/org/mvndaemon/mvnd/junit/JvmTestClient.java @@ -0,0 +1,94 @@ +/* + * Copyright 2019 the original author or authors. + * + * 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 org.mvndaemon.mvnd.junit; + +import java.util.List; +import org.mvndaemon.mvnd.assertj.TestClientOutput; +import org.mvndaemon.mvnd.client.DaemonParameters; +import org.mvndaemon.mvnd.client.DefaultClient; +import org.mvndaemon.mvnd.client.ExecutionResult; +import org.mvndaemon.mvnd.common.logging.ClientOutput; + +public class JvmTestClient extends DefaultClient { + + public JvmTestClient(DaemonParameters parameters) { + super(parameters); + } + + @Override + public ExecutionResult execute(ClientOutput output, List argv) { + final ExecutionResult delegate = super.execute(output, argv); + if (output instanceof TestClientOutput) { + return new JvmTestResult(delegate, ((TestClientOutput) output).messagesToString()); + } + return delegate; + } + + public static class JvmTestResult implements ExecutionResult { + + private final ExecutionResult delegate; + private final List log; + + public JvmTestResult(ExecutionResult delegate, List log) { + this.delegate = delegate; + this.log = log; + } + + @Override + public JvmTestResult assertFailure() { + try { + delegate.assertFailure(); + } catch (AssertionError e) { + final StringBuilder sb = new StringBuilder(e.getMessage()); + sb.append("\n--- received messages start ---"); + synchronized (log) { + log.forEach(s -> sb.append('\n').append(s)); + } + sb.append("\n--- received messages end ---"); + throw new AssertionError(sb); + } + return this; + } + + @Override + public JvmTestResult assertSuccess() { + try { + delegate.assertSuccess(); + } catch (AssertionError e) { + final StringBuilder sb = new StringBuilder(e.getMessage()); + sb.append("\n--- received messages start ---"); + synchronized (log) { + log.forEach(s -> sb.append('\n').append(s)); + } + sb.append("\n--- received messages end ---"); + throw new AssertionError(sb); + } + return this; + } + + @Override + public int getExitCode() { + return delegate.getExitCode(); + } + + @Override + public boolean isSuccess() { + return delegate.isSuccess(); + } + + } + +} diff --git a/integration-tests/src/test/java/org/mvndaemon/mvnd/junit/MvndTestExtension.java b/integration-tests/src/test/java/org/mvndaemon/mvnd/junit/MvndTestExtension.java index ed9134864..ccedba7db 100644 --- a/integration-tests/src/test/java/org/mvndaemon/mvnd/junit/MvndTestExtension.java +++ b/integration-tests/src/test/java/org/mvndaemon/mvnd/junit/MvndTestExtension.java @@ -32,7 +32,6 @@ import org.junit.jupiter.api.extension.ExtensionContext.Store; import org.mvndaemon.mvnd.client.Client; import org.mvndaemon.mvnd.client.DaemonParameters; -import org.mvndaemon.mvnd.client.DefaultClient; import org.mvndaemon.mvnd.common.DaemonRegistry; import org.mvndaemon.mvnd.common.Environment; import org.mvndaemon.mvnd.common.TimeUtils; @@ -122,7 +121,7 @@ Client newClient(boolean isNative, DaemonParameters parameters, long timeoutMs) } return new NativeTestClient(parameters, mvndNativeExecutablePath, timeoutMs); } else { - return new DefaultClient(parameters); + return new JvmTestClient(parameters); } } diff --git a/integration-tests/src/test/java/org/mvndaemon/mvnd/junit/NativeTestClient.java b/integration-tests/src/test/java/org/mvndaemon/mvnd/junit/NativeTestClient.java index ae8222b71..65a4b0a27 100644 --- a/integration-tests/src/test/java/org/mvndaemon/mvnd/junit/NativeTestClient.java +++ b/integration-tests/src/test/java/org/mvndaemon/mvnd/junit/NativeTestClient.java @@ -113,19 +113,18 @@ public Result(List args, int exitCode, List log) { this.log = log; } - StringBuilder appendCommand(StringBuilder sb) { - for (String arg : args) { - sb.append(" \"").append(arg).append('"'); - } - return sb; - - } - @Override public Result assertFailure() { if (exitCode == 0) { - throw new AssertionError(appendCommand( - new StringBuilder("mvnd returned ").append(exitCode).append(" instead of non-zero exit code: "))); + final StringBuilder sb = ExecutionResult.appendCommand( + new StringBuilder("mvnd returned ").append(exitCode).append(" instead of non-zero exit code: "), + args); + sb.append("\n--- stderr+stdout start ---"); + synchronized (log) { + log.forEach(s -> sb.append('\n').append(s)); + } + sb.append("\n--- stderr+stdout end ---"); + throw new AssertionError(sb); } return this; } @@ -133,7 +132,9 @@ public Result assertFailure() { @Override public Result assertSuccess() { if (exitCode != 0) { - final StringBuilder sb = appendCommand(new StringBuilder("mvnd returned ").append(exitCode)); + final StringBuilder sb = ExecutionResult.appendCommand( + new StringBuilder("mvnd returned ").append(exitCode), + args); if (exitCode == CommandProcess.TIMEOUT_EXIT_CODE) { sb.append(" (timeout)"); }