View Javadoc

1   package org.apache.maven.archiva.policies;
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.commons.io.FileUtils;
23  import org.codehaus.plexus.spring.PlexusInSpringTestCase;
24  
25  import java.io.File;
26  import java.util.Properties;
27  
28  /**
29   * ReleasePolicyTest
30   *
31   * @version $Id: ReleasePolicyTest.java 718864 2008-11-19 06:33:35Z brett $
32   */
33  public class ReleasePolicyTest
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 /* milliseconds */);
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 testReleasePolicyDailyProjectMetadata()
67          throws Exception
68      {
69          // Pass the policy when working with metadata, no matter what.
70          assertReleasesPolicy( ReleasesPolicy.DAILY, PATH_PROJECT_METADATA, NO_LOCAL );
71          assertReleasesPolicy( ReleasesPolicy.DAILY, PATH_PROJECT_METADATA, WITH_LOCAL );
72  
73          generatedLocalFileUpdateDelta = OVER_ONE_DAY;
74          assertReleasesPolicy( ReleasesPolicy.DAILY, PATH_PROJECT_METADATA, NO_LOCAL );
75          assertReleasesPolicy( ReleasesPolicy.DAILY, PATH_PROJECT_METADATA, WITH_LOCAL );
76  
77          generatedLocalFileUpdateDelta = ( ONE_HOUR * 22 );
78          assertReleasesPolicy( ReleasesPolicy.DAILY, PATH_PROJECT_METADATA, NO_LOCAL );
79          assertReleasesPolicy( ReleasesPolicy.DAILY, PATH_PROJECT_METADATA, WITH_LOCAL );
80      }
81  
82      public void testReleasePolicyDailyReleaseArtifact()
83          throws Exception
84      {
85          assertReleasesPolicy( ReleasesPolicy.DAILY, PATH_RELEASE_ARTIFACT, NO_LOCAL );
86          assertReleasesPolicyViolation( ReleasesPolicy.DAILY, PATH_RELEASE_ARTIFACT, WITH_LOCAL );
87  
88          generatedLocalFileUpdateDelta = OVER_ONE_DAY;
89          assertReleasesPolicy( ReleasesPolicy.DAILY, PATH_RELEASE_ARTIFACT, NO_LOCAL );
90          assertReleasesPolicy( ReleasesPolicy.DAILY, PATH_RELEASE_ARTIFACT, WITH_LOCAL );
91  
92          generatedLocalFileUpdateDelta = ( ONE_HOUR * 22 );
93          assertReleasesPolicy( ReleasesPolicy.DAILY, PATH_RELEASE_ARTIFACT, NO_LOCAL );
94          assertReleasesPolicyViolation( ReleasesPolicy.DAILY, PATH_RELEASE_ARTIFACT, WITH_LOCAL );
95      }
96  
97      public void testReleasePolicyDailySnapshotArtifact()
98          throws Exception
99      {
100         assertReleasesPolicy( ReleasesPolicy.DAILY, PATH_SNAPSHOT_ARTIFACT, NO_LOCAL );
101         assertReleasesPolicy( ReleasesPolicy.DAILY, PATH_SNAPSHOT_ARTIFACT, WITH_LOCAL );
102 
103         generatedLocalFileUpdateDelta = OVER_ONE_DAY;
104         assertReleasesPolicy( ReleasesPolicy.DAILY, PATH_SNAPSHOT_ARTIFACT, NO_LOCAL );
105         assertReleasesPolicy( ReleasesPolicy.DAILY, PATH_SNAPSHOT_ARTIFACT, WITH_LOCAL );
106 
107         generatedLocalFileUpdateDelta = ( ONE_HOUR * 22 );
108         assertReleasesPolicy( ReleasesPolicy.DAILY, PATH_SNAPSHOT_ARTIFACT, NO_LOCAL );
109         assertReleasesPolicy( ReleasesPolicy.DAILY, PATH_SNAPSHOT_ARTIFACT, WITH_LOCAL );
110     }
111 
112     public void testReleasePolicyDailyVersionedMetadata()
113         throws Exception
114     {
115         // Pass the policy when working with metadata, no matter what.
116         assertReleasesPolicy( ReleasesPolicy.DAILY, PATH_VERSION_METADATA, NO_LOCAL );
117         assertReleasesPolicy( ReleasesPolicy.DAILY, PATH_VERSION_METADATA, WITH_LOCAL );
118 
119         generatedLocalFileUpdateDelta = OVER_ONE_DAY;
120         assertReleasesPolicy( ReleasesPolicy.DAILY, PATH_VERSION_METADATA, NO_LOCAL );
121         assertReleasesPolicy( ReleasesPolicy.DAILY, PATH_VERSION_METADATA, WITH_LOCAL );
122 
123         generatedLocalFileUpdateDelta = ( ONE_HOUR * 22 );
124         assertReleasesPolicy( ReleasesPolicy.DAILY, PATH_VERSION_METADATA, NO_LOCAL );
125         assertReleasesPolicy( ReleasesPolicy.DAILY, PATH_VERSION_METADATA, WITH_LOCAL );
126     }
127 
128     public void testReleasePolicyRejectProjectMetadata()
129         throws Exception
130     {
131         // Pass the policy when working with metadata, no matter what.
132         assertReleasesPolicy( ReleasesPolicy.NEVER, PATH_PROJECT_METADATA, NO_LOCAL );
133         assertReleasesPolicy( ReleasesPolicy.NEVER, PATH_PROJECT_METADATA, WITH_LOCAL );
134     }
135 
136     public void testReleasePolicyRejectReleaseArtifact()
137         throws Exception
138     {
139         assertReleasesPolicyViolation( ReleasesPolicy.NEVER, PATH_RELEASE_ARTIFACT, NO_LOCAL );
140         assertReleasesPolicyViolation( ReleasesPolicy.NEVER, PATH_RELEASE_ARTIFACT, WITH_LOCAL );
141     }
142 
143     public void testReleasePolicyRejectSnapshotArtifact()
144         throws Exception
145     {
146         assertReleasesPolicy( ReleasesPolicy.NEVER, PATH_SNAPSHOT_ARTIFACT, NO_LOCAL );
147         assertReleasesPolicy( ReleasesPolicy.NEVER, PATH_SNAPSHOT_ARTIFACT, WITH_LOCAL );
148     }
149 
150     public void testReleasePolicyRejectVersionedMetadata()
151         throws Exception
152     {
153         // Pass the policy when working with metadata, no matter what.
154         assertReleasesPolicy( ReleasesPolicy.NEVER, PATH_VERSION_METADATA, NO_LOCAL );
155         assertReleasesPolicy( ReleasesPolicy.NEVER, PATH_VERSION_METADATA, WITH_LOCAL );
156     }
157 
158     public void testReleasePolicyHourlyProjectMetadata()
159         throws Exception
160     {
161         // Pass the policy when working with metadata, no matter what.
162         assertReleasesPolicy( ReleasesPolicy.HOURLY, PATH_PROJECT_METADATA, NO_LOCAL );
163         assertReleasesPolicy( ReleasesPolicy.HOURLY, PATH_PROJECT_METADATA, WITH_LOCAL );
164 
165         generatedLocalFileUpdateDelta = OVER_ONE_HOUR;
166         assertReleasesPolicy( ReleasesPolicy.HOURLY, PATH_PROJECT_METADATA, NO_LOCAL );
167         assertReleasesPolicy( ReleasesPolicy.HOURLY, PATH_PROJECT_METADATA, WITH_LOCAL );
168 
169         generatedLocalFileUpdateDelta = ( ONE_MINUTE * 45 );
170         assertReleasesPolicy( ReleasesPolicy.HOURLY, PATH_PROJECT_METADATA, NO_LOCAL );
171         assertReleasesPolicy( ReleasesPolicy.HOURLY, PATH_PROJECT_METADATA, WITH_LOCAL );
172     }
173 
174     public void testReleasePolicyHourlyReleaseArtifact()
175         throws Exception
176     {
177         assertReleasesPolicy( ReleasesPolicy.HOURLY, PATH_RELEASE_ARTIFACT, NO_LOCAL );
178         assertReleasesPolicyViolation( ReleasesPolicy.HOURLY, PATH_RELEASE_ARTIFACT, WITH_LOCAL );
179 
180         generatedLocalFileUpdateDelta = OVER_ONE_HOUR;
181         assertReleasesPolicy( ReleasesPolicy.HOURLY, PATH_RELEASE_ARTIFACT, NO_LOCAL );
182         assertReleasesPolicy( ReleasesPolicy.HOURLY, PATH_RELEASE_ARTIFACT, WITH_LOCAL );
183 
184         generatedLocalFileUpdateDelta = ( ONE_MINUTE * 45 );
185         assertReleasesPolicy( ReleasesPolicy.HOURLY, PATH_RELEASE_ARTIFACT, NO_LOCAL );
186         assertReleasesPolicyViolation( ReleasesPolicy.HOURLY, PATH_RELEASE_ARTIFACT, WITH_LOCAL );
187     }
188 
189     public void testReleasePolicyHourlySnapshotArtifact()
190         throws Exception
191     {
192         assertReleasesPolicy( ReleasesPolicy.HOURLY, PATH_SNAPSHOT_ARTIFACT, NO_LOCAL );
193         assertReleasesPolicy( ReleasesPolicy.HOURLY, PATH_SNAPSHOT_ARTIFACT, WITH_LOCAL );
194 
195         generatedLocalFileUpdateDelta = OVER_ONE_HOUR;
196         assertReleasesPolicy( ReleasesPolicy.HOURLY, PATH_SNAPSHOT_ARTIFACT, NO_LOCAL );
197         assertReleasesPolicy( ReleasesPolicy.HOURLY, PATH_SNAPSHOT_ARTIFACT, WITH_LOCAL );
198 
199         generatedLocalFileUpdateDelta = ( ONE_MINUTE * 45 );
200         assertReleasesPolicy( ReleasesPolicy.HOURLY, PATH_SNAPSHOT_ARTIFACT, NO_LOCAL );
201         assertReleasesPolicy( ReleasesPolicy.HOURLY, PATH_SNAPSHOT_ARTIFACT, WITH_LOCAL );
202     }
203 
204     public void testReleasePolicyHourlyVersionedMetadata()
205         throws Exception
206     {
207         // Pass the policy when working with metadata, no matter what.
208         assertReleasesPolicy( ReleasesPolicy.HOURLY, PATH_VERSION_METADATA, NO_LOCAL );
209         assertReleasesPolicy( ReleasesPolicy.HOURLY, PATH_VERSION_METADATA, WITH_LOCAL );
210 
211         generatedLocalFileUpdateDelta = OVER_ONE_HOUR;
212         assertReleasesPolicy( ReleasesPolicy.HOURLY, PATH_VERSION_METADATA, NO_LOCAL );
213         assertReleasesPolicy( ReleasesPolicy.HOURLY, PATH_VERSION_METADATA, WITH_LOCAL );
214 
215         generatedLocalFileUpdateDelta = ( ONE_MINUTE * 45 );
216         assertReleasesPolicy( ReleasesPolicy.HOURLY, PATH_VERSION_METADATA, NO_LOCAL );
217         assertReleasesPolicy( ReleasesPolicy.HOURLY, PATH_VERSION_METADATA, WITH_LOCAL );
218     }
219 
220     public void testReleasePolicyAlwaysProjectMetadata()
221         throws Exception
222     {
223         // Pass the policy when working with metadata, no matter what.
224         assertReleasesPolicy( ReleasesPolicy.ALWAYS, PATH_PROJECT_METADATA, NO_LOCAL );
225         assertReleasesPolicy( ReleasesPolicy.ALWAYS, PATH_PROJECT_METADATA, WITH_LOCAL );
226     }
227 
228     public void testReleasePolicyAlwaysReleaseArtifact()
229         throws Exception
230     {
231         assertReleasesPolicy( ReleasesPolicy.ALWAYS, PATH_RELEASE_ARTIFACT, NO_LOCAL );
232         assertReleasesPolicy( ReleasesPolicy.ALWAYS, PATH_RELEASE_ARTIFACT, WITH_LOCAL );
233     }
234 
235     public void testReleasePolicyAlwaysSnapshotArtifact()
236         throws Exception
237     {
238         assertReleasesPolicy( ReleasesPolicy.ALWAYS, PATH_SNAPSHOT_ARTIFACT, NO_LOCAL );
239         assertReleasesPolicy( ReleasesPolicy.ALWAYS, PATH_SNAPSHOT_ARTIFACT, WITH_LOCAL );
240     }
241 
242     public void testReleasePolicyAlwaysVersionedMetadata()
243         throws Exception
244     {
245         // Pass the policy when working with metadata, no matter what.
246         assertReleasesPolicy( ReleasesPolicy.ALWAYS, PATH_VERSION_METADATA, NO_LOCAL );
247         assertReleasesPolicy( ReleasesPolicy.ALWAYS, PATH_VERSION_METADATA, WITH_LOCAL );
248     }
249 
250     public void testReleasePolicyOnceProjectMetadata()
251         throws Exception
252     {
253         // Pass the policy when working with metadata, no matter what.
254         assertReleasesPolicy( ReleasesPolicy.ONCE, PATH_PROJECT_METADATA, NO_LOCAL );
255         assertReleasesPolicy( ReleasesPolicy.ONCE, PATH_PROJECT_METADATA, WITH_LOCAL );
256     }
257 
258     public void testReleasePolicyOnceReleaseArtifact()
259         throws Exception
260     {
261         assertReleasesPolicy( ReleasesPolicy.ONCE, PATH_RELEASE_ARTIFACT, NO_LOCAL );
262         assertReleasesPolicyViolation( ReleasesPolicy.ONCE, PATH_RELEASE_ARTIFACT, WITH_LOCAL );
263     }
264 
265     public void testReleasePolicyOnceSnapshotArtifact()
266         throws Exception
267     {
268         assertReleasesPolicy( ReleasesPolicy.ONCE, PATH_SNAPSHOT_ARTIFACT, NO_LOCAL );
269         assertReleasesPolicy( ReleasesPolicy.ONCE, PATH_SNAPSHOT_ARTIFACT, WITH_LOCAL );
270     }
271 
272     public void testReleasePolicyOnceVersionedMetadata()
273         throws Exception
274     {
275         // Pass the policy when working with metadata, no matter what.
276         assertReleasesPolicy( ReleasesPolicy.ONCE, PATH_VERSION_METADATA, NO_LOCAL );
277         assertReleasesPolicy( ReleasesPolicy.ONCE, PATH_VERSION_METADATA, WITH_LOCAL );
278     }
279 
280     private void assertReleasesPolicy( 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 assertReleasesPolicyViolation( String setting, String path, boolean createLocalFile )
316         throws Exception
317     {
318         try
319         {
320             assertReleasesPolicy( setting, path, createLocalFile );
321             fail( "Expected a PolicyViolationException." );
322         }
323         catch ( PolicyViolationException e )
324         {
325             // expected path.
326         }
327     }
328 
329     private PreDownloadPolicy lookupPolicy()
330         throws Exception
331     {
332         PreDownloadPolicy policy = (PreDownloadPolicy) lookup( PreDownloadPolicy.class.getName(), "releases" );
333         assertNotNull( policy );
334         return policy;
335     }
336 
337     @Override
338     protected void setUp()
339         throws Exception
340     {
341         super.setUp();
342 
343         // reset delta to 0.
344         generatedLocalFileUpdateDelta = 0;
345     }
346 }