]> source.dussan.org Git - archiva.git/blob
dfda5f5cc76bbae889b268a90ae60ddea60ae616
[archiva.git] /
1 package org.apache.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 junit.framework.TestCase;
23 import org.apache.archiva.admin.model.beans.ManagedRepository;
24 import org.apache.archiva.admin.model.managed.ManagedRepositoryAdmin;
25 import org.apache.archiva.admin.repository.managed.DefaultManagedRepositoryAdmin;
26 import org.apache.archiva.common.plexusbridge.PlexusSisuBridge;
27 import org.apache.archiva.configuration.ArchivaConfiguration;
28 import org.apache.archiva.metadata.repository.MetadataRepository;
29 import org.apache.archiva.metadata.repository.RepositorySession;
30 import org.apache.archiva.repository.ManagedRepositoryContent;
31 import org.apache.archiva.repository.events.RepositoryListener;
32 import org.apache.commons.io.FileUtils;
33 import org.apache.commons.lang.StringUtils;
34 import org.apache.maven.index.NexusIndexer;
35 import org.apache.maven.index.context.IndexingContext;
36 import org.easymock.MockControl;
37 import org.junit.After;
38 import org.junit.Before;
39 import org.junit.runner.RunWith;
40 import org.springframework.context.ApplicationContext;
41 import org.springframework.test.context.ContextConfiguration;
42 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
43
44 import javax.inject.Inject;
45 import java.io.File;
46 import java.io.IOException;
47
48 import static org.mockito.Mockito.mock;
49 import static org.mockito.Mockito.when;
50
51 /**
52  */
53 @RunWith( SpringJUnit4ClassRunner.class )
54 @ContextConfiguration( locations = { "classpath*:/META-INF/spring-context.xml", "classpath:/spring-context.xml" } )
55 public abstract class AbstractRepositoryPurgeTest
56     extends TestCase
57 {
58     public static final String TEST_REPO_ID = "test-repo";
59
60     public static final String TEST_REPO_NAME = "Test Repository";
61
62     public static final int TEST_RETENTION_COUNT = 2;
63
64     public static final int TEST_DAYS_OLDER = 30;
65
66     public static final String PATH_TO_BY_DAYS_OLD_ARTIFACT =
67         "org/apache/maven/plugins/maven-install-plugin/2.2-SNAPSHOT/maven-install-plugin-2.2-20061118.060401-2.jar";
68
69     public static final String PATH_TO_BY_DAYS_OLD_METADATA_DRIVEN_ARTIFACT =
70         "org/codehaus/plexus/plexus-utils/1.4.3-SNAPSHOT/plexus-utils-1.4.3-20070113.163208-4.jar";
71
72     public static final String PATH_TO_BY_RETENTION_COUNT_ARTIFACT =
73         "org/jruby/plugins/jruby-rake-plugin/1.0RC1-SNAPSHOT/jruby-rake-plugin-1.0RC1-20070504.153317-1.jar";
74
75     public static final String PATH_TO_BY_RETENTION_COUNT_POM =
76         "org/codehaus/castor/castor-anttasks/1.1.2-SNAPSHOT/castor-anttasks-1.1.2-20070506.163513-2.pom";
77
78     public static final String PATH_TO_TEST_ORDER_OF_DELETION =
79         "org/apache/maven/plugins/maven-assembly-plugin/1.1.2-SNAPSHOT/maven-assembly-plugin-1.1.2-20070615.105019-3.jar";
80
81     protected static final String RELEASES_TEST_REPO_ID = "releases-test-repo-one";
82
83     protected static final String RELEASES_TEST_REPO_NAME = "Releases Test Repo One";
84
85     private ManagedRepository config;
86
87     private ManagedRepositoryContent repo;
88
89     protected RepositoryPurge repoPurge;
90
91     protected MockControl listenerControl;
92
93     protected RepositoryListener listener;
94
95     protected RepositorySession repositorySession;
96
97     protected MetadataRepository metadataRepository;
98
99     @Inject
100     protected ApplicationContext applicationContext;
101
102     @Inject
103     protected PlexusSisuBridge plexusSisuBridge;
104
105
106     @Before
107     public void setUp()
108         throws Exception
109     {
110         super.setUp();
111
112         removeMavenIndexes();
113
114         listenerControl = MockControl.createControl( RepositoryListener.class );
115
116         listener = (RepositoryListener) listenerControl.getMock();
117
118         repositorySession = mock( RepositorySession.class );
119         metadataRepository = mock( MetadataRepository.class );
120         when( repositorySession.getRepository() ).thenReturn( metadataRepository );
121
122
123
124     }
125
126     @After
127     public void tearDown()
128         throws Exception
129     {
130         removeMavenIndexes();
131         super.tearDown();
132         config = null;
133         repo = null;
134
135     }
136
137     protected void removeMavenIndexes()
138         throws Exception
139     {
140         NexusIndexer nexusIndexer = plexusSisuBridge.lookup( NexusIndexer.class );
141         for ( IndexingContext indexingContext : nexusIndexer.getIndexingContexts().values() )
142         {
143             nexusIndexer.removeIndexingContext( indexingContext, false );
144         }
145     }
146
147     public ManagedRepository getRepoConfiguration( String repoId, String repoName )
148     {
149         config = new ManagedRepository();
150         config.setId( repoId );
151         config.setName( repoName );
152         config.setDaysOlder( TEST_DAYS_OLDER );
153         config.setLocation( new File( "target/test-" + getName() + "/" + repoId ).getAbsolutePath() );
154         config.setReleases( true );
155         config.setSnapshots( true );
156         config.setDeleteReleasedSnapshots( true );
157         config.setRetentionCount( TEST_RETENTION_COUNT );
158
159         return config;
160     }
161
162     public ManagedRepositoryContent getRepository()
163         throws Exception
164     {
165         if ( repo == null )
166         {
167             repo = applicationContext.getBean( "managedRepositoryContent#default", ManagedRepositoryContent.class );
168             repo.setRepository( getRepoConfiguration( TEST_REPO_ID, TEST_REPO_NAME ) );
169         }
170
171         return repo;
172     }
173
174     protected void assertDeleted( String path )
175     {
176         assertFalse( "File should have been deleted: " + path, new File( path ).exists() );
177     }
178
179     protected void assertExists( String path )
180     {
181         assertTrue( "File should exist: " + path, new File( path ).exists() );
182     }
183
184     protected File getTestRepoRoot()
185     {
186         return new File( "target/test-" + getName() + "/" + TEST_REPO_ID );
187     }
188
189     protected String prepareTestRepos()
190         throws Exception
191     {
192         removeMavenIndexes();
193         File testDir = getTestRepoRoot();
194         FileUtils.deleteDirectory( testDir );
195         FileUtils.copyDirectory( new File( "target/test-classes/" + TEST_REPO_ID ), testDir );
196
197         File releasesTestDir = new File( "target/test-" + getName() + "/" + RELEASES_TEST_REPO_ID );
198         FileUtils.deleteDirectory( releasesTestDir );
199         FileUtils.copyDirectory( new File( "target/test-classes/" + RELEASES_TEST_REPO_ID ), releasesTestDir );
200
201         return testDir.getAbsolutePath();
202     }
203
204     @Override
205     public String getName()
206     {
207         return StringUtils.substringAfterLast( getClass().getName(), "." );
208     }
209 }