View Javadoc

1   package org.apache.maven.it;
2   
3   /*
4    * Licensed to the Apache Software Foundation (ASF) under one
5    * or more contributor license agreements.  See the NOTICE file
6    * distributed with this work for additional information
7    * regarding copyright ownership.  The ASF licenses this file
8    * to you under the Apache License, Version 2.0 (the
9    * "License"); you may not use this file except in compliance
10   * with the License.  You may obtain a copy of the License at
11   *
12   *   http://www.apache.org/licenses/LICENSE-2.0
13   *
14   * Unless required by applicable law or agreed to in writing,
15   * software distributed under the License is distributed on an
16   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17   * KIND, either express or implied.  See the License for the
18   * specific language governing permissions and limitations
19   * under the License.
20   */
21  
22  import org.apache.maven.it.Verifier;
23  import org.apache.maven.it.util.ResourceExtractor;
24  
25  import java.io.File;
26  import java.io.IOException;
27  import java.io.PrintWriter;
28  import java.util.ArrayList;
29  import java.util.Collections;
30  import java.util.List;
31  import java.util.Properties;
32  
33  import javax.servlet.ServletException;
34  import javax.servlet.http.HttpServletRequest;
35  import javax.servlet.http.HttpServletResponse;
36  
37  import org.mortbay.jetty.Handler;
38  import org.mortbay.jetty.Request;
39  import org.mortbay.jetty.Server;
40  import org.mortbay.jetty.handler.AbstractHandler;
41  
42  /**
43   * This is a test set for <a href="http://jira.codehaus.org/browse/MNG-4343">MNG-4343</a>.
44   * 
45   * @author Benjamin Bentmann
46   * @version $Id: MavenITmng4343MissingReleaseUpdatePolicyTest.java 981712 2010-08-03 00:36:19Z bentmann $
47   */
48  public class MavenITmng4343MissingReleaseUpdatePolicyTest
49      extends AbstractMavenIntegrationTestCase
50  {
51  
52      private Server server;
53  
54      private List requestedUris;
55  
56      private volatile boolean blockAccess;
57  
58      public MavenITmng4343MissingReleaseUpdatePolicyTest()
59      {
60          super( "[3.0-alpha-3,)" );
61      }
62  
63      protected void setUp()
64          throws Exception
65      {
66          Handler repoHandler = new AbstractHandler()
67          {
68              public void handle( String target, HttpServletRequest request, HttpServletResponse response, int dispatch )
69                  throws IOException, ServletException
70              {
71                  System.out.println( "Handling " + request.getMethod() + " " + request.getRequestURL() );
72  
73                  if ( request.getRequestURI().startsWith( "/org/apache/maven/its/mng4343" ) )
74                  {
75                      requestedUris.add( request.getRequestURI().substring( 29 ) );
76                  }
77  
78                  if ( blockAccess )
79                  {
80                      response.setStatus( HttpServletResponse.SC_NOT_FOUND );
81                  }
82                  else
83                  {
84                      PrintWriter writer = response.getWriter();
85      
86                      response.setStatus( HttpServletResponse.SC_OK );
87      
88                      if ( request.getRequestURI().endsWith( ".pom" ) )
89                      {
90                          writer.println( "<project>" );
91                          writer.println( "  <modelVersion>4.0.0</modelVersion>" );
92                          writer.println( "  <groupId>org.apache.maven.its.mng4343</groupId>" );
93                          writer.println( "  <artifactId>dep</artifactId>" );
94                          writer.println( "  <version>0.1</version>" );
95                          writer.println( "</project>" );
96                      }
97                      else if ( request.getRequestURI().endsWith( ".jar" ) )
98                      {
99                          writer.println( "empty" );
100                     }
101                     else if ( request.getRequestURI().endsWith( ".md5" ) || request.getRequestURI().endsWith( ".sha1" ) )
102                     {
103                         response.setStatus( HttpServletResponse.SC_NOT_FOUND );
104                     }
105                 }
106 
107                 ( (Request) request ).setHandled( true );
108             }
109         };
110 
111         server = new Server( 0 );
112         server.setHandler( repoHandler );
113         server.start();
114 
115         requestedUris = Collections.synchronizedList( new ArrayList() );
116     }
117 
118     protected void tearDown()
119         throws Exception
120     {
121         if ( server != null )
122         {
123             server.stop();
124             server = null;
125         }
126         requestedUris = null;
127     }
128 
129     /**
130      * Verify that checking for *missing* release artifacts respects the update policy that is configured in the
131      * release section for the respective repository, in this case "always".
132      */
133     public void testitAlways()
134         throws Exception
135     {
136         File testDir = ResourceExtractor.simpleExtractResources( getClass(), "/mng-4343" );
137 
138         Verifier verifier = newVerifier( testDir.getAbsolutePath() );
139         verifier.setAutoclean( false );
140         verifier.deleteArtifacts( "org.apache.maven.its.mng4343" );
141         verifier.getCliOptions().add( "-s" );
142         verifier.getCliOptions().add( "settings.xml" );
143 
144         Properties filterProps = verifier.newDefaultFilterProperties();
145         filterProps.setProperty( "@updates@", "always" );
146         filterProps.setProperty( "@port@", Integer.toString( server.getConnectors()[0].getLocalPort() ) );
147         verifier.filterFile( "settings-template.xml", "settings.xml", "UTF-8", filterProps );
148 
149         blockAccess = true;
150 
151         verifier.setLogFileName( "log-always-1.txt" );
152         try
153         {
154             verifier.executeGoal( "validate" );
155             verifier.verifyErrorFreeLog();
156             fail( "Build succeeded despite missing dependency" );
157         }
158         catch ( VerificationException e )
159         {
160             // expected
161         }
162 
163         assertTrue( requestedUris.toString(), 
164             requestedUris.contains( "/dep/0.1/dep-0.1.jar" ) || requestedUris.contains( "/dep/0.1/dep-0.1.pom" ) );
165         requestedUris.clear();
166 
167         blockAccess = false;
168 
169         verifier.setLogFileName( "log-always-2.txt" );
170         verifier.executeGoal( "validate" );
171         verifier.verifyErrorFreeLog();
172 
173         assertTrue( requestedUris.toString(), requestedUris.contains( "/dep/0.1/dep-0.1.jar" ) );
174         assertTrue( requestedUris.toString(), requestedUris.contains( "/dep/0.1/dep-0.1.pom" ) );
175         verifier.assertArtifactPresent( "org.apache.maven.its.mng4343", "dep", "0.1", "jar" );
176         verifier.assertArtifactPresent( "org.apache.maven.its.mng4343", "dep", "0.1", "pom" );
177 
178         verifier.resetStreams();
179     }
180 
181     /**
182      * Verify that checking for *missing* release artifacts respects the update policy that is configured in the
183      * release section for the respective repository, in this case "never", unless overriden from the CLI via -U.
184      */
185     public void testitNever()
186         throws Exception
187     {
188         File testDir = ResourceExtractor.simpleExtractResources( getClass(), "/mng-4343" );
189 
190         Verifier verifier = newVerifier( testDir.getAbsolutePath() );
191         verifier.setAutoclean( false );
192         verifier.deleteArtifacts( "org.apache.maven.its.mng4343" );
193         verifier.getCliOptions().add( "-s" );
194         verifier.getCliOptions().add( "settings.xml" );
195 
196         Properties filterProps = verifier.newDefaultFilterProperties();
197         filterProps.setProperty( "@updates@", "never" );
198         filterProps.setProperty( "@port@", Integer.toString( server.getConnectors()[0].getLocalPort() ) );
199         verifier.filterFile( "settings-template.xml", "settings.xml", "UTF-8", filterProps );
200 
201         blockAccess = true;
202 
203         verifier.setLogFileName( "log-never-1.txt" );
204         try
205         {
206             verifier.executeGoal( "validate" );
207             verifier.verifyErrorFreeLog();
208             fail( "Build succeeded despite missing dependency" );
209         }
210         catch ( VerificationException e )
211         {
212             // expected
213         }
214 
215         assertTrue( requestedUris.toString(), 
216             requestedUris.contains( "/dep/0.1/dep-0.1.jar" ) || requestedUris.contains( "/dep/0.1/dep-0.1.pom" ) );
217         requestedUris.clear();
218 
219         blockAccess = false;
220 
221         verifier.setLogFileName( "log-never-2.txt" );
222         try
223         {
224             verifier.executeGoal( "validate" );
225             verifier.verifyErrorFreeLog();
226             fail( "Remote repository was accessed despite updatePolicy=never" );
227         }
228         catch ( VerificationException e )
229         {
230             // expected
231         }
232 
233         assertEquals( new ArrayList(), requestedUris );
234         verifier.assertArtifactNotPresent( "org.apache.maven.its.mng4343", "dep", "0.1", "jar" );
235         verifier.assertArtifactNotPresent( "org.apache.maven.its.mng4343", "dep", "0.1", "pom" );
236 
237         verifier.setLogFileName( "log-never-3.txt" );
238         verifier.getCliOptions().add( "-U" );
239         verifier.executeGoal( "validate" );
240         verifier.verifyErrorFreeLog();
241 
242         assertTrue( requestedUris.toString(), requestedUris.contains( "/dep/0.1/dep-0.1.jar" ) );
243         assertTrue( requestedUris.toString(), requestedUris.contains( "/dep/0.1/dep-0.1.pom" ) );
244         verifier.assertArtifactPresent( "org.apache.maven.its.mng4343", "dep", "0.1", "jar" );
245         verifier.assertArtifactPresent( "org.apache.maven.its.mng4343", "dep", "0.1", "pom" );
246 
247         requestedUris.clear();
248 
249         verifier.setLogFileName( "log-never-4.txt" );
250         verifier.getCliOptions().add( "-U" );
251         verifier.executeGoal( "validate" );
252         verifier.verifyErrorFreeLog();
253 
254         assertEquals( new ArrayList(), requestedUris );
255 
256         verifier.resetStreams();
257     }
258 
259 }