1 package org.apache.maven.archiva.consumers.core.repository;
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
12 * http://www.apache.org/licenses/LICENSE-2.0
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
22 import org.apache.commons.io.FileUtils;
23 import org.apache.maven.archiva.configuration.ManagedRepositoryConfiguration;
24 import org.apache.maven.archiva.database.ArchivaDatabaseException;
25 import org.apache.maven.archiva.database.ArtifactDAO;
26 import org.apache.maven.archiva.model.ArchivaArtifact;
27 import org.apache.maven.archiva.repository.ManagedRepositoryContent;
28 import org.codehaus.plexus.jdo.DefaultConfigurableJdoFactory;
29 import org.codehaus.plexus.jdo.JdoFactory;
30 import org.codehaus.plexus.spring.PlexusInSpringTestCase;
31 import org.jpox.SchemaTool;
34 import java.io.IOException;
36 import java.util.ArrayList;
37 import java.util.Date;
38 import java.util.List;
39 import java.util.Properties;
40 import java.util.Map.Entry;
42 import javax.jdo.PersistenceManager;
43 import javax.jdo.PersistenceManagerFactory;
46 * @author <a href="mailto:oching@apache.org">Maria Odea Ching</a>
48 public abstract class AbstractRepositoryPurgeTest
49 extends PlexusInSpringTestCase
51 public static final String TEST_REPO_ID = "test-repo";
53 public static final String TEST_REPO_NAME = "Test Repository";
55 public static final int TEST_RETENTION_COUNT = 2;
57 public static final int TEST_DAYS_OLDER = 30;
59 public static final String PATH_TO_BY_DAYS_OLD_ARTIFACT = "org/apache/maven/plugins/maven-install-plugin/2.2-SNAPSHOT/maven-install-plugin-2.2-20061118.060401-2.jar";
61 public static final String PATH_TO_BY_DAYS_OLD_METADATA_DRIVEN_ARTIFACT = "org/codehaus/plexus/plexus-utils/1.4.3-SNAPSHOT/plexus-utils-1.4.3-20070113.163208-4.jar";
63 public static final String PATH_TO_BY_RETENTION_COUNT_ARTIFACT = "org/jruby/plugins/jruby-rake-plugin/1.0RC1-SNAPSHOT/jruby-rake-plugin-1.0RC1-20070504.153317-1.jar";
65 public static final String PATH_TO_BY_RETENTION_COUNT_POM = "org/codehaus/castor/castor-anttasks/1.1.2-SNAPSHOT/castor-anttasks-1.1.2-20070506.163513-2.pom";
67 public static final String PATH_TO_RELEASED_SNAPSHOT = "org/apache/maven/plugins/maven-plugin-plugin/2.3-SNAPSHOT/maven-plugin-plugin-2.3-SNAPSHOT.jar";
69 public static final String PATH_TO_HIGHER_SNAPSHOT_EXISTS = "org/apache/maven/plugins/maven-source-plugin/2.0.3-SNAPSHOT/maven-source-plugin-2.0.3-SNAPSHOT.jar";
71 public static final String PATH_TO_TEST_ORDER_OF_DELETION = "org/apache/maven/plugins/maven-assembly-plugin/1.1.2-SNAPSHOT/maven-assembly-plugin-1.1.2-20070615.105019-3.jar";
73 private ManagedRepositoryConfiguration config;
75 private ManagedRepositoryContent repo;
77 protected ArtifactDAO dao;
79 protected RepositoryPurge repoPurge;
81 protected void setUp()
86 DefaultConfigurableJdoFactory jdoFactory = (DefaultConfigurableJdoFactory) lookup( JdoFactory.ROLE, "archiva" );
87 assertEquals( DefaultConfigurableJdoFactory.class.getName(), jdoFactory.getClass().getName() );
89 jdoFactory.setPersistenceManagerFactoryClass( "org.jpox.PersistenceManagerFactoryImpl" );
91 jdoFactory.setDriverName( System.getProperty( "jdo.test.driver", "org.hsqldb.jdbcDriver" ) );
92 jdoFactory.setUrl( System.getProperty( "jdo.test.url", "jdbc:hsqldb:mem:testdb" ) );
94 jdoFactory.setUserName( System.getProperty( "jdo.test.user", "sa" ) );
96 jdoFactory.setPassword( System.getProperty( "jdo.test.pass", "" ) );
98 jdoFactory.setProperty( "org.jpox.transactionIsolation", "READ_COMMITTED" );
100 jdoFactory.setProperty( "org.jpox.poid.transactionIsolation", "READ_COMMITTED" );
102 jdoFactory.setProperty( "org.jpox.autoCreateSchema", "true" );
104 jdoFactory.setProperty( "javax.jdo.option.RetainValues", "true" );
106 jdoFactory.setProperty( "javax.jdo.option.RestoreValues", "true" );
108 // jdoFactory.setProperty( "org.jpox.autoCreateColumns", "true" );
110 jdoFactory.setProperty( "org.jpox.validateTables", "true" );
112 jdoFactory.setProperty( "org.jpox.validateColumns", "true" );
114 jdoFactory.setProperty( "org.jpox.validateConstraints", "true" );
116 Properties properties = jdoFactory.getProperties();
118 for ( Entry<Object, Object> entry : properties.entrySet() )
120 System.setProperty( (String) entry.getKey(), (String) entry.getValue() );
123 URL jdoFileUrls[] = new URL[] { getClass().getResource( "/org/apache/maven/archiva/model/package.jdo" ) };
125 if ( ( jdoFileUrls == null ) || ( jdoFileUrls[0] == null ) )
127 fail( "Unable to process test " + getName() + " - missing package.jdo." );
130 File propsFile = null; // intentional
131 boolean verbose = true;
133 SchemaTool.deleteSchemaTables( jdoFileUrls, new URL[] {}, propsFile, verbose );
134 SchemaTool.createSchemaTables( jdoFileUrls, new URL[] {}, propsFile, verbose, null );
136 PersistenceManagerFactory pmf = jdoFactory.getPersistenceManagerFactory();
138 assertNotNull( pmf );
140 PersistenceManager pm = pmf.getPersistenceManager();
144 dao = (ArtifactDAO) lookup( ArtifactDAO.class.getName(), "jdo" );
148 protected void tearDown()
156 public ManagedRepositoryConfiguration getRepoConfiguration()
158 if ( config == null )
160 config = new ManagedRepositoryConfiguration();
163 config.setId( TEST_REPO_ID );
164 config.setName( TEST_REPO_NAME );
165 config.setDaysOlder( TEST_DAYS_OLDER );
166 config.setLocation( getTestRepoRoot().getAbsolutePath() );
167 config.setReleases( true );
168 config.setSnapshots( true );
169 config.setDeleteReleasedSnapshots( true );
170 config.setRetentionCount( TEST_RETENTION_COUNT );
175 public ManagedRepositoryContent getRepository()
180 repo = (ManagedRepositoryContent) lookup( ManagedRepositoryContent.class, "default" );
181 repo.setRepository( getRepoConfiguration() );
187 protected void populateDb( String groupId, String artifactId, List<String> versions )
188 throws ArchivaDatabaseException
190 for ( String version : versions )
192 ArchivaArtifact artifact = dao.createArtifact( groupId, artifactId, version, "", "jar" );
193 assertNotNull( artifact );
194 artifact.getModel().setLastModified( new Date() );
195 artifact.getModel().setOrigin( "test" );
196 ArchivaArtifact savedArtifact = dao.saveArtifact( artifact );
197 assertNotNull( savedArtifact );
200 artifact = dao.createArtifact( groupId, artifactId, version, "", "pom" );
201 assertNotNull( artifact );
202 artifact.getModel().setLastModified( new Date() );
203 artifact.getModel().setOrigin( "test" );
204 savedArtifact = dao.saveArtifact( artifact );
205 assertNotNull( savedArtifact );
209 protected void assertDeleted( String path )
211 assertFalse( "File should have been deleted: " + path, new File( path ).exists() );
214 protected void assertExists( String path )
216 assertTrue( "File should exist: " + path, new File( path ).exists() );
219 protected File getTestRepoRoot()
221 return getTestFile( "target/test-" + getName() + "/test-repo" );
224 protected String prepareTestRepo()
227 File testDir = getTestRepoRoot();
228 FileUtils.deleteDirectory( testDir );
229 FileUtils.copyDirectory( getTestFile( "target/test-classes/test-repo" ), testDir );
231 return testDir.getAbsolutePath();
234 protected void populateDbForTestOrderOfDeletion()
237 List<String> versions = new ArrayList<String>();
238 versions.add( "1.1.2-20070427.065136-1" );
239 versions.add( "1.1.2-20070506.163513-2" );
240 versions.add( "1.1.2-20070615.105019-3" );
242 populateDb( "org.apache.maven.plugins", "maven-assembly-plugin", versions );