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

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