diff --git a/its/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng0768OfflineModeTest.java b/its/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng0768OfflineModeTest.java index 7b12a86e5a..23d5fad58f 100644 --- a/its/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng0768OfflineModeTest.java +++ b/its/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng0768OfflineModeTest.java @@ -23,6 +23,21 @@ import org.apache.maven.it.Verifier; import org.apache.maven.it.util.ResourceExtractor; import java.io.File; +import java.io.IOException; +import java.io.PrintWriter; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Properties; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.mortbay.jetty.Handler; +import org.mortbay.jetty.Request; +import org.mortbay.jetty.Server; +import org.mortbay.jetty.handler.AbstractHandler; /** * This is a test set for MNG-768. @@ -33,6 +48,7 @@ import java.io.File; public class MavenITmng0768OfflineModeTest extends AbstractMavenIntegrationTestCase { + public MavenITmng0768OfflineModeTest() { super( ALL_MAVEN_VERSIONS ); @@ -46,58 +62,116 @@ public class MavenITmng0768OfflineModeTest { File testDir = ResourceExtractor.simpleExtractResources( getClass(), "/mng-0768" ); - { - // phase 1: run build in online mode to fill local repo - Verifier verifier = new Verifier( testDir.getAbsolutePath() ); - verifier.setAutoclean( false ); - verifier.deleteDirectory( "target" ); - verifier.deleteArtifacts( "org.apache.maven.its.it0069" ); - verifier.setLogFileName( "log1.txt" ); - verifier.filterFile( "settings-template.xml", "settings.xml", "UTF-8", verifier.newDefaultFilterProperties() ); - verifier.getCliOptions().add( "--settings" ); - verifier.getCliOptions().add( "settings.xml" ); - verifier.executeGoal( "org.apache.maven.its.plugins:maven-it-plugin-dependency-resolution:2.1-SNAPSHOT:compile" ); - verifier.assertFilePresent( "target/compile.txt" ); - verifier.verifyErrorFreeLog(); - verifier.resetStreams(); - } + final List requestedUris = Collections.synchronizedList( new ArrayList() ); + Handler repoHandler = new AbstractHandler() { - // phase 2: run build in offline mode to check it still passes - // NOTE: We don't add the settings here to ensure Maven has no chance to access the required remote repo - Verifier verifier = new Verifier( testDir.getAbsolutePath() ); - verifier.setAutoclean( false ); - verifier.deleteDirectory( "target" ); - verifier.getCliOptions().add( "-o" ); - verifier.setLogFileName( "log2.txt" ); - verifier.executeGoal( "org.apache.maven.its.plugins:maven-it-plugin-dependency-resolution:2.1-SNAPSHOT:compile" ); - verifier.assertFilePresent( "target/compile.txt" ); - verifier.verifyErrorFreeLog(); - verifier.resetStreams(); - } - - { - // phase 3: delete test artifact and run build in offline mode to check it fails now - // NOTE: We add the settings again to offer Maven the bad choice of using the remote repo - Verifier verifier = new Verifier( testDir.getAbsolutePath() ); - verifier.setAutoclean( false ); - verifier.deleteDirectory( "target" ); - verifier.deleteArtifacts( "org.apache.maven.its.it0069" ); - verifier.getCliOptions().add( "-o" ); - verifier.getCliOptions().add( "--settings" ); - verifier.getCliOptions().add( "settings.xml" ); - verifier.setLogFileName( "log3.txt" ); - try + public void handle( String target, HttpServletRequest request, HttpServletResponse response, int dispatch ) + throws IOException, ServletException { + System.out.println( "Handling " + request.getMethod() + " " + request.getRequestURL() ); + + requestedUris.add( request.getRequestURI() ); + + PrintWriter writer = response.getWriter(); + + response.setStatus( HttpServletResponse.SC_OK ); + + if ( request.getRequestURI().endsWith( ".pom" ) ) + { + writer.println( "" ); + writer.println( " 4.0.0" ); + writer.println( " org.apache.maven.its.mng0768" ); + writer.println( " dep" ); + writer.println( " 0.1" ); + writer.println( "" ); + } + else if ( request.getRequestURI().endsWith( ".jar" ) ) + { + writer.println( "empty" ); + } + else if ( request.getRequestURI().endsWith( ".md5" ) || request.getRequestURI().endsWith( ".sha1" ) ) + { + response.setStatus( HttpServletResponse.SC_NOT_FOUND ); + } + + ( (Request) request ).setHandled( true ); + } + }; + + Server server = new Server( 0 ); + server.setHandler( repoHandler ); + server.start(); + int port = server.getConnectors()[0].getLocalPort(); + + try + { + { + // phase 1: run build in online mode to fill local repo + Verifier verifier = new Verifier( testDir.getAbsolutePath() ); + verifier.setAutoclean( false ); + verifier.deleteDirectory( "target" ); + verifier.deleteArtifacts( "org.apache.maven.its.mng0768" ); + verifier.setLogFileName( "log1.txt" ); + Properties props = new Properties(); + props.put( "@port@", Integer.toString( port ) ); + verifier.filterFile( "settings-template.xml", "settings.xml", "UTF-8", props ); + verifier.getCliOptions().add( "--settings" ); + verifier.getCliOptions().add( "settings.xml" ); verifier.executeGoal( "org.apache.maven.its.plugins:maven-it-plugin-dependency-resolution:2.1-SNAPSHOT:compile" ); + verifier.assertFilePresent( "target/compile.txt" ); verifier.verifyErrorFreeLog(); - fail( "Build did not fail to resolve missing dependency although Maven ought to work offline!" ); + verifier.resetStreams(); } - catch( VerificationException e ) + + requestedUris.clear(); + { - // expected, should fail + // phase 2: run build in offline mode to check it still passes, without network accesses + Verifier verifier = new Verifier( testDir.getAbsolutePath() ); + verifier.setAutoclean( false ); + verifier.deleteDirectory( "target" ); + verifier.getCliOptions().add( "-o" ); + verifier.getCliOptions().add( "--settings" ); + verifier.getCliOptions().add( "settings.xml" ); + verifier.setLogFileName( "log2.txt" ); + verifier.executeGoal( "org.apache.maven.its.plugins:maven-it-plugin-dependency-resolution:2.1-SNAPSHOT:compile" ); + verifier.assertFilePresent( "target/compile.txt" ); + verifier.verifyErrorFreeLog(); + verifier.resetStreams(); } - verifier.resetStreams(); + + assertTrue( requestedUris.toString(), requestedUris.isEmpty() ); + + { + // phase 3: delete test artifact and run build in offline mode to check it fails now + // NOTE: Adding the settings again to offer Maven the bad choice of using the remote repo + Verifier verifier = new Verifier( testDir.getAbsolutePath() ); + verifier.setAutoclean( false ); + verifier.deleteDirectory( "target" ); + verifier.deleteArtifacts( "org.apache.maven.its.mng0768" ); + verifier.getCliOptions().add( "-o" ); + verifier.getCliOptions().add( "--settings" ); + verifier.getCliOptions().add( "settings.xml" ); + verifier.setLogFileName( "log3.txt" ); + try + { + verifier.executeGoal( "org.apache.maven.its.plugins:maven-it-plugin-dependency-resolution:2.1-SNAPSHOT:compile" ); + verifier.verifyErrorFreeLog(); + fail( "Build did not fail to resolve missing dependency although Maven ought to work offline!" ); + } + catch( VerificationException e ) + { + // expected, should fail + } + verifier.resetStreams(); + } + + assertTrue( requestedUris.toString(), requestedUris.isEmpty() ); + } + finally + { + server.stop(); } } diff --git a/its/core-it-suite/src/test/resources/mng-0768/pom.xml b/its/core-it-suite/src/test/resources/mng-0768/pom.xml index b5801bb8e4..8f5f89127a 100644 --- a/its/core-it-suite/src/test/resources/mng-0768/pom.xml +++ b/its/core-it-suite/src/test/resources/mng-0768/pom.xml @@ -31,9 +31,9 @@ under the License. - org.apache.maven.its.it0069 - it - 1.0.3 + org.apache.maven.its.mng0768 + dep + 0.1 diff --git a/its/core-it-suite/src/test/resources/mng-0768/repo/org/apache/maven/its/it0069/it/1.0.3/it-1.0.3.jar b/its/core-it-suite/src/test/resources/mng-0768/repo/org/apache/maven/its/it0069/it/1.0.3/it-1.0.3.jar deleted file mode 100644 index 227d254909..0000000000 Binary files a/its/core-it-suite/src/test/resources/mng-0768/repo/org/apache/maven/its/it0069/it/1.0.3/it-1.0.3.jar and /dev/null differ diff --git a/its/core-it-suite/src/test/resources/mng-0768/repo/org/apache/maven/its/it0069/it/1.0.3/it-1.0.3.pom b/its/core-it-suite/src/test/resources/mng-0768/repo/org/apache/maven/its/it0069/it/1.0.3/it-1.0.3.pom deleted file mode 100644 index f9b9a1cff7..0000000000 --- a/its/core-it-suite/src/test/resources/mng-0768/repo/org/apache/maven/its/it0069/it/1.0.3/it-1.0.3.pom +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - 4.0.0 - - org.apache.maven.its.it0069 - it - 1.0.3 - jar - - - - it0069 - file:///${basedir}/repo - - - diff --git a/its/core-it-suite/src/test/resources/mng-0768/repo/org/apache/maven/its/it0069/it/maven-metadata.xml b/its/core-it-suite/src/test/resources/mng-0768/repo/org/apache/maven/its/it0069/it/maven-metadata.xml deleted file mode 100644 index 562240ab62..0000000000 --- a/its/core-it-suite/src/test/resources/mng-0768/repo/org/apache/maven/its/it0069/it/maven-metadata.xml +++ /dev/null @@ -1,11 +0,0 @@ - - org.apache.maven.its.it0069 - it - 1.0.3 - - - 1.0.3 - - 20080930194953 - - \ No newline at end of file diff --git a/its/core-it-suite/src/test/resources/mng-0768/settings-template.xml b/its/core-it-suite/src/test/resources/mng-0768/settings-template.xml index c985d1a689..63daa1e7d2 100644 --- a/its/core-it-suite/src/test/resources/mng-0768/settings-template.xml +++ b/its/core-it-suite/src/test/resources/mng-0768/settings-template.xml @@ -26,7 +26,7 @@ under the License. maven-core-it - @baseurl@/repo + http://localhost:@port@/ ignore