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.

ErrorHandlingTest.java 26KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661
  1. package org.apache.archiva.proxy;
  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 org.apache.archiva.policies.CachedFailuresPolicy;
  21. import org.apache.archiva.policies.ChecksumPolicy;
  22. import org.apache.archiva.policies.PropagateErrorsDownloadPolicy;
  23. import org.apache.archiva.policies.PropagateErrorsOnUpdateDownloadPolicy;
  24. import org.apache.archiva.policies.ProxyDownloadException;
  25. import org.apache.archiva.policies.ReleasesPolicy;
  26. import org.apache.archiva.policies.SnapshotsPolicy;
  27. import org.apache.archiva.repository.LayoutException;
  28. import org.apache.maven.wagon.ResourceDoesNotExistException;
  29. import org.apache.maven.wagon.TransferFailedException;
  30. import org.apache.maven.wagon.authorization.AuthorizationException;
  31. import org.easymock.EasyMock;
  32. import org.junit.Test;
  33. import java.io.File;
  34. import java.io.IOException;
  35. import java.nio.file.Files;
  36. import java.nio.file.Path;
  37. import java.nio.file.Paths;
  38. import static org.junit.Assert.*;
  39. /**
  40. * ErrorHandlingTest
  41. *
  42. *
  43. */
  44. public class ErrorHandlingTest
  45. extends AbstractProxyTestCase
  46. {
  47. private static final String PATH_IN_BOTH_REMOTES_NOT_LOCAL =
  48. "org/apache/maven/test/get-in-both-proxies/1.0/get-in-both-proxies-1.0.jar";
  49. private static final String PATH_IN_BOTH_REMOTES_AND_LOCAL =
  50. "org/apache/maven/test/get-on-multiple-repos/1.0/get-on-multiple-repos-1.0.pom";
  51. private static final String ID_MOCKED_PROXIED1 = "badproxied1";
  52. private static final String NAME_MOCKED_PROXIED1 = "Bad Proxied 1";
  53. private static final String ID_MOCKED_PROXIED2 = "badproxied2";
  54. private static final String NAME_MOCKED_PROXIED2 = "Bad Proxied 2";
  55. @Test
  56. public void testPropagateErrorImmediatelyWithErrorThenSuccess()
  57. throws Exception
  58. {
  59. String path = PATH_IN_BOTH_REMOTES_NOT_LOCAL;
  60. Path expectedFile = setupRepositoriesWithLocalFileNotPresent( path );
  61. createMockedProxyConnector( ID_MOCKED_PROXIED1, NAME_MOCKED_PROXIED1, PropagateErrorsDownloadPolicy.STOP );
  62. saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED2, false );
  63. simulateGetError( path, expectedFile, createTransferException() );
  64. confirmSingleFailure( path, ID_MOCKED_PROXIED1 );
  65. }
  66. @Test
  67. public void testPropagateErrorImmediatelyWithNotFoundThenError()
  68. throws Exception
  69. {
  70. String path = PATH_IN_BOTH_REMOTES_NOT_LOCAL;
  71. Path expectedFile = setupRepositoriesWithLocalFileNotPresent( path );
  72. createMockedProxyConnector( ID_MOCKED_PROXIED1, NAME_MOCKED_PROXIED1, PropagateErrorsDownloadPolicy.STOP );
  73. createMockedProxyConnector( ID_MOCKED_PROXIED2, NAME_MOCKED_PROXIED2, PropagateErrorsDownloadPolicy.STOP );
  74. simulateGetError( path, expectedFile, createResourceNotFoundException() );
  75. simulateGetError( path, expectedFile, createTransferException() );
  76. confirmSingleFailure( path, ID_MOCKED_PROXIED2 );
  77. }
  78. @Test
  79. public void testPropagateErrorImmediatelyWithSuccessThenError()
  80. throws Exception
  81. {
  82. String path = PATH_IN_BOTH_REMOTES_NOT_LOCAL;
  83. Path expectedFile = setupRepositoriesWithLocalFileNotPresent( path );
  84. saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED1, false );
  85. createMockedProxyConnector( ID_MOCKED_PROXIED2, NAME_MOCKED_PROXIED2, PropagateErrorsDownloadPolicy.STOP );
  86. confirmSuccess( path, expectedFile, REPOPATH_PROXIED1 );
  87. }
  88. @Test
  89. public void testPropagateErrorImmediatelyWithNotFoundThenSuccess()
  90. throws Exception
  91. {
  92. String path = PATH_IN_BOTH_REMOTES_NOT_LOCAL;
  93. Path expectedFile = setupRepositoriesWithLocalFileNotPresent( path );
  94. createMockedProxyConnector( ID_MOCKED_PROXIED1, NAME_MOCKED_PROXIED1, PropagateErrorsDownloadPolicy.STOP );
  95. saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED2, false );
  96. simulateGetError( path, expectedFile, createResourceNotFoundException() );
  97. confirmSuccess( path, expectedFile, REPOPATH_PROXIED2 );
  98. }
  99. @Test
  100. public void testPropagateErrorAtEndWithErrorThenSuccess()
  101. throws Exception
  102. {
  103. String path = PATH_IN_BOTH_REMOTES_NOT_LOCAL;
  104. Path expectedFile = setupRepositoriesWithLocalFileNotPresent( path );
  105. createMockedProxyConnector( ID_MOCKED_PROXIED1, NAME_MOCKED_PROXIED1, PropagateErrorsDownloadPolicy.STOP );
  106. saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED2, false );
  107. simulateGetError( path, expectedFile, createTransferException() );
  108. confirmSingleFailure( path, ID_MOCKED_PROXIED1 );
  109. }
  110. @Test
  111. public void testPropagateErrorAtEndWithSuccessThenError()
  112. throws Exception
  113. {
  114. String path = PATH_IN_BOTH_REMOTES_NOT_LOCAL;
  115. Path expectedFile = setupRepositoriesWithLocalFileNotPresent( path );
  116. saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED1, false );
  117. createMockedProxyConnector( ID_MOCKED_PROXIED2, NAME_MOCKED_PROXIED2, PropagateErrorsDownloadPolicy.QUEUE );
  118. confirmSuccess( path, expectedFile, REPOPATH_PROXIED1 );
  119. }
  120. @Test
  121. public void testPropagateErrorAtEndWithNotFoundThenError()
  122. throws Exception
  123. {
  124. String path = PATH_IN_BOTH_REMOTES_NOT_LOCAL;
  125. Path expectedFile = setupRepositoriesWithLocalFileNotPresent( path );
  126. createMockedProxyConnector( ID_MOCKED_PROXIED1, NAME_MOCKED_PROXIED1, PropagateErrorsDownloadPolicy.QUEUE );
  127. createMockedProxyConnector( ID_MOCKED_PROXIED2, NAME_MOCKED_PROXIED2, PropagateErrorsDownloadPolicy.QUEUE );
  128. simulateGetError( path, expectedFile, createResourceNotFoundException() );
  129. simulateGetError( path, expectedFile, createTransferException() );
  130. confirmSingleFailure( path, ID_MOCKED_PROXIED2 );
  131. }
  132. @Test
  133. public void testPropagateErrorAtEndWithErrorThenNotFound()
  134. throws Exception
  135. {
  136. String path = PATH_IN_BOTH_REMOTES_NOT_LOCAL;
  137. Path expectedFile = setupRepositoriesWithLocalFileNotPresent( path );
  138. createMockedProxyConnector( ID_MOCKED_PROXIED1, NAME_MOCKED_PROXIED1, PropagateErrorsDownloadPolicy.QUEUE );
  139. createMockedProxyConnector( ID_MOCKED_PROXIED2, NAME_MOCKED_PROXIED2, PropagateErrorsDownloadPolicy.QUEUE );
  140. simulateGetError( path, expectedFile, createTransferException() );
  141. simulateGetError( path, expectedFile, createResourceNotFoundException() );
  142. confirmSingleFailure( path, ID_MOCKED_PROXIED1 );
  143. }
  144. @Test
  145. public void testPropagateErrorAtEndWithErrorThenError()
  146. throws Exception
  147. {
  148. String path = PATH_IN_BOTH_REMOTES_NOT_LOCAL;
  149. Path expectedFile = setupRepositoriesWithLocalFileNotPresent( path );
  150. createMockedProxyConnector( ID_MOCKED_PROXIED1, NAME_MOCKED_PROXIED1, PropagateErrorsDownloadPolicy.QUEUE );
  151. createMockedProxyConnector( ID_MOCKED_PROXIED2, NAME_MOCKED_PROXIED2, PropagateErrorsDownloadPolicy.QUEUE );
  152. simulateGetError( path, expectedFile, createTransferException() );
  153. simulateGetError( path, expectedFile, createTransferException() );
  154. confirmFailures( path, new String[]{ID_MOCKED_PROXIED1, ID_MOCKED_PROXIED2} );
  155. }
  156. @Test
  157. public void testPropagateErrorAtEndWithNotFoundThenSuccess()
  158. throws Exception
  159. {
  160. String path = PATH_IN_BOTH_REMOTES_NOT_LOCAL;
  161. Path expectedFile = setupRepositoriesWithLocalFileNotPresent( path );
  162. createMockedProxyConnector( ID_MOCKED_PROXIED1, NAME_MOCKED_PROXIED1, PropagateErrorsDownloadPolicy.QUEUE );
  163. saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED2, false );
  164. simulateGetError( path, expectedFile, createResourceNotFoundException() );
  165. confirmSuccess( path, expectedFile, REPOPATH_PROXIED2 );
  166. }
  167. @Test
  168. public void testIgnoreErrorWithErrorThenSuccess()
  169. throws Exception
  170. {
  171. String path = PATH_IN_BOTH_REMOTES_NOT_LOCAL;
  172. Path expectedFile = setupRepositoriesWithLocalFileNotPresent( path );
  173. createMockedProxyConnector( ID_MOCKED_PROXIED1, NAME_MOCKED_PROXIED1, PropagateErrorsDownloadPolicy.IGNORE );
  174. saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED2, false );
  175. simulateGetError( path, expectedFile, createTransferException() );
  176. confirmSuccess( path, expectedFile, REPOPATH_PROXIED2 );
  177. }
  178. @Test
  179. public void testIgnoreErrorWithSuccessThenError()
  180. throws Exception
  181. {
  182. String path = PATH_IN_BOTH_REMOTES_NOT_LOCAL;
  183. Path expectedFile = setupRepositoriesWithLocalFileNotPresent( path );
  184. saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED1, false );
  185. createMockedProxyConnector( ID_MOCKED_PROXIED2, NAME_MOCKED_PROXIED2, PropagateErrorsDownloadPolicy.IGNORE );
  186. confirmSuccess( path, expectedFile, REPOPATH_PROXIED1 );
  187. }
  188. @Test
  189. public void testIgnoreErrorWithNotFoundThenError()
  190. throws Exception
  191. {
  192. String path = PATH_IN_BOTH_REMOTES_NOT_LOCAL;
  193. Path expectedFile = setupRepositoriesWithLocalFileNotPresent( path );
  194. createMockedProxyConnector( ID_MOCKED_PROXIED1, NAME_MOCKED_PROXIED1, PropagateErrorsDownloadPolicy.IGNORE );
  195. createMockedProxyConnector( ID_MOCKED_PROXIED2, NAME_MOCKED_PROXIED2, PropagateErrorsDownloadPolicy.IGNORE );
  196. simulateGetError( path, expectedFile, createResourceNotFoundException() );
  197. simulateGetError( path, expectedFile, createTransferException() );
  198. confirmNotDownloadedNoError( path );
  199. }
  200. @Test
  201. public void testIgnoreErrorWithErrorThenNotFound()
  202. throws Exception
  203. {
  204. String path = PATH_IN_BOTH_REMOTES_NOT_LOCAL;
  205. Path expectedFile = setupRepositoriesWithLocalFileNotPresent( path );
  206. createMockedProxyConnector( ID_MOCKED_PROXIED1, NAME_MOCKED_PROXIED1, PropagateErrorsDownloadPolicy.IGNORE );
  207. createMockedProxyConnector( ID_MOCKED_PROXIED2, NAME_MOCKED_PROXIED2, PropagateErrorsDownloadPolicy.IGNORE );
  208. simulateGetError( path, expectedFile, createTransferException() );
  209. simulateGetError( path, expectedFile, createResourceNotFoundException() );
  210. confirmNotDownloadedNoError( path );
  211. }
  212. @Test
  213. public void testIgnoreErrorWithErrorThenError()
  214. throws Exception
  215. {
  216. String path = PATH_IN_BOTH_REMOTES_NOT_LOCAL;
  217. Path expectedFile = setupRepositoriesWithLocalFileNotPresent( path );
  218. createMockedProxyConnector( ID_MOCKED_PROXIED1, NAME_MOCKED_PROXIED1, PropagateErrorsDownloadPolicy.IGNORE );
  219. createMockedProxyConnector( ID_MOCKED_PROXIED2, NAME_MOCKED_PROXIED2, PropagateErrorsDownloadPolicy.IGNORE );
  220. simulateGetError( path, expectedFile, createTransferException() );
  221. simulateGetError( path, expectedFile, createTransferException() );
  222. confirmNotDownloadedNoError( path );
  223. }
  224. @Test
  225. public void testPropagateOnUpdateAlwaysArtifactNotPresent()
  226. throws Exception
  227. {
  228. String path = PATH_IN_BOTH_REMOTES_NOT_LOCAL;
  229. Path expectedFile = setupRepositoriesWithLocalFileNotPresent( path );
  230. createMockedProxyConnector( ID_MOCKED_PROXIED1, NAME_MOCKED_PROXIED1, PropagateErrorsDownloadPolicy.STOP,
  231. PropagateErrorsOnUpdateDownloadPolicy.ALWAYS );
  232. createMockedProxyConnector( ID_MOCKED_PROXIED2, NAME_MOCKED_PROXIED2, PropagateErrorsDownloadPolicy.STOP,
  233. PropagateErrorsOnUpdateDownloadPolicy.ALWAYS );
  234. simulateGetError( path, expectedFile, createTransferException() );
  235. confirmSingleFailure( path, ID_MOCKED_PROXIED1 );
  236. }
  237. @Test
  238. public void testPropagateOnUpdateAlwaysArtifactPresent()
  239. throws Exception
  240. {
  241. String path = PATH_IN_BOTH_REMOTES_AND_LOCAL;
  242. Path expectedFile = setupRepositoriesWithLocalFilePresent( path );
  243. createMockedProxyConnector( ID_MOCKED_PROXIED1, NAME_MOCKED_PROXIED1, PropagateErrorsDownloadPolicy.STOP,
  244. PropagateErrorsOnUpdateDownloadPolicy.ALWAYS );
  245. createMockedProxyConnector( ID_MOCKED_PROXIED2, NAME_MOCKED_PROXIED2, PropagateErrorsDownloadPolicy.STOP,
  246. PropagateErrorsOnUpdateDownloadPolicy.ALWAYS );
  247. simulateGetIfNewerError( path, expectedFile, createTransferException() );
  248. confirmSingleFailure( path, ID_MOCKED_PROXIED1 );
  249. }
  250. @Test
  251. public void testPropagateOnUpdateAlwaysQueueArtifactNotPresent()
  252. throws Exception
  253. {
  254. String path = PATH_IN_BOTH_REMOTES_NOT_LOCAL;
  255. Path expectedFile = setupRepositoriesWithLocalFileNotPresent( path );
  256. createMockedProxyConnector( ID_MOCKED_PROXIED1, NAME_MOCKED_PROXIED1, PropagateErrorsDownloadPolicy.QUEUE,
  257. PropagateErrorsOnUpdateDownloadPolicy.ALWAYS );
  258. createMockedProxyConnector( ID_MOCKED_PROXIED2, NAME_MOCKED_PROXIED2, PropagateErrorsDownloadPolicy.QUEUE,
  259. PropagateErrorsOnUpdateDownloadPolicy.ALWAYS );
  260. simulateGetError( path, expectedFile, createTransferException() );
  261. simulateGetError( path, expectedFile, createTransferException() );
  262. confirmFailures( path, new String[] { ID_MOCKED_PROXIED1, ID_MOCKED_PROXIED2 } );
  263. }
  264. @Test
  265. public void testPropagateOnUpdateAlwaysQueueArtifactPresent()
  266. throws Exception
  267. {
  268. String path = PATH_IN_BOTH_REMOTES_AND_LOCAL;
  269. Path expectedFile = setupRepositoriesWithLocalFilePresent( path );
  270. createMockedProxyConnector( ID_MOCKED_PROXIED1, NAME_MOCKED_PROXIED1, PropagateErrorsDownloadPolicy.QUEUE,
  271. PropagateErrorsOnUpdateDownloadPolicy.ALWAYS );
  272. createMockedProxyConnector( ID_MOCKED_PROXIED2, NAME_MOCKED_PROXIED2, PropagateErrorsDownloadPolicy.QUEUE,
  273. PropagateErrorsOnUpdateDownloadPolicy.ALWAYS );
  274. simulateGetIfNewerError( path, expectedFile, createTransferException() );
  275. simulateGetIfNewerError( path, expectedFile, createTransferException() );
  276. confirmFailures( path, new String[] { ID_MOCKED_PROXIED1, ID_MOCKED_PROXIED2 } );
  277. }
  278. @Test
  279. public void testPropagateOnUpdateAlwaysIgnoreArtifactNotPresent()
  280. throws Exception
  281. {
  282. String path = PATH_IN_BOTH_REMOTES_NOT_LOCAL;
  283. Path expectedFile = setupRepositoriesWithLocalFileNotPresent( path );
  284. createMockedProxyConnector( ID_MOCKED_PROXIED1, NAME_MOCKED_PROXIED1, PropagateErrorsDownloadPolicy.IGNORE,
  285. PropagateErrorsOnUpdateDownloadPolicy.ALWAYS );
  286. createMockedProxyConnector( ID_MOCKED_PROXIED2, NAME_MOCKED_PROXIED2, PropagateErrorsDownloadPolicy.IGNORE,
  287. PropagateErrorsOnUpdateDownloadPolicy.ALWAYS );
  288. simulateGetError( path, expectedFile, createTransferException() );
  289. simulateGetError( path, expectedFile, createTransferException() );
  290. confirmNotDownloadedNoError( path );
  291. }
  292. @Test
  293. public void testPropagateOnUpdateAlwaysIgnoreArtifactPresent()
  294. throws Exception
  295. {
  296. String path = PATH_IN_BOTH_REMOTES_AND_LOCAL;
  297. Path expectedFile = setupRepositoriesWithLocalFilePresent( path );
  298. createMockedProxyConnector( ID_MOCKED_PROXIED1, NAME_MOCKED_PROXIED1, PropagateErrorsDownloadPolicy.IGNORE,
  299. PropagateErrorsOnUpdateDownloadPolicy.ALWAYS );
  300. createMockedProxyConnector( ID_MOCKED_PROXIED2, NAME_MOCKED_PROXIED2, PropagateErrorsDownloadPolicy.IGNORE,
  301. PropagateErrorsOnUpdateDownloadPolicy.ALWAYS );
  302. simulateGetIfNewerError( path, expectedFile, createTransferException() );
  303. simulateGetIfNewerError( path, expectedFile, createTransferException() );
  304. confirmNotDownloadedNoError( path );
  305. assertTrue( Files.exists(expectedFile) );
  306. }
  307. @Test
  308. public void testPropagateOnUpdateNotPresentArtifactNotPresent()
  309. throws Exception
  310. {
  311. String path = PATH_IN_BOTH_REMOTES_NOT_LOCAL;
  312. Path expectedFile = setupRepositoriesWithLocalFileNotPresent( path );
  313. createMockedProxyConnector( ID_MOCKED_PROXIED1, NAME_MOCKED_PROXIED1, PropagateErrorsDownloadPolicy.STOP,
  314. PropagateErrorsOnUpdateDownloadPolicy.NOT_PRESENT );
  315. createMockedProxyConnector( ID_MOCKED_PROXIED2, NAME_MOCKED_PROXIED2, PropagateErrorsDownloadPolicy.STOP,
  316. PropagateErrorsOnUpdateDownloadPolicy.NOT_PRESENT );
  317. simulateGetError( path, expectedFile, createTransferException() );
  318. confirmSingleFailure( path, ID_MOCKED_PROXIED1 );
  319. }
  320. @Test
  321. public void testPropagateOnUpdateNotPresentArtifactPresent()
  322. throws Exception
  323. {
  324. String path = PATH_IN_BOTH_REMOTES_AND_LOCAL;
  325. Path expectedFile = setupRepositoriesWithLocalFilePresent( path );
  326. createMockedProxyConnector( ID_MOCKED_PROXIED1, NAME_MOCKED_PROXIED1, PropagateErrorsDownloadPolicy.STOP,
  327. PropagateErrorsOnUpdateDownloadPolicy.NOT_PRESENT );
  328. createMockedProxyConnector( ID_MOCKED_PROXIED2, NAME_MOCKED_PROXIED2, PropagateErrorsDownloadPolicy.STOP,
  329. PropagateErrorsOnUpdateDownloadPolicy.NOT_PRESENT );
  330. simulateGetIfNewerError( path, expectedFile, createTransferException() );
  331. confirmNotDownloadedNoError( path );
  332. assertTrue( Files.exists(expectedFile) );
  333. }
  334. @Test
  335. public void testPropagateOnUpdateNotPresentQueueArtifactNotPresent()
  336. throws Exception
  337. {
  338. String path = PATH_IN_BOTH_REMOTES_NOT_LOCAL;
  339. Path expectedFile = setupRepositoriesWithLocalFileNotPresent( path );
  340. createMockedProxyConnector( ID_MOCKED_PROXIED1, NAME_MOCKED_PROXIED1, PropagateErrorsDownloadPolicy.QUEUE,
  341. PropagateErrorsOnUpdateDownloadPolicy.NOT_PRESENT );
  342. createMockedProxyConnector( ID_MOCKED_PROXIED2, NAME_MOCKED_PROXIED2, PropagateErrorsDownloadPolicy.QUEUE,
  343. PropagateErrorsOnUpdateDownloadPolicy.NOT_PRESENT );
  344. simulateGetError( path, expectedFile, createTransferException() );
  345. simulateGetError( path, expectedFile, createTransferException() );
  346. confirmFailures( path, new String[] { ID_MOCKED_PROXIED1, ID_MOCKED_PROXIED2 } );
  347. }
  348. @Test
  349. public void testPropagateOnUpdateNotPresentQueueArtifactPresent()
  350. throws Exception
  351. {
  352. String path = PATH_IN_BOTH_REMOTES_AND_LOCAL;
  353. Path expectedFile = setupRepositoriesWithLocalFilePresent( path );
  354. createMockedProxyConnector( ID_MOCKED_PROXIED1, NAME_MOCKED_PROXIED1, PropagateErrorsDownloadPolicy.QUEUE,
  355. PropagateErrorsOnUpdateDownloadPolicy.NOT_PRESENT );
  356. createMockedProxyConnector( ID_MOCKED_PROXIED2, NAME_MOCKED_PROXIED2, PropagateErrorsDownloadPolicy.QUEUE,
  357. PropagateErrorsOnUpdateDownloadPolicy.NOT_PRESENT );
  358. simulateGetIfNewerError( path, expectedFile, createTransferException() );
  359. simulateGetIfNewerError( path, expectedFile, createTransferException() );
  360. confirmNotDownloadedNoError( path );
  361. assertTrue( Files.exists(expectedFile));
  362. }
  363. @Test
  364. public void testPropagateOnUpdateNotPresentIgnoreArtifactNotPresent()
  365. throws Exception
  366. {
  367. String path = PATH_IN_BOTH_REMOTES_NOT_LOCAL;
  368. Path expectedFile = setupRepositoriesWithLocalFileNotPresent( path );
  369. createMockedProxyConnector( ID_MOCKED_PROXIED1, NAME_MOCKED_PROXIED1, PropagateErrorsDownloadPolicy.IGNORE,
  370. PropagateErrorsOnUpdateDownloadPolicy.NOT_PRESENT );
  371. createMockedProxyConnector( ID_MOCKED_PROXIED2, NAME_MOCKED_PROXIED2, PropagateErrorsDownloadPolicy.IGNORE,
  372. PropagateErrorsOnUpdateDownloadPolicy.NOT_PRESENT );
  373. simulateGetError( path, expectedFile, createTransferException() );
  374. simulateGetError( path, expectedFile, createTransferException() );
  375. confirmNotDownloadedNoError( path );
  376. }
  377. @Test
  378. public void testPropagateOnUpdateNotPresentIgnoreArtifactPresent()
  379. throws Exception
  380. {
  381. String path = PATH_IN_BOTH_REMOTES_AND_LOCAL;
  382. Path expectedFile = setupRepositoriesWithLocalFilePresent( path );
  383. createMockedProxyConnector( ID_MOCKED_PROXIED1, NAME_MOCKED_PROXIED1, PropagateErrorsDownloadPolicy.IGNORE,
  384. PropagateErrorsOnUpdateDownloadPolicy.NOT_PRESENT );
  385. createMockedProxyConnector( ID_MOCKED_PROXIED2, NAME_MOCKED_PROXIED2, PropagateErrorsDownloadPolicy.IGNORE,
  386. PropagateErrorsOnUpdateDownloadPolicy.NOT_PRESENT );
  387. simulateGetIfNewerError( path, expectedFile, createTransferException() );
  388. simulateGetIfNewerError( path, expectedFile, createTransferException() );
  389. confirmNotDownloadedNoError( path );
  390. assertTrue( Files.exists(expectedFile));
  391. }
  392. // ------------------------------------------
  393. // HELPER METHODS
  394. // ------------------------------------------
  395. private void createMockedProxyConnector( String id, String name, String errorPolicy )
  396. {
  397. saveRemoteRepositoryConfig( id, name, "test://bad.machine.com/repo/", "default" );
  398. saveConnector( ID_DEFAULT_MANAGED, id, ChecksumPolicy.FIX, ReleasesPolicy.ALWAYS, SnapshotsPolicy.ALWAYS,
  399. CachedFailuresPolicy.NO, errorPolicy, false );
  400. }
  401. private void createMockedProxyConnector( String id, String name, String errorPolicy, String errorOnUpdatePolicy )
  402. {
  403. saveRemoteRepositoryConfig( id, name, "test://bad.machine.com/repo/", "default" );
  404. saveConnector( ID_DEFAULT_MANAGED, id, ChecksumPolicy.FIX, ReleasesPolicy.ALWAYS, SnapshotsPolicy.ALWAYS,
  405. CachedFailuresPolicy.NO, errorPolicy, errorOnUpdatePolicy, false );
  406. }
  407. private Path setupRepositoriesWithLocalFileNotPresent( String path )
  408. throws Exception
  409. {
  410. setupTestableManagedRepository( path );
  411. Path file = managedDefaultDir.resolve( path );
  412. assertNotExistsInManagedDefaultRepo( file );
  413. return file;
  414. }
  415. private Path setupRepositoriesWithLocalFilePresent( String path )
  416. throws Exception
  417. {
  418. setupTestableManagedRepository( path );
  419. Path file = managedDefaultDir.resolve( path );
  420. assertTrue( Files.exists(file) );
  421. return file;
  422. }
  423. private void simulateGetError( String path, Path expectedFile, Exception throwable )
  424. throws TransferFailedException, ResourceDoesNotExistException, AuthorizationException
  425. {
  426. wagonMock.get( EasyMock.eq( path ), EasyMock.anyObject( File.class ));
  427. EasyMock.expectLastCall().andThrow(throwable );
  428. }
  429. private void simulateGetIfNewerError( String path, Path expectedFile, TransferFailedException exception )
  430. throws TransferFailedException, ResourceDoesNotExistException, AuthorizationException, IOException
  431. {
  432. wagonMock.getIfNewer( EasyMock.eq( path ), EasyMock.anyObject( File.class ), EasyMock.eq( Files.getLastModifiedTime( expectedFile ).toMillis() ));
  433. EasyMock.expectLastCall().andThrow( exception );
  434. }
  435. private Path createExpectedTempFile( Path expectedFile )
  436. {
  437. return managedDefaultDir.resolve(expectedFile.getFileName().toString() + ".tmp" ).toAbsolutePath();
  438. }
  439. private void confirmSingleFailure( String path, String id )
  440. throws LayoutException
  441. {
  442. confirmFailures( path, new String[]{id} );
  443. }
  444. private void confirmFailures( String path, String[] ids )
  445. throws LayoutException
  446. {
  447. wagonMockControl.replay();
  448. // Attempt the proxy fetch.
  449. Path downloadedFile = null;
  450. try
  451. {
  452. downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository,
  453. managedDefaultRepository.toArtifactReference( path ) );
  454. fail( "Proxy should not have succeeded" );
  455. }
  456. catch ( ProxyDownloadException e )
  457. {
  458. assertEquals( ids.length, e.getFailures().size() );
  459. for ( String id : ids )
  460. {
  461. assertTrue( e.getFailures().keySet().contains( id ) );
  462. }
  463. }
  464. wagonMockControl.verify();
  465. assertNotDownloaded( downloadedFile );
  466. }
  467. private void confirmSuccess( String path, Path expectedFile, String basedir )
  468. throws Exception
  469. {
  470. Path downloadedFile = performDownload( path );
  471. Path proxied1File = Paths.get( basedir, path );
  472. assertFileEquals( expectedFile, downloadedFile, proxied1File );
  473. }
  474. private void confirmNotDownloadedNoError( String path )
  475. throws Exception
  476. {
  477. Path downloadedFile = performDownload( path );
  478. assertNotDownloaded( downloadedFile );
  479. }
  480. private Path performDownload( String path )
  481. throws ProxyDownloadException, LayoutException
  482. {
  483. wagonMockControl.replay();
  484. // Attempt the proxy fetch.
  485. Path downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository,
  486. managedDefaultRepository.toArtifactReference( path ) );
  487. wagonMockControl.verify();
  488. return downloadedFile;
  489. }
  490. private static TransferFailedException createTransferException()
  491. {
  492. return new TransferFailedException( "test download exception" );
  493. }
  494. private static ResourceDoesNotExistException createResourceNotFoundException()
  495. {
  496. return new ResourceDoesNotExistException( "test download not found" );
  497. }
  498. }