From: Olivier Lamy Date: Fri, 30 Sep 2011 09:40:59 +0000 (+0000) Subject: [MRM-1496] Broken remote repository confuses Archiva X-Git-Tag: archiva-1.4-M1~161 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=3734ce78c811751dd0485ee2cff6a6921e320ba4;p=archiva.git [MRM-1496] Broken remote repository confuses Archiva fixed with wagon 2.0 upgrade but add a unit test. git-svn-id: https://svn.apache.org/repos/asf/archiva/trunk@1177570 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/pom.xml b/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/pom.xml index 120d30ead..8ab8092ea 100644 --- a/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/pom.xml +++ b/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/pom.xml @@ -30,7 +30,7 @@ 7.4.5.v20110725 - + diff --git a/archiva-modules/archiva-web/archiva-webapp/pom.xml b/archiva-modules/archiva-web/archiva-webapp/pom.xml index c4a985fb5..82de2ddfb 100644 --- a/archiva-modules/archiva-web/archiva-webapp/pom.xml +++ b/archiva-modules/archiva-web/archiva-webapp/pom.xml @@ -29,6 +29,13 @@ archiva-webapp war Archiva Web :: Application + + + 7.4.5.v20110725 + + + + org.apache.archiva @@ -134,6 +141,10 @@ org.apache.archiva archiva-rest-services + + org.apache.archiva + archiva-rest-api + javax.servlet servlet-api @@ -491,6 +502,24 @@ + + org.eclipse.jetty + jetty-server + ${jettyVersion} + test + + + org.eclipse.jetty + jetty-plus + ${jettyVersion} + test + + + org.codehaus.redback + redback-rest-services + tests + test + @@ -511,6 +540,8 @@ ${project.build.outputDirectory} ${project.build.outputDirectory} + ${archiva.baseRestUrl} + ${rest.admin.pwd} diff --git a/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/archiva/DownloadArtifactsTest.java b/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/archiva/DownloadArtifactsTest.java new file mode 100644 index 000000000..4bc623f33 --- /dev/null +++ b/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/archiva/DownloadArtifactsTest.java @@ -0,0 +1,327 @@ +package org.apache.archiva; +/* + * 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.beans.RemoteRepository; +import org.apache.archiva.rest.api.services.ProxyConnectorService; +import org.apache.archiva.rest.api.services.RemoteRepositoriesService; +import org.apache.archiva.security.common.ArchivaRoleConstants; +import org.apache.archiva.webdav.RepositoryServlet; +import org.apache.commons.lang.StringUtils; +import org.apache.cxf.common.util.Base64Utility; +import org.apache.cxf.jaxrs.client.JAXRSClientFactory; +import org.apache.cxf.jaxrs.client.WebClient; +import org.apache.cxf.transport.servlet.CXFServlet; +import org.codehaus.plexus.util.IOUtil; +import org.codehaus.redback.integration.security.role.RedbackRoleConstants; +import org.codehaus.redback.rest.api.services.RoleManagementService; +import org.codehaus.redback.rest.api.services.UserService; +import org.codehaus.redback.rest.services.FakeCreateAdminService; +import org.eclipse.jetty.server.Connector; +import org.eclipse.jetty.server.Server; +import org.eclipse.jetty.server.session.SessionHandler; +import org.eclipse.jetty.servlet.ServletContextHandler; +import org.eclipse.jetty.servlet.ServletHolder; +import org.junit.After; +import org.junit.AfterClass; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.context.ContextLoaderListener; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.io.InputStream; +import java.net.HttpURLConnection; +import java.net.URL; +import java.util.zip.ZipEntry; +import java.util.zip.ZipFile; + +/** + * @author Olivier Lamy + */ +@RunWith( JUnit4.class ) +public class DownloadArtifactsTest + extends TestCase +{ + + protected static Logger log = LoggerFactory.getLogger( DownloadArtifactsTest.class ); + + public String authorizationHeader = getAdminAuthzHeader(); + + public Server server = null; + + public Server redirectServer = null; + + public int port; + + public int redirectPort; + + public static String encode( String uid, String password ) + { + return "Basic " + Base64Utility.encode( ( uid + ":" + password ).getBytes() ); + } + + public static String getAdminAuthzHeader() + { + String adminPwdSysProps = System.getProperty( "rest.admin.pwd" ); + if ( StringUtils.isBlank( adminPwdSysProps ) ) + { + return encode( RedbackRoleConstants.ADMINISTRATOR_ACCOUNT_NAME, FakeCreateAdminService.ADMIN_TEST_PWD ); + } + return encode( RedbackRoleConstants.ADMINISTRATOR_ACCOUNT_NAME, adminPwdSysProps ); + } + + protected String getSpringConfigLocation() + { + return "classpath*:META-INF/spring-context.xml classpath*:spring-context-artifacts-download.xml"; + } + + + protected String getRestServicesPath() + { + return "restServices"; + } + + static String previousAppServerBase; + + @BeforeClass + public static void setAppServerBase() + { + + previousAppServerBase = System.getProperty( "appserver.base" ); + System.setProperty( "appserver.base", "target/" + DownloadArtifactsTest.class.getName() ); + } + + + @AfterClass + public static void resetAppServerBase() + { + + System.setProperty( "appserver.base", previousAppServerBase ); + } + + @Before + public void startServer() + throws Exception + { + + System.setProperty( "redback.admin.creation.file", "target/auto-admin-creation.properties" ); + this.server = new Server( 0 ); + + ServletContextHandler context = new ServletContextHandler(); + + context.setContextPath( "/" ); + + context.setInitParameter( "contextConfigLocation", getSpringConfigLocation() ); + + ContextLoaderListener contextLoaderListener = new ContextLoaderListener(); + + context.addEventListener( contextLoaderListener ); + + ServletHolder sh = new ServletHolder( CXFServlet.class ); + + SessionHandler sessionHandler = new SessionHandler(); + + context.setSessionHandler( sessionHandler ); + + context.addServlet( sh, "/" + getRestServicesPath() + "/*" ); + + ServletHolder repoSh = new ServletHolder( RepositoryServlet.class ); + context.addServlet( repoSh, "/repository/*" ); + + server.setHandler( context ); + this.server.start(); + Connector connector = this.server.getConnectors()[0]; + this.port = connector.getLocalPort(); + log.info( "start server on port " + this.port ); + + //redirect handler + + this.redirectServer = new Server( 0 ); + ServletHolder shRedirect = new ServletHolder( RedirectServlet.class ); + ServletContextHandler contextRedirect = new ServletContextHandler(); + + contextRedirect.setContextPath( "/" ); + contextRedirect.addServlet( shRedirect, "/*" ); + + redirectServer.setHandler( contextRedirect ); + redirectServer.start(); + this.redirectPort = redirectServer.getConnectors()[0].getLocalPort(); + log.info( "redirect server port {}", redirectPort ); + + FakeCreateAdminService fakeCreateAdminService = getFakeCreateAdminService(); + + Boolean res = fakeCreateAdminService.createAdminIfNeeded(); + assertTrue( res.booleanValue() ); + + + } + + @After + public void tearDown() + throws Exception + { + System.clearProperty( "redback.admin.creation.file" ); + super.tearDown(); + } + + @Test + public void downloadWithRemoteRedirect() + throws Exception + { + RemoteRepository remoteRepository = getRemoteRepositoriesService().getRemoteRepository( "central" ); + remoteRepository.setUrl( "http://localhost:" + redirectPort ); + getRemoteRepositoriesService().updateRemoteRepository( remoteRepository ); + + RoleManagementService roleManagementService = getRoleManagementService( authorizationHeader ); + + if ( !roleManagementService.templatedRoleExists( ArchivaRoleConstants.TEMPLATE_REPOSITORY_OBSERVER, + "internal" ) ) + { + roleManagementService.createTemplatedRole( ArchivaRoleConstants.TEMPLATE_REPOSITORY_OBSERVER, "internal" ); + } + + getUserService( authorizationHeader ).createGuestUser(); + roleManagementService.assignRole( ArchivaRoleConstants.TEMPLATE_GUEST, "guest" ); + + roleManagementService.assignTemplatedRole( ArchivaRoleConstants.TEMPLATE_REPOSITORY_OBSERVER, "internal", + "guest" ); + + getUserService( authorizationHeader ).removeFromCache( "guest" ); + + URL url = new URL( "http://localhost:" + port + "/repository/internal/junit/junit/4.9/junit-4.9.jar" ); + HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); + //urlConnection.setRequestProperty( "Authorization", authorizationHeader ); + InputStream is = urlConnection.getInputStream(); + File file = new File( "target/junit-4.9.jar" ); + if ( file.exists() ) + { + file.delete(); + } + + FileWriter fw = new FileWriter( file ); + IOUtil.copy( is, fw ); + // assert jar contains org/junit/runners/JUnit4.class + ZipFile zipFile = new ZipFile( file ); + ZipEntry zipEntry = zipFile.getEntry( "org/junit/runners/JUnit4.class" ); + assertNotNull( zipEntry ); + zipFile.close(); + file.deleteOnExit(); + } + + public static class RedirectServlet + extends HttpServlet + { + @Override + protected void doGet( HttpServletRequest req, HttpServletResponse resp ) + throws ServletException, IOException + { + + log.info( "redirect servlet receive: {}", req.getRequestURI() ); + resp.setStatus( 302 ); + resp.getWriter().write( "\n" + "\n" + + "302 Found\n" + "\n" + "

