package org.apache.maven.surefire.booter; /* * 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 junit.framework.TestCase; import org.junit.Rule; import org.junit.rules.ExpectedException; import java.io.ByteArrayInputStream; import java.io.DataInputStream; import java.io.IOException; import static org.apache.maven.surefire.booter.MasterProcessCommand.*; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.*; /** * @author <a href="mailto:tibordigana@apache.org">Tibor Digana (tibor17)</a> * @since 2.19 */ public class MasterProcessCommandTest extends TestCase { @Rule public final ExpectedException exception = ExpectedException.none(); public void testEncodedStreamSequence() { byte[] streamSequence = new byte[10]; streamSequence[8] = (byte) 'T'; streamSequence[9] = (byte) 'e'; setCommandAndDataLength( 256, 2, streamSequence ); assertEquals( streamSequence[0], (byte) 0 ); assertEquals( streamSequence[1], (byte) 0 ); assertEquals( streamSequence[2], (byte) 1 ); assertEquals( streamSequence[3], (byte) 0 ); assertEquals( streamSequence[4], (byte) 0 ); assertEquals( streamSequence[5], (byte) 0 ); assertEquals( streamSequence[6], (byte) 0 ); assertEquals( streamSequence[7], (byte) 2 ); // remain unchanged assertEquals( streamSequence[8], (byte) 'T' ); assertEquals( streamSequence[9], (byte) 'e' ); } public void testResolved() { for ( MasterProcessCommand command : MasterProcessCommand.values() ) { assertThat( command, is( resolve( command.getId() ) ) ); } } public void testDataToByteArrayAndBack() { String dummyData = "pkg.Test"; for ( MasterProcessCommand command : MasterProcessCommand.values() ) { switch ( command ) { case RUN_CLASS: assertEquals( String.class, command.getDataType() ); byte[] encoded = command.fromDataType( dummyData ); assertThat( encoded.length, is( 8 ) ); assertThat( encoded[0], is( (byte) 'p' ) ); assertThat( encoded[1], is( (byte) 'k' ) ); assertThat( encoded[2], is( (byte) 'g' ) ); assertThat( encoded[3], is( (byte) '.' ) ); assertThat( encoded[4], is( (byte) 'T' ) ); assertThat( encoded[5], is( (byte) 'e' ) ); assertThat( encoded[6], is( (byte) 's' ) ); assertThat( encoded[7], is( (byte) 't' ) ); String decoded = command.toDataTypeAsString( encoded ); assertThat( decoded, is( dummyData ) ); break; case TEST_SET_FINISHED: assertEquals( Void.class, command.getDataType() ); encoded = command.fromDataType( dummyData ); assertThat( encoded.length, is( 0 ) ); decoded = command.toDataTypeAsString( encoded ); assertNull( decoded ); break; case SKIP_SINCE_NEXT_TEST: assertEquals( Void.class, command.getDataType() ); encoded = command.fromDataType( dummyData ); assertThat( encoded.length, is( 0 ) ); decoded = command.toDataTypeAsString( encoded ); assertNull( decoded ); break; case SHUTDOWN: assertEquals( String.class, command.getDataType() ); encoded = command.fromDataType( Shutdown.EXIT.name() ); assertThat( encoded.length, is( 4 ) ); decoded = command.toDataTypeAsString( encoded ); assertThat( decoded, is( Shutdown.EXIT.name() ) ); break; case NOOP: assertEquals( Void.class, command.getDataType() ); encoded = command.fromDataType( dummyData ); assertThat( encoded.length, is( 0 ) ); decoded = command.toDataTypeAsString( encoded ); assertNull( decoded ); break; case BYE_ACK: assertEquals( Void.class, command.getDataType() ); encoded = command.fromDataType( dummyData ); assertThat( encoded.length, is( 0 ) ); decoded = command.toDataTypeAsString( encoded ); assertNull( decoded ); break; default: fail(); } assertThat( command, is( resolve( command.getId() ) ) ); } } public void testEncodedDecodedIsSameForRunClass() throws IOException { byte[] encoded = RUN_CLASS.encode( "pkg.Test" ); assertThat( encoded.length, is( 16 ) ); assertThat( encoded[0], is( (byte) 0 ) ); assertThat( encoded[1], is( (byte) 0 ) ); assertThat( encoded[2], is( (byte) 0 ) ); assertThat( encoded[3], is( (byte) 0 ) ); assertThat( encoded[4], is( (byte) 0 ) ); assertThat( encoded[5], is( (byte) 0 ) ); assertThat( encoded[6], is( (byte) 0 ) ); assertThat( encoded[7], is( (byte) 8 ) ); assertThat( encoded[8], is( (byte) 'p' ) ); assertThat( encoded[9], is( (byte) 'k' ) ); assertThat( encoded[10], is( (byte) 'g' ) ); assertThat( encoded[11], is( (byte) '.' ) ); assertThat( encoded[12], is( (byte) 'T' ) ); assertThat( encoded[13], is( (byte) 'e' ) ); assertThat( encoded[14], is( (byte) 's' ) ); assertThat( encoded[15], is( (byte) 't' ) ); Command command = decode( new DataInputStream( new ByteArrayInputStream( encoded ) ) ); assertNotNull( command ); assertThat( command.getCommandType(), is( RUN_CLASS ) ); assertThat( command.getData(), is( "pkg.Test" ) ); } }