| package org.apache.maven.surefire.booter.spi; |
| |
| /* |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you 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. |
| */ |
| |
| import org.apache.maven.surefire.api.report.ReportEntry; |
| import org.apache.maven.surefire.api.report.SafeThrowable; |
| import org.apache.maven.surefire.api.report.StackTraceWriter; |
| import org.apache.maven.surefire.api.util.internal.ObjectUtils; |
| import org.apache.maven.surefire.api.util.internal.WritableBufferedByteChannel; |
| import org.junit.Test; |
| |
| import java.io.ByteArrayOutputStream; |
| import java.io.IOException; |
| import java.io.LineNumberReader; |
| import java.io.PrintStream; |
| import java.io.StringReader; |
| import java.nio.ByteBuffer; |
| import java.nio.charset.Charset; |
| import java.util.Map; |
| |
| import static java.nio.charset.StandardCharsets.UTF_8; |
| import static java.util.Arrays.copyOfRange; |
| import static org.apache.maven.surefire.api.util.internal.Channels.newBufferedChannel; |
| import static org.apache.maven.surefire.shared.codec.binary.Base64.encodeBase64String; |
| import static org.apache.maven.surefire.booter.spi.LegacyMasterProcessChannelEncoder.encode; |
| import static org.apache.maven.surefire.booter.spi.LegacyMasterProcessChannelEncoder.encodeHeader; |
| import static org.apache.maven.surefire.booter.spi.LegacyMasterProcessChannelEncoder.encodeMessage; |
| import static org.apache.maven.surefire.booter.spi.LegacyMasterProcessChannelEncoder.encodeOpcode; |
| import static org.apache.maven.surefire.booter.spi.LegacyMasterProcessChannelEncoder.toBase64; |
| import static org.apache.maven.surefire.api.booter.ForkedProcessEventType.BOOTERCODE_SYSPROPS; |
| import static org.apache.maven.surefire.api.booter.ForkedProcessEventType.MAGIC_NUMBER; |
| import static org.apache.maven.surefire.api.report.RunMode.NORMAL_RUN; |
| import static org.fest.assertions.Assertions.assertThat; |
| import static org.mockito.Mockito.mock; |
| import static org.mockito.Mockito.when; |
| |
| /** |
| * Test for {@link LegacyMasterProcessChannelEncoder}. |
| * |
| * @author <a href="mailto:tibordigana@apache.org">Tibor Digana (tibor17)</a> |
| * @since 3.0.0-M4 |
| */ |
| public class LegacyMasterProcessChannelEncoderTest |
| { |
| private static final int ELAPSED_TIME = 102; |
| |
| @Test |
| public void shouldBeFailSafe() |
| { |
| assertThat( toBase64( null ) ).isEqualTo( "-" ); |
| assertThat( toBase64( "" ) ).isEqualTo( "" ); |
| } |
| |
| @Test |
| public void shouldHaveSystemProperty() |
| { |
| StringBuilder actualEncoded = encode( BOOTERCODE_SYSPROPS, NORMAL_RUN, "arg1", "arg2" ); |
| String expected = ':' + MAGIC_NUMBER + ':' + BOOTERCODE_SYSPROPS.getOpcode() |
| + ":normal-run:UTF-8:YXJnMQ==:YXJnMg==:"; |
| |
| assertThat( actualEncoded.toString() ) |
| .isEqualTo( expected ); |
| } |
| |
| @Test |
| public void safeThrowableShouldBeEncoded() |
| { |
| final String exceptionMessage = "msg"; |
| final String encodedExceptionMsg = encodeBase64String( toArray( UTF_8.encode( exceptionMessage ) ) ); |
| |
| final String smartStackTrace = "MyTest:86 >> Error"; |
| final String encodedSmartStackTrace = encodeBase64String( toArray( UTF_8.encode( smartStackTrace ) ) ); |
| |
| final String stackTrace = "trace line 1\ntrace line 2"; |
| final String encodedStackTrace = encodeBase64String( toArray( UTF_8.encode( stackTrace ) ) ); |
| |
| final String trimmedStackTrace = "trace line 1\ntrace line 2"; |
| final String encodedTrimmedStackTrace = encodeBase64String( toArray( UTF_8.encode( trimmedStackTrace ) ) ); |
| |
| SafeThrowable safeThrowable = new SafeThrowable( new Exception( exceptionMessage ) ); |
| StackTraceWriter stackTraceWriter = mock( StackTraceWriter.class ); |
| when( stackTraceWriter.getThrowable() ).thenReturn( safeThrowable ); |
| when( stackTraceWriter.smartTrimmedStackTrace() ).thenReturn( smartStackTrace ); |
| when( stackTraceWriter.writeTrimmedTraceToString() ).thenReturn( trimmedStackTrace ); |
| when( stackTraceWriter.writeTraceToString() ).thenReturn( stackTrace ); |
| |
| StringBuilder encoded = new StringBuilder(); |
| encode( encoded, stackTraceWriter, false ); |
| assertThat( encoded.toString() ) |
| .isEqualTo( encodedExceptionMsg |
| + ":" + encodedSmartStackTrace + ":" + encodedStackTrace + ":" ); |
| |
| encoded = new StringBuilder(); |
| encode( encoded, stackTraceWriter, true ); |
| assertThat( encoded.toString() ) |
| .isEqualTo( encodedExceptionMsg |
| + ":" + encodedSmartStackTrace + ":" + encodedTrimmedStackTrace + ":" ); |
| } |
| |
| @Test |
| public void emptySafeThrowable() |
| { |
| SafeThrowable safeThrowable = new SafeThrowable( new Exception( "" ) ); |
| |
| StackTraceWriter stackTraceWriter = mock( StackTraceWriter.class ); |
| when( stackTraceWriter.getThrowable() ).thenReturn( safeThrowable ); |
| when( stackTraceWriter.smartTrimmedStackTrace() ).thenReturn( "" ); |
| when( stackTraceWriter.writeTraceToString() ).thenReturn( "" ); |
| |
| StringBuilder encoded = new StringBuilder(); |
| encode( encoded, stackTraceWriter, false ); |
| |
| assertThat( encoded.toString() ) |
| .isEqualTo( ":::" ); |
| } |
| |
| @Test |
| public void nullSafeThrowable() |
| { |
| SafeThrowable safeThrowable = new SafeThrowable( new Exception() ); |
| |
| StackTraceWriter stackTraceWriter = mock( StackTraceWriter.class ); |
| when( stackTraceWriter.getThrowable() ).thenReturn( safeThrowable ); |
| |
| StringBuilder encoded = new StringBuilder(); |
| encode( encoded, stackTraceWriter, false ); |
| |
| assertThat( encoded.toString() ) |
| .isEqualTo( "-:-:-:" ); |
| } |
| |
| @Test |
| public void reportEntry() throws IOException |
| { |
| final String exceptionMessage = "msg"; |
| final String encodedExceptionMsg = encodeBase64String( toArray( UTF_8.encode( exceptionMessage ) ) ); |
| |
| final String smartStackTrace = "MyTest:86 >> Error"; |
| final String encodedSmartStackTrace = encodeBase64String( toArray( UTF_8.encode( smartStackTrace ) ) ); |
| |
| final String stackTrace = "trace line 1\ntrace line 2"; |
| final String encodedStackTrace = encodeBase64String( toArray( UTF_8.encode( stackTrace ) ) ); |
| |
| final String trimmedStackTrace = "trace line 1\ntrace line 2"; |
| final String encodedTrimmedStackTrace = encodeBase64String( toArray( UTF_8.encode( trimmedStackTrace ) ) ); |
| |
| SafeThrowable safeThrowable = new SafeThrowable( new Exception( exceptionMessage ) ); |
| StackTraceWriter stackTraceWriter = mock( StackTraceWriter.class ); |
| when( stackTraceWriter.getThrowable() ).thenReturn( safeThrowable ); |
| when( stackTraceWriter.smartTrimmedStackTrace() ).thenReturn( smartStackTrace ); |
| when( stackTraceWriter.writeTrimmedTraceToString() ).thenReturn( trimmedStackTrace ); |
| when( stackTraceWriter.writeTraceToString() ).thenReturn( stackTrace ); |
| |
| |
| ReportEntry reportEntry = mock( ReportEntry.class ); |
| when( reportEntry.getElapsed() ).thenReturn( ELAPSED_TIME ); |
| when( reportEntry.getGroup() ).thenReturn( "this group" ); |
| when( reportEntry.getMessage() ).thenReturn( "skipped test" ); |
| when( reportEntry.getName() ).thenReturn( "my test" ); |
| when( reportEntry.getNameWithGroup() ).thenReturn( "name with group" ); |
| when( reportEntry.getSourceName() ).thenReturn( "pkg.MyTest" ); |
| when( reportEntry.getStackTraceWriter() ).thenReturn( stackTraceWriter ); |
| |
| String encodedSourceName = encodeBase64String( toArray( UTF_8.encode( reportEntry.getSourceName() ) ) ); |
| String encodedName = encodeBase64String( toArray( UTF_8.encode( reportEntry.getName() ) ) ); |
| String encodedGroup = encodeBase64String( toArray( UTF_8.encode( reportEntry.getGroup() ) ) ); |
| String encodedMessage = encodeBase64String( toArray( UTF_8.encode( reportEntry.getMessage() ) ) ); |
| |
| StringBuilder encode = encode( "X", "normal-run", reportEntry, false ); |
| assertThat( encode.toString() ) |
| .isEqualTo( ":maven-surefire-event:X:normal-run:UTF-8:" |
| + encodedSourceName |
| + ":" |
| + "-" |
| + ":" |
| + encodedName |
| + ":" |
| + "-" |
| + ":" |
| + encodedGroup |
| + ":" |
| + encodedMessage |
| + ":" |
| + ELAPSED_TIME |
| + ":" |
| |
| + encodedExceptionMsg |
| + ":" |
| + encodedSmartStackTrace |
| + ":" |
| + encodedStackTrace |
| + ":" |
| ); |
| |
| encode = encode( "X", "normal-run", reportEntry, true ); |
| assertThat( encode.toString() ) |
| .isEqualTo( ":maven-surefire-event:X:normal-run:UTF-8:" |
| + encodedSourceName |
| + ":" |
| + "-" |
| + ":" |
| + encodedName |
| + ":" |
| + "-" |
| + ":" |
| + encodedGroup |
| + ":" |
| + encodedMessage |
| + ":" |
| + ELAPSED_TIME |
| + ":" |
| |
| + encodedExceptionMsg |
| + ":" |
| + encodedSmartStackTrace |
| + ":" |
| + encodedTrimmedStackTrace |
| + ":" |
| ); |
| |
| Stream out = Stream.newStream(); |
| LegacyMasterProcessChannelEncoder encoder = new LegacyMasterProcessChannelEncoder( newBufferedChannel( out ) ); |
| |
| encoder.testSetStarting( reportEntry, true ); |
| LineNumberReader printedLines = out.newReader( UTF_8 ); |
| assertThat( printedLines.readLine() ) |
| .isEqualTo( ":maven-surefire-event:testset-starting:normal-run:UTF-8:" |
| + encodedSourceName |
| + ":" |
| + "-" |
| + ":" |
| + encodedName |
| + ":" |
| + "-" |
| + ":" |
| + encodedGroup |
| + ":" |
| + encodedMessage |
| + ":" |
| + ELAPSED_TIME |
| + ":" |
| |
| + encodedExceptionMsg |
| + ":" |
| + encodedSmartStackTrace |
| + ":" |
| + encodedTrimmedStackTrace |
| + ":" |
| ); |
| assertThat( printedLines.readLine() ).isNull(); |
| |
| out = Stream.newStream(); |
| encoder = new LegacyMasterProcessChannelEncoder( newBufferedChannel( out ) ); |
| |
| encoder.testSetStarting( reportEntry, false ); |
| printedLines = out.newReader( UTF_8 ); |
| assertThat( printedLines.readLine() ) |
| .isEqualTo( ":maven-surefire-event:testset-starting:normal-run:UTF-8:" |
| + encodedSourceName |
| + ":" |
| + "-" |
| + ":" |
| + encodedName |
| + ":" |
| + "-" |
| + ":" |
| + encodedGroup |
| + ":" |
| + encodedMessage |
| + ":" |
| + ELAPSED_TIME |
| + ":" |
| |
| + encodedExceptionMsg |
| + ":" |
| + encodedSmartStackTrace |
| + ":" |
| + encodedStackTrace |
| + ":" |
| ); |
| assertThat( printedLines.readLine() ).isNull(); |
| } |
| |
| @Test |
| public void testSetCompleted() throws IOException |
| { |
| String exceptionMessage = "msg"; |
| String encodedExceptionMsg = encodeBase64String( toArray( UTF_8.encode( exceptionMessage ) ) ); |
| |
| String smartStackTrace = "MyTest:86 >> Error"; |
| String encodedSmartStackTrace = encodeBase64String( toArray( UTF_8.encode( smartStackTrace ) ) ); |
| |
| String stackTrace = "trace line 1\ntrace line 2"; |
| String encodedStackTrace = encodeBase64String( toArray( UTF_8.encode( stackTrace ) ) ); |
| |
| String trimmedStackTrace = "trace line 1\ntrace line 2"; |
| String encodedTrimmedStackTrace = encodeBase64String( toArray( UTF_8.encode( trimmedStackTrace ) ) ); |
| |
| SafeThrowable safeThrowable = new SafeThrowable( new Exception( exceptionMessage ) ); |
| StackTraceWriter stackTraceWriter = mock( StackTraceWriter.class ); |
| when( stackTraceWriter.getThrowable() ).thenReturn( safeThrowable ); |
| when( stackTraceWriter.smartTrimmedStackTrace() ).thenReturn( smartStackTrace ); |
| when( stackTraceWriter.writeTrimmedTraceToString() ).thenReturn( trimmedStackTrace ); |
| when( stackTraceWriter.writeTraceToString() ).thenReturn( stackTrace ); |
| |
| ReportEntry reportEntry = mock( ReportEntry.class ); |
| when( reportEntry.getElapsed() ).thenReturn( ELAPSED_TIME ); |
| when( reportEntry.getGroup() ).thenReturn( "this group" ); |
| when( reportEntry.getMessage() ).thenReturn( "skipped test" ); |
| when( reportEntry.getName() ).thenReturn( "my test" ); |
| when( reportEntry.getNameWithGroup() ).thenReturn( "name with group" ); |
| when( reportEntry.getSourceName() ).thenReturn( "pkg.MyTest" ); |
| when( reportEntry.getStackTraceWriter() ).thenReturn( stackTraceWriter ); |
| |
| String encodedSourceName = encodeBase64String( toArray( UTF_8.encode( reportEntry.getSourceName() ) ) ); |
| String encodedName = encodeBase64String( toArray( UTF_8.encode( reportEntry.getName() ) ) ); |
| String encodedGroup = encodeBase64String( toArray( UTF_8.encode( reportEntry.getGroup() ) ) ); |
| String encodedMessage = encodeBase64String( toArray( UTF_8.encode( reportEntry.getMessage() ) ) ); |
| |
| Stream out = Stream.newStream(); |
| LegacyMasterProcessChannelEncoder encoder = new LegacyMasterProcessChannelEncoder( newBufferedChannel( out ) ); |
| |
| encoder.testSetCompleted( reportEntry, false ); |
| LineNumberReader printedLines = out.newReader( UTF_8 ); |
| assertThat( printedLines.readLine() ) |
| .isEqualTo( ":maven-surefire-event:testset-completed:normal-run:UTF-8:" |
| + encodedSourceName |
| + ":" |
| + "-" |
| + ":" |
| + encodedName |
| + ":" |
| + "-" |
| + ":" |
| + encodedGroup |
| + ":" |
| + encodedMessage |
| + ":" |
| + ELAPSED_TIME |
| + ":" |
| |
| + encodedExceptionMsg |
| + ":" |
| + encodedSmartStackTrace |
| + ":" |
| + encodedStackTrace |
| + ":" |
| ); |
| assertThat( printedLines.readLine() ).isNull(); |
| } |
| |
| @Test |
| public void testStarting() throws IOException |
| { |
| String exceptionMessage = "msg"; |
| String encodedExceptionMsg = encodeBase64String( toArray( UTF_8.encode( exceptionMessage ) ) ); |
| |
| String smartStackTrace = "MyTest:86 >> Error"; |
| String encodedSmartStackTrace = encodeBase64String( toArray( UTF_8.encode( smartStackTrace ) ) ); |
| |
| String stackTrace = "trace line 1\ntrace line 2"; |
| String encodedStackTrace = encodeBase64String( toArray( UTF_8.encode( stackTrace ) ) ); |
| |
| String trimmedStackTrace = "trace line 1\ntrace line 2"; |
| String encodedTrimmedStackTrace = encodeBase64String( toArray( UTF_8.encode( trimmedStackTrace ) ) ); |
| |
| SafeThrowable safeThrowable = new SafeThrowable( new Exception( exceptionMessage ) ); |
| StackTraceWriter stackTraceWriter = mock( StackTraceWriter.class ); |
| when( stackTraceWriter.getThrowable() ).thenReturn( safeThrowable ); |
| when( stackTraceWriter.smartTrimmedStackTrace() ).thenReturn( smartStackTrace ); |
| when( stackTraceWriter.writeTrimmedTraceToString() ).thenReturn( trimmedStackTrace ); |
| when( stackTraceWriter.writeTraceToString() ).thenReturn( stackTrace ); |
| |
| ReportEntry reportEntry = mock( ReportEntry.class ); |
| when( reportEntry.getElapsed() ).thenReturn( ELAPSED_TIME ); |
| when( reportEntry.getGroup() ).thenReturn( "this group" ); |
| when( reportEntry.getMessage() ).thenReturn( "skipped test" ); |
| when( reportEntry.getName() ).thenReturn( "my test" ); |
| when( reportEntry.getNameWithGroup() ).thenReturn( "name with group" ); |
| when( reportEntry.getSourceName() ).thenReturn( "pkg.MyTest" ); |
| when( reportEntry.getStackTraceWriter() ).thenReturn( stackTraceWriter ); |
| |
| String encodedSourceName = encodeBase64String( toArray( UTF_8.encode( reportEntry.getSourceName() ) ) ); |
| String encodedName = encodeBase64String( toArray( UTF_8.encode( reportEntry.getName() ) ) ); |
| String encodedGroup = encodeBase64String( toArray( UTF_8.encode( reportEntry.getGroup() ) ) ); |
| String encodedMessage = encodeBase64String( toArray( UTF_8.encode( reportEntry.getMessage() ) ) ); |
| |
| Stream out = Stream.newStream(); |
| LegacyMasterProcessChannelEncoder encoder = new LegacyMasterProcessChannelEncoder( newBufferedChannel( out ) ); |
| |
| encoder.testStarting( reportEntry, true ); |
| LineNumberReader printedLines = out.newReader( UTF_8 ); |
| assertThat( printedLines.readLine() ) |
| .isEqualTo( ":maven-surefire-event:test-starting:normal-run:UTF-8:" |
| + encodedSourceName |
| + ":" |
| + "-" |
| + ":" |
| + encodedName |
| + ":" |
| + "-" |
| + ":" |
| + encodedGroup |
| + ":" |
| + encodedMessage |
| + ":" |
| + ELAPSED_TIME |
| + ":" |
| |
| + encodedExceptionMsg |
| + ":" |
| + encodedSmartStackTrace |
| + ":" |
| + encodedTrimmedStackTrace |
| + ":" |
| ); |
| assertThat( printedLines.readLine() ).isNull(); |
| } |
| |
| @Test |
| public void testSuccess() throws IOException |
| { |
| String exceptionMessage = "msg"; |
| String encodedExceptionMsg = encodeBase64String( toArray( UTF_8.encode( exceptionMessage ) ) ); |
| |
| String smartStackTrace = "MyTest:86 >> Error"; |
| String encodedSmartStackTrace = encodeBase64String( toArray( UTF_8.encode( smartStackTrace ) ) ); |
| |
| String stackTrace = "trace line 1\ntrace line 2"; |
| String encodedStackTrace = encodeBase64String( toArray( UTF_8.encode( stackTrace ) ) ); |
| |
| String trimmedStackTrace = "trace line 1\ntrace line 2"; |
| String encodedTrimmedStackTrace = encodeBase64String( toArray( UTF_8.encode( trimmedStackTrace ) ) ); |
| |
| SafeThrowable safeThrowable = new SafeThrowable( new Exception( exceptionMessage ) ); |
| StackTraceWriter stackTraceWriter = mock( StackTraceWriter.class ); |
| when( stackTraceWriter.getThrowable() ).thenReturn( safeThrowable ); |
| when( stackTraceWriter.smartTrimmedStackTrace() ).thenReturn( smartStackTrace ); |
| when( stackTraceWriter.writeTrimmedTraceToString() ).thenReturn( trimmedStackTrace ); |
| when( stackTraceWriter.writeTraceToString() ).thenReturn( stackTrace ); |
| |
| ReportEntry reportEntry = mock( ReportEntry.class ); |
| when( reportEntry.getElapsed() ).thenReturn( ELAPSED_TIME ); |
| when( reportEntry.getGroup() ).thenReturn( "this group" ); |
| when( reportEntry.getMessage() ).thenReturn( "skipped test" ); |
| when( reportEntry.getName() ).thenReturn( "my test" ); |
| when( reportEntry.getNameWithGroup() ).thenReturn( "name with group" ); |
| when( reportEntry.getSourceName() ).thenReturn( "pkg.MyTest" ); |
| when( reportEntry.getStackTraceWriter() ).thenReturn( stackTraceWriter ); |
| |
| String encodedSourceName = encodeBase64String( toArray( UTF_8.encode( reportEntry.getSourceName() ) ) ); |
| String encodedName = encodeBase64String( toArray( UTF_8.encode( reportEntry.getName() ) ) ); |
| String encodedGroup = encodeBase64String( toArray( UTF_8.encode( reportEntry.getGroup() ) ) ); |
| String encodedMessage = encodeBase64String( toArray( UTF_8.encode( reportEntry.getMessage() ) ) ); |
| |
| Stream out = Stream.newStream(); |
| LegacyMasterProcessChannelEncoder encoder = new LegacyMasterProcessChannelEncoder( newBufferedChannel( out ) ); |
| |
| encoder.testSucceeded( reportEntry, true ); |
| LineNumberReader printedLines = out.newReader( UTF_8 ); |
| assertThat( printedLines.readLine() ) |
| .isEqualTo( ":maven-surefire-event:test-succeeded:normal-run:UTF-8:" |
| + encodedSourceName |
| + ":" |
| + "-" |
| + ":" |
| + encodedName |
| + ":" |
| + "-" |
| + ":" |
| + encodedGroup |
| + ":" |
| + encodedMessage |
| + ":" |
| + ELAPSED_TIME |
| + ":" |
| |
| + encodedExceptionMsg |
| + ":" |
| + encodedSmartStackTrace |
| + ":" |
| + encodedTrimmedStackTrace |
| + ":" |
| ); |
| assertThat( printedLines.readLine() ).isNull(); |
| } |
| |
| @Test |
| public void testFailed() throws IOException |
| { |
| String exceptionMessage = "msg"; |
| String encodedExceptionMsg = encodeBase64String( toArray( UTF_8.encode( exceptionMessage ) ) ); |
| |
| String smartStackTrace = "MyTest:86 >> Error"; |
| String encodedSmartStackTrace = encodeBase64String( toArray( UTF_8.encode( smartStackTrace ) ) ); |
| |
| String stackTrace = "trace line 1\ntrace line 2"; |
| String encodedStackTrace = encodeBase64String( toArray( UTF_8.encode( stackTrace ) ) ); |
| |
| String trimmedStackTrace = "trace line 1\ntrace line 2"; |
| String encodedTrimmedStackTrace = encodeBase64String( toArray( UTF_8.encode( trimmedStackTrace ) ) ); |
| |
| SafeThrowable safeThrowable = new SafeThrowable( new Exception( exceptionMessage ) ); |
| StackTraceWriter stackTraceWriter = mock( StackTraceWriter.class ); |
| when( stackTraceWriter.getThrowable() ).thenReturn( safeThrowable ); |
| when( stackTraceWriter.smartTrimmedStackTrace() ).thenReturn( smartStackTrace ); |
| when( stackTraceWriter.writeTrimmedTraceToString() ).thenReturn( trimmedStackTrace ); |
| when( stackTraceWriter.writeTraceToString() ).thenReturn( stackTrace ); |
| |
| ReportEntry reportEntry = mock( ReportEntry.class ); |
| when( reportEntry.getElapsed() ).thenReturn( ELAPSED_TIME ); |
| when( reportEntry.getGroup() ).thenReturn( "this group" ); |
| when( reportEntry.getMessage() ).thenReturn( "skipped test" ); |
| when( reportEntry.getName() ).thenReturn( "my test" ); |
| when( reportEntry.getNameWithGroup() ).thenReturn( "name with group" ); |
| when( reportEntry.getSourceName() ).thenReturn( "pkg.MyTest" ); |
| when( reportEntry.getStackTraceWriter() ).thenReturn( stackTraceWriter ); |
| |
| String encodedSourceName = encodeBase64String( toArray( UTF_8.encode( reportEntry.getSourceName() ) ) ); |
| String encodedName = encodeBase64String( toArray( UTF_8.encode( reportEntry.getName() ) ) ); |
| String encodedGroup = encodeBase64String( toArray( UTF_8.encode( reportEntry.getGroup() ) ) ); |
| String encodedMessage = encodeBase64String( toArray( UTF_8.encode( reportEntry.getMessage() ) ) ); |
| |
| Stream out = Stream.newStream(); |
| LegacyMasterProcessChannelEncoder encoder = new LegacyMasterProcessChannelEncoder( newBufferedChannel( out ) ); |
| |
| encoder.testFailed( reportEntry, false ); |
| LineNumberReader printedLines = out.newReader( UTF_8 ); |
| assertThat( printedLines.readLine() ) |
| .isEqualTo( ":maven-surefire-event:test-failed:normal-run:UTF-8:" |
| + encodedSourceName |
| + ":" |
| + "-" |
| + ":" |
| + encodedName |
| + ":" |
| + "-" |
| + ":" |
| + encodedGroup |
| + ":" |
| + encodedMessage |
| + ":" |
| + ELAPSED_TIME |
| + ":" |
| |
| + encodedExceptionMsg |
| + ":" |
| + encodedSmartStackTrace |
| + ":" |
| + encodedStackTrace |
| + ":" |
| ); |
| assertThat( printedLines.readLine() ).isNull(); |
| } |
| |
| @Test |
| public void testSkipped() throws IOException |
| { |
| String encodedExceptionMsg = "-"; |
| |
| String smartStackTrace = "MyTest:86 >> Error"; |
| String encodedSmartStackTrace = encodeBase64String( toArray( UTF_8.encode( smartStackTrace ) ) ); |
| |
| String stackTrace = "trace line 1\ntrace line 2"; |
| String encodedStackTrace = encodeBase64String( toArray( UTF_8.encode( stackTrace ) ) ); |
| |
| String trimmedStackTrace = "trace line 1\ntrace line 2"; |
| String encodedTrimmedStackTrace = encodeBase64String( toArray( UTF_8.encode( trimmedStackTrace ) ) ); |
| |
| SafeThrowable safeThrowable = new SafeThrowable( new Exception() ); |
| StackTraceWriter stackTraceWriter = mock( StackTraceWriter.class ); |
| when( stackTraceWriter.getThrowable() ).thenReturn( safeThrowable ); |
| when( stackTraceWriter.smartTrimmedStackTrace() ).thenReturn( smartStackTrace ); |
| when( stackTraceWriter.writeTrimmedTraceToString() ).thenReturn( trimmedStackTrace ); |
| when( stackTraceWriter.writeTraceToString() ).thenReturn( stackTrace ); |
| |
| ReportEntry reportEntry = mock( ReportEntry.class ); |
| when( reportEntry.getElapsed() ).thenReturn( ELAPSED_TIME ); |
| when( reportEntry.getGroup() ).thenReturn( "this group" ); |
| when( reportEntry.getMessage() ).thenReturn( "skipped test" ); |
| when( reportEntry.getName() ).thenReturn( "my test" ); |
| when( reportEntry.getNameWithGroup() ).thenReturn( "name with group" ); |
| when( reportEntry.getSourceName() ).thenReturn( "pkg.MyTest" ); |
| when( reportEntry.getStackTraceWriter() ).thenReturn( stackTraceWriter ); |
| |
| String encodedSourceName = encodeBase64String( toArray( UTF_8.encode( reportEntry.getSourceName() ) ) ); |
| String encodedName = encodeBase64String( toArray( UTF_8.encode( reportEntry.getName() ) ) ); |
| String encodedGroup = encodeBase64String( toArray( UTF_8.encode( reportEntry.getGroup() ) ) ); |
| String encodedMessage = encodeBase64String( toArray( UTF_8.encode( reportEntry.getMessage() ) ) ); |
| |
| Stream out = Stream.newStream(); |
| LegacyMasterProcessChannelEncoder encoder = new LegacyMasterProcessChannelEncoder( newBufferedChannel( out ) ); |
| |
| encoder.testSkipped( reportEntry, false ); |
| LineNumberReader printedLines = out.newReader( UTF_8 ); |
| assertThat( printedLines.readLine() ) |
| .isEqualTo( ":maven-surefire-event:test-skipped:normal-run:UTF-8:" |
| + encodedSourceName |
| + ":" |
| + "-" |
| + ":" |
| + encodedName |
| + ":" |
| + "-" |
| + ":" |
| + encodedGroup |
| + ":" |
| + encodedMessage |
| + ":" |
| + ELAPSED_TIME |
| + ":" |
| |
| + encodedExceptionMsg |
| + ":" |
| + encodedSmartStackTrace |
| + ":" |
| + encodedStackTrace |
| + ":" |
| ); |
| assertThat( printedLines.readLine() ).isNull(); |
| } |
| |
| @Test |
| public void testError() throws IOException |
| { |
| String encodedExceptionMsg = "-"; |
| |
| String encodedSmartStackTrace = "-"; |
| |
| String stackTrace = "trace line 1\ntrace line 2"; |
| String encodedStackTrace = encodeBase64String( toArray( UTF_8.encode( stackTrace ) ) ); |
| |
| String trimmedStackTrace = "trace line 1\ntrace line 2"; |
| String encodedTrimmedStackTrace = encodeBase64String( toArray( UTF_8.encode( trimmedStackTrace ) ) ); |
| |
| SafeThrowable safeThrowable = new SafeThrowable( new Exception() ); |
| StackTraceWriter stackTraceWriter = mock( StackTraceWriter.class ); |
| when( stackTraceWriter.getThrowable() ).thenReturn( safeThrowable ); |
| when( stackTraceWriter.smartTrimmedStackTrace() ).thenReturn( null ); |
| when( stackTraceWriter.writeTrimmedTraceToString() ).thenReturn( trimmedStackTrace ); |
| when( stackTraceWriter.writeTraceToString() ).thenReturn( stackTrace ); |
| |
| ReportEntry reportEntry = mock( ReportEntry.class ); |
| when( reportEntry.getElapsed() ).thenReturn( ELAPSED_TIME ); |
| when( reportEntry.getGroup() ).thenReturn( "this group" ); |
| when( reportEntry.getMessage() ).thenReturn( "skipped test" ); |
| when( reportEntry.getName() ).thenReturn( "my test" ); |
| when( reportEntry.getNameWithGroup() ).thenReturn( "name with group" ); |
| when( reportEntry.getSourceName() ).thenReturn( "pkg.MyTest" ); |
| when( reportEntry.getStackTraceWriter() ).thenReturn( stackTraceWriter ); |
| |
| String encodedSourceName = encodeBase64String( toArray( UTF_8.encode( reportEntry.getSourceName() ) ) ); |
| String encodedName = encodeBase64String( toArray( UTF_8.encode( reportEntry.getName() ) ) ); |
| String encodedGroup = encodeBase64String( toArray( UTF_8.encode( reportEntry.getGroup() ) ) ); |
| String encodedMessage = encodeBase64String( toArray( UTF_8.encode( reportEntry.getMessage() ) ) ); |
| |
| Stream out = Stream.newStream(); |
| LegacyMasterProcessChannelEncoder encoder = new LegacyMasterProcessChannelEncoder( newBufferedChannel( out ) ); |
| |
| encoder.testError( reportEntry, false ); |
| LineNumberReader printedLines = out.newReader( UTF_8 ); |
| assertThat( printedLines.readLine() ) |
| .isEqualTo( ":maven-surefire-event:test-error:normal-run:UTF-8:" |
| + encodedSourceName |
| + ":" |
| + "-" |
| + ":" |
| + encodedName |
| + ":" |
| + "-" |
| + ":" |
| + encodedGroup |
| + ":" |
| + encodedMessage |
| + ":" |
| + ELAPSED_TIME |
| + ":" |
| |
| + encodedExceptionMsg |
| + ":" |
| + encodedSmartStackTrace |
| + ":" |
| + encodedStackTrace |
| + ":" |
| ); |
| assertThat( printedLines.readLine() ).isNull(); |
| } |
| |
| @Test |
| public void testAssumptionFailure() throws IOException |
| { |
| String exceptionMessage = "msg"; |
| String encodedExceptionMsg = encodeBase64String( toArray( UTF_8.encode( exceptionMessage ) ) ); |
| |
| String smartStackTrace = "MyTest:86 >> Error"; |
| String encodedSmartStackTrace = encodeBase64String( toArray( UTF_8.encode( smartStackTrace ) ) ); |
| |
| String encodedStackTrace = "-"; |
| |
| SafeThrowable safeThrowable = new SafeThrowable( new Exception( exceptionMessage ) ); |
| StackTraceWriter stackTraceWriter = mock( StackTraceWriter.class ); |
| when( stackTraceWriter.getThrowable() ).thenReturn( safeThrowable ); |
| when( stackTraceWriter.smartTrimmedStackTrace() ).thenReturn( smartStackTrace ); |
| when( stackTraceWriter.writeTrimmedTraceToString() ).thenReturn( null ); |
| when( stackTraceWriter.writeTraceToString() ).thenReturn( null ); |
| |
| ReportEntry reportEntry = mock( ReportEntry.class ); |
| when( reportEntry.getElapsed() ).thenReturn( null ); |
| when( reportEntry.getGroup() ).thenReturn( "this group" ); |
| when( reportEntry.getMessage() ).thenReturn( "skipped test" ); |
| when( reportEntry.getName() ).thenReturn( "my test" ); |
| when( reportEntry.getNameWithGroup() ).thenReturn( "name with group" ); |
| when( reportEntry.getSourceName() ).thenReturn( "pkg.MyTest" ); |
| when( reportEntry.getStackTraceWriter() ).thenReturn( stackTraceWriter ); |
| |
| String encodedSourceName = encodeBase64String( toArray( UTF_8.encode( reportEntry.getSourceName() ) ) ); |
| String encodedName = encodeBase64String( toArray( UTF_8.encode( reportEntry.getName() ) ) ); |
| String encodedGroup = encodeBase64String( toArray( UTF_8.encode( reportEntry.getGroup() ) ) ); |
| String encodedMessage = encodeBase64String( toArray( UTF_8.encode( reportEntry.getMessage() ) ) ); |
| |
| Stream out = Stream.newStream(); |
| LegacyMasterProcessChannelEncoder encoder = new LegacyMasterProcessChannelEncoder( newBufferedChannel( out ) ); |
| |
| encoder.testAssumptionFailure( reportEntry, false ); |
| LineNumberReader printedLines = out.newReader( UTF_8 ); |
| assertThat( printedLines.readLine() ) |
| .isEqualTo( ":maven-surefire-event:test-assumption-failure:normal-run:UTF-8:" |
| + encodedSourceName |
| + ":" |
| + "-" |
| + ":" |
| + encodedName |
| + ":" |
| + "-" |
| + ":" |
| + encodedGroup |
| + ":" |
| + encodedMessage |
| + ":" |
| + "-" |
| + ":" |
| |
| + encodedExceptionMsg |
| + ":" |
| + encodedSmartStackTrace |
| + ":" |
| + encodedStackTrace |
| + ":" |
| ); |
| assertThat( printedLines.readLine() ).isNull(); |
| } |
| |
| @Test |
| public void testBye() throws IOException |
| { |
| Stream out = Stream.newStream(); |
| LegacyMasterProcessChannelEncoder encoder = new LegacyMasterProcessChannelEncoder( newBufferedChannel( out ) ); |
| |
| encoder.bye(); |
| LineNumberReader printedLines = out.newReader( UTF_8 ); |
| assertThat( printedLines.readLine() ) |
| .isEqualTo( ":maven-surefire-event:bye:" ); |
| assertThat( printedLines.readLine() ).isNull(); |
| } |
| |
| @Test |
| public void testStopOnNextTest() throws IOException |
| { |
| Stream out = Stream.newStream(); |
| LegacyMasterProcessChannelEncoder encoder = new LegacyMasterProcessChannelEncoder( newBufferedChannel( out ) ); |
| |
| encoder.stopOnNextTest(); |
| LineNumberReader printedLines = out.newReader( UTF_8 ); |
| assertThat( printedLines.readLine() ) |
| .isEqualTo( ":maven-surefire-event:stop-on-next-test:" ); |
| assertThat( printedLines.readLine() ).isNull(); |
| } |
| |
| @Test |
| public void testAcquireNextTest() throws IOException |
| { |
| Stream out = Stream.newStream(); |
| LegacyMasterProcessChannelEncoder encoder = new LegacyMasterProcessChannelEncoder( newBufferedChannel( out ) ); |
| |
| encoder.acquireNextTest(); |
| LineNumberReader printedLines = out.newReader( UTF_8 ); |
| assertThat( printedLines.readLine() ) |
| .isEqualTo( ":maven-surefire-event:next-test:" ); |
| assertThat( printedLines.readLine() ).isNull(); |
| } |
| |
| @Test |
| public void testSendOpcode() |
| { |
| StringBuilder encoded = encodeOpcode( "some-opcode", "normal-run" ); |
| assertThat( encoded.toString() ) |
| .isEqualTo( ":maven-surefire-event:some-opcode:normal-run:" ); |
| |
| encoded = encodeHeader( "some-opcode", "normal-run" ); |
| assertThat( encoded.toString() ) |
| .isEqualTo( ":maven-surefire-event:some-opcode:normal-run:UTF-8:" ); |
| |
| encoded = encodeMessage( "some-opcode", "normal-run", "msg" ); |
| assertThat( encoded.toString() ) |
| .isEqualTo( ":maven-surefire-event:some-opcode:normal-run:UTF-8:msg:" ); |
| |
| Stream out = Stream.newStream(); |
| LegacyMasterProcessChannelEncoder encoder = new LegacyMasterProcessChannelEncoder( newBufferedChannel( out ) ); |
| encoded = encoder.print( "some-opcode", "msg" ); |
| assertThat( encoded.toString() ) |
| .isEqualTo( ":maven-surefire-event:some-opcode:UTF-8:bXNn:" ); |
| |
| encoded = encoder.print( "some-opcode", new String[] { null } ); |
| assertThat( encoded.toString() ) |
| .isEqualTo( ":maven-surefire-event:some-opcode:UTF-8:-:" ); |
| } |
| |
| @Test |
| public void testConsoleInfo() |
| { |
| Stream out = Stream.newStream(); |
| LegacyMasterProcessChannelEncoder encoder = new LegacyMasterProcessChannelEncoder( newBufferedChannel( out ) ); |
| |
| encoder.consoleInfoLog( "msg" ); |
| |
| String encoded = new String( out.toByteArray(), UTF_8 ); |
| |
| String expected = ":maven-surefire-event:console-info-log:UTF-8:" |
| + encodeBase64String( toArray( UTF_8.encode( "msg" ) ) ) |
| + ":" |
| + "\n"; |
| |
| assertThat( encoded ) |
| .isEqualTo( expected ); |
| } |
| |
| @Test |
| public void testConsoleError() |
| { |
| Stream out = Stream.newStream(); |
| LegacyMasterProcessChannelEncoder encoder = new LegacyMasterProcessChannelEncoder( newBufferedChannel( out ) ); |
| |
| encoder.consoleErrorLog( "msg" ); |
| |
| String encoded = new String( out.toByteArray(), UTF_8 ); |
| |
| String expected = ":maven-surefire-event:console-error-log:UTF-8:" |
| + encodeBase64String( toArray( UTF_8.encode( "msg" ) ) ) |
| + ":-:-:\n"; |
| |
| assertThat( encoded ) |
| .isEqualTo( expected ); |
| } |
| |
| @Test |
| public void testConsoleErrorLog1() throws IOException |
| { |
| Stream out = Stream.newStream(); |
| LegacyMasterProcessChannelEncoder encoder = new LegacyMasterProcessChannelEncoder( newBufferedChannel( out ) ); |
| |
| encoder.consoleErrorLog( new Exception( "msg" ) ); |
| LineNumberReader printedLines = out.newReader( UTF_8 ); |
| assertThat( printedLines.readLine() ) |
| .startsWith( ":maven-surefire-event:console-error-log:UTF-8:bXNn:-:" ); |
| assertThat( printedLines.readLine() ).isNull(); |
| } |
| |
| @Test |
| public void testConsoleErrorLog2() throws IOException |
| { |
| Stream out = Stream.newStream(); |
| LegacyMasterProcessChannelEncoder encoder = new LegacyMasterProcessChannelEncoder( newBufferedChannel( out ) ); |
| |
| encoder.consoleErrorLog( "msg2", new Exception( "msg" ) ); |
| LineNumberReader printedLines = out.newReader( UTF_8 ); |
| assertThat( printedLines.readLine() ) |
| .startsWith( ":maven-surefire-event:console-error-log:UTF-8:bXNnMg==:-:" ); |
| assertThat( printedLines.readLine() ).isNull(); |
| } |
| |
| @Test |
| public void testConsoleErrorLog3() throws IOException |
| { |
| Stream out = Stream.newStream(); |
| LegacyMasterProcessChannelEncoder encoder = new LegacyMasterProcessChannelEncoder( newBufferedChannel( out ) ); |
| |
| StackTraceWriter stackTraceWriter = mock( StackTraceWriter.class ); |
| when( stackTraceWriter.getThrowable() ).thenReturn( new SafeThrowable( "1" ) ); |
| when( stackTraceWriter.smartTrimmedStackTrace() ).thenReturn( "2" ); |
| when( stackTraceWriter.writeTraceToString() ).thenReturn( "3" ); |
| when( stackTraceWriter.writeTrimmedTraceToString() ).thenReturn( "4" ); |
| |
| encoder.consoleErrorLog( stackTraceWriter, true ); |
| LineNumberReader printedLines = out.newReader( UTF_8 ); |
| assertThat( printedLines.readLine() ) |
| .startsWith( ":maven-surefire-event:console-error-log:UTF-8:MQ==:Mg==:NA==:" ); |
| assertThat( printedLines.readLine() ).isNull(); |
| } |
| |
| @Test |
| public void testConsoleDebug() |
| { |
| Stream out = Stream.newStream(); |
| LegacyMasterProcessChannelEncoder encoder = new LegacyMasterProcessChannelEncoder( newBufferedChannel( out ) ); |
| |
| encoder.consoleDebugLog( "msg" ); |
| |
| String encoded = new String( out.toByteArray(), UTF_8 ); |
| |
| String expected = ":maven-surefire-event:console-debug-log:UTF-8:" |
| + encodeBase64String( toArray( UTF_8.encode( "msg" ) ) ) |
| + ":" |
| + "\n"; |
| |
| assertThat( encoded ) |
| .isEqualTo( expected ); |
| } |
| |
| @Test |
| public void testConsoleWarning() |
| { |
| Stream out = Stream.newStream(); |
| LegacyMasterProcessChannelEncoder encoder = new LegacyMasterProcessChannelEncoder( newBufferedChannel( out ) ); |
| |
| encoder.consoleWarningLog( "msg" ); |
| |
| String encoded = new String( out.toByteArray(), UTF_8 ); |
| |
| String expected = ":maven-surefire-event:console-warning-log:UTF-8:" |
| + encodeBase64String( toArray( UTF_8.encode( "msg" ) ) ) |
| + ":" |
| + "\n"; |
| |
| assertThat( encoded ) |
| .isEqualTo( expected ); |
| } |
| |
| @Test |
| public void testStdOutStream() throws IOException |
| { |
| Stream out = Stream.newStream(); |
| WritableBufferedByteChannel channel = newBufferedChannel( out ); |
| LegacyMasterProcessChannelEncoder encoder = new LegacyMasterProcessChannelEncoder( channel ); |
| |
| encoder.stdOut( "msg", false ); |
| channel.close(); |
| |
| String expected = ":maven-surefire-event:std-out-stream:normal-run:UTF-8:bXNn:"; |
| |
| LineNumberReader printedLines = out.newReader( UTF_8 ); |
| assertThat( printedLines.readLine() ) |
| .isEqualTo( expected ); |
| assertThat( printedLines.readLine() ) |
| .isNull(); |
| } |
| |
| @Test |
| public void testStdOutStreamLn() throws IOException |
| { |
| Stream out = Stream.newStream(); |
| WritableBufferedByteChannel channel = newBufferedChannel( out ); |
| LegacyMasterProcessChannelEncoder encoder = new LegacyMasterProcessChannelEncoder( channel ); |
| |
| encoder.stdOut( "msg", true ); |
| channel.close(); |
| |
| String expected = ":maven-surefire-event:std-out-stream-new-line:normal-run:UTF-8:bXNn:"; |
| |
| LineNumberReader printedLines = out.newReader( UTF_8 ); |
| assertThat( printedLines.readLine() ) |
| .isEqualTo( expected ); |
| assertThat( printedLines.readLine() ) |
| .isNull(); |
| } |
| |
| @Test |
| public void testStdErrStream() throws IOException |
| { |
| Stream out = Stream.newStream(); |
| WritableBufferedByteChannel channel = newBufferedChannel( out ); |
| LegacyMasterProcessChannelEncoder encoder = new LegacyMasterProcessChannelEncoder( channel ); |
| |
| encoder.stdErr( "msg", false ); |
| channel.close(); |
| |
| String expected = ":maven-surefire-event:std-err-stream:normal-run:UTF-8:bXNn:"; |
| |
| LineNumberReader printedLines = out.newReader( UTF_8 ); |
| assertThat( printedLines.readLine() ) |
| .isEqualTo( expected ); |
| assertThat( printedLines.readLine() ) |
| .isNull(); |
| } |
| |
| @Test |
| public void testStdErrStreamLn() throws IOException |
| { |
| Stream out = Stream.newStream(); |
| WritableBufferedByteChannel channel = newBufferedChannel( out ); |
| LegacyMasterProcessChannelEncoder encoder = new LegacyMasterProcessChannelEncoder( channel ); |
| |
| encoder.stdErr( "msg", true ); |
| channel.close(); |
| |
| String expected = ":maven-surefire-event:std-err-stream-new-line:normal-run:UTF-8:bXNn:"; |
| |
| LineNumberReader printedLines = out.newReader( UTF_8 ); |
| assertThat( printedLines.readLine() ) |
| .isEqualTo( expected ); |
| assertThat( printedLines.readLine() ) |
| .isNull(); |
| } |
| |
| @Test |
| @SuppressWarnings( "checkstyle:innerassignment" ) |
| public void shouldCountSameNumberOfSystemProperties() throws IOException |
| { |
| Stream out = Stream.newStream(); |
| WritableBufferedByteChannel channel = newBufferedChannel( out ); |
| LegacyMasterProcessChannelEncoder encoder = new LegacyMasterProcessChannelEncoder( channel ); |
| |
| Map<String, String> sysProps = ObjectUtils.systemProps(); |
| int expectedSize = sysProps.size(); |
| encoder.sendSystemProperties( sysProps ); |
| channel.close(); |
| |
| LineNumberReader printedLines = out.newReader( UTF_8 ); |
| |
| int size = 0; |
| for ( String line; ( line = printedLines.readLine() ) != null; size++ ) |
| { |
| assertThat( line ) |
| .startsWith( ":maven-surefire-event:sys-prop:normal-run:UTF-8:" ); |
| } |
| |
| assertThat( size ) |
| .isEqualTo( expectedSize ); |
| } |
| |
| @Test |
| public void shouldHandleExit() throws IOException |
| { |
| Stream out = Stream.newStream(); |
| |
| LegacyMasterProcessChannelEncoder encoder = new LegacyMasterProcessChannelEncoder( newBufferedChannel( out ) ); |
| StackTraceWriter stackTraceWriter = mock( StackTraceWriter.class ); |
| when( stackTraceWriter.getThrowable() ).thenReturn( new SafeThrowable( "1" ) ); |
| when( stackTraceWriter.smartTrimmedStackTrace() ).thenReturn( "2" ); |
| when( stackTraceWriter.writeTraceToString() ).thenReturn( "3" ); |
| when( stackTraceWriter.writeTrimmedTraceToString() ).thenReturn( "4" ); |
| encoder.sendExitError( stackTraceWriter, false ); |
| |
| LineNumberReader printedLines = out.newReader( UTF_8 ); |
| assertThat( printedLines.readLine() ) |
| .startsWith( ":maven-surefire-event:jvm-exit-error:UTF-8:MQ==:Mg==:Mw==:" ); |
| } |
| |
| @Test |
| public void shouldHandleExitWithTrimmedTrace() throws IOException |
| { |
| Stream out = Stream.newStream(); |
| |
| LegacyMasterProcessChannelEncoder encoder = new LegacyMasterProcessChannelEncoder( newBufferedChannel( out ) ); |
| StackTraceWriter stackTraceWriter = mock( StackTraceWriter.class ); |
| when( stackTraceWriter.getThrowable() ).thenReturn( new SafeThrowable( "1" ) ); |
| when( stackTraceWriter.smartTrimmedStackTrace() ).thenReturn( "2" ); |
| when( stackTraceWriter.writeTraceToString() ).thenReturn( "3" ); |
| when( stackTraceWriter.writeTrimmedTraceToString() ).thenReturn( "4" ); |
| encoder.sendExitError( stackTraceWriter, true ); |
| |
| LineNumberReader printedLines = out.newReader( UTF_8 ); |
| assertThat( printedLines.readLine() ) |
| .startsWith( ":maven-surefire-event:jvm-exit-error:UTF-8:MQ==:Mg==:NA==:" ); |
| } |
| |
| private static class Stream extends PrintStream |
| { |
| private final ByteArrayOutputStream out; |
| |
| Stream( ByteArrayOutputStream out ) |
| { |
| super( out, true ); |
| this.out = out; |
| } |
| |
| byte[] toByteArray() |
| { |
| return out.toByteArray(); |
| } |
| |
| LineNumberReader newReader( Charset streamCharset ) |
| { |
| return new LineNumberReader( new StringReader( new String( toByteArray(), streamCharset ) ) ); |
| } |
| |
| static Stream newStream() |
| { |
| return new Stream( new ByteArrayOutputStream() ); |
| } |
| } |
| |
| private static byte[] toArray( ByteBuffer buffer ) |
| { |
| return copyOfRange( buffer.array(), buffer.arrayOffset(), buffer.arrayOffset() + buffer.remaining() ); |
| } |
| |
| } |