View Javadoc

1   package org.apache.continuum.webdav;
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 com.meterware.httpunit.GetMethodWebRequest;
23  import com.meterware.httpunit.HttpUnitOptions;
24  import com.meterware.httpunit.WebLink;
25  import com.meterware.httpunit.WebRequest;
26  import com.meterware.httpunit.WebResponse;
27  import com.meterware.servletunit.ServletRunner;
28  import com.meterware.servletunit.ServletUnitClient;
29  import net.sf.ehcache.CacheManager;
30  import org.apache.commons.io.FileUtils;
31  import org.apache.commons.io.IOUtils;
32  import org.codehaus.plexus.spring.PlexusInSpringTestCase;
33  import org.codehaus.plexus.util.Base64;
34  
35  import java.io.File;
36  import java.io.IOException;
37  import javax.servlet.http.HttpServletResponse;
38  
39  public class WorkingCopyServletTest
40      extends PlexusInSpringTestCase
41  {
42      private static final String REQUEST_PATH = "http://machine.com/workingcopy/1/";
43  
44      private WebRequest request;
45  
46      private WebResponse response;
47  
48      private ServletRunner sr;
49  
50      private ServletUnitClient sc;
51  
52      private File workingDirectory;
53  
54      @Override
55      protected void setUp()
56          throws Exception
57      {
58          super.setUp();
59  
60          String appserverBase = getTestFile( "target/appserver-base" ).getAbsolutePath();
61          System.setProperty( "appserver.base", appserverBase );
62  
63          workingDirectory = new File( appserverBase, "data/working-directory" );
64  
65          CacheManager.getInstance().removeCache( "url-failures-cache" );
66  
67          HttpUnitOptions.setExceptionsThrownOnErrorStatus( false );
68  
69          sr = new ServletRunner( getTestFile( "src/test/resources/WEB-INF/web.xml" ) );
70          sr.registerServlet( "/workingcopy/*", MockWorkingCopyServlet.class.getName() );
71          sc = sr.newClient();
72  
73          new File( workingDirectory, "1/src/main/java/org/apache/continuum" ).mkdirs();
74          new File( workingDirectory, "1/src/main/java/org/apache/continuum/App.java" ).createNewFile();
75          new File( workingDirectory, "1/src/test" ).mkdirs();
76          new File( workingDirectory, "1/pom.xml" ).createNewFile();
77          new File( workingDirectory, "1/target" ).mkdir();
78          new File( workingDirectory, "1/target/continuum-artifact-1.0.jar" ).createNewFile();
79      }
80  
81      @Override
82      protected void tearDown()
83          throws Exception
84      {
85          if ( sc != null )
86          {
87              sc.clearContents();
88          }
89  
90          if ( sr != null )
91          {
92              sr.shutDown();
93          }
94  
95          if ( workingDirectory.exists() )
96          {
97              FileUtils.deleteDirectory( workingDirectory );
98          }
99  
100         super.tearDown();
101     }
102 
103     public void testGetWorkingCopy()
104         throws Exception
105     {
106         MockWorkingCopyServlet servlet = (MockWorkingCopyServlet) sc.newInvocation( REQUEST_PATH ).getServlet();
107         assertNotNull( servlet );
108     }
109 
110     public void testBrowse()
111         throws Exception
112     {
113         request = new GetMethodWebRequest( REQUEST_PATH );
114         request.setHeaderField( "Authorization", getAuthorizationHeader() );
115 
116         response = sc.getResponse( request );
117         assertEquals( "Response", HttpServletResponse.SC_OK, response.getResponseCode() );
118 
119         String expectedLinks[] = new String[]{"pom.xml", "src/", "target/"};
120         assertLinks( expectedLinks, response.getLinks() );
121     }
122 
123     public void testBrowseSubDirectory()
124         throws Exception
125     {
126         request = new GetMethodWebRequest( REQUEST_PATH + "src/" );
127         request.setHeaderField( "Authorization", getAuthorizationHeader() );
128 
129         response = sc.getResponse( request );
130         assertEquals( "Response", HttpServletResponse.SC_OK, response.getResponseCode() );
131 
132         String expectedLinks[] = new String[]{"../", "main/", "test/"};
133         assertLinks( expectedLinks, response.getLinks() );
134     }
135 
136     public void testGetFile()
137         throws Exception
138     {
139         request = new GetMethodWebRequest( REQUEST_PATH + "src/main/java/org/apache/continuum" );
140         request.setHeaderField( "Authorization", getAuthorizationHeader() );
141         response = sc.getResponse( request );
142         assertEquals( "Response", HttpServletResponse.SC_OK, response.getResponseCode() );
143 
144         request = new GetMethodWebRequest( REQUEST_PATH + "src/main/java/org/apache/continuum/" );
145         request.setHeaderField( "Authorization", getAuthorizationHeader() );
146         response = sc.getResponse( request );
147         assertEquals( "Response", HttpServletResponse.SC_OK, response.getResponseCode() );
148 
149         request = new GetMethodWebRequest( REQUEST_PATH + "src/main/java/org/apache/continuum/App.java" );
150         request.setHeaderField( "Authorization", getAuthorizationHeader() );
151         response = sc.getResponse( request );
152         assertEquals( "Response", HttpServletResponse.SC_OK, response.getResponseCode() );
153 
154         request = new GetMethodWebRequest( REQUEST_PATH + "src/main/java/org/apache/continuum/App.java/" );
155         request.setHeaderField( "Authorization", getAuthorizationHeader() );
156         response = sc.getResponse( request );
157         assertEquals( "Response", HttpServletResponse.SC_NOT_FOUND, response.getResponseCode() );
158 
159         request = new GetMethodWebRequest( REQUEST_PATH + "pom.xml" );
160         request.setHeaderField( "Authorization", getAuthorizationHeader() );
161         response = sc.getResponse( request );
162         assertEquals( "Response", HttpServletResponse.SC_OK, response.getResponseCode() );
163 
164         request = new GetMethodWebRequest( REQUEST_PATH + "pom.xml/" );
165         request.setHeaderField( "Authorization", getAuthorizationHeader() );
166         response = sc.getResponse( request );
167         assertEquals( "Response", HttpServletResponse.SC_NOT_FOUND, response.getResponseCode() );
168 
169         request = new GetMethodWebRequest( REQUEST_PATH + "target/continuum-artifact-1.0.jar" );
170         request.setHeaderField( "Authorization", getAuthorizationHeader() );
171         response = sc.getResponse( request );
172         assertEquals( "Response", HttpServletResponse.SC_OK, response.getResponseCode() );
173 
174         request = new GetMethodWebRequest( REQUEST_PATH + "target/continuum-artifact-1.0.jar/" );
175         request.setHeaderField( "Authorization", getAuthorizationHeader() );
176         response = sc.getResponse( request );
177         assertEquals( "Response", HttpServletResponse.SC_NOT_FOUND, response.getResponseCode() );
178     }
179 
180     private void assertLinks( String expectedLinks[], WebLink actualLinks[] )
181     {
182         assertEquals( "Links.length", expectedLinks.length, actualLinks.length );
183         for ( int i = 0; i < actualLinks.length; i++ )
184         {
185             assertEquals( "Link[" + i + "]", expectedLinks[i], actualLinks[i].getURLString() );
186         }
187     }
188 
189     private String getAuthorizationHeader()
190     {
191         try
192         {
193             String encodedPassword = IOUtils.toString( Base64.encodeBase64( ":secret".getBytes() ) );
194             return "Basic " + encodedPassword;
195         }
196         catch ( IOException e )
197         {
198             return "";
199         }
200     }
201 }