blob: 337ccbee419a7daba7f8d850875944a8d11fa320 [file] [log] [blame]
package org.apache.maven.it;
import org.apache.maven.shared.verifier.util.ResourceExtractor;
import org.apache.maven.shared.verifier.Verifier;
import java.io.File;
import java.util.HashMap;
import java.util.Map;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
/**
* This is a test set for <a href="https://issues.apache.org/jira/browse/MNG-7470">MNG-7470</a>:
* check that Maven two bundled transports works as expected.
*/
public class MavenITmng7470ResolverTransportTest
extends AbstractMavenIntegrationTestCase
{
private File projectDir;
private HttpServer server;
private int port;
public MavenITmng7470ResolverTransportTest()
{
super( "[3.9.0,)" );
}
@BeforeEach
protected void setUp()
throws Exception
{
File testDir = ResourceExtractor.simpleExtractResources( getClass(), "/mng-7470-resolver-transport" );
projectDir = new File( testDir, "project" );
server = HttpServer.builder()
.port( 0 )
.source( new File( testDir, "repo" ) )
.build();
server.start();
if ( server.isFailed() )
{
fail( "Couldn't bind the server socket to a free port!" );
}
port = server.port();
System.out.println( "Bound server socket to the port " + port );
}
@AfterEach
protected void tearDown()
throws Exception
{
if ( server != null )
{
server.stop();
server.join();
}
}
private void performTest( /* nullable */ final String transport, final String logSnippet ) throws Exception
{
Verifier verifier = newVerifier( projectDir.getAbsolutePath() );
verifier.setForkJvm( true );
Map<String, String> properties = new HashMap<>();
properties.put( "@port@", Integer.toString( port ) );
verifier.filterFile( "settings-template.xml", "settings.xml", "UTF-8", properties );
if ( transport == null )
{
verifier.setLogFileName( "default-transport.log" );
}
else
{
verifier.setLogFileName( transport + "-transport.log" );
}
verifier.deleteDirectory( "target" );
verifier.deleteArtifacts( "org.apache.maven.resolver.resolver-demo-maven-plugin" );
verifier.deleteArtifacts( "org.apache.maven.its.resolver-transport" );
verifier.addCliOption( "-X" );
verifier.addCliOption( "-s" );
verifier.addCliOption( new File( projectDir, "settings.xml" ).getAbsolutePath() );
verifier.addCliOption( "-Pmaven-core-it-repo" );
if ( transport != null )
{
verifier.addCliOption( "-Dmaven.resolver.transport=" + transport );
}
// Maven will fail if project dependencies cannot be resolved.
// As dependency exists ONLY in HTTP repo, it MUST be reached using selected transport and
// successfully resolved from it.
verifier.executeGoal( "verify" );
verifier.verifyErrorFreeLog();
// verify maven console output contains "[DEBUG] Using transporter XXXTransporter"
verifier.verifyTextInLog( logSnippet );
}
private static final String WAGON_LOG_SNIPPET = "[DEBUG] Using transporter WagonTransporter";
private static final String NATIVE_LOG_SNIPPET = "[DEBUG] Using transporter HttpTransporter";
@Test
public void testResolverTransportDefault()
throws Exception
{
if ( matchesVersionRange( "[4.0.0-alpha-3,)" ) )
{
performTest( null, NATIVE_LOG_SNIPPET );
}
else // [3.9.0,) but not 4, see above and ctor
{
performTest( null, WAGON_LOG_SNIPPET );
}
}
@Test
public void testResolverTransportWagon()
throws Exception
{
performTest( "wagon", WAGON_LOG_SNIPPET );
}
@Test
public void testResolverTransportNative()
throws Exception
{
performTest( "native", NATIVE_LOG_SNIPPET );
}
}