123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760 |
- package org.apache.archiva.webdav;
-
- /*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
- import junit.framework.TestCase;
- import org.apache.archiva.admin.model.RepositoryAdminException;
- import org.apache.archiva.admin.model.beans.ManagedRepository;
- import org.apache.archiva.admin.model.beans.RepositoryGroup;
- import org.apache.archiva.admin.model.remote.RemoteRepositoryAdmin;
- import org.apache.archiva.admin.repository.DefaultRepositoryCommonValidator;
- import org.apache.archiva.admin.repository.group.DefaultRepositoryGroupAdmin;
- import org.apache.archiva.admin.repository.managed.DefaultManagedRepositoryAdmin;
- import org.apache.archiva.common.filelock.FileLockManager;
- import org.apache.archiva.configuration.ArchivaConfiguration;
- import org.apache.archiva.configuration.Configuration;
- import org.apache.archiva.configuration.FileTypes;
- import org.apache.archiva.configuration.RepositoryGroupConfiguration;
- import org.apache.archiva.metadata.repository.storage.RepositoryPathTranslator;
- import org.apache.archiva.repository.ManagedRepositoryContent;
- import org.apache.archiva.repository.base.group.RepositoryGroupHandler;
- import org.apache.archiva.repository.maven.content.MavenContentHelper;
- import org.apache.archiva.repository.maven.metadata.storage.ArtifactMappingProvider;
- import org.apache.archiva.proxy.ProxyRegistry;
- import org.apache.archiva.repository.EditableManagedRepository;
- import org.apache.archiva.repository.RemoteRepository;
- import org.apache.archiva.repository.RemoteRepositoryContent;
- import org.apache.archiva.repository.Repository;
- import org.apache.archiva.repository.RepositoryContent;
- import org.apache.archiva.repository.RepositoryContentFactory;
- import org.apache.archiva.repository.RepositoryContentProvider;
- import org.apache.archiva.repository.RepositoryException;
- import org.apache.archiva.repository.RepositoryRegistry;
- import org.apache.archiva.repository.RepositoryType;
- import org.apache.archiva.repository.maven.content.ManagedDefaultRepositoryContent;
- import org.apache.archiva.repository.maven.content.MavenRepositoryRequestInfo;
- import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner;
- import org.apache.commons.lang3.StringUtils;
- import org.apache.jackrabbit.webdav.DavException;
- import org.apache.jackrabbit.webdav.DavResourceLocator;
- import org.apache.jackrabbit.webdav.DavServletRequest;
- import org.apache.jackrabbit.webdav.DavServletResponse;
- import org.easymock.EasyMock;
- import org.easymock.IMocksControl;
- import org.junit.After;
- import org.junit.Before;
- import org.junit.Test;
- import org.junit.runner.RunWith;
- import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
- import org.springframework.context.ApplicationContext;
- import org.springframework.context.ConfigurableApplicationContext;
- import org.springframework.test.context.ContextConfiguration;
-
- import javax.inject.Inject;
- import javax.inject.Named;
- import java.nio.file.Path;
- import java.nio.file.Paths;
- import java.util.ArrayList;
- import java.util.HashSet;
- import java.util.List;
- import java.util.Locale;
- import java.util.Set;
- import java.util.concurrent.atomic.AtomicReference;
-
- import static org.easymock.EasyMock.*;
-
- /**
- * ArchivaDavResourceFactoryTest
- */
- @RunWith( ArchivaSpringJUnit4ClassRunner.class )
- @ContextConfiguration( locations = { "classpath*:/META-INF/spring-context.xml", "classpath*:/spring-context.xml" } )
- public class ArchivaDavResourceFactoryTest
- extends TestCase
- {
- private AtomicReference<Path> projectBase = new AtomicReference<>();
-
- private static final String RELEASES_REPO = "releases";
-
- private static final String INTERNAL_REPO = "internal";
-
- private static final String LOCAL_MIRROR_REPO = "local-mirror";
-
- private static final String LEGACY_REPO = "legacy-repo";
-
- private static final String LOCAL_REPO_GROUP = "local";
-
- private OverridingArchivaDavResourceFactory resourceFactory;
-
- private IMocksControl requestControl;
-
- private DavServletRequest request;
-
- private IMocksControl repoRequestControl;
-
- private MavenRepositoryRequestInfo repoRequest;
-
- private IMocksControl responseControl;
-
- private DavServletResponse response;
-
- private IMocksControl archivaConfigurationControl;
-
- private ArchivaConfiguration archivaConfiguration;
-
- private Configuration config;
-
- private IMocksControl repoContentFactoryControl;
-
- private RepositoryContentFactory repoFactory;
-
- @Inject
- ApplicationContext applicationContext;
-
- @Inject
- DefaultManagedRepositoryAdmin defaultManagedRepositoryAdmin;
-
- @Inject
- RepositoryRegistry repositoryRegistry;
-
- @Inject
- RemoteRepositoryAdmin remoteRepositoryAdmin;
-
- @Inject
- ProxyRegistry proxyRegistry;
-
- @Inject
- @Named( "MavenContentHelper" )
- MavenContentHelper mavenContentHelper;
-
- @Inject
- DefaultRepositoryGroupAdmin defaultRepositoryGroupAdmin;
-
- @Inject
- List<? extends ArtifactMappingProvider> artifactMappingProviders;
-
- @Inject
- @Named( "repositoryPathTranslator#maven2" )
- RepositoryPathTranslator pathTranslator;
-
- @Inject
- FileLockManager fileLockManager;
-
- @Inject
- FileTypes fileTypes;
-
- @SuppressWarnings( "unused" )
- @Inject
- RepositoryGroupHandler repositoryGroupHandler;
-
- public Path getProjectBase() {
- if (this.projectBase.get()==null) {
- String pathVal = System.getProperty("mvn.project.base.dir");
- Path baseDir;
- if (StringUtils.isEmpty(pathVal)) {
- baseDir= Paths.get("").toAbsolutePath();
- } else {
- baseDir = Paths.get(pathVal).toAbsolutePath();
- }
- this.projectBase.compareAndSet(null, baseDir);
- }
- return this.projectBase.get();
- }
-
- @Before
- @Override
- public void setUp()
- throws Exception
- {
- super.setUp();
-
- requestControl = createControl();
- request = requestControl.createMock( DavServletRequest.class );
-
- responseControl = createControl();
- response = responseControl.createMock( DavServletResponse.class );
- //responseControl.setDefaultMatcher( MockControl.ALWAYS_MATCHER );
-
- archivaConfigurationControl = createControl();
- archivaConfiguration = archivaConfigurationControl.createMock( ArchivaConfiguration.class );
-
- config = new Configuration();
- expect( archivaConfiguration.getConfiguration() ).andReturn( config ).times( 2, 20 );
- expect (archivaConfiguration.getDefaultLocale()).andReturn( Locale.getDefault() ).anyTimes();
- archivaConfiguration.addListener( EasyMock.anyObject( ) );
- expectLastCall().times(0, 4);
- archivaConfiguration.save( eq(config));
- expectLastCall().times( 0, 5 );
- archivaConfiguration.save( eq(config), EasyMock.anyString());
- expectLastCall().times( 0, 5 );
- archivaConfigurationControl.replay();
-
- defaultManagedRepositoryAdmin.setArchivaConfiguration( archivaConfiguration );
- repositoryRegistry.setArchivaConfiguration( archivaConfiguration );
- repositoryRegistry.reload();
- ( (DefaultRepositoryCommonValidator) defaultManagedRepositoryAdmin.getRepositoryCommonValidator() ).setArchivaConfiguration(
- archivaConfiguration );
- if ( defaultManagedRepositoryAdmin.getManagedRepository( RELEASES_REPO ) == null )
- {
- defaultManagedRepositoryAdmin.addManagedRepository(
- createManagedRepository( RELEASES_REPO, getProjectBase().resolve( "target/test-classes/" + RELEASES_REPO ).toString(),
- "default" ), false, null );
- }
- if ( defaultManagedRepositoryAdmin.getManagedRepository( INTERNAL_REPO ) == null )
- {
- defaultManagedRepositoryAdmin.addManagedRepository(
- createManagedRepository( INTERNAL_REPO, getProjectBase().resolve( "target/test-classes/" + INTERNAL_REPO ).toString(),
- "default" ), false, null );
- }
- RepositoryGroup repoGroupConfig = new RepositoryGroup();
- repoGroupConfig.setId( LOCAL_REPO_GROUP );
- repoGroupConfig.addRepository( RELEASES_REPO );
- repoGroupConfig.addRepository( INTERNAL_REPO );
-
- defaultRepositoryGroupAdmin.setArchivaConfiguration( archivaConfiguration );
- if ( defaultManagedRepositoryAdmin.getManagedRepository( LOCAL_REPO_GROUP ) == null )
- {
- defaultRepositoryGroupAdmin.addRepositoryGroup( repoGroupConfig, null );
- }
-
- repoContentFactoryControl = createControl();
- repoFactory = repoContentFactoryControl.createMock( RepositoryContentFactory.class );
-
- repoRequestControl = createControl();
- repoRequest = repoRequestControl.createMock( MavenRepositoryRequestInfo.class );
-
- resourceFactory =
- new OverridingArchivaDavResourceFactory( applicationContext, archivaConfiguration );
- resourceFactory.setArchivaConfiguration( archivaConfiguration );
- proxyRegistry.getAllHandler().get(RepositoryType.MAVEN).clear();
- proxyRegistry.getAllHandler().get(RepositoryType.MAVEN).add(new OverridingRepositoryProxyHandler(this));
- resourceFactory.setProxyRegistry(proxyRegistry);
- resourceFactory.setRemoteRepositoryAdmin( remoteRepositoryAdmin );
- resourceFactory.setManagedRepositoryAdmin( defaultManagedRepositoryAdmin );
- resourceFactory.setRepositoryRegistry( repositoryRegistry );
- }
-
- private ManagedRepository createManagedRepository( String id, String location, String layout )
- {
- ManagedRepository repoConfig = new ManagedRepository( Locale.getDefault());
- repoConfig.setId( id );
- repoConfig.setName( id );
- repoConfig.setLocation( location );
- repoConfig.setLayout( layout );
-
- return repoConfig;
- }
-
- private ManagedRepositoryContent createManagedRepositoryContent( String repoId )
- throws RepositoryAdminException
- {
- org.apache.archiva.repository.ManagedRepository repo = repositoryRegistry.getManagedRepository( repoId );
- ManagedDefaultRepositoryContent repoContent = new ManagedDefaultRepositoryContent(repo, fileTypes, fileLockManager);
- if (repo!=null && repo instanceof EditableManagedRepository)
- {
- ( (EditableManagedRepository) repo ).setContent( repoContent );
- }
- repoContent.setMavenContentHelper( mavenContentHelper );
- repoContent.setArtifactMappingProviders( artifactMappingProviders );
- repoContent.setPathTranslator( pathTranslator );
- return repoContent;
- }
-
- private RepositoryContentProvider createRepositoryContentProvider( ManagedRepositoryContent content) {
- Set<RepositoryType> TYPES = new HashSet<>( );
- TYPES.add(RepositoryType.MAVEN);
- return new RepositoryContentProvider( )
- {
-
-
- @Override
- public boolean supportsLayout( String layout )
- {
- return true;
- }
-
- @Override
- public Set<RepositoryType> getSupportedRepositoryTypes( )
- {
- return TYPES;
- }
-
- @Override
- public boolean supports( RepositoryType type )
- {
- return true;
- }
-
- @Override
- public RemoteRepositoryContent createRemoteContent( RemoteRepository repository ) throws RepositoryException
- {
- return null;
- }
-
- @Override
- public ManagedRepositoryContent createManagedContent( org.apache.archiva.repository.ManagedRepository repository ) throws RepositoryException
- {
- content.setRepository( repository );
- return content;
- }
-
- @Override
- public <T extends RepositoryContent, V extends Repository> T createContent( Class<T> clazz, V repository ) throws RepositoryException
- {
- return null;
- }
- };
- }
-
- @After
- @Override
- public void tearDown()
- throws Exception
- {
- super.tearDown();
- String appserverBase = System.getProperty( "appserver.base" );
- if ( StringUtils.isNotEmpty( appserverBase ) )
- {
- org.apache.archiva.common.utils.FileUtils.deleteDirectory( Paths.get( appserverBase ) );
- }
- }
-
- // MRM-1232 - Unable to get artifacts from repositories which requires Repository Manager role using repository group
- @Test
- public void testRepositoryGroupFirstRepositoryRequiresAuthentication()
- throws Exception
- {
- DavResourceLocator locator = new ArchivaDavResourceLocator( "", "/repository/" + LOCAL_REPO_GROUP
- + "/org/apache/archiva/archiva/1.2-SNAPSHOT/archiva-1.2-SNAPSHOT.jar", LOCAL_REPO_GROUP,
- new ArchivaDavLocatorFactory() );
-
- ManagedRepositoryContent internalRepo = createManagedRepositoryContent( INTERNAL_REPO );
- ManagedRepositoryContent releasesRepo = createManagedRepositoryContent( RELEASES_REPO );
-
- try
- {
- archivaConfigurationControl.reset();
-
- expect( archivaConfiguration.getConfiguration() ).andReturn( config ).times( 3 );
-
- expect( request.getMethod() ).andReturn( "GET" ).times( 3 );
-
- expect( request.getPathInfo() ).andReturn( "org/apache/archiva" ).times( 0, 2 );
-
- expect( repoFactory.getManagedRepositoryContent( RELEASES_REPO ) ).andReturn( releasesRepo );
-
- expect( request.getRemoteAddr() ).andReturn( "http://localhost:8080" ).times( 2 );
-
- expect( request.getDavSession() ).andReturn( new ArchivaDavSession() ).times( 2 );
-
- expect( request.getContextPath() ).andReturn( "" ).times( 2 );
-
- expect( repoRequest.isSupportFile( "org/apache/archiva/archiva/1.2-SNAPSHOT/archiva-1.2-SNAPSHOT.jar" ) ).andReturn( true );
-
- expect(
- repoRequest.getLayout( "org/apache/archiva/archiva/1.2-SNAPSHOT/archiva-1.2-SNAPSHOT.jar" ) ).andReturn(
- "legacy" );
-
- expect( repoRequest.toItemSelector(
- "org/apache/archiva/archiva/1.2-SNAPSHOT/archiva-1.2-SNAPSHOT.jar" ) ).andReturn( null );
-
- expect( repoRequest.toNativePath( "org/apache/archiva/archiva/1.2-SNAPSHOT/archiva-1.2-SNAPSHOT.jar"
- ) ).andReturn(
- Paths.get( config.findManagedRepositoryById( INTERNAL_REPO ).getLocation(),
- "target/test-classes/internal/org/apache/archiva/archiva/1.2-SNAPSHOT/archiva-1.2-SNAPSHOT.jar" ).toString());
-
- expect( repoFactory.getManagedRepositoryContent( INTERNAL_REPO ) ).andReturn( internalRepo );
-
- expect( repoRequest.isArchetypeCatalog(
- "org/apache/archiva/archiva/1.2-SNAPSHOT/archiva-1.2-SNAPSHOT.jar" ) ).andReturn( false );
- archivaConfigurationControl.replay();
- requestControl.replay();
- repoContentFactoryControl.replay();
- repoRequestControl.replay();
-
- resourceFactory.createResource( locator, request, response );
-
- archivaConfigurationControl.verify();
- requestControl.verify();
- repoContentFactoryControl.verify();
- repoRequestControl.verify();
-
- fail( "A DavException with 401 error code should have been thrown." );
- }
- catch ( DavException e )
- {
- assertEquals( 401, e.getErrorCode() );
- }
- }
-
- @Test
- public void testRepositoryGroupLastRepositoryRequiresAuthentication()
- throws Exception
- {
- DavResourceLocator locator = new ArchivaDavResourceLocator( "", "/repository/" + LOCAL_REPO_GROUP
- + "/org/apache/archiva/archiva/1.2-SNAPSHOT/archiva-1.2-SNAPSHOT.jar", LOCAL_REPO_GROUP,
- new ArchivaDavLocatorFactory() );
-
- List<RepositoryGroupConfiguration> repoGroups = new ArrayList<>();
- RepositoryGroupConfiguration repoGroup = new RepositoryGroupConfiguration();
- repoGroup.setId( LOCAL_REPO_GROUP );
- repoGroup.addRepository( INTERNAL_REPO );
- repoGroup.addRepository( RELEASES_REPO );
-
- repoGroups.add( repoGroup );
-
- config.setRepositoryGroups( repoGroups );
-
- ManagedRepositoryContent internalRepo = createManagedRepositoryContent( INTERNAL_REPO );
-
- ManagedRepositoryContent releasesRepo = createManagedRepositoryContent( RELEASES_REPO );
-
- try
- {
- archivaConfigurationControl.reset();
-
- expect( archivaConfiguration.getConfiguration() ).andReturn( config ).times( 3 );
-
- expect( request.getMethod() ).andReturn( "GET" ).times( 3 );
-
- expect( request.getPathInfo() ).andReturn( "org/apache/archiva" ).times( 0, 2 );
-
- expect( repoFactory.getManagedRepositoryContent( INTERNAL_REPO ) ).andReturn( internalRepo );
-
- expect( repoFactory.getManagedRepositoryContent( RELEASES_REPO ) ).andReturn( releasesRepo );
-
- expect( request.getRemoteAddr() ).andReturn( "http://localhost:8080" ).times( 2 );
-
- expect( request.getDavSession() ).andReturn( new ArchivaDavSession() ).times( 2 );
-
- expect( request.getContextPath() ).andReturn( "" ).times( 2 );
-
- expect( repoRequest.isSupportFile( "org/apache/archiva/archiva/1.2-SNAPSHOT/archiva-1.2-SNAPSHOT.jar" ) ).andReturn( false );
-
- expect(
- repoRequest.getLayout( "org/apache/archiva/archiva/1.2-SNAPSHOT/archiva-1.2-SNAPSHOT.jar" ) ).andReturn(
- "legacy" );
-
- expect( repoRequest.toItemSelector(
- "org/apache/archiva/archiva/1.2-SNAPSHOT/archiva-1.2-SNAPSHOT.jar" ) ).andReturn( null );
-
- expect( repoRequest.toNativePath( "org/apache/archiva/archiva/1.2-SNAPSHOT/archiva-1.2-SNAPSHOT.jar"
- ) ).andReturn(
- Paths.get( config.findManagedRepositoryById( INTERNAL_REPO ).getLocation(),
- "target/test-classes/internal/org/apache/archiva/archiva/1.2-SNAPSHOT/archiva-1.2-SNAPSHOT.jar" ).toString());
-
-
- expect( repoRequest.isArchetypeCatalog(
- "org/apache/archiva/archiva/1.2-SNAPSHOT/archiva-1.2-SNAPSHOT.jar" ) ).andReturn( false );
- archivaConfigurationControl.replay();
- requestControl.replay();
- repoContentFactoryControl.replay();
- repoRequestControl.replay();
-
- resourceFactory.createResource( locator, request, response );
-
- archivaConfigurationControl.verify();
- requestControl.verify();
- repoContentFactoryControl.verify();
- repoRequestControl.verify();
-
- fail( "A DavException with 401 error code should have been thrown." );
- }
- catch ( DavException e )
- {
- assertEquals( 401, e.getErrorCode() );
- }
- }
-
- @Test
- public void testRepositoryGroupArtifactDoesNotExistInAnyOfTheReposAuthenticationDisabled()
- throws Exception
- {
- DavResourceLocator locator = new ArchivaDavResourceLocator( "", "/repository/" + LOCAL_REPO_GROUP
- + "/org/apache/archiva/archiva/1.2-SNAPSHOT/archiva-1.2-SNAPSHOT.jar", LOCAL_REPO_GROUP,
- new ArchivaDavLocatorFactory() );
-
- defaultManagedRepositoryAdmin.addManagedRepository(
- createManagedRepository( LOCAL_MIRROR_REPO, Paths.get( "target/test-classes/local-mirror" ).toString(),
- "default" ), false, null );
-
- List<RepositoryGroupConfiguration> repoGroups = new ArrayList<>();
- RepositoryGroupConfiguration repoGroup = new RepositoryGroupConfiguration();
- repoGroup.setId( LOCAL_REPO_GROUP );
- repoGroup.addRepository( INTERNAL_REPO );
- repoGroup.addRepository( LOCAL_MIRROR_REPO );
-
- repoGroups.add( repoGroup );
-
- config.setRepositoryGroups( repoGroups );
-
- ManagedRepositoryContent internalRepo = createManagedRepositoryContent( INTERNAL_REPO );
- ManagedRepositoryContent localMirrorRepo = createManagedRepositoryContent( LOCAL_MIRROR_REPO );
-
- repositoryRegistry.putRepositoryGroup( repoGroup );
-
- try
- {
- archivaConfigurationControl.reset();
-
- expect( archivaConfiguration.getConfiguration() ).andReturn( config ).times( 3 );
-
- expect( request.getMethod() ).andReturn( "GET" ).times( 5 );
-
- expect( request.getPathInfo() ).andReturn( "org/apache/archiva" ).times( 0, 2 );
-
- expect( repoFactory.getManagedRepositoryContent( INTERNAL_REPO ) ).andReturn( internalRepo );
-
- expect( repoFactory.getManagedRepositoryContent( LOCAL_MIRROR_REPO ) ).andReturn( localMirrorRepo );
-
- expect( request.getRemoteAddr() ).andReturn( "http://localhost:8080" ).times( 4 );
-
- expect( request.getDavSession() ).andReturn( new ArchivaDavSession() ).times( 4 );
-
- expect( request.getContextPath() ).andReturn( "" ).times( 2 );
-
- expect( repoRequest.isSupportFile( "org/apache/archiva/archiva/1.2-SNAPSHOT/archiva-1.2-SNAPSHOT.jar" ) ).andReturn( false ).times( 2 );
-
- expect(
- repoRequest.getLayout( "org/apache/archiva/archiva/1.2-SNAPSHOT/archiva-1.2-SNAPSHOT.jar" ) ).andReturn(
- "legacy" ).times( 2 );
-
- expect( repoRequest.toItemSelector(
- "org/apache/archiva/archiva/1.2-SNAPSHOT/archiva-1.2-SNAPSHOT.jar" ) ).andReturn( null ).times( 2 );
-
- expect( repoRequest.toNativePath( "org/apache/archiva/archiva/1.2-SNAPSHOT/archiva-1.2-SNAPSHOT.jar"
- ) ).andReturn(
- Paths.get( config.findManagedRepositoryById( INTERNAL_REPO ).getLocation(),
- "target/test-classes/internal/org/apache/archiva/archiva/1.2-SNAPSHOT/archiva-1.2-SNAPSHOT.jar" ).toString() );
-
- expect( repoRequest.toNativePath( "org/apache/archiva/archiva/1.2-SNAPSHOT/archiva-1.2-SNAPSHOT.jar"
- ) )
- .andReturn( Paths.get( config.findManagedRepositoryById( LOCAL_MIRROR_REPO ).getLocation(),
- "target/test-classes/internal/org/apache/archiva/archiva/1.2-SNAPSHOT/archiva-1.2-SNAPSHOT.jar" ).toString());
-
- expect( repoRequest.isArchetypeCatalog( "org/apache/archiva/archiva/1.2-SNAPSHOT/archiva-1.2-SNAPSHOT.jar" ) ).andReturn( false ).times( 2 );
- archivaConfigurationControl.replay();
- requestControl.replay();
- repoContentFactoryControl.replay();
- repoRequestControl.replay();
-
- resourceFactory.createResource( locator, request, response );
-
- archivaConfigurationControl.verify();
- requestControl.verify();
- repoContentFactoryControl.verify();
- repoRequestControl.verify();
-
- fail( "A DavException with 404 error code should have been thrown." );
- }
- catch ( DavException e )
- {
- assertEquals( 404, e.getErrorCode() );
- }
- }
-
- // MRM-1239
- @Test
- public void testRequestArtifactMetadataThreePartsRepoHasDefaultLayout()
- throws Exception
- {
- // should fetch metadata
- DavResourceLocator locator =
- new ArchivaDavResourceLocator( "", "/repository/" + INTERNAL_REPO + "/eclipse/jdtcore/maven-metadata.xml",
- INTERNAL_REPO, new ArchivaDavLocatorFactory() );
-
- ManagedRepositoryContent internalRepo = createManagedRepositoryContent( INTERNAL_REPO );
-
- // use actual object (this performs the isMetadata, isDefault and isSupportFile check!)
- MavenRepositoryRequestInfo repoRequest = new MavenRepositoryRequestInfo(internalRepo.getRepository() );
-
- try
- {
- archivaConfigurationControl.reset();
-
- expect( request.getMethod() ).andReturn( "GET" ).times( 4 );
-
- expect( request.getRemoteAddr() ).andReturn( "http://localhost:8080" ).times( 3 );
-
- expect( request.getContextPath() ).andReturn( "" ).times( 1 );
-
- expect( request.getDavSession() ).andReturn( new ArchivaDavSession() ).times( 2 );
-
- expect( request.getRequestURI() ).andReturn( "http://localhost:8080/archiva/repository/" + INTERNAL_REPO + "/eclipse/jdtcore/maven-metadata.xml" );
- response.setHeader( "Pragma", "no-cache" );
-
- expectLastCall();
-
- response.setHeader( "Cache-Control", "no-cache" );
-
- expectLastCall();
-
- response.setDateHeader( eq("Last-Modified"), anyLong() );
- expectLastCall();
-
- archivaConfigurationControl.replay();
- repoContentFactoryControl.replay();
- requestControl.replay();
- responseControl.replay();
-
- resourceFactory.createResource( locator, request, response );
-
- archivaConfigurationControl.verify();
- repoContentFactoryControl.verify();
- requestControl.verify();
- responseControl.verify();
- }
- catch ( DavException e )
- {
- e.printStackTrace();
- fail( "A DavException should not have been thrown! "+e.getMessage() );
- }
- }
-
- @Test
- public void testRequestArtifactMetadataTwoPartsRepoHasDefaultLayout()
- throws Exception
- {
- // should not fetch metadata
- DavResourceLocator locator =
- new ArchivaDavResourceLocator( "", "/repository/" + INTERNAL_REPO + "/eclipse/maven-metadata.xml",
- INTERNAL_REPO, new ArchivaDavLocatorFactory() );
-
- ManagedRepositoryContent internalRepo = createManagedRepositoryContent( INTERNAL_REPO );
-
- try
- {
- archivaConfigurationControl.reset();
-
- expect( archivaConfiguration.getConfiguration() ).andReturn( config ).times( 2 );
-
- expect( repoFactory.getManagedRepositoryContent( INTERNAL_REPO ) ).andReturn( internalRepo );
-
- expect( request.getMethod() ).andReturn( "GET" ).times( 3 );
-
- expect( request.getRemoteAddr() ).andReturn( "http://localhost:8080" ).times( 3 );
-
- expect( request.getDavSession() ).andReturn( new ArchivaDavSession() ).times( 2 );
-
- expect( request.getContextPath() ).andReturn( "" ).times( 2 );
-
- archivaConfigurationControl.replay();
- repoContentFactoryControl.replay();
- requestControl.replay();
-
- resourceFactory.createResource( locator, request, response );
-
- archivaConfigurationControl.verify();
- repoContentFactoryControl.verify();
- requestControl.verify();
-
- fail( "A 404 error should have been thrown!" );
- }
- catch ( DavException e )
- {
- assertEquals( 404, e.getErrorCode() );
- }
- }
-
- @Test
- public void testRequestMetadataRepoIsLegacy()
- throws Exception
- {
- ManagedRepositoryContent legacyRepo = createManagedRepositoryContent( LEGACY_REPO );
- ConfigurableListableBeanFactory beanFactory = ((ConfigurableApplicationContext) applicationContext).getBeanFactory();
- RepositoryContentProvider provider = createRepositoryContentProvider(legacyRepo );
- beanFactory.registerSingleton("repositoryContentProvider#legacy", provider);
- RepositoryContentFactory repoContentFactory = applicationContext.getBean( "repositoryContentFactory#default", RepositoryContentFactory.class );
- repoContentFactory.getRepositoryContentProviders().add(provider);
- defaultManagedRepositoryAdmin.addManagedRepository(
- createManagedRepository( LEGACY_REPO, getProjectBase().resolve( "target/test-classes/" + LEGACY_REPO ).toString(),
- "legacy" ), false, null );
-
- DavResourceLocator locator =
- new ArchivaDavResourceLocator( "", "/repository/" + LEGACY_REPO + "/eclipse/maven-metadata.xml",
- LEGACY_REPO, new ArchivaDavLocatorFactory() );
-
-
- try
- {
- archivaConfigurationControl.reset();
-
- expect( archivaConfiguration.getConfiguration() ).andReturn( config ).times( 2 );
-
- expect( repoFactory.getManagedRepositoryContent( LEGACY_REPO ) ).andReturn( legacyRepo );
-
- expect( request.getMethod() ).andReturn( "GET" ).times( 3 );
-
- expect( request.getRemoteAddr() ).andReturn( "http://localhost:8080" ).times( 3 );
-
- expect( request.getDavSession() ).andReturn( new ArchivaDavSession() ).times( 2 );
-
- expect( request.getContextPath() ).andReturn( "" ).times( 2 );
-
- archivaConfigurationControl.replay();
- repoContentFactoryControl.replay();
- requestControl.replay();
-
- resourceFactory.createResource( locator, request, response );
-
- archivaConfigurationControl.verify();
- repoContentFactoryControl.verify();
- requestControl.verify();
-
- fail( "A 404 error should have been thrown!" );
- }
- catch ( DavException e )
- {
- assertEquals( 404, e.getErrorCode() );
- }
- }
-
- class OverridingArchivaDavResourceFactory
- extends ArchivaDavResourceFactory
- {
-
- OverridingArchivaDavResourceFactory( ApplicationContext applicationContext,
- ArchivaConfiguration archivaConfiguration )
- {
- super( applicationContext, archivaConfiguration );
- }
-
- @Override
- protected boolean isAuthorized( DavServletRequest request, String repositoryId )
- throws DavException
- {
- if ( RELEASES_REPO.equals( repositoryId ) )
- {
- throw new UnauthorizedDavException( repositoryId,
- "You are not authenticated and authorized to access any repository." );
- }
- else
- {
- return true;
- }
- }
-
- @Override
- protected String getActivePrincipal( DavServletRequest request )
- {
- return "guest";
- }
- }
-
- }
|