You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

SnapshotsPolicyTest.java 15KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386
  1. package org.apache.archiva.policies;
  2. /*
  3. * Licensed to the Apache Software Foundation (ASF) under one
  4. * or more contributor license agreements. See the NOTICE file
  5. * distributed with this work for additional information
  6. * regarding copyright ownership. The ASF licenses this file
  7. * to you under the Apache License, Version 2.0 (the
  8. * "License"); you may not use this file except in compliance
  9. * with the License. You may obtain a copy of the License at
  10. *
  11. * http://www.apache.org/licenses/LICENSE-2.0
  12. *
  13. * Unless required by applicable law or agreed to in writing,
  14. * software distributed under the License is distributed on an
  15. * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  16. * KIND, either express or implied. See the License for the
  17. * specific language governing permissions and limitations
  18. * under the License.
  19. */
  20. import junit.framework.TestCase;
  21. import org.apache.archiva.repository.storage.FilesystemStorage;
  22. import org.apache.archiva.repository.storage.StorageAsset;
  23. import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner;
  24. import org.junit.Before;
  25. import org.junit.Test;
  26. import org.junit.runner.RunWith;
  27. import org.springframework.test.context.ContextConfiguration;
  28. import javax.inject.Inject;
  29. import javax.inject.Named;
  30. import java.nio.charset.Charset;
  31. import java.nio.file.Files;
  32. import java.nio.file.Path;
  33. import java.nio.file.attribute.FileTime;
  34. import java.util.Properties;
  35. /**
  36. * SnapshotsPolicyTest
  37. *
  38. *
  39. */
  40. @RunWith( ArchivaSpringJUnit4ClassRunner.class )
  41. @ContextConfiguration( locations = { "classpath*:/META-INF/spring-context.xml", "classpath*:/spring-context.xml" } )
  42. public class SnapshotsPolicyTest
  43. extends TestCase
  44. {
  45. private static final Charset FILE_ENCODING = Charset.forName( "UTF-8" );
  46. private static final String PATH_VERSION_METADATA = "org/apache/archiva/archiva-testable/1.0-SNAPSHOT/maven-metadata.xml";
  47. private static final String PATH_PROJECT_METADATA = "org/apache/archiva/archiva-testable/maven-metadata.xml";
  48. private static final String PATH_SNAPSHOT_ARTIFACT = "org/apache/archiva/archiva-testable/1.0-SNAPSHOT/archiva-testable-1.0-SNAPSHOT.jar";
  49. private static final String PATH_RELEASE_ARTIFACT = "org/apache/archiva/archiva-testable/2.0/archiva-testable-2.0.jar";
  50. private static final boolean WITH_LOCAL = true;
  51. private static final boolean NO_LOCAL = false;
  52. protected static final long ONE_SECOND = ( 1000 /* milliseconds */);
  53. protected static final long ONE_MINUTE = ( ONE_SECOND * 60 );
  54. protected static final long ONE_HOUR = ( ONE_MINUTE * 60 );
  55. protected static final long ONE_DAY = ( ONE_HOUR * 24 );
  56. protected static final long OVER_ONE_HOUR = ( ONE_HOUR + ONE_MINUTE );
  57. protected static final long OVER_ONE_DAY = ( ONE_DAY + ONE_HOUR );
  58. protected static final long OLDER = ( -1 );
  59. protected static final long NEWER = 0;
  60. private long generatedLocalFileUpdateDelta = 0;
  61. @Inject @Named(value="preDownloadPolicy#snapshots")
  62. PreDownloadPolicy policy;
  63. private FilesystemStorage filesystemStorage;
  64. private PreDownloadPolicy lookupPolicy()
  65. throws Exception
  66. {
  67. return policy;
  68. }
  69. @Test
  70. public void testSnapshotPolicyDailyProjectMetadata()
  71. throws Exception
  72. {
  73. // Pass the policy when working with metadata, no matter what.
  74. assertSnapshotPolicy( SnapshotsPolicy.DAILY, PATH_PROJECT_METADATA, NO_LOCAL );
  75. assertSnapshotPolicy( SnapshotsPolicy.DAILY, PATH_PROJECT_METADATA, WITH_LOCAL );
  76. generatedLocalFileUpdateDelta = OVER_ONE_DAY;
  77. assertSnapshotPolicy( SnapshotsPolicy.DAILY, PATH_PROJECT_METADATA, NO_LOCAL );
  78. assertSnapshotPolicy( SnapshotsPolicy.DAILY, PATH_PROJECT_METADATA, WITH_LOCAL );
  79. generatedLocalFileUpdateDelta = ( ONE_HOUR * 22 );
  80. assertSnapshotPolicy( SnapshotsPolicy.DAILY, PATH_PROJECT_METADATA, NO_LOCAL );
  81. assertSnapshotPolicy( SnapshotsPolicy.DAILY, PATH_PROJECT_METADATA, WITH_LOCAL );
  82. }
  83. @Test
  84. public void testSnapshotPolicyDailyReleaseArtifact()
  85. throws Exception
  86. {
  87. assertSnapshotPolicy( SnapshotsPolicy.DAILY, PATH_RELEASE_ARTIFACT, NO_LOCAL );
  88. assertSnapshotPolicy( SnapshotsPolicy.DAILY, PATH_RELEASE_ARTIFACT, WITH_LOCAL );
  89. generatedLocalFileUpdateDelta = OVER_ONE_DAY;
  90. assertSnapshotPolicy( SnapshotsPolicy.DAILY, PATH_RELEASE_ARTIFACT, NO_LOCAL );
  91. assertSnapshotPolicy( SnapshotsPolicy.DAILY, PATH_RELEASE_ARTIFACT, WITH_LOCAL );
  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. @Test
  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. generatedLocalFileUpdateDelta = OVER_ONE_DAY;
  103. assertSnapshotPolicy( SnapshotsPolicy.DAILY, PATH_SNAPSHOT_ARTIFACT, NO_LOCAL );
  104. assertSnapshotPolicy( SnapshotsPolicy.DAILY, PATH_SNAPSHOT_ARTIFACT, WITH_LOCAL );
  105. generatedLocalFileUpdateDelta = ( ONE_HOUR * 22 );
  106. assertSnapshotPolicy( SnapshotsPolicy.DAILY, PATH_SNAPSHOT_ARTIFACT, NO_LOCAL );
  107. assertSnapshotPolicyViolation( SnapshotsPolicy.DAILY, PATH_SNAPSHOT_ARTIFACT, WITH_LOCAL );
  108. }
  109. @Test
  110. public void testSnapshotPolicyDailyVersionedMetadata()
  111. throws Exception
  112. {
  113. // Pass the policy when working with metadata, no matter what.
  114. assertSnapshotPolicy( SnapshotsPolicy.DAILY, PATH_VERSION_METADATA, NO_LOCAL );
  115. assertSnapshotPolicy( SnapshotsPolicy.DAILY, PATH_VERSION_METADATA, WITH_LOCAL );
  116. generatedLocalFileUpdateDelta = OVER_ONE_DAY;
  117. assertSnapshotPolicy( SnapshotsPolicy.DAILY, PATH_VERSION_METADATA, NO_LOCAL );
  118. assertSnapshotPolicy( SnapshotsPolicy.DAILY, PATH_VERSION_METADATA, WITH_LOCAL );
  119. generatedLocalFileUpdateDelta = ( ONE_HOUR * 22 );
  120. assertSnapshotPolicy( SnapshotsPolicy.DAILY, PATH_VERSION_METADATA, NO_LOCAL );
  121. assertSnapshotPolicy( SnapshotsPolicy.DAILY, PATH_VERSION_METADATA, WITH_LOCAL );
  122. }
  123. @Test
  124. public void testSnapshotPolicyRejectProjectMetadata()
  125. throws Exception
  126. {
  127. // Pass the policy when working with metadata, no matter what.
  128. assertSnapshotPolicy( SnapshotsPolicy.NEVER, PATH_PROJECT_METADATA, NO_LOCAL );
  129. assertSnapshotPolicy( SnapshotsPolicy.NEVER, PATH_PROJECT_METADATA, WITH_LOCAL );
  130. }
  131. @Test
  132. public void testSnapshotPolicyRejectReleaseArtifact()
  133. throws Exception
  134. {
  135. assertSnapshotPolicy( SnapshotsPolicy.NEVER, PATH_RELEASE_ARTIFACT, NO_LOCAL );
  136. assertSnapshotPolicy( SnapshotsPolicy.NEVER, PATH_RELEASE_ARTIFACT, WITH_LOCAL );
  137. }
  138. @Test
  139. public void testSnapshotPolicyRejectSnapshotArtifact()
  140. throws Exception
  141. {
  142. assertSnapshotPolicyViolation( SnapshotsPolicy.NEVER, PATH_SNAPSHOT_ARTIFACT, NO_LOCAL );
  143. assertSnapshotPolicyViolation( SnapshotsPolicy.NEVER, PATH_SNAPSHOT_ARTIFACT, WITH_LOCAL );
  144. }
  145. @Test
  146. public void testSnapshotPolicyRejectVersionedMetadata()
  147. throws Exception
  148. {
  149. // Pass the policy when working with metadata, no matter what.
  150. assertSnapshotPolicy( SnapshotsPolicy.NEVER, PATH_VERSION_METADATA, NO_LOCAL );
  151. assertSnapshotPolicy( SnapshotsPolicy.NEVER, PATH_VERSION_METADATA, WITH_LOCAL );
  152. }
  153. @Test
  154. public void testSnapshotPolicyHourlyProjectMetadata()
  155. throws Exception
  156. {
  157. // Pass the policy when working with metadata, no matter what.
  158. assertSnapshotPolicy( SnapshotsPolicy.HOURLY, PATH_PROJECT_METADATA, NO_LOCAL );
  159. assertSnapshotPolicy( SnapshotsPolicy.HOURLY, PATH_PROJECT_METADATA, WITH_LOCAL );
  160. generatedLocalFileUpdateDelta = OVER_ONE_HOUR;
  161. assertSnapshotPolicy( SnapshotsPolicy.HOURLY, PATH_PROJECT_METADATA, NO_LOCAL );
  162. assertSnapshotPolicy( SnapshotsPolicy.HOURLY, PATH_PROJECT_METADATA, WITH_LOCAL );
  163. generatedLocalFileUpdateDelta = ( ONE_MINUTE * 45 );
  164. assertSnapshotPolicy( SnapshotsPolicy.HOURLY, PATH_PROJECT_METADATA, NO_LOCAL );
  165. assertSnapshotPolicy( SnapshotsPolicy.HOURLY, PATH_PROJECT_METADATA, WITH_LOCAL );
  166. }
  167. @Test
  168. public void testSnapshotPolicyHourlyReleaseArtifact()
  169. throws Exception
  170. {
  171. assertSnapshotPolicy( SnapshotsPolicy.HOURLY, PATH_RELEASE_ARTIFACT, NO_LOCAL );
  172. assertSnapshotPolicy( SnapshotsPolicy.HOURLY, PATH_RELEASE_ARTIFACT, WITH_LOCAL );
  173. generatedLocalFileUpdateDelta = OVER_ONE_HOUR;
  174. assertSnapshotPolicy( SnapshotsPolicy.HOURLY, PATH_RELEASE_ARTIFACT, NO_LOCAL );
  175. assertSnapshotPolicy( SnapshotsPolicy.HOURLY, PATH_RELEASE_ARTIFACT, WITH_LOCAL );
  176. generatedLocalFileUpdateDelta = ( ONE_MINUTE * 45 );
  177. assertSnapshotPolicy( SnapshotsPolicy.HOURLY, PATH_RELEASE_ARTIFACT, NO_LOCAL );
  178. assertSnapshotPolicy( SnapshotsPolicy.HOURLY, PATH_RELEASE_ARTIFACT, WITH_LOCAL );
  179. }
  180. @Test
  181. public void testSnapshotPolicyHourlySnapshotArtifact()
  182. throws Exception
  183. {
  184. assertSnapshotPolicy( SnapshotsPolicy.HOURLY, PATH_SNAPSHOT_ARTIFACT, NO_LOCAL );
  185. assertSnapshotPolicyViolation( SnapshotsPolicy.HOURLY, PATH_SNAPSHOT_ARTIFACT, WITH_LOCAL );
  186. generatedLocalFileUpdateDelta = OVER_ONE_HOUR;
  187. assertSnapshotPolicy( SnapshotsPolicy.HOURLY, PATH_SNAPSHOT_ARTIFACT, NO_LOCAL );
  188. assertSnapshotPolicy( SnapshotsPolicy.HOURLY, PATH_SNAPSHOT_ARTIFACT, WITH_LOCAL );
  189. generatedLocalFileUpdateDelta = ( ONE_MINUTE * 45 );
  190. assertSnapshotPolicy( SnapshotsPolicy.HOURLY, PATH_SNAPSHOT_ARTIFACT, NO_LOCAL );
  191. assertSnapshotPolicyViolation( SnapshotsPolicy.HOURLY, PATH_SNAPSHOT_ARTIFACT, WITH_LOCAL );
  192. }
  193. @Test
  194. public void testSnapshotPolicyHourlyVersionedMetadata()
  195. throws Exception
  196. {
  197. // Pass the policy when working with metadata, no matter what.
  198. assertSnapshotPolicy( SnapshotsPolicy.HOURLY, PATH_VERSION_METADATA, NO_LOCAL );
  199. assertSnapshotPolicy( SnapshotsPolicy.HOURLY, PATH_VERSION_METADATA, WITH_LOCAL );
  200. generatedLocalFileUpdateDelta = OVER_ONE_HOUR;
  201. assertSnapshotPolicy( SnapshotsPolicy.HOURLY, PATH_VERSION_METADATA, NO_LOCAL );
  202. assertSnapshotPolicy( SnapshotsPolicy.HOURLY, PATH_VERSION_METADATA, WITH_LOCAL );
  203. generatedLocalFileUpdateDelta = ( ONE_MINUTE * 45 );
  204. assertSnapshotPolicy( SnapshotsPolicy.HOURLY, PATH_VERSION_METADATA, NO_LOCAL );
  205. assertSnapshotPolicy( SnapshotsPolicy.HOURLY, PATH_VERSION_METADATA, WITH_LOCAL );
  206. }
  207. @Test
  208. public void testSnapshotPolicyAlwaysProjectMetadata()
  209. throws Exception
  210. {
  211. // Pass the policy when working with metadata, no matter what.
  212. assertSnapshotPolicy( SnapshotsPolicy.ALWAYS, PATH_PROJECT_METADATA, NO_LOCAL );
  213. assertSnapshotPolicy( SnapshotsPolicy.ALWAYS, PATH_PROJECT_METADATA, WITH_LOCAL );
  214. }
  215. @Test
  216. public void testSnapshotPolicyAlwaysReleaseArtifact()
  217. throws Exception
  218. {
  219. assertSnapshotPolicy( SnapshotsPolicy.ALWAYS, PATH_RELEASE_ARTIFACT, NO_LOCAL );
  220. assertSnapshotPolicy( SnapshotsPolicy.ALWAYS, PATH_RELEASE_ARTIFACT, WITH_LOCAL );
  221. }
  222. @Test
  223. public void testSnapshotPolicyAlwaysSnapshotArtifact()
  224. throws Exception
  225. {
  226. assertSnapshotPolicy( SnapshotsPolicy.ALWAYS, PATH_SNAPSHOT_ARTIFACT, NO_LOCAL );
  227. assertSnapshotPolicy( SnapshotsPolicy.ALWAYS, PATH_SNAPSHOT_ARTIFACT, WITH_LOCAL );
  228. }
  229. @Test
  230. public void testSnapshotPolicyAlwaysVersionedMetadata()
  231. throws Exception
  232. {
  233. // Pass the policy when working with metadata, no matter what.
  234. assertSnapshotPolicy( SnapshotsPolicy.ALWAYS, PATH_VERSION_METADATA, NO_LOCAL );
  235. assertSnapshotPolicy( SnapshotsPolicy.ALWAYS, PATH_VERSION_METADATA, WITH_LOCAL );
  236. }
  237. @Test
  238. public void testSnapshotPolicyOnceProjectMetadata()
  239. throws Exception
  240. {
  241. // Pass the policy when working with metadata, no matter what.
  242. assertSnapshotPolicy( SnapshotsPolicy.ONCE, PATH_PROJECT_METADATA, NO_LOCAL );
  243. assertSnapshotPolicy( SnapshotsPolicy.ONCE, PATH_PROJECT_METADATA, WITH_LOCAL );
  244. }
  245. @Test
  246. public void testSnapshotPolicyOnceReleaseArtifact()
  247. throws Exception
  248. {
  249. assertSnapshotPolicy( SnapshotsPolicy.ONCE, PATH_RELEASE_ARTIFACT, NO_LOCAL );
  250. assertSnapshotPolicy( SnapshotsPolicy.ONCE, PATH_RELEASE_ARTIFACT, WITH_LOCAL );
  251. }
  252. @Test
  253. public void testSnapshotPolicyOnceSnapshotArtifact()
  254. throws Exception
  255. {
  256. assertSnapshotPolicy( SnapshotsPolicy.ONCE, PATH_SNAPSHOT_ARTIFACT, NO_LOCAL );
  257. assertSnapshotPolicyViolation( SnapshotsPolicy.ONCE, PATH_SNAPSHOT_ARTIFACT, WITH_LOCAL );
  258. }
  259. @Test
  260. public void testSnapshotPolicyOnceVersionedMetadata()
  261. throws Exception
  262. {
  263. // Pass the policy when working with metadata, no matter what.
  264. assertSnapshotPolicy( SnapshotsPolicy.ONCE, PATH_VERSION_METADATA, NO_LOCAL );
  265. assertSnapshotPolicy( SnapshotsPolicy.ONCE, PATH_VERSION_METADATA, WITH_LOCAL );
  266. }
  267. private void assertSnapshotPolicy( String setting, String path, boolean createLocalFile )
  268. throws Exception
  269. {
  270. PreDownloadPolicy policy = lookupPolicy();
  271. Properties request = new Properties();
  272. request.setProperty( "filetype", path.endsWith( "/maven-metadata.xml" ) ? "metadata" : "artifact" );
  273. if ( path.contains( "1.0-SNAPSHOT" ) )
  274. {
  275. request.setProperty( "version", "1.0-SNAPSHOT" );
  276. }
  277. if ( path.contains( "2.0" ) )
  278. {
  279. request.setProperty( "version", "2.0" );
  280. }
  281. StorageAsset targetDir = ChecksumPolicyTest.getTestFile( "target/test-policy/" );
  282. StorageAsset localFile = targetDir.resolve( path );
  283. Files.deleteIfExists( localFile.getFilePath() );
  284. if ( createLocalFile )
  285. {
  286. Files.createDirectories( localFile.getParent().getFilePath() );
  287. org.apache.archiva.common.utils.FileUtils.writeStringToFile( localFile.getFilePath(), FILE_ENCODING, "random-junk" );
  288. Files.setLastModifiedTime( localFile.getFilePath(),
  289. FileTime.fromMillis( Files.getLastModifiedTime( localFile.getFilePath() ).toMillis() - generatedLocalFileUpdateDelta ));
  290. }
  291. policy.applyPolicy( setting, request, localFile );
  292. }
  293. private void assertSnapshotPolicyViolation( String setting, String path, boolean createLocalFile )
  294. throws Exception
  295. {
  296. try
  297. {
  298. assertSnapshotPolicy( setting, path, createLocalFile );
  299. fail( "Expected a PolicyViolationException." );
  300. }
  301. catch ( PolicyViolationException e )
  302. {
  303. // expected path.
  304. }
  305. }
  306. @Override
  307. @Before
  308. public void setUp()
  309. throws Exception
  310. {
  311. super.setUp();
  312. // reset delta to 0.
  313. generatedLocalFileUpdateDelta = 0;
  314. }
  315. }