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.

ArchivaConfigurationTest.java 32KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742
  1. package org.apache.archiva.configuration.provider;
  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. * Unless required by applicable law or agreed to in writing,
  13. * software distributed under the License is distributed on an
  14. * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  15. * KIND, either express or implied. See the License for the
  16. * specific language governing permissions and limitations
  17. * under the License.
  18. */
  19. import org.apache.archiva.components.registry.RegistryException;
  20. import org.apache.archiva.configuration.model.Configuration;
  21. import org.apache.archiva.configuration.model.LegacyArtifactPath;
  22. import org.apache.archiva.configuration.model.ManagedRepositoryConfiguration;
  23. import org.apache.archiva.configuration.model.NetworkProxyConfiguration;
  24. import org.apache.archiva.configuration.model.ProxyConnectorConfiguration;
  25. import org.apache.archiva.configuration.model.RemoteRepositoryConfiguration;
  26. import org.apache.archiva.configuration.model.RepositoryGroupConfiguration;
  27. import org.apache.archiva.configuration.model.RepositoryScanningConfiguration;
  28. import org.apache.archiva.configuration.model.UserInterfaceOptions;
  29. import org.apache.archiva.configuration.model.WebappConfiguration;
  30. import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner;
  31. import org.apache.commons.io.FileUtils;
  32. import org.apache.commons.lang3.StringUtils;
  33. import org.junit.Test;
  34. import org.junit.runner.RunWith;
  35. import org.slf4j.Logger;
  36. import org.slf4j.LoggerFactory;
  37. import org.springframework.context.ApplicationContext;
  38. import org.springframework.test.annotation.DirtiesContext;
  39. import org.springframework.test.annotation.DirtiesContext.ClassMode;
  40. import org.springframework.test.context.ContextConfiguration;
  41. import javax.inject.Inject;
  42. import java.nio.charset.Charset;
  43. import java.nio.file.Files;
  44. import java.nio.file.Path;
  45. import java.nio.file.Paths;
  46. import java.util.List;
  47. import static org.junit.Assert.*;
  48. import static org.mockito.Mockito.mock;
  49. /**
  50. * Test the configuration store.
  51. */
  52. @RunWith(ArchivaSpringJUnit4ClassRunner.class)
  53. @ContextConfiguration(locations = { "classpath*:/META-INF/spring-context.xml", "classpath:/spring-context.xml" })
  54. @DirtiesContext(classMode = ClassMode.AFTER_EACH_TEST_METHOD)
  55. public class ArchivaConfigurationTest
  56. {
  57. private Logger log = LoggerFactory.getLogger( getClass() );
  58. @Inject
  59. protected ApplicationContext applicationContext;
  60. @Inject
  61. FileTypes filetypes;
  62. public static Path getTestFile( String path )
  63. {
  64. return Paths.get( org.apache.archiva.common.utils.FileUtils.getBasedir(), path );
  65. }
  66. @SuppressWarnings( "unchecked" )
  67. protected <T> T lookup( Class<T> clazz, String hint )
  68. {
  69. return (T) applicationContext.getBean( "archivaConfiguration#" + hint, ArchivaConfiguration.class );
  70. }
  71. @Test
  72. public void testGetConfigurationFromDefaults()
  73. throws Exception
  74. {
  75. ArchivaConfiguration archivaConfiguration = lookup( ArchivaConfiguration.class, "test-defaults" );
  76. Configuration configuration = archivaConfiguration.getConfiguration();
  77. assertConfiguration( configuration, 2, 1, 1 );
  78. assertEquals( "check network proxies", 0, configuration.getNetworkProxies().size() );
  79. ManagedRepositoryConfiguration repository = configuration.getManagedRepositories().get( 0 );
  80. assertEquals( "check managed repositories", "${appserver.base}/repositories/internal",
  81. repository.getLocation() );
  82. assertEquals( "check managed repositories", "Archiva Managed Internal Repository", repository.getName() );
  83. assertEquals( "check managed repositories", "internal", repository.getId() );
  84. assertEquals( "check managed repositories", "default", repository.getLayout() );
  85. assertTrue( "check managed repositories", repository.isScanned() );
  86. }
  87. @Test
  88. public void testGetConfigurationFromRegistryWithASingleNamedConfigurationResource()
  89. throws Exception
  90. {
  91. ArchivaConfiguration archivaConfiguration = lookup( ArchivaConfiguration.class, "test-configuration" );
  92. Configuration configuration = archivaConfiguration.getConfiguration();
  93. assertConfiguration( configuration, 2, 2, 2 );
  94. assertEquals( "check network proxies", 1, configuration.getNetworkProxies().size() );
  95. ManagedRepositoryConfiguration repository = configuration.getManagedRepositories().get( 0 );
  96. assertEquals( "check managed repositories", "${appserver.base}/repositories/internal",
  97. repository.getLocation() );
  98. assertEquals( "check managed repositories", "Archiva Managed Internal Repository", repository.getName() );
  99. assertEquals( "check managed repositories", "internal", repository.getId() );
  100. assertEquals( "check managed repositories", "default", repository.getLayout() );
  101. assertTrue( "check managed repositories", repository.isScanned() );
  102. }
  103. /**
  104. * Ensures that the provided configuration matches the details present in the archiva-default.xml file.
  105. */
  106. private void assertConfiguration( Configuration configuration, int managedExpected, int remoteExpected,
  107. int proxyConnectorExpected )
  108. throws Exception
  109. {
  110. assertEquals( "check managed repositories: " + configuration.getManagedRepositories(), managedExpected,
  111. configuration.getManagedRepositories().size() );
  112. assertEquals( "check remote repositories: " + configuration.getRemoteRepositories(), remoteExpected,
  113. configuration.getRemoteRepositories().size() );
  114. assertEquals( "check proxy connectors:" + configuration.getProxyConnectors(), proxyConnectorExpected,
  115. configuration.getProxyConnectors().size() );
  116. RepositoryScanningConfiguration repoScanning = configuration.getRepositoryScanning();
  117. assertNotNull( "check repository scanning", repoScanning );
  118. assertEquals( "check file types", 4, repoScanning.getFileTypes().size() );
  119. assertEquals( "check known consumers", 9, repoScanning.getKnownContentConsumers().size() );
  120. assertEquals( "check invalid consumers", 1, repoScanning.getInvalidContentConsumers().size() );
  121. List<String> patterns = filetypes.getFileTypePatterns( "artifacts" );
  122. assertNotNull( "check 'artifacts' file type", patterns );
  123. assertEquals( "check 'artifacts' patterns", 13, patterns.size() );
  124. WebappConfiguration webapp = configuration.getWebapp();
  125. assertNotNull( "check webapp", webapp );
  126. UserInterfaceOptions ui = webapp.getUi();
  127. assertNotNull( "check webapp ui", ui );
  128. assertTrue( "check showFindArtifacts", ui.isShowFindArtifacts() );
  129. assertTrue( "check appletFindEnabled", ui.isAppletFindEnabled() );
  130. }
  131. @Test
  132. public void testGetConfigurationFromRegistryWithTwoConfigurationResources()
  133. throws Exception
  134. {
  135. ArchivaConfiguration archivaConfiguration = lookup( ArchivaConfiguration.class, "test-configuration-both" );
  136. Configuration configuration = archivaConfiguration.getConfiguration();
  137. // from base
  138. assertEquals( "check repositories", 2, configuration.getManagedRepositories().size() );
  139. assertEquals( "check repositories", 2, configuration.getRemoteRepositories().size() );
  140. // from user
  141. assertEquals( "check proxy connectors", 2, configuration.getProxyConnectors().size() );
  142. WebappConfiguration webapp = configuration.getWebapp();
  143. assertNotNull( "check webapp", webapp );
  144. UserInterfaceOptions ui = webapp.getUi();
  145. assertNotNull( "check webapp ui", ui );
  146. // from base
  147. assertFalse( "check showFindArtifacts", ui.isShowFindArtifacts() );
  148. // from user
  149. assertFalse( "check appletFindEnabled", ui.isAppletFindEnabled() );
  150. }
  151. @Test
  152. public void testGetConfigurationSystemOverride()
  153. throws Exception
  154. {
  155. System.setProperty( "org.apache.archiva.webapp.ui.appletFindEnabled", "false" );
  156. ArchivaConfiguration archivaConfiguration = lookup( ArchivaConfiguration.class, "test-configuration" );
  157. archivaConfiguration.reload();
  158. try
  159. {
  160. Configuration configuration = archivaConfiguration.getConfiguration();
  161. assertFalse( "check boolean", configuration.getWebapp().getUi().isAppletFindEnabled() );
  162. }
  163. finally
  164. {
  165. System.getProperties().remove( "org.apache.archiva.webapp.ui.appletFindEnabled" );
  166. archivaConfiguration.reload();
  167. Configuration configuration = archivaConfiguration.getConfiguration();
  168. assertTrue( "check boolean", configuration.getWebapp().getUi().isAppletFindEnabled() );
  169. }
  170. }
  171. @Test
  172. public void testStoreConfiguration()
  173. throws Exception
  174. {
  175. Path file = getTestFile( "target/test/test-file.xml" );
  176. Files.deleteIfExists(file);
  177. assertFalse( Files.exists(file) );
  178. // TODO: remove with commons-configuration 1.4
  179. //file.getParentFile().mkdirs();
  180. //FileUtils.writeStringToFile( file, "<configuration/>", null );
  181. DefaultArchivaConfiguration archivaConfiguration =
  182. (DefaultArchivaConfiguration) lookup( ArchivaConfiguration.class, "test-save" );
  183. archivaConfiguration.reload();
  184. Configuration configuration = new Configuration();
  185. configuration.setVersion( "1" );
  186. configuration.setWebapp( new WebappConfiguration() );
  187. configuration.getWebapp().setUi( new UserInterfaceOptions() );
  188. configuration.getWebapp().getUi().setAppletFindEnabled( false );
  189. // add a change listener
  190. ConfigurationListener listener = mock( ConfigurationListener.class );
  191. archivaConfiguration.addListener( listener );
  192. listener.configurationEvent( new ConfigurationEvent( ConfigurationEvent.SAVED ) );
  193. archivaConfiguration.save( configuration );
  194. assertTrue( "Check file exists", Files.exists(file) );
  195. // check it
  196. configuration = archivaConfiguration.getConfiguration();
  197. assertFalse( "check value", configuration.getWebapp().getUi().isAppletFindEnabled() );
  198. // read it back
  199. archivaConfiguration = (DefaultArchivaConfiguration) lookup( ArchivaConfiguration.class, "test-read-saved" );
  200. archivaConfiguration.reload();
  201. configuration = archivaConfiguration.getConfiguration();
  202. assertFalse( "check value", configuration.getWebapp().getUi().isAppletFindEnabled() );
  203. }
  204. private static ConfigurationListener createConfigurationListenerMockControl()
  205. {
  206. return mock( ConfigurationListener.class );// MockControl.createControl( ConfigurationListener.class );
  207. }
  208. @Test
  209. public void testStoreConfigurationUser()
  210. throws Exception
  211. {
  212. Path baseFile = getTestFile( "target/test/test-file.xml" );
  213. Files.deleteIfExists( baseFile );
  214. assertFalse( Files.exists(baseFile) );
  215. Path userFile = getTestFile( "target/test/test-file-user.xml" );
  216. Files.deleteIfExists( userFile );
  217. assertFalse( Files.exists(userFile) );
  218. Files.createDirectories(userFile.getParent());
  219. FileUtils.writeStringToFile( userFile.toFile(), "<configuration/>", Charset.forName( "UTF-8" ) );
  220. ArchivaConfiguration archivaConfiguration = lookup( ArchivaConfiguration.class, "test-save-user" );
  221. Configuration configuration = new Configuration();
  222. configuration.setWebapp( new WebappConfiguration() );
  223. configuration.getWebapp().setUi( new UserInterfaceOptions() );
  224. configuration.getWebapp().getUi().setAppletFindEnabled( false );
  225. archivaConfiguration.save( configuration );
  226. assertTrue( "Check file exists", Files.exists(userFile) );
  227. assertFalse( "Check file not created", Files.exists(baseFile) );
  228. // check it
  229. configuration = archivaConfiguration.getConfiguration();
  230. assertFalse( "check value", configuration.getWebapp().getUi().isAppletFindEnabled() );
  231. }
  232. @Test
  233. public void testStoreConfigurationLoadedFromDefaults()
  234. throws Exception
  235. {
  236. Path baseFile = getTestFile( "target/test/test-file.xml" );
  237. Files.delete(baseFile);
  238. assertFalse( Files.exists(baseFile) );
  239. Path userFile = getTestFile( "target/test/test-file-user.xml" );
  240. Files.deleteIfExists(userFile);
  241. assertFalse( Files.exists(userFile) );
  242. ArchivaConfiguration archivaConfiguration = lookup( ArchivaConfiguration.class, "test-save-user-defaults" );
  243. archivaConfiguration.reload();
  244. Configuration configuration = new Configuration();
  245. configuration.setWebapp( new WebappConfiguration() );
  246. configuration.getWebapp().setUi( new UserInterfaceOptions() );
  247. configuration.getWebapp().getUi().setAppletFindEnabled( false );
  248. // add a change listener
  249. ConfigurationListener listener = createConfigurationListenerMockControl();
  250. archivaConfiguration.addListener( listener );
  251. listener.configurationEvent( new ConfigurationEvent( ConfigurationEvent.SAVED ) );
  252. archivaConfiguration.save( configuration );
  253. assertTrue( "Check file exists", Files.exists(userFile) );
  254. assertFalse( "Check file not created", Files.exists(baseFile) );
  255. // check it
  256. configuration = archivaConfiguration.getConfiguration();
  257. assertFalse( "check value", configuration.getWebapp().getUi().isAppletFindEnabled() );
  258. }
  259. @Test
  260. public void testDefaultUserConfigFilename()
  261. throws Exception
  262. {
  263. DefaultArchivaConfiguration archivaConfiguration =
  264. (DefaultArchivaConfiguration) lookup( ArchivaConfiguration.class, "default" );
  265. String expectedFile = System.getProperty( "user.home" ) + "/.m2/archiva.xml";
  266. String systemFile = System.getProperty(ArchivaConfiguration.USER_CONFIG_PROPERTY);
  267. if (StringUtils.isNotEmpty( systemFile )) {
  268. expectedFile = systemFile;
  269. } else
  270. {
  271. String envFile = System.getenv( ArchivaConfiguration.USER_CONFIG_ENVVAR );
  272. if ( StringUtils.isNotEmpty( envFile ) )
  273. expectedFile = envFile;
  274. }
  275. archivaConfiguration.reload();
  276. assertEquals( expectedFile,
  277. archivaConfiguration.getUserConfigFilename() );
  278. assertEquals( System.getProperty( "appserver.base", "${appserver.base}" ) + "/conf/archiva.xml",
  279. archivaConfiguration.getAltConfigFilename() );
  280. }
  281. @Test
  282. public void testStoreConfigurationFallback()
  283. throws Exception
  284. {
  285. Path baseFile = getTestFile( "target/test/test-file.xml" );
  286. Files.deleteIfExists(baseFile);
  287. assertFalse( Files.exists(baseFile) );
  288. Path userFile = getTestFile( "target/test/test-file-user.xml" );
  289. Files.deleteIfExists(userFile);
  290. assertFalse( Files.exists(userFile) );
  291. Files.createDirectories( baseFile.getParent());
  292. FileUtils.writeStringToFile( baseFile.toFile(), "<configuration/>", Charset.forName( "UTF-8" ) );
  293. ArchivaConfiguration archivaConfiguration =
  294. (ArchivaConfiguration) lookup( ArchivaConfiguration.class, "test-save-user-fallback" );
  295. archivaConfiguration.reload();
  296. Configuration configuration = new Configuration();
  297. configuration.setWebapp( new WebappConfiguration() );
  298. configuration.getWebapp().setUi( new UserInterfaceOptions() );
  299. configuration.getWebapp().getUi().setAppletFindEnabled( false );
  300. archivaConfiguration.save( configuration );
  301. assertTrue( "Check file exists", Files.exists(baseFile) );
  302. assertFalse( "Check file not created", Files.exists(userFile) );
  303. // check it
  304. configuration = archivaConfiguration.getConfiguration();
  305. assertFalse( "check value", configuration.getWebapp().getUi().isAppletFindEnabled() );
  306. }
  307. @Test
  308. public void testStoreConfigurationFailsWhenReadFromBothLocationsNoLists()
  309. throws Exception
  310. {
  311. Path baseFile = getTestFile( "target/test/test-file.xml" );
  312. Files.deleteIfExists(baseFile);
  313. assertFalse( Files.exists(baseFile) );
  314. Path userFile = getTestFile( "target/test/test-file-user.xml" );
  315. Files.deleteIfExists(userFile);
  316. assertFalse( Files.exists(userFile) );
  317. Files.createDirectories( baseFile.getParent() );
  318. FileUtils.writeStringToFile( baseFile.toFile(), "<configuration/>", Charset.forName( "UTF-8" ) );
  319. Files.createDirectories( userFile.getParent());
  320. FileUtils.writeStringToFile( userFile.toFile(), "<configuration/>", Charset.forName( "UTF-8" ) );
  321. ArchivaConfiguration archivaConfiguration = lookup( ArchivaConfiguration.class, "test-save-user" );
  322. archivaConfiguration.reload();
  323. Configuration configuration = archivaConfiguration.getConfiguration();
  324. assertTrue( "check value", configuration.getWebapp().getUi().isAppletFindEnabled() );
  325. configuration.getWebapp().getUi().setAppletFindEnabled( false );
  326. archivaConfiguration.save( configuration );
  327. assertTrue( "Check file exists", Files.exists(baseFile) );
  328. assertEquals( "Check base file is unchanged", "<configuration/>",
  329. FileUtils.readFileToString( baseFile.toFile(), Charset.forName( "UTF-8" ) ) );
  330. assertTrue( "Check file exists", Files.exists(userFile) );
  331. assertFalse( "Check base file is changed",
  332. "<configuration/>".equals( FileUtils.readFileToString( userFile.toFile(), Charset.forName( "UTF-8" ) ) ) );
  333. // check it
  334. configuration = archivaConfiguration.getConfiguration();
  335. assertFalse( "check value", configuration.getWebapp().getUi().isAppletFindEnabled() );
  336. }
  337. @Test
  338. public void testStoreConfigurationFailsWhenReadFromBothLocationsUserHasLists()
  339. throws Exception
  340. {
  341. Path baseFile = getTestFile( "target/test/test-file.xml" );
  342. Files.deleteIfExists(baseFile);
  343. assertFalse( Files.exists(baseFile) );
  344. Path userFile = getTestFile( "target/test/test-file-user.xml" );
  345. Files.deleteIfExists(userFile);
  346. assertFalse( Files.exists(userFile) );
  347. Files.createDirectories( userFile.getParent() );
  348. FileUtils.copyFile( getTestFile( "src/test/conf/conf-user.xml" ).toFile(), userFile.toFile() );
  349. Files.createDirectories(baseFile.getParent());
  350. FileUtils.writeStringToFile( baseFile.toFile(), "<configuration/>", Charset.forName( "UTF-8" ) );
  351. ArchivaConfiguration archivaConfiguration = lookup( ArchivaConfiguration.class, "test-save-user" );
  352. archivaConfiguration.reload();
  353. Configuration configuration = archivaConfiguration.getConfiguration();
  354. assertTrue( "check value", configuration.getWebapp().getUi().isShowFindArtifacts() );
  355. configuration.getWebapp().getUi().setShowFindArtifacts( false );
  356. archivaConfiguration.save( configuration );
  357. assertTrue( "Check file exists", Files.exists(baseFile) );
  358. assertEquals( "Check base file is unchanged", "<configuration/>",
  359. FileUtils.readFileToString( baseFile.toFile(), Charset.forName( "UTF-8" ) ) );
  360. assertTrue( "Check file exists", Files.exists(userFile) );
  361. assertFalse( "Check base file is changed",
  362. "<configuration/>".equals( FileUtils.readFileToString( userFile.toFile(), Charset.forName( "UTF-8" ) ) ) );
  363. // check it
  364. configuration = archivaConfiguration.getConfiguration();
  365. assertFalse( "check value", configuration.getWebapp().getUi().isShowFindArtifacts() );
  366. }
  367. @Test
  368. public void testStoreConfigurationFailsWhenReadFromBothLocationsAppserverHasLists()
  369. throws Exception
  370. {
  371. Path baseFile = getTestFile( "target/test/test-file.xml" );
  372. Files.deleteIfExists(baseFile);
  373. assertFalse( Files.exists(baseFile) );
  374. Path userFile = getTestFile( "target/test/test-file-user.xml" );
  375. Files.deleteIfExists(userFile);
  376. assertFalse( Files.exists(userFile) );
  377. Files.createDirectories(baseFile.getParent());
  378. FileUtils.copyFile( getTestFile( "src/test/conf/conf-base.xml" ).toFile(), baseFile.toFile() );
  379. Files.createDirectories(userFile.getParent());
  380. FileUtils.writeStringToFile( userFile.toFile(), "<configuration/>", Charset.forName( "UTF-8" ) );
  381. ArchivaConfiguration archivaConfiguration = lookup( ArchivaConfiguration.class, "test-save-user" );
  382. archivaConfiguration.reload();
  383. Configuration configuration = archivaConfiguration.getConfiguration();
  384. assertTrue( "check value", configuration.getWebapp().getUi().isAppletFindEnabled() );
  385. configuration.getWebapp().getUi().setAppletFindEnabled( false );
  386. try
  387. {
  388. archivaConfiguration.save( configuration );
  389. fail( "Configuration saving should not succeed if it was loaded from two locations" );
  390. }
  391. catch ( IndeterminateConfigurationException e )
  392. {
  393. // check it was reverted
  394. configuration = archivaConfiguration.getConfiguration();
  395. assertTrue( "check value", configuration.getWebapp().getUi().isAppletFindEnabled() );
  396. }
  397. }
  398. @Test
  399. public void testLoadConfigurationFromInvalidBothLocationsOnDisk()
  400. throws Exception
  401. {
  402. String propFile = System.getProperty( ArchivaConfiguration.USER_CONFIG_PROPERTY );
  403. System.setProperty( ArchivaConfiguration.USER_CONFIG_PROPERTY, "/../../..//*intentionally:invalid*/.m2/archiva-user.xml" );
  404. ArchivaConfiguration archivaConfiguration =
  405. lookup( ArchivaConfiguration.class, "test-not-allowed-to-write-to-both" );
  406. Configuration config = archivaConfiguration.getConfiguration();
  407. try
  408. {
  409. archivaConfiguration.save( config );
  410. fail( "Should have thrown a RegistryException because the configuration can't be saved." );
  411. }
  412. catch ( RegistryException e )
  413. {
  414. /* expected exception */
  415. }
  416. if (propFile!=null)
  417. {
  418. System.setProperty( ArchivaConfiguration.USER_CONFIG_PROPERTY, propFile );
  419. }
  420. }
  421. @Test
  422. public void testLoadConfigurationFromInvalidUserLocationOnDisk()
  423. throws Exception
  424. {
  425. Path testConfDir = getTestFile( "target/test-appserver-base/conf/" );
  426. Files.createDirectories( testConfDir );
  427. ArchivaConfiguration archivaConfiguration =
  428. lookup( ArchivaConfiguration.class, "test-not-allowed-to-write-to-user" );
  429. Configuration config = archivaConfiguration.getConfiguration();
  430. archivaConfiguration.save( config );
  431. // No Exception == test passes.
  432. // Expected Path is: Should not have thrown an exception.
  433. }
  434. @Test
  435. public void testConfigurationUpgradeFrom13()
  436. throws Exception
  437. {
  438. ArchivaConfiguration archivaConfiguration = lookup( ArchivaConfiguration.class, "test-upgrade-1.3" );
  439. // we just use the defaults when upgrading from 1.3 at this point.
  440. Configuration configuration = archivaConfiguration.getConfiguration();
  441. assertConfiguration( configuration, 2, 2, 2 );
  442. assertEquals( "check network proxies", 0, configuration.getNetworkProxies().size() );
  443. ManagedRepositoryConfiguration repository = configuration.getManagedRepositories().get( 0 );
  444. assertEquals( "check managed repositories", "${appserver.base}/data/repositories/internal",
  445. repository.getLocation() );
  446. assertEquals( "check managed repositories", "Archiva Managed Internal Repository", repository.getName() );
  447. assertEquals( "check managed repositories", "internal", repository.getId() );
  448. assertEquals( "check managed repositories", "default", repository.getLayout() );
  449. assertTrue( "check managed repositories", repository.isScanned() );
  450. log.info( "knowContentConsumers {}", configuration.getRepositoryScanning().getKnownContentConsumers() );
  451. assertFalse(
  452. configuration.getRepositoryScanning().getKnownContentConsumers().contains( "update-db-artifact" ) );
  453. assertFalse( configuration.getRepositoryScanning().getKnownContentConsumers().contains(
  454. "update-db-repository-metadata" ) );
  455. assertTrue(
  456. configuration.getRepositoryScanning().getKnownContentConsumers().contains( "create-archiva-metadata" ) );
  457. assertTrue(
  458. configuration.getRepositoryScanning().getKnownContentConsumers().contains( "duplicate-artifacts" ) );
  459. }
  460. @Test
  461. public void testCronExpressionsWithComma()
  462. throws Exception
  463. {
  464. Path baseFile = getTestFile( "target/test/test-file.xml" );
  465. Files.deleteIfExists(baseFile);
  466. assertFalse( Files.exists(baseFile) );
  467. Path userFile = getTestFile( "target/test/test-file-user.xml" );
  468. Files.deleteIfExists(userFile);
  469. assertFalse( Files.exists(userFile) );
  470. Files.createDirectories(baseFile.getParent());
  471. FileUtils.copyFile( getTestFile( "src/test/conf/escape-cron-expressions.xml" ).toFile(), baseFile.toFile() );
  472. Files.createDirectories(userFile.getParent());
  473. FileUtils.writeStringToFile( userFile.toFile(), "<configuration/>", Charset.defaultCharset() );
  474. final ArchivaConfiguration archivaConfiguration = lookup( ArchivaConfiguration.class, "test-cron-expressions" );
  475. archivaConfiguration.reload();
  476. Configuration configuration = archivaConfiguration.getConfiguration();
  477. ManagedRepositoryConfiguration repository = configuration.getManagedRepositories().get( 0 );
  478. assertEquals( "check cron expression", "0 0,30 * * * ?", repository.getRefreshCronExpression().trim() );
  479. // add a test listener to confirm it doesn't see the escaped format. We don't need to test the number of calls,
  480. // etc. as it's done in other tests
  481. archivaConfiguration.addListener( new ConfigurationListener()
  482. {
  483. @Override
  484. public void configurationEvent( ConfigurationEvent event )
  485. {
  486. assertEquals( ConfigurationEvent.SAVED, event.getType() );
  487. }
  488. } );
  489. archivaConfiguration.save( configuration );
  490. configuration = archivaConfiguration.getConfiguration();
  491. // test for the escape character '\' showing up on repositories.jsp
  492. repository.setRefreshCronExpression( "0 0,20 0 * * ?" );
  493. archivaConfiguration.save( configuration );
  494. repository = archivaConfiguration.getConfiguration().findManagedRepositoryById( "snapshots" );
  495. assertEquals( "check cron expression", "0 0,20 0 * * ?", repository.getRefreshCronExpression() );
  496. }
  497. @Test
  498. public void testRemoveLastElements()
  499. throws Exception
  500. {
  501. Path baseFile = getTestFile( "target/test/test-file.xml" );
  502. Files.deleteIfExists(baseFile);
  503. assertFalse( Files.exists(baseFile) );
  504. Path userFile = getTestFile( "target/test/test-file-user.xml" );
  505. Files.deleteIfExists(userFile);
  506. assertFalse( Files.exists(userFile) );
  507. Files.createDirectories( baseFile.getParent() );
  508. FileUtils.copyFile( getTestFile( "src/test/conf/conf-single-list-elements.xml" ).toFile(), baseFile.toFile() );
  509. Files.createDirectories( userFile.getParent());
  510. FileUtils.writeStringToFile( userFile.toFile(), "<configuration/>", Charset.forName( "UTF-8" ) );
  511. ArchivaConfiguration archivaConfiguration = lookup( ArchivaConfiguration.class, "test-remove-central" );
  512. archivaConfiguration.reload();
  513. Configuration configuration = archivaConfiguration.getConfiguration();
  514. RepositoryGroupConfiguration repositoryGroup = configuration.getRepositoryGroups().get( 0 );
  515. assertNotNull( repositoryGroup );
  516. configuration.removeRepositoryGroup( repositoryGroup );
  517. assertTrue( configuration.getRepositoryGroups().isEmpty() );
  518. RemoteRepositoryConfiguration repository = configuration.getRemoteRepositoriesAsMap().get( "central" );
  519. assertNotNull( repository );
  520. configuration.removeRemoteRepository( repository );
  521. assertTrue( configuration.getRemoteRepositories().isEmpty() );
  522. ManagedRepositoryConfiguration managedRepository =
  523. configuration.getManagedRepositoriesAsMap().get( "snapshots" );
  524. assertNotNull( managedRepository );
  525. configuration.removeManagedRepository( managedRepository );
  526. assertTrue( configuration.getManagedRepositories().isEmpty() );
  527. ProxyConnectorConfiguration proxyConnector = configuration.getProxyConnectors().get( 0 );
  528. assertNotNull( proxyConnector );
  529. configuration.removeProxyConnector( proxyConnector );
  530. assertTrue( configuration.getProxyConnectors().isEmpty() );
  531. NetworkProxyConfiguration networkProxy = configuration.getNetworkProxiesAsMap().get( "proxy" );
  532. assertNotNull( networkProxy );
  533. configuration.removeNetworkProxy( networkProxy );
  534. assertTrue( configuration.getNetworkProxies().isEmpty() );
  535. LegacyArtifactPath path = configuration.getLegacyArtifactPaths().get( 0 );
  536. assertNotNull( path );
  537. configuration.removeLegacyArtifactPath( path );
  538. assertTrue( configuration.getLegacyArtifactPaths().isEmpty() );
  539. RepositoryScanningConfiguration scanning = configuration.getRepositoryScanning();
  540. String consumer = scanning.getKnownContentConsumers().get( 0 );
  541. assertNotNull( consumer );
  542. scanning.removeKnownContentConsumer( consumer );
  543. // default values
  544. assertFalse( scanning.getKnownContentConsumers().isEmpty() );
  545. consumer = scanning.getInvalidContentConsumers().get( 0 );
  546. assertNotNull( consumer );
  547. scanning.removeInvalidContentConsumer( consumer );
  548. assertTrue( scanning.getInvalidContentConsumers().isEmpty() );
  549. archivaConfiguration.save( configuration );
  550. archivaConfiguration = lookup( ArchivaConfiguration.class, "test-read-saved" );
  551. configuration = archivaConfiguration.getConfiguration();
  552. assertNull( configuration.getRemoteRepositoriesAsMap().get( "central" ) );
  553. assertTrue( configuration.getRepositoryGroups().isEmpty() );
  554. assertNull( configuration.getManagedRepositoriesAsMap().get( "snapshots" ) );
  555. assertTrue( configuration.getProxyConnectors().isEmpty() );
  556. assertNull( configuration.getNetworkProxiesAsMap().get( "proxy" ) );
  557. assertTrue( configuration.getLegacyArtifactPaths().isEmpty() );
  558. scanning = configuration.getRepositoryScanning();
  559. assertFalse( scanning.getKnownContentConsumers().isEmpty() );
  560. assertTrue( scanning.getInvalidContentConsumers().isEmpty() );
  561. }
  562. /**
  563. * [MRM-582] Remote Repositories with empty <username> and <password> fields shouldn't be created in configuration.
  564. */
  565. @Test
  566. public void testGetConfigurationFixEmptyRemoteRepoUsernamePassword()
  567. throws Exception
  568. {
  569. ArchivaConfiguration archivaConfiguration = lookup( ArchivaConfiguration.class, "test-configuration" );
  570. Configuration configuration = archivaConfiguration.getConfiguration();
  571. assertConfiguration( configuration, 2, 2, 2 );
  572. assertEquals( "check remote repositories", 2, configuration.getRemoteRepositories().size() );
  573. RemoteRepositoryConfiguration repository =
  574. configuration.getRemoteRepositoriesAsMap().get( "maven2-repository.dev.java.net" );
  575. assertEquals( "remote repository.url", "https://maven2-repository.dev.java.net/nonav/repository",
  576. repository.getUrl() );
  577. assertEquals( "remote repository.name", "Java.net Repository for Maven 2", repository.getName() );
  578. assertEquals( "remote repository.id", "maven2-repository.dev.java.net", repository.getId() );
  579. assertEquals( "remote repository.layout", "default", repository.getLayout() );
  580. assertNull( "remote repository.username == null", repository.getUsername() );
  581. assertNull( "remote repository.password == null", repository.getPassword() );
  582. }
  583. }