]> source.dussan.org Git - archiva.git/blob
2c42b67e2f61661f23c592a73e90c172f86994c2
[archiva.git] /
1 package org.apache.maven.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.commons.io.FileUtils;
30 import org.apache.maven.archiva.configuration.ArchivaConfiguration;
31 import org.apache.maven.archiva.configuration.Configuration;
32 import org.apache.maven.archiva.configuration.ManagedRepositoryConfiguration;
33 import org.apache.maven.archiva.configuration.RemoteRepositoryConfiguration;
34 import org.junit.After;
35 import org.junit.Before;
36 import org.junit.runner.RunWith;
37 import org.slf4j.Logger;
38 import org.slf4j.LoggerFactory;
39 import org.springframework.context.ApplicationContext;
40 import org.springframework.test.context.ContextConfiguration;
41 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
42
43 import javax.inject.Inject;
44 import javax.servlet.http.HttpServletResponse;
45 import java.io.File;
46 import java.io.IOException;
47
48 /**
49  * AbstractRepositoryServletTestCase
50  *
51  * @version $Id$
52  */
53 @RunWith( SpringJUnit4ClassRunner.class )
54 //ContextConfiguration( locations = { "classpath*:/META-INF/spring-context.xml", "classpath*:/spring-context.xml" } )
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     {
177         ManagedRepositoryConfiguration repository = servlet.getRepository( repoId );
178         assertNotNull( "Archiva Managed Repository id:<" + repoId + "> should exist.", repository );
179         File repoRoot = new File( repository.getLocation() );
180         assertTrue( "Archiva Managed Repository id:<" + repoId + "> should have a valid location on disk.",
181                     repoRoot.exists() && repoRoot.isDirectory() );
182     }
183
184     protected void assertResponseOK( WebResponse response )
185     {
186         assertNotNull( "Should have recieved a response", response );
187         Assert.assertEquals( "Should have been an OK response code", HttpServletResponse.SC_OK,
188                              response.getResponseCode() );
189     }
190
191     protected void assertResponseOK( WebResponse response, String path )
192     {
193         assertNotNull( "Should have recieved a response", response );
194         Assert.assertEquals( "Should have been an OK response code for path: " + path, HttpServletResponse.SC_OK,
195                              response.getResponseCode() );
196     }
197
198     protected void assertResponseNotFound( WebResponse response )
199     {
200         assertNotNull( "Should have recieved a response", response );
201         Assert.assertEquals( "Should have been an 404/Not Found response code.", HttpServletResponse.SC_NOT_FOUND,
202                              response.getResponseCode() );
203     }
204
205     protected void assertResponseInternalServerError( WebResponse response )
206     {
207         assertNotNull( "Should have recieved a response", response );
208         Assert.assertEquals( "Should have been an 500/Internal Server Error response code.",
209                              HttpServletResponse.SC_INTERNAL_SERVER_ERROR, response.getResponseCode() );
210     }
211
212     protected void assertResponseConflictError( WebResponse response )
213     {
214         assertNotNull( "Should have received a response", response );
215         Assert.assertEquals( "Should have been a 409/Conflict response code.", HttpServletResponse.SC_CONFLICT,
216                              response.getResponseCode() );
217     }
218
219     protected ManagedRepositoryConfiguration createManagedRepository( String id, String name, File location,
220                                                                       boolean blockRedeployments )
221     {
222         ManagedRepositoryConfiguration repo = new ManagedRepositoryConfiguration();
223         repo.setId( id );
224         repo.setName( name );
225         repo.setLocation( location.getAbsolutePath() );
226         repo.setBlockRedeployments( blockRedeployments );
227
228         return repo;
229     }
230
231     protected ManagedRepositoryConfiguration createManagedRepository( String id, String name, File location,
232                                                                       String layout, boolean blockRedeployments )
233     {
234         ManagedRepositoryConfiguration repo = createManagedRepository( id, name, location, blockRedeployments );
235         repo.setLayout( layout );
236         return repo;
237     }
238
239     protected RemoteRepositoryConfiguration createRemoteRepository( String id, String name, String url )
240     {
241         RemoteRepositoryConfiguration repo = new RemoteRepositoryConfiguration();
242         repo.setId( id );
243         repo.setName( name );
244         repo.setUrl( url );
245         return repo;
246     }
247
248     protected void saveConfiguration( ArchivaConfiguration archivaConfiguration )
249         throws Exception
250     {
251         archivaConfiguration.save( archivaConfiguration.getConfiguration() );
252     }
253
254
255     protected void setupCleanRepo( File repoRootDir )
256         throws IOException
257     {
258         FileUtils.deleteDirectory( repoRootDir );
259         if ( !repoRootDir.exists() )
260         {
261             repoRootDir.mkdirs();
262         }
263     }
264
265     protected void assertManagedFileNotExists( File repoRootInternal, String resourcePath )
266     {
267         File repoFile = new File( repoRootInternal, resourcePath );
268         assertFalse( "Managed Repository File <" + repoFile.getAbsolutePath() + "> should not exist.",
269                      repoFile.exists() );
270     }
271
272     protected void setupCleanInternalRepo()
273         throws Exception
274     {
275         setupCleanRepo( repoRootInternal );
276     }
277
278     protected File populateRepo( File repoRootManaged, String path, String contents )
279         throws Exception
280     {
281         File destFile = new File( repoRootManaged, path );
282         destFile.getParentFile().mkdirs();
283         FileUtils.writeStringToFile( destFile, contents, null );
284         return destFile;
285     }
286 }