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