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.PlexusTestCase;
29 import org.codehaus.plexus.jdo.DefaultConfigurableJdoFactory;
30 import org.codehaus.plexus.jdo.JdoFactory;
31 import org.jpox.SchemaTool;
34 import java.io.IOException;
36 import java.util.Date;
37 import java.util.List;
38 import java.util.Properties;
39 import java.util.Map.Entry;
41 import javax.jdo.PersistenceManager;
42 import javax.jdo.PersistenceManagerFactory;
45 * @author <a href="mailto:oching@apache.org">Maria Odea Ching</a>
47 public abstract class AbstractRepositoryPurgeTest
48 extends PlexusTestCase
50 public static final String TEST_REPO_ID = "test-repo";
52 public static final String TEST_REPO_NAME = "Test Repository";
54 public static final int TEST_RETENTION_COUNT = 2;
56 public static final int TEST_DAYS_OLDER = 30;
58 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";
60 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";
62 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";
64 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";
66 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";
68 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";
70 private ManagedRepositoryConfiguration config;
72 private ManagedRepositoryContent repo;
74 protected ArtifactDAO dao;
76 protected RepositoryPurge repoPurge;
78 protected void setUp()
83 DefaultConfigurableJdoFactory jdoFactory = (DefaultConfigurableJdoFactory) lookup( JdoFactory.ROLE, "archiva" );
84 assertEquals( DefaultConfigurableJdoFactory.class.getName(), jdoFactory.getClass().getName() );
86 jdoFactory.setPersistenceManagerFactoryClass( "org.jpox.PersistenceManagerFactoryImpl" );
88 jdoFactory.setDriverName( System.getProperty( "jdo.test.driver", "org.hsqldb.jdbcDriver" ) );
89 jdoFactory.setUrl( System.getProperty( "jdo.test.url", "jdbc:hsqldb:mem:testdb" ) );
91 jdoFactory.setUserName( System.getProperty( "jdo.test.user", "sa" ) );
93 jdoFactory.setPassword( System.getProperty( "jdo.test.pass", "" ) );
95 jdoFactory.setProperty( "org.jpox.transactionIsolation", "READ_COMMITTED" );
97 jdoFactory.setProperty( "org.jpox.poid.transactionIsolation", "READ_COMMITTED" );
99 jdoFactory.setProperty( "org.jpox.autoCreateSchema", "true" );
101 jdoFactory.setProperty( "javax.jdo.option.RetainValues", "true" );
103 jdoFactory.setProperty( "javax.jdo.option.RestoreValues", "true" );
105 // jdoFactory.setProperty( "org.jpox.autoCreateColumns", "true" );
107 jdoFactory.setProperty( "org.jpox.validateTables", "true" );
109 jdoFactory.setProperty( "org.jpox.validateColumns", "true" );
111 jdoFactory.setProperty( "org.jpox.validateConstraints", "true" );
113 Properties properties = jdoFactory.getProperties();
115 for ( Entry<Object, Object> entry : properties.entrySet() )
117 System.setProperty( (String) entry.getKey(), (String) entry.getValue() );
120 URL jdoFileUrls[] = new URL[] { getClass().getResource( "/org/apache/maven/archiva/model/package.jdo" ) };
122 if ( ( jdoFileUrls == null ) || ( jdoFileUrls[0] == null ) )
124 fail( "Unable to process test " + getName() + " - missing package.jdo." );
127 File propsFile = null; // intentional
128 boolean verbose = true;
130 SchemaTool.deleteSchemaTables( jdoFileUrls, new URL[] {}, propsFile, verbose );
131 SchemaTool.createSchemaTables( jdoFileUrls, new URL[] {}, propsFile, verbose, null );
133 PersistenceManagerFactory pmf = jdoFactory.getPersistenceManagerFactory();
135 assertNotNull( pmf );
137 PersistenceManager pm = pmf.getPersistenceManager();
141 dao = (ArtifactDAO) lookup( ArtifactDAO.class.getName(), "jdo" );
145 protected void tearDown()
153 public ManagedRepositoryConfiguration getRepoConfiguration()
155 if ( config == null )
157 config = new ManagedRepositoryConfiguration();
160 config.setId( TEST_REPO_ID );
161 config.setName( TEST_REPO_NAME );
162 config.setDaysOlder( TEST_DAYS_OLDER );
163 config.setLocation( getTestRepoRoot().getAbsolutePath() );
164 config.setReleases( true );
165 config.setSnapshots( true );
166 config.setDeleteReleasedSnapshots( true );
167 config.setRetentionCount( TEST_RETENTION_COUNT );
172 public ManagedRepositoryContent getRepository()
177 repo = (ManagedRepositoryContent) lookup( ManagedRepositoryContent.class, "default" );
178 repo.setRepository( getRepoConfiguration() );
184 protected void populateDb( String groupId, String artifactId, List<String> versions )
185 throws ArchivaDatabaseException
187 for ( String version : versions )
189 ArchivaArtifact artifact = dao.createArtifact( groupId, artifactId, version, "", "jar" );
190 assertNotNull( artifact );
191 artifact.getModel().setLastModified( new Date() );
192 artifact.getModel().setOrigin( "test" );
193 ArchivaArtifact savedArtifact = dao.saveArtifact( artifact );
194 assertNotNull( savedArtifact );
197 artifact = dao.createArtifact( groupId, artifactId, version, "", "pom" );
198 assertNotNull( artifact );
199 artifact.getModel().setLastModified( new Date() );
200 artifact.getModel().setOrigin( "test" );
201 savedArtifact = dao.saveArtifact( artifact );
202 assertNotNull( savedArtifact );
206 protected void assertDeleted( String path )
208 assertFalse( "File should have been deleted: " + path, new File( path ).exists() );
211 protected void assertExists( String path )
213 assertTrue( "File should exist: " + path, new File( path ).exists() );
216 protected File getTestRepoRoot()
218 return getTestFile( "target/test-" + getName() + "/test-repo" );
221 protected String prepareTestRepo()
224 File testDir = getTestRepoRoot();
225 FileUtils.deleteDirectory( testDir );
226 FileUtils.copyDirectory( getTestFile( "target/test-classes/test-repo" ), testDir );
228 return testDir.getAbsolutePath();