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 java.io.File;
23  import java.io.IOException;
24  import java.util.ArrayList;
25  import java.util.Collections;
26  import java.util.List;
27  
28  import javax.servlet.ServletException;
29  import javax.servlet.http.HttpServletRequest;
30  import javax.servlet.http.HttpServletResponse;
31  
32  import org.apache.maven.it.Verifier;
33  import org.apache.maven.it.util.ResourceExtractor;
34  import org.mortbay.jetty.Handler;
35  import org.mortbay.jetty.Request;
36  import org.mortbay.jetty.Server;
37  import org.mortbay.jetty.handler.AbstractHandler;
38  import org.mortbay.jetty.handler.HandlerList;
39  
40  /**
41   * This is a test set for <a href="http://jira.codehaus.org/browse/MNG-4781">MNG-4781</a>.
42   * 
43   * @author Benjamin Bentmann
44   */
45  public class MavenITmng4781DeploymentToNexusStagingRepoTest
46      extends AbstractMavenIntegrationTestCase
47  {
48  
49      private Server server;
50  
51      private int port;
52  
53      private List requestedUris = Collections.synchronizedList( new ArrayList() );
54  
55      private List deployedUris = Collections.synchronizedList( new ArrayList() );
56  
57      public MavenITmng4781DeploymentToNexusStagingRepoTest()
58      {
59          super( "[2.0.3,)" );
60      }
61  
62      public void setUp()
63          throws Exception
64      {
65          super.setUp();
66  
67          Handler repoHandler = new AbstractHandler()
68          {
69  
70              private boolean putSeen;
71  
72              public void handle( String target, HttpServletRequest request, HttpServletResponse response, int dispatch )
73                  throws IOException, ServletException
74              {
75                  System.out.println( "Handling " + request.getMethod() + " " + request.getRequestURL() );
76  
77                  if ( "PUT".equalsIgnoreCase( request.getMethod() ) )
78                  {
79                      response.setStatus( HttpServletResponse.SC_CREATED );
80                      deployedUris.add( request.getRequestURI() );
81                      putSeen = true;
82                  }
83                  else if ( !putSeen )
84                  {
85                      response.setStatus( HttpServletResponse.SC_BAD_REQUEST );
86                  }
87                  else
88                  {
89                      response.setStatus( HttpServletResponse.SC_NOT_FOUND );
90                      requestedUris.add( request.getRequestURI() );
91                  }
92  
93                  ( (Request) request ).setHandled( true );
94              }
95          };
96  
97          HandlerList handlerList = new HandlerList();
98          handlerList.addHandler( repoHandler );
99  
100         server = new Server( 0 );
101         server.setHandler( handlerList );
102         server.start();
103 
104         port = server.getConnectors()[0].getLocalPort();
105     }
106 
107     protected void tearDown()
108         throws Exception
109     {
110         if ( server != null )
111         {
112             server.stop();
113             server = null;
114         }
115 
116         requestedUris.clear();
117         deployedUris.clear();
118 
119         super.tearDown();
120     }
121 
122     /**
123      * Verify that deployment to a Nexus-like staging repository works. The subtle difference compared to an ordinary
124      * HTTP/WebDAV server is that those staging repos yield a HTTP 400 (and not 404) for every GET request until a
125      * PUT request is made (which initializes the staging repo). The bottom line is that remote metadata must not be
126      * requested before the first artifact is deployed.
127      */
128     public void testit()
129         throws Exception
130     {
131         File testDir = ResourceExtractor.simpleExtractResources( getClass(), "/mng-4781" );
132 
133         Verifier verifier = newVerifier( testDir.getAbsolutePath() );
134         verifier.setAutoclean( false );
135         verifier.getCliOptions().add( "-DdeploymentPort=" + port );
136         verifier.executeGoal( "validate" );
137         verifier.verifyErrorFreeLog();
138         verifier.resetStreams();
139 
140         assertTrue( deployedUris.toString(), 
141             deployedUris.contains( "/repo/org/apache/maven/its/mng4781/release/1.0/release-1.0.jar" ) );
142         assertTrue( deployedUris.toString(), 
143             deployedUris.contains( "/repo/org/apache/maven/its/mng4781/release/1.0/release-1.0.pom" ) );
144         assertTrue( deployedUris.toString(), 
145             deployedUris.contains( "/repo/org/apache/maven/its/mng4781/release/maven-metadata.xml" ) );
146 
147         assertTrue( requestedUris.toString(), 
148             deployedUris.contains( "/repo/org/apache/maven/its/mng4781/release/maven-metadata.xml" ) );
149     }
150 
151 }