]> source.dussan.org Git - archiva.git/blob
5fb51299171da7ab7894ecc46b45ac1453f252ea
[archiva.git] /
1 package org.apache.archiva.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.HttpUnitOptions;
23 import com.meterware.httpunit.WebResponse;
24 import com.meterware.servletunit.ServletRunner;
25 import com.meterware.servletunit.ServletUnitClient;
26 import junit.framework.Assert;
27 import junit.framework.TestCase;
28 import net.sf.ehcache.CacheManager;
29 import org.apache.archiva.admin.model.beans.ManagedRepository;
30 import org.apache.archiva.configuration.ArchivaConfiguration;
31 import org.apache.archiva.configuration.Configuration;
32 import org.apache.archiva.configuration.ManagedRepositoryConfiguration;
33 import org.apache.archiva.configuration.RemoteRepositoryConfiguration;
34 import org.apache.archiva.webdav.util.MavenIndexerCleaner;
35 import org.apache.commons.io.FileUtils;
36 import org.junit.After;
37 import org.junit.Before;
38 import org.junit.runner.RunWith;
39 import org.slf4j.Logger;
40 import org.slf4j.LoggerFactory;
41 import org.springframework.context.ApplicationContext;
42 import org.springframework.test.context.ContextConfiguration;
43
44 import javax.inject.Inject;
45 import javax.servlet.http.HttpServletResponse;
46 import java.io.File;
47 import java.io.IOException;
48 import org.apache.archiva.test.ArchivaSpringJUnit4ClassRunner;
49
50 /**
51  * AbstractRepositoryServletTestCase
52  *
53  * @version $Id$
54  */
55 @RunWith( ArchivaSpringJUnit4ClassRunner.class )
56 @ContextConfiguration( locations = { "classpath*:/repository-servlet-simple.xml" } )
57 public abstract class AbstractRepositoryServletTestCase
58     extends TestCase
59 {
60     protected static final String REPOID_INTERNAL = "internal";
61
62     protected static final String REPOID_LEGACY = "legacy";
63
64     protected File repoRootInternal;
65
66     protected File repoRootLegacy;
67
68     protected ServletUnitClient servletUnitClient;
69
70     private ServletRunner servletRunner;
71
72     protected ArchivaConfiguration archivaConfiguration;
73
74     @Inject
75     protected ApplicationContext applicationContext;
76
77     protected Logger log = LoggerFactory.getLogger( getClass() );
78
79
80     protected void saveConfiguration()
81         throws Exception
82     {
83         saveConfiguration( archivaConfiguration );
84     }
85
86     @Before
87     public void setUp()
88         throws Exception
89     {
90
91         super.setUp();
92
93         String appserverBase = new File( "target/appserver-base" ).getAbsolutePath();
94         System.setProperty( "appserver.base", appserverBase );
95
96         File testConf = new File( "src/test/resources/repository-archiva.xml" );
97         File testConfDest = new File( appserverBase, "conf/archiva.xml" );
98         if ( testConfDest.exists() )
99         {
100             FileUtils.deleteQuietly( testConfDest );
101         }
102         FileUtils.copyFile( testConf, testConfDest );
103
104         archivaConfiguration = applicationContext.getBean( ArchivaConfiguration.class );
105
106         repoRootInternal = new File( appserverBase, "data/repositories/internal" );
107         repoRootLegacy = new File( appserverBase, "data/repositories/legacy" );
108         Configuration config = archivaConfiguration.getConfiguration();
109
110         config.getManagedRepositories().clear();
111
112         config.addManagedRepository(
113             createManagedRepository( REPOID_INTERNAL, "Internal Test Repo", repoRootInternal, true ) );
114
115         config.addManagedRepository(
116             createManagedRepository( REPOID_LEGACY, "Legacy Format Test Repo", repoRootLegacy, "legacy", true ) );
117
118         config.getProxyConnectors().clear();
119
120         config.getRemoteRepositories().clear();
121
122         saveConfiguration( archivaConfiguration );
123
124         CacheManager.getInstance().clearAll();
125
126         HttpUnitOptions.setExceptionsThrownOnErrorStatus( false );
127
128         applicationContext.getBean( MavenIndexerCleaner.class ).cleanupIndex();
129
130     }
131
132     protected ServletUnitClient getServletUnitClient()
133         throws Exception
134     {
135         if ( servletUnitClient != null )
136         {
137             return servletUnitClient;
138         }
139         servletRunner = new ServletRunner( new File( "src/test/resources/WEB-INF/web.xml" ) );
140
141         servletRunner.registerServlet( "/repository/*", UnauthenticatedRepositoryServlet.class.getName() );
142
143         servletUnitClient = servletRunner.newClient();
144
145         return servletUnitClient;
146     }
147
148     @Override
149     @After
150     public void tearDown()
151         throws Exception
152     {
153
154         if ( servletUnitClient != null )
155         {
156             servletUnitClient.clearContents();
157         }
158
159         if ( servletRunner != null )
160         {
161             servletRunner.shutDown();
162         }
163
164         if ( repoRootInternal.exists() )
165         {
166             FileUtils.deleteDirectory( repoRootInternal );
167         }
168
169         if ( repoRootLegacy.exists() )
170         {
171             FileUtils.deleteDirectory( repoRootLegacy );
172         }
173
174         super.tearDown();
175     }
176
177
178     protected void assertFileContents( String expectedContents, File repoRoot, String path )
179         throws IOException
180     {
181         File actualFile = new File( repoRoot, path );
182         assertTrue( "File <" + actualFile.getAbsolutePath() + "> should exist.", actualFile.exists() );
183         assertTrue( "File <" + actualFile.getAbsolutePath() + "> should be a file (not a dir/link/device/etc).",
184                     actualFile.isFile() );
185
186         String actualContents = FileUtils.readFileToString( actualFile, null );
187         assertEquals( "File Contents of <" + actualFile.getAbsolutePath() + ">", expectedContents, actualContents );
188     }
189
190     protected void assertRepositoryValid( RepositoryServlet servlet, String repoId )
191         throws Exception
192     {
193         ManagedRepository repository = servlet.getRepository( repoId );
194         assertNotNull( "Archiva Managed Repository id:<" + repoId + "> should exist.", repository );
195         File repoRoot = new File( repository.getLocation() );
196         assertTrue( "Archiva Managed Repository id:<" + repoId + "> should have a valid location on disk.",
197                     repoRoot.exists() && repoRoot.isDirectory() );
198     }
199
200     protected void assertResponseOK( WebResponse response )
201     {
202         assertNotNull( "Should have recieved a response", response );
203         Assert.assertEquals( "Should have been an OK response code", HttpServletResponse.SC_OK,
204                              response.getResponseCode() );
205     }
206
207     protected void assertResponseOK( WebResponse response, String path )
208     {
209         assertNotNull( "Should have recieved a response", response );
210         Assert.assertEquals( "Should have been an OK response code for path: " + path, HttpServletResponse.SC_OK,
211                              response.getResponseCode() );
212     }
213
214     protected void assertResponseNotFound( WebResponse response )
215     {
216         assertNotNull( "Should have recieved a response", response );
217         Assert.assertEquals( "Should have been an 404/Not Found response code.", HttpServletResponse.SC_NOT_FOUND,
218                              response.getResponseCode() );
219     }
220
221     protected void assertResponseInternalServerError( WebResponse response )
222     {
223         assertNotNull( "Should have recieved a response", response );
224         Assert.assertEquals( "Should have been an 500/Internal Server Error response code.",
225                              HttpServletResponse.SC_INTERNAL_SERVER_ERROR, response.getResponseCode() );
226     }
227
228     protected void assertResponseConflictError( WebResponse response )
229     {
230         assertNotNull( "Should have received a response", response );
231         Assert.assertEquals( "Should have been a 409/Conflict response code.", HttpServletResponse.SC_CONFLICT,
232                              response.getResponseCode() );
233     }
234
235     protected ManagedRepositoryConfiguration createManagedRepository( String id, String name, File location,
236                                                                       boolean blockRedeployments )
237     {
238         ManagedRepositoryConfiguration repo = new ManagedRepositoryConfiguration();
239         repo.setId( id );
240         repo.setName( name );
241         repo.setLocation( location.getAbsolutePath() );
242         repo.setBlockRedeployments( blockRedeployments );
243
244         return repo;
245     }
246
247     protected ManagedRepositoryConfiguration createManagedRepository( String id, String name, File location,
248                                                                       String layout, boolean blockRedeployments )
249     {
250         ManagedRepositoryConfiguration repo = createManagedRepository( id, name, location, blockRedeployments );
251         repo.setLayout( layout );
252         return repo;
253     }
254
255     protected RemoteRepositoryConfiguration createRemoteRepository( String id, String name, String url )
256     {
257         RemoteRepositoryConfiguration repo = new RemoteRepositoryConfiguration();
258         repo.setId( id );
259         repo.setName( name );
260         repo.setUrl( url );
261         return repo;
262     }
263
264     protected void saveConfiguration( ArchivaConfiguration archivaConfiguration )
265         throws Exception
266     {
267         archivaConfiguration.save( archivaConfiguration.getConfiguration() );
268     }
269
270
271     protected void setupCleanRepo( File repoRootDir )
272         throws IOException
273     {
274         FileUtils.deleteDirectory( repoRootDir );
275         if ( !repoRootDir.exists() )
276         {
277             repoRootDir.mkdirs();
278         }
279     }
280
281     protected void assertManagedFileNotExists( File repoRootInternal, String resourcePath )
282     {
283         File repoFile = new File( repoRootInternal, resourcePath );
284         assertFalse( "Managed Repository File <" + repoFile.getAbsolutePath() + "> should not exist.",
285                      repoFile.exists() );
286     }
287
288     protected void setupCleanInternalRepo()
289         throws Exception
290     {
291         setupCleanRepo( repoRootInternal );
292     }
293
294     protected File populateRepo( File repoRootManaged, String path, String contents )
295         throws Exception
296     {
297         File destFile = new File( repoRootManaged, path );
298         destFile.getParentFile().mkdirs();
299         FileUtils.writeStringToFile( destFile, contents, null );
300         return destFile;
301     }
302 }