1 package org.apache.continuum.webdav;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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 }