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

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