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.

ReleasePolicyTest.java 15KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383
  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.test.utils.ArchivaSpringJUnit4ClassRunner;
  22. import org.junit.Before;
  23. import org.junit.Test;
  24. import org.junit.runner.RunWith;
  25. import org.springframework.test.context.ContextConfiguration;
  26. import javax.inject.Inject;
  27. import javax.inject.Named;
  28. import java.nio.charset.Charset;
  29. import java.nio.file.Files;
  30. import java.nio.file.Path;
  31. import java.nio.file.attribute.FileTime;
  32. import java.util.Properties;
  33. /**
  34. * ReleasePolicyTest
  35. *
  36. *
  37. */
  38. @RunWith( ArchivaSpringJUnit4ClassRunner.class )
  39. @ContextConfiguration( locations = { "classpath*:/META-INF/spring-context.xml", "classpath*:/spring-context.xml" } )
  40. public class ReleasePolicyTest
  41. extends TestCase
  42. {
  43. private static final Charset FILE_ENCODING = Charset.forName( "UTF-8" );
  44. private static final String PATH_VERSION_METADATA = "org/apache/archiva/archiva-testable/1.0-SNAPSHOT/maven-metadata.xml";
  45. private static final String PATH_PROJECT_METADATA = "org/apache/archiva/archiva-testable/maven-metadata.xml";
  46. private static final String PATH_SNAPSHOT_ARTIFACT = "org/apache/archiva/archiva-testable/1.0-SNAPSHOT/archiva-testable-1.0-SNAPSHOT.jar";
  47. private static final String PATH_RELEASE_ARTIFACT = "org/apache/archiva/archiva-testable/2.0/archiva-testable-2.0.jar";
  48. private static final boolean WITH_LOCAL = true;
  49. private static final boolean NO_LOCAL = false;
  50. protected static final long ONE_SECOND = ( 1000 /* milliseconds */);
  51. protected static final long ONE_MINUTE = ( ONE_SECOND * 60 );
  52. protected static final long ONE_HOUR = ( ONE_MINUTE * 60 );
  53. protected static final long ONE_DAY = ( ONE_HOUR * 24 );
  54. protected static final long OVER_ONE_HOUR = ( ONE_HOUR + ONE_MINUTE );
  55. protected static final long OVER_ONE_DAY = ( ONE_DAY + ONE_HOUR );
  56. protected static final long OLDER = ( -1 );
  57. protected static final long NEWER = 0;
  58. private long generatedLocalFileUpdateDelta = 0;
  59. @Inject @Named(value = "preDownloadPolicy#releases")
  60. PreDownloadPolicy preDownloadPolicy;
  61. private PreDownloadPolicy lookupPolicy()
  62. throws Exception
  63. {
  64. return preDownloadPolicy;
  65. }
  66. @Test
  67. public void testReleasePolicyDailyProjectMetadata()
  68. throws Exception
  69. {
  70. // Pass the policy when working with metadata, no matter what.
  71. assertReleasesPolicy( ReleasesPolicy.DAILY, PATH_PROJECT_METADATA, NO_LOCAL );
  72. assertReleasesPolicy( ReleasesPolicy.DAILY, PATH_PROJECT_METADATA, WITH_LOCAL );
  73. generatedLocalFileUpdateDelta = OVER_ONE_DAY;
  74. assertReleasesPolicy( ReleasesPolicy.DAILY, PATH_PROJECT_METADATA, NO_LOCAL );
  75. assertReleasesPolicy( ReleasesPolicy.DAILY, PATH_PROJECT_METADATA, WITH_LOCAL );
  76. generatedLocalFileUpdateDelta = ( ONE_HOUR * 22 );
  77. assertReleasesPolicy( ReleasesPolicy.DAILY, PATH_PROJECT_METADATA, NO_LOCAL );
  78. assertReleasesPolicy( ReleasesPolicy.DAILY, PATH_PROJECT_METADATA, WITH_LOCAL );
  79. }
  80. @Test
  81. public void testReleasePolicyDailyReleaseArtifact()
  82. throws Exception
  83. {
  84. assertReleasesPolicy( ReleasesPolicy.DAILY, PATH_RELEASE_ARTIFACT, NO_LOCAL );
  85. assertReleasesPolicyViolation( ReleasesPolicy.DAILY, PATH_RELEASE_ARTIFACT, WITH_LOCAL );
  86. generatedLocalFileUpdateDelta = OVER_ONE_DAY;
  87. assertReleasesPolicy( ReleasesPolicy.DAILY, PATH_RELEASE_ARTIFACT, NO_LOCAL );
  88. assertReleasesPolicy( ReleasesPolicy.DAILY, PATH_RELEASE_ARTIFACT, WITH_LOCAL );
  89. generatedLocalFileUpdateDelta = ( ONE_HOUR * 22 );
  90. assertReleasesPolicy( ReleasesPolicy.DAILY, PATH_RELEASE_ARTIFACT, NO_LOCAL );
  91. assertReleasesPolicyViolation( ReleasesPolicy.DAILY, PATH_RELEASE_ARTIFACT, WITH_LOCAL );
  92. }
  93. @Test
  94. public void testReleasePolicyDailySnapshotArtifact()
  95. throws Exception
  96. {
  97. assertReleasesPolicy( ReleasesPolicy.DAILY, PATH_SNAPSHOT_ARTIFACT, NO_LOCAL );
  98. assertReleasesPolicy( ReleasesPolicy.DAILY, PATH_SNAPSHOT_ARTIFACT, WITH_LOCAL );
  99. generatedLocalFileUpdateDelta = OVER_ONE_DAY;
  100. assertReleasesPolicy( ReleasesPolicy.DAILY, PATH_SNAPSHOT_ARTIFACT, NO_LOCAL );
  101. assertReleasesPolicy( ReleasesPolicy.DAILY, PATH_SNAPSHOT_ARTIFACT, WITH_LOCAL );
  102. generatedLocalFileUpdateDelta = ( ONE_HOUR * 22 );
  103. assertReleasesPolicy( ReleasesPolicy.DAILY, PATH_SNAPSHOT_ARTIFACT, NO_LOCAL );
  104. assertReleasesPolicy( ReleasesPolicy.DAILY, PATH_SNAPSHOT_ARTIFACT, WITH_LOCAL );
  105. }
  106. @Test
  107. public void testReleasePolicyDailyVersionedMetadata()
  108. throws Exception
  109. {
  110. // Pass the policy when working with metadata, no matter what.
  111. assertReleasesPolicy( ReleasesPolicy.DAILY, PATH_VERSION_METADATA, NO_LOCAL );
  112. assertReleasesPolicy( ReleasesPolicy.DAILY, PATH_VERSION_METADATA, WITH_LOCAL );
  113. generatedLocalFileUpdateDelta = OVER_ONE_DAY;
  114. assertReleasesPolicy( ReleasesPolicy.DAILY, PATH_VERSION_METADATA, NO_LOCAL );
  115. assertReleasesPolicy( ReleasesPolicy.DAILY, PATH_VERSION_METADATA, WITH_LOCAL );
  116. generatedLocalFileUpdateDelta = ( ONE_HOUR * 22 );
  117. assertReleasesPolicy( ReleasesPolicy.DAILY, PATH_VERSION_METADATA, NO_LOCAL );
  118. assertReleasesPolicy( ReleasesPolicy.DAILY, PATH_VERSION_METADATA, WITH_LOCAL );
  119. }
  120. @Test
  121. public void testReleasePolicyRejectProjectMetadata()
  122. throws Exception
  123. {
  124. // Pass the policy when working with metadata, no matter what.
  125. assertReleasesPolicy( ReleasesPolicy.NEVER, PATH_PROJECT_METADATA, NO_LOCAL );
  126. assertReleasesPolicy( ReleasesPolicy.NEVER, PATH_PROJECT_METADATA, WITH_LOCAL );
  127. }
  128. @Test
  129. public void testReleasePolicyRejectReleaseArtifact()
  130. throws Exception
  131. {
  132. assertReleasesPolicyViolation( ReleasesPolicy.NEVER, PATH_RELEASE_ARTIFACT, NO_LOCAL );
  133. assertReleasesPolicyViolation( ReleasesPolicy.NEVER, PATH_RELEASE_ARTIFACT, WITH_LOCAL );
  134. }
  135. @Test
  136. public void testReleasePolicyRejectSnapshotArtifact()
  137. throws Exception
  138. {
  139. assertReleasesPolicy( ReleasesPolicy.NEVER, PATH_SNAPSHOT_ARTIFACT, NO_LOCAL );
  140. assertReleasesPolicy( ReleasesPolicy.NEVER, PATH_SNAPSHOT_ARTIFACT, WITH_LOCAL );
  141. }
  142. @Test
  143. public void testReleasePolicyRejectVersionedMetadata()
  144. throws Exception
  145. {
  146. // Pass the policy when working with metadata, no matter what.
  147. assertReleasesPolicy( ReleasesPolicy.NEVER, PATH_VERSION_METADATA, NO_LOCAL );
  148. assertReleasesPolicy( ReleasesPolicy.NEVER, PATH_VERSION_METADATA, WITH_LOCAL );
  149. }
  150. @Test
  151. public void testReleasePolicyHourlyProjectMetadata()
  152. throws Exception
  153. {
  154. // Pass the policy when working with metadata, no matter what.
  155. assertReleasesPolicy( ReleasesPolicy.HOURLY, PATH_PROJECT_METADATA, NO_LOCAL );
  156. assertReleasesPolicy( ReleasesPolicy.HOURLY, PATH_PROJECT_METADATA, WITH_LOCAL );
  157. generatedLocalFileUpdateDelta = OVER_ONE_HOUR;
  158. assertReleasesPolicy( ReleasesPolicy.HOURLY, PATH_PROJECT_METADATA, NO_LOCAL );
  159. assertReleasesPolicy( ReleasesPolicy.HOURLY, PATH_PROJECT_METADATA, WITH_LOCAL );
  160. generatedLocalFileUpdateDelta = ( ONE_MINUTE * 45 );
  161. assertReleasesPolicy( ReleasesPolicy.HOURLY, PATH_PROJECT_METADATA, NO_LOCAL );
  162. assertReleasesPolicy( ReleasesPolicy.HOURLY, PATH_PROJECT_METADATA, WITH_LOCAL );
  163. }
  164. @Test
  165. public void testReleasePolicyHourlyReleaseArtifact()
  166. throws Exception
  167. {
  168. assertReleasesPolicy( ReleasesPolicy.HOURLY, PATH_RELEASE_ARTIFACT, NO_LOCAL );
  169. assertReleasesPolicyViolation( ReleasesPolicy.HOURLY, PATH_RELEASE_ARTIFACT, WITH_LOCAL );
  170. generatedLocalFileUpdateDelta = OVER_ONE_HOUR;
  171. assertReleasesPolicy( ReleasesPolicy.HOURLY, PATH_RELEASE_ARTIFACT, NO_LOCAL );
  172. assertReleasesPolicy( ReleasesPolicy.HOURLY, PATH_RELEASE_ARTIFACT, WITH_LOCAL );
  173. generatedLocalFileUpdateDelta = ( ONE_MINUTE * 45 );
  174. assertReleasesPolicy( ReleasesPolicy.HOURLY, PATH_RELEASE_ARTIFACT, NO_LOCAL );
  175. assertReleasesPolicyViolation( ReleasesPolicy.HOURLY, PATH_RELEASE_ARTIFACT, WITH_LOCAL );
  176. }
  177. @Test
  178. public void testReleasePolicyHourlySnapshotArtifact()
  179. throws Exception
  180. {
  181. assertReleasesPolicy( ReleasesPolicy.HOURLY, PATH_SNAPSHOT_ARTIFACT, NO_LOCAL );
  182. assertReleasesPolicy( ReleasesPolicy.HOURLY, PATH_SNAPSHOT_ARTIFACT, WITH_LOCAL );
  183. generatedLocalFileUpdateDelta = OVER_ONE_HOUR;
  184. assertReleasesPolicy( ReleasesPolicy.HOURLY, PATH_SNAPSHOT_ARTIFACT, NO_LOCAL );
  185. assertReleasesPolicy( ReleasesPolicy.HOURLY, PATH_SNAPSHOT_ARTIFACT, WITH_LOCAL );
  186. generatedLocalFileUpdateDelta = ( ONE_MINUTE * 45 );
  187. assertReleasesPolicy( ReleasesPolicy.HOURLY, PATH_SNAPSHOT_ARTIFACT, NO_LOCAL );
  188. assertReleasesPolicy( ReleasesPolicy.HOURLY, PATH_SNAPSHOT_ARTIFACT, WITH_LOCAL );
  189. }
  190. @Test
  191. public void testReleasePolicyHourlyVersionedMetadata()
  192. throws Exception
  193. {
  194. // Pass the policy when working with metadata, no matter what.
  195. assertReleasesPolicy( ReleasesPolicy.HOURLY, PATH_VERSION_METADATA, NO_LOCAL );
  196. assertReleasesPolicy( ReleasesPolicy.HOURLY, PATH_VERSION_METADATA, WITH_LOCAL );
  197. generatedLocalFileUpdateDelta = OVER_ONE_HOUR;
  198. assertReleasesPolicy( ReleasesPolicy.HOURLY, PATH_VERSION_METADATA, NO_LOCAL );
  199. assertReleasesPolicy( ReleasesPolicy.HOURLY, PATH_VERSION_METADATA, WITH_LOCAL );
  200. generatedLocalFileUpdateDelta = ( ONE_MINUTE * 45 );
  201. assertReleasesPolicy( ReleasesPolicy.HOURLY, PATH_VERSION_METADATA, NO_LOCAL );
  202. assertReleasesPolicy( ReleasesPolicy.HOURLY, PATH_VERSION_METADATA, WITH_LOCAL );
  203. }
  204. @Test
  205. public void testReleasePolicyAlwaysProjectMetadata()
  206. throws Exception
  207. {
  208. // Pass the policy when working with metadata, no matter what.
  209. assertReleasesPolicy( ReleasesPolicy.ALWAYS, PATH_PROJECT_METADATA, NO_LOCAL );
  210. assertReleasesPolicy( ReleasesPolicy.ALWAYS, PATH_PROJECT_METADATA, WITH_LOCAL );
  211. }
  212. @Test
  213. public void testReleasePolicyAlwaysReleaseArtifact()
  214. throws Exception
  215. {
  216. assertReleasesPolicy( ReleasesPolicy.ALWAYS, PATH_RELEASE_ARTIFACT, NO_LOCAL );
  217. assertReleasesPolicy( ReleasesPolicy.ALWAYS, PATH_RELEASE_ARTIFACT, WITH_LOCAL );
  218. }
  219. @Test
  220. public void testReleasePolicyAlwaysSnapshotArtifact()
  221. throws Exception
  222. {
  223. assertReleasesPolicy( ReleasesPolicy.ALWAYS, PATH_SNAPSHOT_ARTIFACT, NO_LOCAL );
  224. assertReleasesPolicy( ReleasesPolicy.ALWAYS, PATH_SNAPSHOT_ARTIFACT, WITH_LOCAL );
  225. }
  226. @Test
  227. public void testReleasePolicyAlwaysVersionedMetadata()
  228. throws Exception
  229. {
  230. // Pass the policy when working with metadata, no matter what.
  231. assertReleasesPolicy( ReleasesPolicy.ALWAYS, PATH_VERSION_METADATA, NO_LOCAL );
  232. assertReleasesPolicy( ReleasesPolicy.ALWAYS, PATH_VERSION_METADATA, WITH_LOCAL );
  233. }
  234. @Test
  235. public void testReleasePolicyOnceProjectMetadata()
  236. throws Exception
  237. {
  238. // Pass the policy when working with metadata, no matter what.
  239. assertReleasesPolicy( ReleasesPolicy.ONCE, PATH_PROJECT_METADATA, NO_LOCAL );
  240. assertReleasesPolicy( ReleasesPolicy.ONCE, PATH_PROJECT_METADATA, WITH_LOCAL );
  241. }
  242. @Test
  243. public void testReleasePolicyOnceReleaseArtifact()
  244. throws Exception
  245. {
  246. assertReleasesPolicy( ReleasesPolicy.ONCE, PATH_RELEASE_ARTIFACT, NO_LOCAL );
  247. assertReleasesPolicyViolation( ReleasesPolicy.ONCE, PATH_RELEASE_ARTIFACT, WITH_LOCAL );
  248. }
  249. @Test
  250. public void testReleasePolicyOnceSnapshotArtifact()
  251. throws Exception
  252. {
  253. assertReleasesPolicy( ReleasesPolicy.ONCE, PATH_SNAPSHOT_ARTIFACT, NO_LOCAL );
  254. assertReleasesPolicy( ReleasesPolicy.ONCE, PATH_SNAPSHOT_ARTIFACT, WITH_LOCAL );
  255. }
  256. @Test
  257. public void testReleasePolicyOnceVersionedMetadata()
  258. throws Exception
  259. {
  260. // Pass the policy when working with metadata, no matter what.
  261. assertReleasesPolicy( ReleasesPolicy.ONCE, PATH_VERSION_METADATA, NO_LOCAL );
  262. assertReleasesPolicy( ReleasesPolicy.ONCE, PATH_VERSION_METADATA, WITH_LOCAL );
  263. }
  264. private void assertReleasesPolicy( String setting, String path, boolean createLocalFile )
  265. throws Exception
  266. {
  267. PreDownloadPolicy policy = lookupPolicy();
  268. Properties request = new Properties();
  269. request.setProperty( "filetype", path.endsWith( "/maven-metadata.xml" ) ? "metadata" : "artifact" );
  270. if ( path.contains( "1.0-SNAPSHOT" ) )
  271. {
  272. request.setProperty( "version", "1.0-SNAPSHOT" );
  273. }
  274. if ( path.contains( "2.0" ) )
  275. {
  276. request.setProperty( "version", "2.0" );
  277. }
  278. Path targetDir = ChecksumPolicyTest.getTestFile( "target/test-policy/" );
  279. Path localFile = targetDir.resolve( path );
  280. Files.deleteIfExists( localFile );
  281. if ( createLocalFile )
  282. {
  283. Files.createDirectories( localFile.getParent());
  284. org.apache.archiva.common.utils.FileUtils.writeStringToFile( localFile, FILE_ENCODING, "random-junk" );
  285. Files.setLastModifiedTime( localFile,
  286. FileTime.fromMillis(Files.getLastModifiedTime(localFile).toMillis() - generatedLocalFileUpdateDelta));
  287. }
  288. policy.applyPolicy( setting, request, localFile );
  289. }
  290. private void assertReleasesPolicyViolation( String setting, String path, boolean createLocalFile )
  291. throws Exception
  292. {
  293. try
  294. {
  295. assertReleasesPolicy( setting, path, createLocalFile );
  296. fail( "Expected a PolicyViolationException." );
  297. }
  298. catch ( PolicyViolationException e )
  299. {
  300. // expected path.
  301. }
  302. }
  303. @Before
  304. @Override
  305. public void setUp()
  306. throws Exception
  307. {
  308. super.setUp();
  309. // reset delta to 0.
  310. generatedLocalFileUpdateDelta = 0;
  311. }
  312. }