1 package org.apache.maven.archiva.policies;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import java.io.File;
23 import java.util.Properties;
24
25 import org.apache.commons.io.FileUtils;
26 import org.codehaus.plexus.spring.PlexusInSpringTestCase;
27
28
29
30
31
32
33 public class SnapshotsPolicyTest
34 extends PlexusInSpringTestCase
35 {
36 private static final String PATH_VERSION_METADATA = "org/apache/archiva/archiva-testable/1.0-SNAPSHOT/maven-metadata.xml";
37
38 private static final String PATH_PROJECT_METADATA = "org/apache/archiva/archiva-testable/maven-metadata.xml";
39
40 private static final String PATH_SNAPSHOT_ARTIFACT = "org/apache/archiva/archiva-testable/1.0-SNAPSHOT/archiva-testable-1.0-SNAPSHOT.jar";
41
42 private static final String PATH_RELEASE_ARTIFACT = "org/apache/archiva/archiva-testable/2.0/archiva-testable-2.0.jar";
43
44 private static final boolean WITH_LOCAL = true;
45
46 private static final boolean NO_LOCAL = false;
47
48 protected static final long ONE_SECOND = ( 1000
49
50 protected static final long ONE_MINUTE = ( ONE_SECOND * 60 );
51
52 protected static final long ONE_HOUR = ( ONE_MINUTE * 60 );
53
54 protected static final long ONE_DAY = ( ONE_HOUR * 24 );
55
56 protected static final long OVER_ONE_HOUR = ( ONE_HOUR + ONE_MINUTE );
57
58 protected static final long OVER_ONE_DAY = ( ONE_DAY + ONE_HOUR );
59
60 protected static final long OLDER = ( -1 );
61
62 protected static final long NEWER = 0;
63
64 private long generatedLocalFileUpdateDelta = 0;
65
66 public void testSnapshotPolicyDailyProjectMetadata()
67 throws Exception
68 {
69
70 assertSnapshotPolicy( SnapshotsPolicy.DAILY, PATH_PROJECT_METADATA, NO_LOCAL );
71 assertSnapshotPolicy( SnapshotsPolicy.DAILY, PATH_PROJECT_METADATA, WITH_LOCAL );
72
73 generatedLocalFileUpdateDelta = OVER_ONE_DAY;
74 assertSnapshotPolicy( SnapshotsPolicy.DAILY, PATH_PROJECT_METADATA, NO_LOCAL );
75 assertSnapshotPolicy( SnapshotsPolicy.DAILY, PATH_PROJECT_METADATA, WITH_LOCAL );
76
77 generatedLocalFileUpdateDelta = ( ONE_HOUR * 22 );
78 assertSnapshotPolicy( SnapshotsPolicy.DAILY, PATH_PROJECT_METADATA, NO_LOCAL );
79 assertSnapshotPolicy( SnapshotsPolicy.DAILY, PATH_PROJECT_METADATA, WITH_LOCAL );
80 }
81
82 public void testSnapshotPolicyDailyReleaseArtifact()
83 throws Exception
84 {
85 assertSnapshotPolicy( SnapshotsPolicy.DAILY, PATH_RELEASE_ARTIFACT, NO_LOCAL );
86 assertSnapshotPolicy( SnapshotsPolicy.DAILY, PATH_RELEASE_ARTIFACT, WITH_LOCAL );
87
88 generatedLocalFileUpdateDelta = OVER_ONE_DAY;
89 assertSnapshotPolicy( SnapshotsPolicy.DAILY, PATH_RELEASE_ARTIFACT, NO_LOCAL );
90 assertSnapshotPolicy( SnapshotsPolicy.DAILY, PATH_RELEASE_ARTIFACT, WITH_LOCAL );
91
92 generatedLocalFileUpdateDelta = ( ONE_HOUR * 22 );
93 assertSnapshotPolicy( SnapshotsPolicy.DAILY, PATH_RELEASE_ARTIFACT, NO_LOCAL );
94 assertSnapshotPolicy( SnapshotsPolicy.DAILY, PATH_RELEASE_ARTIFACT, WITH_LOCAL );
95 }
96
97 public void testSnapshotPolicyDailySnapshotArtifact()
98 throws Exception
99 {
100 assertSnapshotPolicy( SnapshotsPolicy.DAILY, PATH_SNAPSHOT_ARTIFACT, NO_LOCAL );
101 assertSnapshotPolicyViolation( SnapshotsPolicy.DAILY, PATH_SNAPSHOT_ARTIFACT, WITH_LOCAL );
102
103 generatedLocalFileUpdateDelta = OVER_ONE_DAY;
104 assertSnapshotPolicy( SnapshotsPolicy.DAILY, PATH_SNAPSHOT_ARTIFACT, NO_LOCAL );
105 assertSnapshotPolicy( SnapshotsPolicy.DAILY, PATH_SNAPSHOT_ARTIFACT, WITH_LOCAL );
106
107 generatedLocalFileUpdateDelta = ( ONE_HOUR * 22 );
108 assertSnapshotPolicy( SnapshotsPolicy.DAILY, PATH_SNAPSHOT_ARTIFACT, NO_LOCAL );
109 assertSnapshotPolicyViolation( SnapshotsPolicy.DAILY, PATH_SNAPSHOT_ARTIFACT, WITH_LOCAL );
110 }
111
112 public void testSnapshotPolicyDailyVersionedMetadata()
113 throws Exception
114 {
115
116 assertSnapshotPolicy( SnapshotsPolicy.DAILY, PATH_VERSION_METADATA, NO_LOCAL );
117 assertSnapshotPolicy( SnapshotsPolicy.DAILY, PATH_VERSION_METADATA, WITH_LOCAL );
118
119 generatedLocalFileUpdateDelta = OVER_ONE_DAY;
120 assertSnapshotPolicy( SnapshotsPolicy.DAILY, PATH_VERSION_METADATA, NO_LOCAL );
121 assertSnapshotPolicy( SnapshotsPolicy.DAILY, PATH_VERSION_METADATA, WITH_LOCAL );
122
123 generatedLocalFileUpdateDelta = ( ONE_HOUR * 22 );
124 assertSnapshotPolicy( SnapshotsPolicy.DAILY, PATH_VERSION_METADATA, NO_LOCAL );
125 assertSnapshotPolicy( SnapshotsPolicy.DAILY, PATH_VERSION_METADATA, WITH_LOCAL );
126 }
127
128 public void testSnapshotPolicyRejectProjectMetadata()
129 throws Exception
130 {
131
132 assertSnapshotPolicy( SnapshotsPolicy.NEVER, PATH_PROJECT_METADATA, NO_LOCAL );
133 assertSnapshotPolicy( SnapshotsPolicy.NEVER, PATH_PROJECT_METADATA, WITH_LOCAL );
134 }
135
136 public void testSnapshotPolicyRejectReleaseArtifact()
137 throws Exception
138 {
139 assertSnapshotPolicy( SnapshotsPolicy.NEVER, PATH_RELEASE_ARTIFACT, NO_LOCAL );
140 assertSnapshotPolicy( SnapshotsPolicy.NEVER, PATH_RELEASE_ARTIFACT, WITH_LOCAL );
141 }
142
143 public void testSnapshotPolicyRejectSnapshotArtifact()
144 throws Exception
145 {
146 assertSnapshotPolicyViolation( SnapshotsPolicy.NEVER, PATH_SNAPSHOT_ARTIFACT, NO_LOCAL );
147 assertSnapshotPolicyViolation( SnapshotsPolicy.NEVER, PATH_SNAPSHOT_ARTIFACT, WITH_LOCAL );
148 }
149
150 public void testSnapshotPolicyRejectVersionedMetadata()
151 throws Exception
152 {
153
154 assertSnapshotPolicy( SnapshotsPolicy.NEVER, PATH_VERSION_METADATA, NO_LOCAL );
155 assertSnapshotPolicy( SnapshotsPolicy.NEVER, PATH_VERSION_METADATA, WITH_LOCAL );
156 }
157
158 public void testSnapshotPolicyHourlyProjectMetadata()
159 throws Exception
160 {
161
162 assertSnapshotPolicy( SnapshotsPolicy.HOURLY, PATH_PROJECT_METADATA, NO_LOCAL );
163 assertSnapshotPolicy( SnapshotsPolicy.HOURLY, PATH_PROJECT_METADATA, WITH_LOCAL );
164
165 generatedLocalFileUpdateDelta = OVER_ONE_HOUR;
166 assertSnapshotPolicy( SnapshotsPolicy.HOURLY, PATH_PROJECT_METADATA, NO_LOCAL );
167 assertSnapshotPolicy( SnapshotsPolicy.HOURLY, PATH_PROJECT_METADATA, WITH_LOCAL );
168
169 generatedLocalFileUpdateDelta = ( ONE_MINUTE * 45 );
170 assertSnapshotPolicy( SnapshotsPolicy.HOURLY, PATH_PROJECT_METADATA, NO_LOCAL );
171 assertSnapshotPolicy( SnapshotsPolicy.HOURLY, PATH_PROJECT_METADATA, WITH_LOCAL );
172 }
173
174 public void testSnapshotPolicyHourlyReleaseArtifact()
175 throws Exception
176 {
177 assertSnapshotPolicy( SnapshotsPolicy.HOURLY, PATH_RELEASE_ARTIFACT, NO_LOCAL );
178 assertSnapshotPolicy( SnapshotsPolicy.HOURLY, PATH_RELEASE_ARTIFACT, WITH_LOCAL );
179
180 generatedLocalFileUpdateDelta = OVER_ONE_HOUR;
181 assertSnapshotPolicy( SnapshotsPolicy.HOURLY, PATH_RELEASE_ARTIFACT, NO_LOCAL );
182 assertSnapshotPolicy( SnapshotsPolicy.HOURLY, PATH_RELEASE_ARTIFACT, WITH_LOCAL );
183
184 generatedLocalFileUpdateDelta = ( ONE_MINUTE * 45 );
185 assertSnapshotPolicy( SnapshotsPolicy.HOURLY, PATH_RELEASE_ARTIFACT, NO_LOCAL );
186 assertSnapshotPolicy( SnapshotsPolicy.HOURLY, PATH_RELEASE_ARTIFACT, WITH_LOCAL );
187 }
188
189 public void testSnapshotPolicyHourlySnapshotArtifact()
190 throws Exception
191 {
192 assertSnapshotPolicy( SnapshotsPolicy.HOURLY, PATH_SNAPSHOT_ARTIFACT, NO_LOCAL );
193 assertSnapshotPolicyViolation( SnapshotsPolicy.HOURLY, PATH_SNAPSHOT_ARTIFACT, WITH_LOCAL );
194
195 generatedLocalFileUpdateDelta = OVER_ONE_HOUR;
196 assertSnapshotPolicy( SnapshotsPolicy.HOURLY, PATH_SNAPSHOT_ARTIFACT, NO_LOCAL );
197 assertSnapshotPolicy( SnapshotsPolicy.HOURLY, PATH_SNAPSHOT_ARTIFACT, WITH_LOCAL );
198
199 generatedLocalFileUpdateDelta = ( ONE_MINUTE * 45 );
200 assertSnapshotPolicy( SnapshotsPolicy.HOURLY, PATH_SNAPSHOT_ARTIFACT, NO_LOCAL );
201 assertSnapshotPolicyViolation( SnapshotsPolicy.HOURLY, PATH_SNAPSHOT_ARTIFACT, WITH_LOCAL );
202 }
203
204 public void testSnapshotPolicyHourlyVersionedMetadata()
205 throws Exception
206 {
207
208 assertSnapshotPolicy( SnapshotsPolicy.HOURLY, PATH_VERSION_METADATA, NO_LOCAL );
209 assertSnapshotPolicy( SnapshotsPolicy.HOURLY, PATH_VERSION_METADATA, WITH_LOCAL );
210
211 generatedLocalFileUpdateDelta = OVER_ONE_HOUR;
212 assertSnapshotPolicy( SnapshotsPolicy.HOURLY, PATH_VERSION_METADATA, NO_LOCAL );
213 assertSnapshotPolicy( SnapshotsPolicy.HOURLY, PATH_VERSION_METADATA, WITH_LOCAL );
214
215 generatedLocalFileUpdateDelta = ( ONE_MINUTE * 45 );
216 assertSnapshotPolicy( SnapshotsPolicy.HOURLY, PATH_VERSION_METADATA, NO_LOCAL );
217 assertSnapshotPolicy( SnapshotsPolicy.HOURLY, PATH_VERSION_METADATA, WITH_LOCAL );
218 }
219
220 public void testSnapshotPolicyAlwaysProjectMetadata()
221 throws Exception
222 {
223
224 assertSnapshotPolicy( SnapshotsPolicy.ALWAYS, PATH_PROJECT_METADATA, NO_LOCAL );
225 assertSnapshotPolicy( SnapshotsPolicy.ALWAYS, PATH_PROJECT_METADATA, WITH_LOCAL );
226 }
227
228 public void testSnapshotPolicyAlwaysReleaseArtifact()
229 throws Exception
230 {
231 assertSnapshotPolicy( SnapshotsPolicy.ALWAYS, PATH_RELEASE_ARTIFACT, NO_LOCAL );
232 assertSnapshotPolicy( SnapshotsPolicy.ALWAYS, PATH_RELEASE_ARTIFACT, WITH_LOCAL );
233 }
234
235 public void testSnapshotPolicyAlwaysSnapshotArtifact()
236 throws Exception
237 {
238 assertSnapshotPolicy( SnapshotsPolicy.ALWAYS, PATH_SNAPSHOT_ARTIFACT, NO_LOCAL );
239 assertSnapshotPolicy( SnapshotsPolicy.ALWAYS, PATH_SNAPSHOT_ARTIFACT, WITH_LOCAL );
240 }
241
242 public void testSnapshotPolicyAlwaysVersionedMetadata()
243 throws Exception
244 {
245
246 assertSnapshotPolicy( SnapshotsPolicy.ALWAYS, PATH_VERSION_METADATA, NO_LOCAL );
247 assertSnapshotPolicy( SnapshotsPolicy.ALWAYS, PATH_VERSION_METADATA, WITH_LOCAL );
248 }
249
250 public void testSnapshotPolicyOnceProjectMetadata()
251 throws Exception
252 {
253
254 assertSnapshotPolicy( SnapshotsPolicy.ONCE, PATH_PROJECT_METADATA, NO_LOCAL );
255 assertSnapshotPolicy( SnapshotsPolicy.ONCE, PATH_PROJECT_METADATA, WITH_LOCAL );
256 }
257
258 public void testSnapshotPolicyOnceReleaseArtifact()
259 throws Exception
260 {
261 assertSnapshotPolicy( SnapshotsPolicy.ONCE, PATH_RELEASE_ARTIFACT, NO_LOCAL );
262 assertSnapshotPolicy( SnapshotsPolicy.ONCE, PATH_RELEASE_ARTIFACT, WITH_LOCAL );
263 }
264
265 public void testSnapshotPolicyOnceSnapshotArtifact()
266 throws Exception
267 {
268 assertSnapshotPolicy( SnapshotsPolicy.ONCE, PATH_SNAPSHOT_ARTIFACT, NO_LOCAL );
269 assertSnapshotPolicyViolation( SnapshotsPolicy.ONCE, PATH_SNAPSHOT_ARTIFACT, WITH_LOCAL );
270 }
271
272 public void testSnapshotPolicyOnceVersionedMetadata()
273 throws Exception
274 {
275
276 assertSnapshotPolicy( SnapshotsPolicy.ONCE, PATH_VERSION_METADATA, NO_LOCAL );
277 assertSnapshotPolicy( SnapshotsPolicy.ONCE, PATH_VERSION_METADATA, WITH_LOCAL );
278 }
279
280 private void assertSnapshotPolicy( String setting, String path, boolean createLocalFile )
281 throws Exception
282 {
283 PreDownloadPolicy policy = lookupPolicy();
284 Properties request = new Properties();
285 request.setProperty( "filetype", path.endsWith( "/maven-metadata.xml" ) ? "metadata" : "artifact" );
286
287 if ( path.contains( "1.0-SNAPSHOT" ) )
288 {
289 request.setProperty( "version", "1.0-SNAPSHOT" );
290 }
291
292 if ( path.contains( "2.0" ) )
293 {
294 request.setProperty( "version", "2.0" );
295 }
296
297 File targetDir = getTestFile( "target/test-policy/" );
298 File localFile = new File( targetDir, path );
299
300 if ( localFile.exists() )
301 {
302 localFile.delete();
303 }
304
305 if ( createLocalFile )
306 {
307 localFile.getParentFile().mkdirs();
308 FileUtils.writeStringToFile( localFile, "random-junk" );
309 localFile.setLastModified( localFile.lastModified() - generatedLocalFileUpdateDelta );
310 }
311
312 policy.applyPolicy( setting, request, localFile );
313 }
314
315 private void assertSnapshotPolicyViolation( String setting, String path, boolean createLocalFile )
316 throws Exception
317 {
318 try
319 {
320 assertSnapshotPolicy( setting, path, createLocalFile );
321 fail( "Expected a PolicyViolationException." );
322 }
323 catch ( PolicyViolationException e )
324 {
325
326 }
327 }
328
329 private PreDownloadPolicy lookupPolicy()
330 throws Exception
331 {
332 PreDownloadPolicy policy = (PreDownloadPolicy) lookup( PreDownloadPolicy.class.getName(), "snapshots" );
333 assertNotNull( policy );
334 return policy;
335 }
336
337 @Override
338 protected void setUp()
339 throws Exception
340 {
341 super.setUp();
342
343
344 generatedLocalFileUpdateDelta = 0;
345 }
346 }