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.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
36
37
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 }