Found

\n" + + "

The document has moved here.

\n" + + "\n" + "\n" + + "\n" ); + resp.sendRedirect( "http://repo1.maven.apache.org/maven2/" + req.getRequestURI() ); + } + } + + protected ProxyConnectorService getProxyConnectorService() + { + ProxyConnectorService service = + JAXRSClientFactory.create( getBaseUrl() + "/" + getRestServicesPath() + "/archivaServices/", + ProxyConnectorService.class ); + + WebClient.client( service ).header( "Authorization", authorizationHeader ); + WebClient.getConfig( service ).getHttpConduit().getClient().setReceiveTimeout( 300000L ); + return service; + } + + protected RemoteRepositoriesService getRemoteRepositoriesService() + { + RemoteRepositoriesService service = + JAXRSClientFactory.create( getBaseUrl() + "/" + getRestServicesPath() + "/archivaServices/", + RemoteRepositoriesService.class ); + + WebClient.client( service ).header( "Authorization", authorizationHeader ); + WebClient.getConfig( service ).getHttpConduit().getClient().setReceiveTimeout( 300000L ); + return service; + } + + protected String getBaseUrl() + { + String baseUrlSysProps = System.getProperty( "archiva.baseRestUrl" ); + return StringUtils.isBlank( baseUrlSysProps ) ? "http://localhost:" + port : baseUrlSysProps; + } + + + protected RoleManagementService getRoleManagementService( String authzHeader ) + { + RoleManagementService service = + JAXRSClientFactory.create( "http://localhost:" + port + "/" + getRestServicesPath() + "/redbackServices/", + RoleManagementService.class ); + + // for debuging purpose + WebClient.getConfig( service ).getHttpConduit().getClient().setReceiveTimeout( 3000000L ); + + if ( authzHeader != null ) + { + WebClient.client( service ).header( "Authorization", authzHeader ); + } + return service; + } + + protected UserService getUserService( String authzHeader ) + { + UserService service = + JAXRSClientFactory.create( "http://localhost:" + port + "/" + getRestServicesPath() + "/redbackServices/", + UserService.class ); + + // for debuging purpose + WebClient.getConfig( service ).getHttpConduit().getClient().setReceiveTimeout( 3000000L ); + + if ( authzHeader != null ) + { + WebClient.client( service ).header( "Authorization", authzHeader ); + } + return service; + } + + protected FakeCreateAdminService getFakeCreateAdminService() + { + return JAXRSClientFactory.create( + "http://localhost:" + port + "/" + getRestServicesPath() + "/fakeCreateAdminService/", + FakeCreateAdminService.class ); + } + + +} diff --git a/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/archiva/metadata/repository/memory/TestMetadataRepository.java b/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/archiva/metadata/repository/memory/TestMetadataRepository.java deleted file mode 100644 index f1ae981af..000000000 --- a/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/archiva/metadata/repository/memory/TestMetadataRepository.java +++ /dev/null @@ -1,224 +0,0 @@ -package org.apache.archiva.metadata.repository.memory; - -/* - * 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 org.apache.archiva.metadata.model.ArtifactMetadata; -import org.apache.archiva.metadata.model.MetadataFacet; -import org.apache.archiva.metadata.model.ProjectMetadata; -import org.apache.archiva.metadata.model.ProjectVersionMetadata; -import org.apache.archiva.metadata.model.ProjectVersionReference; -import org.apache.archiva.metadata.repository.MetadataRepository; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.Date; -import java.util.List; - -public class TestMetadataRepository - implements MetadataRepository -{ - private static final String TEST_REPO = "test-repo"; - - private static final String TEST_NAMESPACE = "org.apache.archiva"; - - private List artifacts = new ArrayList(); - - private List versions = new ArrayList(); - - public TestMetadataRepository() - { - Date whenGathered = new Date( 123456789 ); - - addArtifact( "artifact-one", "1.0", whenGathered ); - addArtifact( "artifact-one", "1.1", whenGathered ); - addArtifact( "artifact-one", "2.0", whenGathered ); - addArtifact( "artifact-two", "1.0.1", whenGathered ); - addArtifact( "artifact-two", "1.0.2", whenGathered ); - addArtifact( "artifact-two", "1.0.3-SNAPSHOT", whenGathered ); - addArtifact( "artifact-three", "2.0-SNAPSHOT", whenGathered ); - addArtifact( "artifact-four", "1.1-beta-2", whenGathered ); - } - - private void addArtifact( String projectId, String projectVersion, Date whenGathered ) - { - ArtifactMetadata artifact = new ArtifactMetadata(); - artifact.setFileLastModified( System.currentTimeMillis() ); - artifact.setNamespace( TEST_NAMESPACE ); - artifact.setProjectVersion( projectVersion ); - artifact.setVersion( projectVersion ); - artifact.setId( projectId + "-" + projectVersion + ".jar" ); - artifact.setProject( projectId ); - artifact.setRepositoryId( TEST_REPO ); - artifact.setWhenGathered( whenGathered ); - artifacts.add( artifact ); - - versions.add( projectVersion ); - } - - public ProjectMetadata getProject( String repoId, String namespace, String projectId ) - { - throw new UnsupportedOperationException(); - } - - public ProjectVersionMetadata getProjectVersion( String repoId, String namespace, String projectId, - String projectVersion ) - { - throw new UnsupportedOperationException(); - } - - public Collection getArtifactVersions( String repoId, String namespace, String projectId, - String projectVersion ) - { - throw new UnsupportedOperationException(); - } - - public Collection getProjectReferences( String repoId, String namespace, String projectId, - String projectVersion ) - { - throw new UnsupportedOperationException(); - } - - public Collection getRootNamespaces( String repoId ) - { - throw new UnsupportedOperationException(); - } - - public Collection getNamespaces( String repoId, String namespace ) - { - throw new UnsupportedOperationException(); - } - - public Collection getProjects( String repoId, String namespace ) - { - throw new UnsupportedOperationException(); - } - - public Collection getProjectVersions( String repoId, String namespace, String projectId ) - { - return versions; - } - - public void updateProject( String repoId, ProjectMetadata project ) - { - throw new UnsupportedOperationException(); - } - - public void updateArtifact( String repoId, String namespace, String projectId, String projectVersion, - ArtifactMetadata artifactMeta ) - { - throw new UnsupportedOperationException(); - } - - public void updateProjectVersion( String repoId, String namespace, String projectId, - ProjectVersionMetadata versionMetadata ) - { - throw new UnsupportedOperationException(); - } - - public void updateNamespace( String repoId, String namespace ) - { - throw new UnsupportedOperationException(); - } - - public List getMetadataFacets( String repodId, String facetId ) - { - return Collections.emptyList(); - } - - public MetadataFacet getMetadataFacet( String repositoryId, String facetId, String name ) - { - throw new UnsupportedOperationException(); - } - - public void addMetadataFacet( String repositoryId, MetadataFacet metadataFacet ) - { - throw new UnsupportedOperationException(); - } - - public void removeMetadataFacets( String repositoryId, String facetId ) - { - throw new UnsupportedOperationException(); - } - - public void removeMetadataFacet( String repoId, String facetId, String name ) - { - //To change body of implemented methods use File | Settings | File Templates. - } - - public List getArtifactsByDateRange( String repoId, Date startTime, Date endTime ) - { - return artifacts; - } - - public Collection getRepositories() - { - return Collections.singletonList( TEST_REPO ); - } - - public List getArtifactsByChecksum( String repoId, String checksum ) - { - return null; //To change body of implemented methods use File | Settings | File Templates. - } - - public void removeArtifact( String repositoryId, String namespace, String project, String version, String id ) - { - //To change body of implemented methods use File | Settings | File Templates. - } - - public void removeRepository( String repoId ) - { - //To change body of implemented methods use File | Settings | File Templates. - } - - public Collection getArtifacts( String repoId, String namespace, String projectId, - String projectVersion ) - { - return artifacts; - } - - public void save() - { - } - - public void close() - { - } - - public void revert() - { - throw new UnsupportedOperationException(); - } - - public boolean canObtainAccess( Class aClass ) - { - return false; //To change body of implemented methods use File | Settings | File Templates. - } - - public Object obtainAccess( Class aClass ) - { - return null; //To change body of implemented methods use File | Settings | File Templates. - } - - public List getArtifacts( String repositoryId ) - { - return artifacts; - } -} \ No newline at end of file diff --git a/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/archiva/metadata/repository/memory/TestMetadataResolver.java b/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/archiva/metadata/repository/memory/TestMetadataResolver.java deleted file mode 100644 index 0e2033b85..000000000 --- a/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/archiva/metadata/repository/memory/TestMetadataResolver.java +++ /dev/null @@ -1,160 +0,0 @@ -package org.apache.archiva.metadata.repository.memory; - -/* - * 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 org.apache.archiva.metadata.model.ArtifactMetadata; -import org.apache.archiva.metadata.model.ProjectVersionMetadata; -import org.apache.archiva.metadata.model.ProjectVersionReference; -import org.apache.archiva.metadata.repository.MetadataResolver; -import org.apache.archiva.metadata.repository.RepositorySession; - -import java.util.Collection; -import java.util.Collections; -import java.util.HashMap; -import java.util.LinkedHashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; - -public class TestMetadataResolver - implements MetadataResolver -{ - private Map projectVersions = new HashMap(); - - private Map> artifacts = new HashMap>(); - - private Map> references = - new HashMap>(); - - private Map> namespaces = new HashMap>(); - - private Map> projectsInNamespace = new HashMap>(); - - private Map> versionsInProject = new HashMap>(); - - public ProjectVersionMetadata resolveProjectVersion( RepositorySession repositorySession, String repoId, - String namespace, String projectId, String projectVersion ) - { - return projectVersions.get( createMapKey( repoId, namespace, projectId, projectVersion ) ); - } - - public Collection resolveProjectReferences( RepositorySession repositorySession, - String repoId, String namespace, - String projectId, String projectVersion ) - { - Collection projectVersionReferences = - references.get( createMapKey( repoId, namespace, projectId, projectVersion ) ); - return projectVersionReferences; - } - - public Collection resolveRootNamespaces( RepositorySession repositorySession, String repoId ) - { - return resolveNamespaces( repositorySession, repoId, null ); - } - - public Collection resolveNamespaces( RepositorySession repositorySession, String repoId, - String baseNamespace ) - { - Set namespaces = new LinkedHashSet(); - int fromIndex = baseNamespace != null ? baseNamespace.length() + 1 : 0; - for ( String namespace : this.namespaces.get( repoId ) ) - { - if ( baseNamespace == null || namespace.startsWith( baseNamespace + "." ) ) - { - int i = namespace.indexOf( '.', fromIndex ); - if ( i >= 0 ) - { - namespaces.add( namespace.substring( fromIndex, i ) ); - } - else - { - namespaces.add( namespace.substring( fromIndex ) ); - } - } - } - return namespaces; - } - - public Collection resolveProjects( RepositorySession repositorySession, String repoId, String namespace ) - { - Collection list = projectsInNamespace.get( namespace ); - return list != null ? list : Collections.emptyList(); - } - - public Collection resolveProjectVersions( RepositorySession repositorySession, String repoId, - String namespace, String projectId ) - { - Collection list = versionsInProject.get( namespace + ":" + projectId ); - return list != null ? list : Collections.emptyList(); - } - - public Collection resolveArtifacts( RepositorySession repositorySession, String repoId, - String namespace, String projectId, String projectVersion ) - { - List artifacts = - this.artifacts.get( createMapKey( repoId, namespace, projectId, projectVersion ) ); - return ( artifacts != null ? artifacts : Collections.emptyList() ); - } - - public void setProjectVersion( String repoId, String namespace, String projectId, - ProjectVersionMetadata versionMetadata ) - { - projectVersions.put( createMapKey( repoId, namespace, projectId, versionMetadata.getId() ), versionMetadata ); - - Collection projects = projectsInNamespace.get( namespace ); - if ( projects == null ) - { - projects = new LinkedHashSet(); - projectsInNamespace.put( namespace, projects ); - } - projects.add( projectId ); - - String key = namespace + ":" + projectId; - Collection versions = versionsInProject.get( key ); - if ( versions == null ) - { - versions = new LinkedHashSet(); - versionsInProject.put( key, versions ); - } - versions.add( versionMetadata.getId() ); - } - - public void setArtifacts( String repoId, String namespace, String projectId, String projectVersion, - List artifacts ) - { - this.artifacts.put( createMapKey( repoId, namespace, projectId, projectVersion ), artifacts ); - } - - private String createMapKey( String repoId, String namespace, String projectId, String projectVersion ) - { - return repoId + ":" + namespace + ":" + projectId + ":" + projectVersion; - } - - public void setProjectReferences( String repoId, String namespace, String projectId, String projectVersion, - List references ) - { - this.references.put( createMapKey( repoId, namespace, projectId, projectVersion ), references ); - } - - public void setNamespaces( String repoId, List namespaces ) - { - this.namespaces.put( repoId, namespaces ); - } -} diff --git a/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/archiva/metadata/repository/memory/TestRepositorySessionFactory.java b/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/archiva/metadata/repository/memory/TestRepositorySessionFactory.java deleted file mode 100644 index bbe5ce584..000000000 --- a/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/archiva/metadata/repository/memory/TestRepositorySessionFactory.java +++ /dev/null @@ -1,42 +0,0 @@ -package org.apache.archiva.metadata.repository.memory; - -/* - * 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 org.apache.archiva.metadata.repository.RepositorySession; -import org.apache.archiva.metadata.repository.RepositorySessionFactory; -import org.springframework.stereotype.Service; - -@Service("repositorySessionFactory#test") -public class TestRepositorySessionFactory - implements RepositorySessionFactory -{ - private RepositorySession repositorySession; - - public void setRepositorySession( RepositorySession repositorySession ) - { - this.repositorySession = repositorySession; - } - - public RepositorySession createSession() - { - return repositorySession != null ? repositorySession : new RepositorySession( new TestMetadataRepository(), - new TestMetadataResolver() ); - } -} diff --git a/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/archiva/web/action/AbstractActionTestCase.java b/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/archiva/web/action/AbstractActionTestCase.java index 3c5193d46..ce330cb26 100644 --- a/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/archiva/web/action/AbstractActionTestCase.java +++ b/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/archiva/web/action/AbstractActionTestCase.java @@ -33,7 +33,7 @@ import org.apache.archiva.metadata.model.License; import org.apache.archiva.metadata.model.Organization; import org.apache.archiva.metadata.model.ProjectVersionMetadata; import org.apache.archiva.metadata.model.Scm; -import org.apache.archiva.metadata.repository.memory.TestMetadataResolver; +import org.apache.archiva.webtest.memory.TestMetadataResolver; import org.apache.archiva.metadata.repository.storage.maven2.MavenProjectFacet; import org.apache.archiva.metadata.repository.storage.maven2.MavenProjectParent; import org.apache.archiva.security.UserRepositoriesStub; diff --git a/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/archiva/web/action/BrowseActionTest.java b/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/archiva/web/action/BrowseActionTest.java index 7d9f45e30..9503ccbd4 100644 --- a/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/archiva/web/action/BrowseActionTest.java +++ b/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/archiva/web/action/BrowseActionTest.java @@ -23,10 +23,9 @@ import com.google.common.collect.Lists; import com.opensymphony.xwork2.Action; import org.apache.archiva.metadata.model.ProjectVersionMetadata; import org.apache.archiva.metadata.repository.RepositorySession; -import org.apache.archiva.metadata.repository.memory.TestMetadataResolver; -import org.apache.archiva.metadata.repository.memory.TestRepositorySessionFactory; +import org.apache.archiva.webtest.memory.TestMetadataResolver; +import org.apache.archiva.webtest.memory.TestRepositorySessionFactory; import org.apache.archiva.scheduler.indexing.DefaultDownloadRemoteIndexScheduler; -import org.springframework.context.support.GenericApplicationContext; import java.util.Arrays; import java.util.Collections; diff --git a/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/archiva/web/action/DeleteArtifactActionTest.java b/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/archiva/web/action/DeleteArtifactActionTest.java index 1dc6ae899..e5f468d5e 100644 --- a/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/archiva/web/action/DeleteArtifactActionTest.java +++ b/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/archiva/web/action/DeleteArtifactActionTest.java @@ -25,7 +25,7 @@ import org.apache.archiva.admin.repository.managed.DefaultManagedRepositoryAdmin import org.apache.archiva.metadata.model.ArtifactMetadata; import org.apache.archiva.metadata.repository.MetadataRepository; import org.apache.archiva.metadata.repository.RepositorySession; -import org.apache.archiva.metadata.repository.memory.TestRepositorySessionFactory; +import org.apache.archiva.webtest.memory.TestRepositorySessionFactory; import org.apache.commons.lang.StringUtils; import org.apache.archiva.configuration.ArchivaConfiguration; import org.apache.archiva.configuration.Configuration; diff --git a/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/archiva/web/action/SearchActionTest.java b/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/archiva/web/action/SearchActionTest.java index 3065f5286..d46e880f1 100644 --- a/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/archiva/web/action/SearchActionTest.java +++ b/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/archiva/web/action/SearchActionTest.java @@ -30,7 +30,7 @@ import org.apache.archiva.indexer.util.SearchUtil; import org.apache.archiva.metadata.model.ArtifactMetadata; import org.apache.archiva.metadata.repository.MetadataRepository; import org.apache.archiva.metadata.repository.RepositorySession; -import org.apache.archiva.metadata.repository.memory.TestRepositorySessionFactory; +import org.apache.archiva.webtest.memory.TestRepositorySessionFactory; import org.apache.archiva.security.UserRepositories; import org.apache.archiva.configuration.ArchivaConfiguration; import org.easymock.MockControl; diff --git a/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/archiva/web/action/ShowArtifactActionTest.java b/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/archiva/web/action/ShowArtifactActionTest.java index 32aafde0c..51b997595 100644 --- a/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/archiva/web/action/ShowArtifactActionTest.java +++ b/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/archiva/web/action/ShowArtifactActionTest.java @@ -29,8 +29,8 @@ import org.apache.archiva.metadata.model.ProjectVersionMetadata; import org.apache.archiva.metadata.model.ProjectVersionReference; import org.apache.archiva.metadata.repository.MetadataRepository; import org.apache.archiva.metadata.repository.RepositorySession; -import org.apache.archiva.metadata.repository.memory.TestMetadataResolver; -import org.apache.archiva.metadata.repository.memory.TestRepositorySessionFactory; +import org.apache.archiva.webtest.memory.TestMetadataResolver; +import org.apache.archiva.webtest.memory.TestRepositorySessionFactory; import org.apache.archiva.metadata.repository.storage.maven2.MavenArtifactFacet; import org.apache.archiva.reports.RepositoryProblemFacet; import org.apache.archiva.common.utils.VersionUtil; diff --git a/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/archiva/web/action/admin/repositories/DeleteManagedRepositoryActionTest.java b/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/archiva/web/action/admin/repositories/DeleteManagedRepositoryActionTest.java index 3d09c4095..f1e7e8456 100644 --- a/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/archiva/web/action/admin/repositories/DeleteManagedRepositoryActionTest.java +++ b/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/archiva/web/action/admin/repositories/DeleteManagedRepositoryActionTest.java @@ -29,7 +29,7 @@ import org.apache.archiva.audit.AuditEvent; import org.apache.archiva.audit.AuditListener; import org.apache.archiva.metadata.repository.MetadataRepository; import org.apache.archiva.metadata.repository.RepositorySession; -import org.apache.archiva.metadata.repository.memory.TestRepositorySessionFactory; +import org.apache.archiva.webtest.memory.TestRepositorySessionFactory; import org.apache.archiva.metadata.repository.stats.RepositoryStatisticsManager; import org.apache.archiva.security.ArchivaRoleConstants; import org.apache.archiva.configuration.ArchivaConfiguration; diff --git a/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/archiva/web/action/admin/repositories/EditManagedRepositoryActionTest.java b/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/archiva/web/action/admin/repositories/EditManagedRepositoryActionTest.java index 7c5feded2..7c75b9b87 100644 --- a/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/archiva/web/action/admin/repositories/EditManagedRepositoryActionTest.java +++ b/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/archiva/web/action/admin/repositories/EditManagedRepositoryActionTest.java @@ -27,7 +27,7 @@ import org.apache.archiva.admin.repository.managed.DefaultManagedRepositoryAdmin import org.apache.archiva.audit.AuditListener; import org.apache.archiva.metadata.repository.MetadataRepository; import org.apache.archiva.metadata.repository.RepositorySession; -import org.apache.archiva.metadata.repository.memory.TestRepositorySessionFactory; +import org.apache.archiva.webtest.memory.TestRepositorySessionFactory; import org.apache.archiva.metadata.repository.stats.RepositoryStatisticsManager; import org.apache.archiva.scheduler.repository.RepositoryArchivaTaskScheduler; import org.apache.archiva.scheduler.repository.RepositoryTask; diff --git a/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/archiva/web/action/admin/repositories/RepositoriesActionTest.java b/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/archiva/web/action/admin/repositories/RepositoriesActionTest.java index 601a55488..4b767add6 100644 --- a/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/archiva/web/action/admin/repositories/RepositoriesActionTest.java +++ b/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/archiva/web/action/admin/repositories/RepositoriesActionTest.java @@ -27,7 +27,7 @@ import org.apache.archiva.admin.repository.managed.DefaultManagedRepositoryAdmin import org.apache.archiva.admin.repository.remote.DefaultRemoteRepositoryAdmin; import org.apache.archiva.metadata.repository.MetadataRepository; import org.apache.archiva.metadata.repository.RepositorySession; -import org.apache.archiva.metadata.repository.memory.TestRepositorySessionFactory; +import org.apache.archiva.webtest.memory.TestRepositorySessionFactory; import org.apache.archiva.metadata.repository.stats.RepositoryStatistics; import org.apache.archiva.configuration.ArchivaConfiguration; import org.apache.struts2.StrutsSpringTestCase; diff --git a/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/archiva/web/action/reports/GenerateReportActionTest.java b/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/archiva/web/action/reports/GenerateReportActionTest.java index d74aad4a6..354032e5b 100644 --- a/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/archiva/web/action/reports/GenerateReportActionTest.java +++ b/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/archiva/web/action/reports/GenerateReportActionTest.java @@ -26,7 +26,7 @@ import org.apache.archiva.admin.model.managed.ManagedRepositoryAdmin; import org.apache.archiva.metadata.model.MetadataFacet; import org.apache.archiva.metadata.repository.MetadataRepository; import org.apache.archiva.metadata.repository.RepositorySession; -import org.apache.archiva.metadata.repository.memory.TestRepositorySessionFactory; +import org.apache.archiva.webtest.memory.TestRepositorySessionFactory; import org.apache.archiva.metadata.repository.stats.RepositoryStatistics; import org.apache.archiva.metadata.repository.stats.RepositoryStatisticsManager; import org.apache.archiva.reports.RepositoryProblemFacet; diff --git a/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/archiva/web/tags/DependencyTreeTest.java b/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/archiva/web/tags/DependencyTreeTest.java index 851e1cf56..5c7421c9b 100644 --- a/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/archiva/web/tags/DependencyTreeTest.java +++ b/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/archiva/web/tags/DependencyTreeTest.java @@ -29,8 +29,8 @@ import junit.framework.TestCase; import org.apache.archiva.common.plexusbridge.PlexusSisuBridge; import org.apache.archiva.metadata.model.ProjectVersionMetadata; import org.apache.archiva.metadata.repository.RepositorySession; -import org.apache.archiva.metadata.repository.memory.TestMetadataResolver; -import org.apache.archiva.metadata.repository.memory.TestRepositorySessionFactory; +import org.apache.archiva.webtest.memory.TestMetadataResolver; +import org.apache.archiva.webtest.memory.TestRepositorySessionFactory; import org.apache.archiva.common.ArchivaException; import org.apache.archiva.configuration.ArchivaConfiguration; import org.apache.archiva.configuration.Configuration; diff --git a/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/archiva/webtest/memory/TestMetadataRepository.java b/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/archiva/webtest/memory/TestMetadataRepository.java new file mode 100644 index 000000000..482637f91 --- /dev/null +++ b/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/archiva/webtest/memory/TestMetadataRepository.java @@ -0,0 +1,224 @@ +package org.apache.archiva.webtest.memory; + +/* + * 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 org.apache.archiva.metadata.model.ArtifactMetadata; +import org.apache.archiva.metadata.model.MetadataFacet; +import org.apache.archiva.metadata.model.ProjectMetadata; +import org.apache.archiva.metadata.model.ProjectVersionMetadata; +import org.apache.archiva.metadata.model.ProjectVersionReference; +import org.apache.archiva.metadata.repository.MetadataRepository; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.Date; +import java.util.List; + +public class TestMetadataRepository + implements MetadataRepository +{ + private static final String TEST_REPO = "test-repo"; + + private static final String TEST_NAMESPACE = "org.apache.archiva"; + + private List artifacts = new ArrayList(); + + private List versions = new ArrayList(); + + public TestMetadataRepository() + { + Date whenGathered = new Date( 123456789 ); + + addArtifact( "artifact-one", "1.0", whenGathered ); + addArtifact( "artifact-one", "1.1", whenGathered ); + addArtifact( "artifact-one", "2.0", whenGathered ); + addArtifact( "artifact-two", "1.0.1", whenGathered ); + addArtifact( "artifact-two", "1.0.2", whenGathered ); + addArtifact( "artifact-two", "1.0.3-SNAPSHOT", whenGathered ); + addArtifact( "artifact-three", "2.0-SNAPSHOT", whenGathered ); + addArtifact( "artifact-four", "1.1-beta-2", whenGathered ); + } + + private void addArtifact( String projectId, String projectVersion, Date whenGathered ) + { + ArtifactMetadata artifact = new ArtifactMetadata(); + artifact.setFileLastModified( System.currentTimeMillis() ); + artifact.setNamespace( TEST_NAMESPACE ); + artifact.setProjectVersion( projectVersion ); + artifact.setVersion( projectVersion ); + artifact.setId( projectId + "-" + projectVersion + ".jar" ); + artifact.setProject( projectId ); + artifact.setRepositoryId( TEST_REPO ); + artifact.setWhenGathered( whenGathered ); + artifacts.add( artifact ); + + versions.add( projectVersion ); + } + + public ProjectMetadata getProject( String repoId, String namespace, String projectId ) + { + throw new UnsupportedOperationException(); + } + + public ProjectVersionMetadata getProjectVersion( String repoId, String namespace, String projectId, + String projectVersion ) + { + throw new UnsupportedOperationException(); + } + + public Collection getArtifactVersions( String repoId, String namespace, String projectId, + String projectVersion ) + { + throw new UnsupportedOperationException(); + } + + public Collection getProjectReferences( String repoId, String namespace, String projectId, + String projectVersion ) + { + throw new UnsupportedOperationException(); + } + + public Collection getRootNamespaces( String repoId ) + { + throw new UnsupportedOperationException(); + } + + public Collection getNamespaces( String repoId, String namespace ) + { + throw new UnsupportedOperationException(); + } + + public Collection getProjects( String repoId, String namespace ) + { + throw new UnsupportedOperationException(); + } + + public Collection getProjectVersions( String repoId, String namespace, String projectId ) + { + return versions; + } + + public void updateProject( String repoId, ProjectMetadata project ) + { + throw new UnsupportedOperationException(); + } + + public void updateArtifact( String repoId, String namespace, String projectId, String projectVersion, + ArtifactMetadata artifactMeta ) + { + throw new UnsupportedOperationException(); + } + + public void updateProjectVersion( String repoId, String namespace, String projectId, + ProjectVersionMetadata versionMetadata ) + { + throw new UnsupportedOperationException(); + } + + public void updateNamespace( String repoId, String namespace ) + { + throw new UnsupportedOperationException(); + } + + public List getMetadataFacets( String repodId, String facetId ) + { + return Collections.emptyList(); + } + + public MetadataFacet getMetadataFacet( String repositoryId, String facetId, String name ) + { + throw new UnsupportedOperationException(); + } + + public void addMetadataFacet( String repositoryId, MetadataFacet metadataFacet ) + { + throw new UnsupportedOperationException(); + } + + public void removeMetadataFacets( String repositoryId, String facetId ) + { + throw new UnsupportedOperationException(); + } + + public void removeMetadataFacet( String repoId, String facetId, String name ) + { + //To change body of implemented methods use File | Settings | File Templates. + } + + public List getArtifactsByDateRange( String repoId, Date startTime, Date endTime ) + { + return artifacts; + } + + public Collection getRepositories() + { + return Collections.singletonList( TEST_REPO ); + } + + public List getArtifactsByChecksum( String repoId, String checksum ) + { + return null; //To change body of implemented methods use File | Settings | File Templates. + } + + public void removeArtifact( String repositoryId, String namespace, String project, String version, String id ) + { + //To change body of implemented methods use File | Settings | File Templates. + } + + public void removeRepository( String repoId ) + { + //To change body of implemented methods use File | Settings | File Templates. + } + + public Collection getArtifacts( String repoId, String namespace, String projectId, + String projectVersion ) + { + return artifacts; + } + + public void save() + { + } + + public void close() + { + } + + public void revert() + { + throw new UnsupportedOperationException(); + } + + public boolean canObtainAccess( Class aClass ) + { + return false; //To change body of implemented methods use File | Settings | File Templates. + } + + public Object obtainAccess( Class aClass ) + { + return null; //To change body of implemented methods use File | Settings | File Templates. + } + + public List getArtifacts( String repositoryId ) + { + return artifacts; + } +} \ No newline at end of file diff --git a/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/archiva/webtest/memory/TestMetadataResolver.java b/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/archiva/webtest/memory/TestMetadataResolver.java new file mode 100644 index 000000000..2a5ba06c6 --- /dev/null +++ b/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/archiva/webtest/memory/TestMetadataResolver.java @@ -0,0 +1,160 @@ +package org.apache.archiva.webtest.memory; + +/* + * 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 org.apache.archiva.metadata.model.ArtifactMetadata; +import org.apache.archiva.metadata.model.ProjectVersionMetadata; +import org.apache.archiva.metadata.model.ProjectVersionReference; +import org.apache.archiva.metadata.repository.MetadataResolver; +import org.apache.archiva.metadata.repository.RepositorySession; + +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +public class TestMetadataResolver + implements MetadataResolver +{ + private Map projectVersions = new HashMap(); + + private Map> artifacts = new HashMap>(); + + private Map> references = + new HashMap>(); + + private Map> namespaces = new HashMap>(); + + private Map> projectsInNamespace = new HashMap>(); + + private Map> versionsInProject = new HashMap>(); + + public ProjectVersionMetadata resolveProjectVersion( RepositorySession repositorySession, String repoId, + String namespace, String projectId, String projectVersion ) + { + return projectVersions.get( createMapKey( repoId, namespace, projectId, projectVersion ) ); + } + + public Collection resolveProjectReferences( RepositorySession repositorySession, + String repoId, String namespace, + String projectId, String projectVersion ) + { + Collection projectVersionReferences = + references.get( createMapKey( repoId, namespace, projectId, projectVersion ) ); + return projectVersionReferences; + } + + public Collection resolveRootNamespaces( RepositorySession repositorySession, String repoId ) + { + return resolveNamespaces( repositorySession, repoId, null ); + } + + public Collection resolveNamespaces( RepositorySession repositorySession, String repoId, + String baseNamespace ) + { + Set namespaces = new LinkedHashSet(); + int fromIndex = baseNamespace != null ? baseNamespace.length() + 1 : 0; + for ( String namespace : this.namespaces.get( repoId ) ) + { + if ( baseNamespace == null || namespace.startsWith( baseNamespace + "." ) ) + { + int i = namespace.indexOf( '.', fromIndex ); + if ( i >= 0 ) + { + namespaces.add( namespace.substring( fromIndex, i ) ); + } + else + { + namespaces.add( namespace.substring( fromIndex ) ); + } + } + } + return namespaces; + } + + public Collection resolveProjects( RepositorySession repositorySession, String repoId, String namespace ) + { + Collection list = projectsInNamespace.get( namespace ); + return list != null ? list : Collections.emptyList(); + } + + public Collection resolveProjectVersions( RepositorySession repositorySession, String repoId, + String namespace, String projectId ) + { + Collection list = versionsInProject.get( namespace + ":" + projectId ); + return list != null ? list : Collections.emptyList(); + } + + public Collection resolveArtifacts( RepositorySession repositorySession, String repoId, + String namespace, String projectId, String projectVersion ) + { + List artifacts = + this.artifacts.get( createMapKey( repoId, namespace, projectId, projectVersion ) ); + return ( artifacts != null ? artifacts : Collections.emptyList() ); + } + + public void setProjectVersion( String repoId, String namespace, String projectId, + ProjectVersionMetadata versionMetadata ) + { + projectVersions.put( createMapKey( repoId, namespace, projectId, versionMetadata.getId() ), versionMetadata ); + + Collection projects = projectsInNamespace.get( namespace ); + if ( projects == null ) + { + projects = new LinkedHashSet(); + projectsInNamespace.put( namespace, projects ); + } + projects.add( projectId ); + + String key = namespace + ":" + projectId; + Collection versions = versionsInProject.get( key ); + if ( versions == null ) + { + versions = new LinkedHashSet(); + versionsInProject.put( key, versions ); + } + versions.add( versionMetadata.getId() ); + } + + public void setArtifacts( String repoId, String namespace, String projectId, String projectVersion, + List artifacts ) + { + this.artifacts.put( createMapKey( repoId, namespace, projectId, projectVersion ), artifacts ); + } + + private String createMapKey( String repoId, String namespace, String projectId, String projectVersion ) + { + return repoId + ":" + namespace + ":" + projectId + ":" + projectVersion; + } + + public void setProjectReferences( String repoId, String namespace, String projectId, String projectVersion, + List references ) + { + this.references.put( createMapKey( repoId, namespace, projectId, projectVersion ), references ); + } + + public void setNamespaces( String repoId, List namespaces ) + { + this.namespaces.put( repoId, namespaces ); + } +} diff --git a/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/archiva/webtest/memory/TestRepositorySessionFactory.java b/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/archiva/webtest/memory/TestRepositorySessionFactory.java new file mode 100644 index 000000000..f311d97d3 --- /dev/null +++ b/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/archiva/webtest/memory/TestRepositorySessionFactory.java @@ -0,0 +1,42 @@ +package org.apache.archiva.webtest.memory; + +/* + * 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 org.apache.archiva.metadata.repository.RepositorySession; +import org.apache.archiva.metadata.repository.RepositorySessionFactory; +import org.springframework.stereotype.Service; + +@Service("repositorySessionFactory#test") +public class TestRepositorySessionFactory + implements RepositorySessionFactory +{ + private RepositorySession repositorySession; + + public void setRepositorySession( RepositorySession repositorySession ) + { + this.repositorySession = repositorySession; + } + + public RepositorySession createSession() + { + return repositorySession != null ? repositorySession : new RepositorySession( new TestMetadataRepository(), + new TestMetadataResolver() ); + } +} diff --git a/archiva-modules/archiva-web/archiva-webapp/src/test/resources/spring-context-DependencyTreeTest.xml b/archiva-modules/archiva-web/archiva-webapp/src/test/resources/spring-context-DependencyTreeTest.xml index 79e981ec1..9144b0745 100644 --- a/archiva-modules/archiva-web/archiva-webapp/src/test/resources/spring-context-DependencyTreeTest.xml +++ b/archiva-modules/archiva-web/archiva-webapp/src/test/resources/spring-context-DependencyTreeTest.xml @@ -30,7 +30,7 @@ - + diff --git a/archiva-modules/archiva-web/archiva-webapp/src/test/resources/spring-context-artifacts-download.xml b/archiva-modules/archiva-web/archiva-webapp/src/test/resources/spring-context-artifacts-download.xml new file mode 100644 index 000000000..03ea7e7c8 --- /dev/null +++ b/archiva-modules/archiva-web/archiva-webapp/src/test/resources/spring-context-artifacts-download.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + ]]> + + + + + + diff --git a/archiva-modules/archiva-web/archiva-webapp/src/test/resources/spring-context-rss-servlet.xml b/archiva-modules/archiva-web/archiva-webapp/src/test/resources/spring-context-rss-servlet.xml index 37834e217..7860e21a1 100644 --- a/archiva-modules/archiva-web/archiva-webapp/src/test/resources/spring-context-rss-servlet.xml +++ b/archiva-modules/archiva-web/archiva-webapp/src/test/resources/spring-context-rss-servlet.xml @@ -30,7 +30,7 @@ - + diff --git a/archiva-modules/archiva-web/archiva-webapp/src/test/resources/spring-context.xml b/archiva-modules/archiva-web/archiva-webapp/src/test/resources/spring-context.xml index 8c2633875..fe6cbae76 100644 --- a/archiva-modules/archiva-web/archiva-webapp/src/test/resources/spring-context.xml +++ b/archiva-modules/archiva-web/archiva-webapp/src/test/resources/spring-context.xml @@ -30,7 +30,7 @@ - + @@ -38,6 +38,6 @@ - +