1 package org.apache.continuum.purge;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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
38
39
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 }