View Javadoc

1   package org.apache.continuum.purge;
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 java.io.File;
23  import java.net.URL;
24  import java.util.Map;
25  import java.util.Properties;
26  
27  import javax.jdo.PersistenceManager;
28  import javax.jdo.PersistenceManagerFactory;
29  
30  import org.apache.continuum.dao.DirectoryPurgeConfigurationDao;
31  import org.apache.continuum.dao.LocalRepositoryDao;
32  import org.apache.continuum.dao.RepositoryPurgeConfigurationDao;
33  import org.apache.continuum.model.repository.DirectoryPurgeConfiguration;
34  import org.apache.continuum.model.repository.LocalRepository;
35  import org.apache.continuum.model.repository.RepositoryPurgeConfiguration;
36  import org.apache.maven.continuum.jdo.MemoryJdoFactory;
37  import org.codehaus.plexus.jdo.JdoFactory;
38  import org.codehaus.plexus.spring.PlexusInSpringTestCase;
39  import org.jpox.SchemaTool;
40  
41  /**
42   * @author Maria Catherine Tan
43   */
44  public abstract class AbstractPurgeTest
45      extends PlexusInSpringTestCase
46  {
47      private static final String TEST_DEFAULT_REPO_DIR = "target/default-repository";
48  
49      private static final String TEST_DEFAULT_REPO_NAME = "defaultRepo";
50  
51      private static final String TEST_DEFAULT_RELEASES_DIR = "target/working-directory";
52  
53      private static final String TEST_DEFAULT_BUILDOUTPUT_DIR = "target/build-output-directory";
54  
55      protected static final int TEST_DAYS_OLDER = 30;
56  
57      protected static final int TEST_RETENTION_COUNT = 2;
58  
59      protected static final String TEST_RELEASES_DIRECTORY_TYPE = "releases";
60  
61      protected static final String TEST_BUILDOUTPUT_DIRECTORY_TYPE = "buildOutput";
62  
63      protected LocalRepositoryDao localRepositoryDao;
64  
65      protected DirectoryPurgeConfigurationDao directoryPurgeConfigurationDao;
66  
67      protected RepositoryPurgeConfigurationDao repositoryPurgeConfigurationDao;
68  
69      protected RepositoryPurgeConfiguration defaultRepoPurge;
70  
71      protected DirectoryPurgeConfiguration defaultReleasesDirPurge;
72  
73      protected DirectoryPurgeConfiguration defaultBuildOutputDirPurge;
74  
75      protected LocalRepository defaultRepository;
76  
77      @Override
78      protected void setUp()
79          throws Exception
80      {
81          super.setUp();
82  
83          init();
84  
85          localRepositoryDao = (LocalRepositoryDao) lookup( LocalRepositoryDao.class.getName() );
86  
87          repositoryPurgeConfigurationDao =
88              (RepositoryPurgeConfigurationDao) lookup( RepositoryPurgeConfigurationDao.class );
89  
90          directoryPurgeConfigurationDao =
91              (DirectoryPurgeConfigurationDao) lookup( DirectoryPurgeConfigurationDao.class );
92  
93          if ( localRepositoryDao.getAllLocalRepositories().size() == 0 )
94          {
95              createDefaultRepository();
96              assertEquals( "check # repository", 1, localRepositoryDao.getAllLocalRepositories().size() );
97              createDefaultRepoPurgeConfiguration();
98          }
99          else
100         {
101             assertEquals( "check # repository", 1, localRepositoryDao.getAllLocalRepositories().size() );
102             defaultRepository = localRepositoryDao.getLocalRepositoryByName( TEST_DEFAULT_REPO_NAME );
103             defaultRepoPurge = repositoryPurgeConfigurationDao.getRepositoryPurgeConfigurationsByLocalRepository(
104                 defaultRepository.getId() ).get( 0 );
105         }
106 
107         if ( directoryPurgeConfigurationDao.getDirectoryPurgeConfigurationsByType(
108             TEST_RELEASES_DIRECTORY_TYPE ).size() == 0 )
109         {
110             createDefaultReleasesDirPurgeConfiguration();
111         }
112         else
113         {
114             defaultReleasesDirPurge = directoryPurgeConfigurationDao.getDirectoryPurgeConfigurationsByType(
115                 TEST_RELEASES_DIRECTORY_TYPE ).get( 0 );
116         }
117 
118         if ( directoryPurgeConfigurationDao.getDirectoryPurgeConfigurationsByType(
119             TEST_BUILDOUTPUT_DIRECTORY_TYPE ).size() == 0 )
120         {
121             createDefaultBuildOutputDirPurgeConfiguration();
122         }
123         else
124         {
125             defaultBuildOutputDirPurge = directoryPurgeConfigurationDao.getDirectoryPurgeConfigurationsByType(
126                 TEST_BUILDOUTPUT_DIRECTORY_TYPE ).get( 0 );
127         }
128     }
129 
130     protected void init()
131         throws Exception
132     {
133         // ----------------------------------------------------------------------
134         // Set up the JDO factory
135         // ----------------------------------------------------------------------
136 
137         Object o = lookup( JdoFactory.ROLE, "continuum" );
138 
139         assertEquals( MemoryJdoFactory.class.getName(), o.getClass().getName() );
140 
141         MemoryJdoFactory jdoFactory = (MemoryJdoFactory) o;
142 
143         String url = "jdbc:hsqldb:mem:" + getClass().getName() + "." + getName();
144 
145         jdoFactory.setUrl( url );
146 
147         jdoFactory.reconfigure();
148 
149         // ----------------------------------------------------------------------
150         // Check the configuration
151         // ----------------------------------------------------------------------
152 
153         PersistenceManagerFactory pmf = jdoFactory.getPersistenceManagerFactory();
154 
155         assertNotNull( pmf );
156 
157         assertEquals( url, pmf.getConnectionURL() );
158 
159         PersistenceManager pm = pmf.getPersistenceManager();
160 
161         pm.close();
162 
163         // ----------------------------------------------------------------------
164         //
165         // ----------------------------------------------------------------------
166 
167         Properties properties = jdoFactory.getProperties();
168 
169         for ( Map.Entry entry : properties.entrySet() )
170         {
171             System.setProperty( (String) entry.getKey(), (String) entry.getValue() );
172         }
173 
174         SchemaTool.createSchemaTables( new URL[]{getClass().getResource( "/package.jdo" )}, new URL[]{}, null,
175                                        false, null );
176     }
177 
178     protected File getDefaultRepositoryLocation()
179     {
180         File repositoryLocation = getTestFile( TEST_DEFAULT_REPO_DIR );
181 
182         if ( !repositoryLocation.exists() )
183         {
184             repositoryLocation.mkdirs();
185         }
186 
187         return repositoryLocation;
188     }
189 
190     protected File getReleasesDirectoryLocation()
191     {
192         File releasesDirectory = getTestFile( TEST_DEFAULT_RELEASES_DIR );
193 
194         if ( !releasesDirectory.exists() )
195         {
196             releasesDirectory.mkdirs();
197         }
198 
199         return releasesDirectory;
200     }
201 
202     protected File getBuildOutputDirectoryLocation()
203     {
204         File buildOutputDir = getTestFile( TEST_DEFAULT_BUILDOUTPUT_DIR );
205 
206         if ( !buildOutputDir.exists() )
207         {
208             buildOutputDir.mkdirs();
209         }
210 
211         return buildOutputDir;
212     }
213 
214     private void createDefaultRepository()
215         throws Exception
216     {
217         defaultRepository = localRepositoryDao.getLocalRepositoryByName( TEST_DEFAULT_REPO_NAME );
218 
219         if ( defaultRepository == null )
220         {
221             LocalRepository repository = new LocalRepository();
222 
223             repository.setName( TEST_DEFAULT_REPO_NAME );
224             repository.setLocation( getDefaultRepositoryLocation().getAbsolutePath() );
225             defaultRepository = localRepositoryDao.addLocalRepository( repository );
226         }
227     }
228 
229     private void createDefaultRepoPurgeConfiguration()
230         throws Exception
231     {
232         RepositoryPurgeConfiguration repoPurge = new RepositoryPurgeConfiguration();
233 
234         repoPurge.setRepository( defaultRepository );
235         repoPurge.setDeleteAll( true );
236 
237         defaultRepoPurge = repositoryPurgeConfigurationDao.addRepositoryPurgeConfiguration( repoPurge );
238     }
239 
240     private void createDefaultReleasesDirPurgeConfiguration()
241         throws Exception
242     {
243         DirectoryPurgeConfiguration dirPurge = new DirectoryPurgeConfiguration();
244 
245         dirPurge.setLocation( getReleasesDirectoryLocation().getAbsolutePath() );
246         dirPurge.setDirectoryType( "releases" );
247         dirPurge.setDeleteAll( true );
248 
249         defaultReleasesDirPurge = directoryPurgeConfigurationDao.addDirectoryPurgeConfiguration( dirPurge );
250     }
251 
252     private void createDefaultBuildOutputDirPurgeConfiguration()
253         throws Exception
254     {
255         DirectoryPurgeConfiguration dirPurge = new DirectoryPurgeConfiguration();
256 
257         dirPurge.setLocation( getBuildOutputDirectoryLocation().getAbsolutePath() );
258         dirPurge.setDirectoryType( "buildOutput" );
259         dirPurge.setDeleteAll( true );
260 
261         defaultBuildOutputDirPurge = directoryPurgeConfigurationDao.addDirectoryPurgeConfiguration( dirPurge );
262     }
263 }