]> source.dussan.org Git - archiva.git/blob
a9988b11a8de2cd7781175cfc301738a726a1025
[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.gargoylesoftware.htmlunit.WebRequest;
23 import com.gargoylesoftware.htmlunit.WebResponse;
24 import org.apache.archiva.admin.model.beans.ManagedRepository;
25 import org.apache.archiva.configuration.ArchivaConfiguration;
26 import org.apache.archiva.configuration.Configuration;
27 import org.apache.archiva.configuration.ManagedRepositoryConfiguration;
28 import org.apache.catalina.Container;
29 import org.apache.catalina.startup.Tomcat;
30 import org.apache.commons.lang.StringUtils;
31 import org.fest.assertions.api.Assertions;
32 import org.junit.Before;
33 import org.junit.Test;
34
35 import javax.servlet.Servlet;
36 import java.io.File;
37 import java.util.Enumeration;
38
39 /**
40  * RepositoryServletTest
41  */
42 public class RepositoryServletTest
43     extends AbstractRepositoryServletTestCase
44 {
45     private static final String REQUEST_PATH = "http://machine.com/repository/internal/";
46
47     private static final String NEW_REPOSITORY_ID = "new-id";
48
49     private static final String NEW_REPOSITORY_NAME = "New Repository";
50
51     @Before
52     @Override
53     public void setUp()
54         throws Exception
55     {
56         super.setUp();
57         startRepository();
58     }
59
60     @Test
61     public void testGetRepository()
62         throws Exception
63     {
64
65         RepositoryServlet servlet = RepositoryServlet.class.cast( findServlet( "repository" ) );
66         assertNotNull( servlet );
67
68         assertRepositoryValid( servlet, REPOID_INTERNAL );
69     }
70
71     Servlet findServlet( String name )
72         throws Exception
73     {
74         Container[] childs = context.findChildren();
75         for ( Container container : childs )
76         {
77             if ( StringUtils.equals( container.getName(), name ) )
78             {
79                 Tomcat.ExistingStandardWrapper esw = Tomcat.ExistingStandardWrapper.class.cast( container );
80                 Servlet servlet = esw.loadServlet();
81
82                 return servlet;
83             }
84         }
85         return null;
86     }
87
88     @Test
89     public void testGetRepositoryAfterDelete()
90         throws Exception
91     {
92         RepositoryServlet servlet = RepositoryServlet.class.cast( findServlet( "repository" ) );
93
94         assertNotNull( servlet );
95
96         ArchivaConfiguration archivaConfiguration = servlet.getConfiguration();
97         Configuration c = archivaConfiguration.getConfiguration();
98         c.removeManagedRepository( c.findManagedRepositoryById( REPOID_INTERNAL ) );
99         saveConfiguration( archivaConfiguration );
100
101         ManagedRepository repository = servlet.getRepository( REPOID_INTERNAL );
102         assertNull( repository );
103     }
104
105     @Test
106     public void testGetRepositoryAfterAdd()
107         throws Exception
108     {
109         RepositoryServlet servlet =RepositoryServlet.class.cast( findServlet( "repository" ) );
110         assertNotNull( servlet );
111
112         ArchivaConfiguration archivaConfiguration = servlet.getConfiguration();
113         Configuration c = archivaConfiguration.getConfiguration();
114         ManagedRepositoryConfiguration repo = new ManagedRepositoryConfiguration();
115         repo.setId( NEW_REPOSITORY_ID );
116         repo.setName( NEW_REPOSITORY_NAME );
117         File repoRoot = new File( "target/test-repository-root" );
118         if ( !repoRoot.exists() )
119         {
120             repoRoot.mkdirs();
121         }
122         repo.setLocation( repoRoot.getAbsolutePath() );
123         c.addManagedRepository( repo );
124         saveConfiguration( archivaConfiguration );
125
126         ManagedRepository repository = servlet.getRepository( NEW_REPOSITORY_ID );
127         assertNotNull( repository );
128         assertEquals( NEW_REPOSITORY_NAME, repository.getName() );
129
130         // check other is still intact
131         assertRepositoryValid( servlet, REPOID_INTERNAL );
132     }
133
134     @Test
135     public void testGetRepositoryInvalidPathPassthroughPresent()
136         throws Exception
137     {
138         String path = REQUEST_PATH + ".index/filecontent/segments.gen";
139
140         populateRepo( repoRootInternal, ".index/filecontent/segments.gen", "index file" );
141
142         WebRequest request = new GetMethodWebRequest( path );
143         WebResponse response = getServletUnitClient().getResponse( request );
144         assertResponseOK( response );
145         assertEquals( "index file", response.getContentAsString() );
146     }
147
148     @Test
149     public void testGetRepositoryInvalidPathPassthroughMissing()
150         throws Exception
151     {
152         String path = REQUEST_PATH + ".index/filecontent/foo.bar";
153
154         WebRequest request = new GetMethodWebRequest( path );
155         WebResponse response = getServletUnitClient().getResponse( request );
156         assertResponseNotFound( response );
157         Assertions.assertThat( response.getContentAsString() ).contains(            "Invalid path to Artifact: legacy paths should have an expected type ending in [s] in the second part of the path." );
158     }
159 }