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