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 org.apache.continuum.dao.DirectoryPurgeConfigurationDao;
23  import org.apache.continuum.dao.LocalRepositoryDao;
24  import org.apache.continuum.dao.RepositoryPurgeConfigurationDao;
25  import org.apache.continuum.model.repository.DirectoryPurgeConfiguration;
26  import org.apache.continuum.model.repository.LocalRepository;
27  import org.apache.continuum.model.repository.RepositoryPurgeConfiguration;
28  import org.apache.continuum.purge.task.PurgeTask;
29  import org.apache.continuum.taskqueue.manager.TaskQueueManager;
30  import org.apache.maven.continuum.AbstractContinuumTest;
31  import org.codehaus.plexus.taskqueue.Task;
32  import org.codehaus.plexus.taskqueue.TaskQueue;
33  
34  /**
35   * @author Maria Catherine Tan
36   * @version $Id: DefaultContinuumPurgeManagerTest.java 709300 2008-10-31 00:01:38Z ctan $
37   * @since 25 jul 07
38   */
39  public class DefaultContinuumPurgeManagerTest
40      extends AbstractContinuumTest
41  {
42      private LocalRepositoryDao localRepositoryDao;
43  
44      private DirectoryPurgeConfigurationDao directoryPurgeConfigurationDao;
45  
46      private RepositoryPurgeConfigurationDao repositoryPurgeConfigurationDao;
47  
48      private ContinuumPurgeManager purgeManager;
49  
50      private TaskQueue purgeQueue;
51  
52      private RepositoryPurgeConfiguration repoPurge;
53  
54      private DirectoryPurgeConfiguration dirPurge;
55  
56      private TaskQueueManager taskQueueManager;
57  
58      @Override
59      protected void setUp()
60          throws Exception
61      {
62          super.setUp();
63  
64          localRepositoryDao = (LocalRepositoryDao) lookup( LocalRepositoryDao.class.getName() );
65  
66          directoryPurgeConfigurationDao =
67              (DirectoryPurgeConfigurationDao) lookup( DirectoryPurgeConfigurationDao.class.getName() );
68  
69          repositoryPurgeConfigurationDao =
70              (RepositoryPurgeConfigurationDao) lookup( RepositoryPurgeConfigurationDao.class.getName() );
71  
72          purgeManager = (ContinuumPurgeManager) lookup( ContinuumPurgeManager.ROLE );
73  
74          purgeQueue = (TaskQueue) lookup( TaskQueue.ROLE, "purge" );
75  
76          taskQueueManager = (TaskQueueManager) lookup( TaskQueueManager.ROLE );
77  
78          setupDefaultPurgeConfigurations();
79      }
80  
81      public void testPurgingWithSinglePurgeConfiguration()
82          throws Exception
83      {
84          purgeManager.purgeRepository( repoPurge );
85  
86          assertNextBuildIs( repoPurge.getId() );
87          assertNextBuildIsNull();
88  
89          purgeManager.purgeRepository( repoPurge );
90          purgeManager.purgeRepository( repoPurge );
91          purgeManager.purgeRepository( repoPurge );
92          purgeManager.purgeRepository( repoPurge );
93          purgeManager.purgeRepository( repoPurge );
94  
95          assertNextBuildIs( repoPurge.getId() );
96          assertNextBuildIsNull();
97      }
98  
99      public void testPurgingWithMultiplePurgeConfiguration()
100         throws Exception
101     {
102         purgeManager.purgeRepository( repoPurge );
103         purgeManager.purgeDirectory( dirPurge );
104 
105         assertNextBuildIs( repoPurge.getId() );
106         assertNextBuildIs( dirPurge.getId() );
107         assertNextBuildIsNull();
108 
109         for ( int i = 0; i < 5; i++ )
110         {
111             purgeManager.purgeRepository( repoPurge );
112             purgeManager.purgeDirectory( dirPurge );
113         }
114 
115         assertNextBuildIs( repoPurge.getId() );
116         assertNextBuildIs( dirPurge.getId() );
117         assertNextBuildIsNull();
118     }
119 
120     public void testRemoveFromPurgeQueue()
121         throws Exception
122     {
123         purgeManager.purgeRepository( repoPurge );
124         purgeManager.purgeDirectory( dirPurge );
125 
126         assertNextBuildIs( repoPurge.getId() );
127         assertNextBuildIs( dirPurge.getId() );
128         assertNextBuildIsNull();
129 
130         purgeManager.purgeRepository( repoPurge );
131         purgeManager.purgeDirectory( dirPurge );
132         taskQueueManager.removeFromPurgeQueue( repoPurge.getId() );
133 
134         assertNextBuildIs( dirPurge.getId() );
135         assertNextBuildIsNull();
136 
137         purgeManager.purgeRepository( repoPurge );
138         purgeManager.purgeDirectory( dirPurge );
139         taskQueueManager.removeFromPurgeQueue( dirPurge.getId() );
140 
141         assertNextBuildIs( repoPurge.getId() );
142         assertNextBuildIsNull();
143     }
144 
145     private void setupDefaultPurgeConfigurations()
146         throws Exception
147     {
148         LocalRepository repository = new LocalRepository();
149         repository.setName( "defaultRepo" );
150         repository.setLocation( getTestFile( "target/default-repository" ).getAbsolutePath() );
151         repository = localRepositoryDao.addLocalRepository( repository );
152 
153         repoPurge = new RepositoryPurgeConfiguration();
154         repoPurge.setRepository( repository );
155         repoPurge = repositoryPurgeConfigurationDao.addRepositoryPurgeConfiguration( repoPurge );
156 
157         dirPurge = new DirectoryPurgeConfiguration();
158         dirPurge.setDirectoryType( "releases" );
159         dirPurge.setLocation( getTestFile( "target/working-directory" ).getAbsolutePath() );
160         dirPurge = directoryPurgeConfigurationDao.addDirectoryPurgeConfiguration( dirPurge );
161     }
162 
163     private void assertNextBuildIs( int expectedPurgeConfigId )
164         throws Exception
165     {
166         Task task = purgeQueue.take();
167 
168         assertEquals( PurgeTask.class.getName(), task.getClass().getName() );
169 
170         PurgeTask purgeTask = (PurgeTask) task;
171 
172         assertEquals( "Didn't get the expected purge config id.", expectedPurgeConfigId,
173                       purgeTask.getPurgeConfigurationId() );
174     }
175 
176     private void assertNextBuildIsNull()
177         throws Exception
178     {
179         Task task = purgeQueue.take();
180 
181         if ( task != null )
182         {
183             fail( "Got a non-null purge task returned. Purge Config id: " +
184                 ( (PurgeTask) task ).getPurgeConfigurationId() );
185         }
186     }
187 }