]> source.dussan.org Git - archiva.git/blob
be209cc020427737bac065a8f6bff62a69c341b9
[archiva.git] /
1 package org.apache.maven.archiva.consumers.core.repository;
2
3 /*
4 * Licensed to the Apache Software Foundation (ASF) under one
5 * or more contributor license agreements.  See the NOTICE file
6 * distributed with this work for additional information
7 * regarding copyright ownership.  The ASF licenses this file
8 * to you under the Apache License, Version 2.0 (the
9 * "License"); you may not use this file except in compliance
10 * with the License.  You may obtain a copy of the License at
11 *
12 *  http://www.apache.org/licenses/LICENSE-2.0
13 *
14 * Unless required by applicable law or agreed to in writing,
15 * software distributed under the License is distributed on an
16 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17 * KIND, either express or implied.  See the License for the
18 * specific language governing permissions and limitations
19 * under the License.
20 */
21
22 import 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;
32
33 import java.io.File;
34 import java.io.IOException;
35 import java.net.URL;
36 import java.util.Date;
37 import java.util.List;
38 import java.util.Properties;
39 import java.util.Map.Entry;
40
41 import javax.jdo.PersistenceManager;
42 import javax.jdo.PersistenceManagerFactory;
43
44 /**
45  * @author <a href="mailto:oching@apache.org">Maria Odea Ching</a>
46  */
47 public abstract class AbstractRepositoryPurgeTest
48     extends PlexusTestCase
49 {
50     public static final String TEST_REPO_ID = "test-repo";
51
52     public static final String TEST_REPO_NAME = "Test Repository";
53
54     public static final int TEST_RETENTION_COUNT = 2;
55
56     public static final int TEST_DAYS_OLDER = 30;
57
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";
59
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";
61
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";
63
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";
65
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";
67
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";
69     
70     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";
71
72     private ManagedRepositoryConfiguration config;
73
74     private ManagedRepositoryContent repo;
75
76     protected ArtifactDAO dao;
77
78     protected RepositoryPurge repoPurge;
79
80     protected void setUp()
81         throws Exception
82     {
83         super.setUp();
84
85         DefaultConfigurableJdoFactory jdoFactory = (DefaultConfigurableJdoFactory) lookup( JdoFactory.ROLE, "archiva" );
86         assertEquals( DefaultConfigurableJdoFactory.class.getName(), jdoFactory.getClass().getName() );
87
88         jdoFactory.setPersistenceManagerFactoryClass( "org.jpox.PersistenceManagerFactoryImpl" );
89
90         jdoFactory.setDriverName( System.getProperty( "jdo.test.driver", "org.hsqldb.jdbcDriver" ) );
91         jdoFactory.setUrl( System.getProperty( "jdo.test.url", "jdbc:hsqldb:mem:testdb" ) );
92
93         jdoFactory.setUserName( System.getProperty( "jdo.test.user", "sa" ) );
94
95         jdoFactory.setPassword( System.getProperty( "jdo.test.pass", "" ) );
96
97         jdoFactory.setProperty( "org.jpox.transactionIsolation", "READ_COMMITTED" );
98
99         jdoFactory.setProperty( "org.jpox.poid.transactionIsolation", "READ_COMMITTED" );
100
101         jdoFactory.setProperty( "org.jpox.autoCreateSchema", "true" );
102
103         jdoFactory.setProperty( "javax.jdo.option.RetainValues", "true" );
104
105         jdoFactory.setProperty( "javax.jdo.option.RestoreValues", "true" );
106
107         // jdoFactory.setProperty( "org.jpox.autoCreateColumns", "true" );
108
109         jdoFactory.setProperty( "org.jpox.validateTables", "true" );
110
111         jdoFactory.setProperty( "org.jpox.validateColumns", "true" );
112
113         jdoFactory.setProperty( "org.jpox.validateConstraints", "true" );
114
115         Properties properties = jdoFactory.getProperties();
116
117         for ( Entry<Object, Object> entry : properties.entrySet() )
118         {
119             System.setProperty( (String) entry.getKey(), (String) entry.getValue() );
120         }
121
122         URL jdoFileUrls[] = new URL[] { getClass().getResource( "/org/apache/maven/archiva/model/package.jdo" ) };
123
124         if ( ( jdoFileUrls == null ) || ( jdoFileUrls[0] == null ) )
125         {
126             fail( "Unable to process test " + getName() + " - missing package.jdo." );
127         }
128
129         File propsFile = null; // intentional
130         boolean verbose = true;
131
132         SchemaTool.deleteSchemaTables( jdoFileUrls, new URL[] {}, propsFile, verbose );
133         SchemaTool.createSchemaTables( jdoFileUrls, new URL[] {}, propsFile, verbose, null );
134
135         PersistenceManagerFactory pmf = jdoFactory.getPersistenceManagerFactory();
136
137         assertNotNull( pmf );
138
139         PersistenceManager pm = pmf.getPersistenceManager();
140
141         pm.close();
142
143         dao = (ArtifactDAO) lookup( ArtifactDAO.class.getName(), "jdo" );
144     }
145     
146     @Override
147     protected void tearDown()
148         throws Exception
149     {
150         super.tearDown();
151         config = null;
152         repo = null;
153     }
154
155     public ManagedRepositoryConfiguration getRepoConfiguration()
156     {
157         if ( config == null )
158         {
159             config = new ManagedRepositoryConfiguration();
160         }
161
162         config.setId( TEST_REPO_ID );
163         config.setName( TEST_REPO_NAME );
164         config.setDaysOlder( TEST_DAYS_OLDER );
165         config.setLocation( getTestRepoRoot().getAbsolutePath() );
166         config.setReleases( true );
167         config.setSnapshots( true );
168         config.setDeleteReleasedSnapshots( true );
169         config.setRetentionCount( TEST_RETENTION_COUNT );
170
171         return config;
172     }
173
174     public ManagedRepositoryContent getRepository()
175         throws Exception
176     {
177         if ( repo == null )
178         {
179             repo = (ManagedRepositoryContent) lookup( ManagedRepositoryContent.class, "default" );
180             repo.setRepository( getRepoConfiguration() );
181         }
182
183         return repo;
184     }
185
186     protected void populateDb( String groupId, String artifactId, List<String> versions )
187         throws ArchivaDatabaseException
188     {
189         for ( String version : versions )
190         {
191             ArchivaArtifact artifact = dao.createArtifact( groupId, artifactId, version, "", "jar" );
192             assertNotNull( artifact );
193             artifact.getModel().setLastModified( new Date() );
194             artifact.getModel().setOrigin( "test" );
195             ArchivaArtifact savedArtifact = dao.saveArtifact( artifact );
196             assertNotNull( savedArtifact );
197
198             //POM
199             artifact = dao.createArtifact( groupId, artifactId, version, "", "pom" );
200             assertNotNull( artifact );
201             artifact.getModel().setLastModified( new Date() );
202             artifact.getModel().setOrigin( "test" );
203             savedArtifact = dao.saveArtifact( artifact );
204             assertNotNull( savedArtifact );
205         }
206     }
207
208     protected void assertDeleted( String path )
209     {
210         assertFalse( "File should have been deleted: " + path, new File( path ).exists() );
211     }
212
213     protected void assertExists( String path )
214     {
215         assertTrue( "File should exist: " + path, new File( path ).exists() );
216     }
217     
218     protected File getTestRepoRoot()
219     {
220         return getTestFile( "target/test-" + getName() + "/test-repo" );
221     }
222
223     protected String prepareTestRepo()
224         throws IOException
225     {
226         File testDir = getTestRepoRoot();
227         FileUtils.deleteDirectory( testDir );
228         FileUtils.copyDirectory( getTestFile( "target/test-classes/test-repo" ), testDir );
229         
230         return testDir.getAbsolutePath();
231     }
232 }