package org.apache.archiva.configuration;
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import org.apache.archiva.common.utils.FileUtil;
import org.apache.archiva.redback.components.registry.RegistryException;
import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner;
import org.apache.commons.io.FileUtils;
import org.custommonkey.xmlunit.XMLAssert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.test.annotation.DirtiesContext;
import org.springframework.test.annotation.DirtiesContext.ClassMode;
import org.springframework.test.context.ContextConfiguration;
import javax.inject.Inject;
import java.io.File;
import java.nio.charset.Charset;
import java.util.List;
import java.util.Map;
import static org.easymock.EasyMock.*;
import static org.junit.Assert.*;
/**
* Test the configuration store.
*/
@RunWith(ArchivaSpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath*:/META-INF/spring-context.xml", "classpath:/spring-context.xml" })
@DirtiesContext(classMode = ClassMode.AFTER_EACH_TEST_METHOD)
public class ArchivaConfigurationTest
{
private Logger log = LoggerFactory.getLogger( getClass() );
@Inject
protected ApplicationContext applicationContext;
@Inject
FileTypes filetypes;
public static File getTestFile( String path )
{
return new File( FileUtil.getBasedir(), path );
}
protected <T> T lookup( Class<T> clazz, String hint )
{
return (T) applicationContext.getBean( "archivaConfiguration#" + hint, ArchivaConfiguration.class );
}
@Test
public void testGetConfigurationFromDefaults()
throws Exception
{
ArchivaConfiguration archivaConfiguration = lookup( ArchivaConfiguration.class, "test-defaults" );
Configuration configuration = archivaConfiguration.getConfiguration();
assertConfiguration( configuration, 2, 1, 1 );
assertEquals( "check network proxies", 0, configuration.getNetworkProxies().size() );
ManagedRepositoryConfiguration repository = configuration.getManagedRepositories().get( 0 );
assertEquals( "check managed repositories", "${appserver.base}/repositories/internal",
repository.getLocation() );
assertEquals( "check managed repositories", "Archiva Managed Internal Repository", repository.getName() );
assertEquals( "check managed repositories", "internal", repository.getId() );
assertEquals( "check managed repositories", "default", repository.getLayout() );
assertTrue( "check managed repositories", repository.isScanned() );
}
@Test
public void testGetConfigurationFromRegistryWithASingleNamedConfigurationResource()
throws Exception
{
ArchivaConfiguration archivaConfiguration = lookup( ArchivaConfiguration.class, "test-configuration" );
Configuration configuration = archivaConfiguration.getConfiguration();
assertConfiguration( configuration, 2, 2, 2 );
assertEquals( "check network proxies", 1, configuration.getNetworkProxies().size() );
ManagedRepositoryConfiguration repository = configuration.getManagedRepositories().get( 0 );
assertEquals( "check managed repositories", "${appserver.base}/repositories/internal",
repository.getLocation() );
assertEquals( "check managed repositories", "Archiva Managed Internal Repository", repository.getName() );
assertEquals( "check managed repositories", "internal", repository.getId() );
assertEquals( "check managed repositories", "default", repository.getLayout() );
assertTrue( "check managed repositories", repository.isScanned() );
}
/**
* Ensures that the provided configuration matches the details present in the archiva-default.xml file.
*/
private void assertConfiguration( Configuration configuration, int managedExpected, int remoteExpected,
int proxyConnectorExpected )
throws Exception
{
assertEquals( "check managed repositories: " + configuration.getManagedRepositories(), managedExpected,
configuration.getManagedRepositories().size() );
assertEquals( "check remote repositories: " + configuration.getRemoteRepositories(), remoteExpected,
configuration.getRemoteRepositories().size() );
assertEquals( "check proxy connectors:" + configuration.getProxyConnectors(), proxyConnectorExpected,
configuration.getProxyConnectors().size() );
RepositoryScanningConfiguration repoScanning = configuration.getRepositoryScanning();
assertNotNull( "check repository scanning", repoScanning );
assertEquals( "check file types", 4, repoScanning.getFileTypes().size() );
assertEquals( "check known consumers", 9, repoScanning.getKnownContentConsumers().size() );
assertEquals( "check invalid consumers", 1, repoScanning.getInvalidContentConsumers().size() );
List<String> patterns = filetypes.getFileTypePatterns( "artifacts" );
assertNotNull( "check 'artifacts' file type", patterns );
assertEquals( "check 'artifacts' patterns", 13, patterns.size() );
WebappConfiguration webapp = configuration.getWebapp();
assertNotNull( "check webapp", webapp );
UserInterfaceOptions ui = webapp.getUi();
assertNotNull( "check webapp ui", ui );
assertTrue( "check showFindArtifacts", ui.isShowFindArtifacts() );
assertTrue( "check appletFindEnabled", ui.isAppletFindEnabled() );
}
@Test
public void testGetConfigurationFromRegistryWithTwoConfigurationResources()
throws Exception
{
ArchivaConfiguration archivaConfiguration = lookup( ArchivaConfiguration.class, "test-configuration-both" );
Configuration configuration = archivaConfiguration.getConfiguration();
// from base
assertEquals( "check repositories", 2, configuration.getManagedRepositories().size() );
assertEquals( "check repositories", 2, configuration.getRemoteRepositories().size() );
// from user
assertEquals( "check proxy connectors", 2, configuration.getProxyConnectors().size() );
WebappConfiguration webapp = configuration.getWebapp();
assertNotNull( "check webapp", webapp );
UserInterfaceOptions ui = webapp.getUi();
assertNotNull( "check webapp ui", ui );
// from base
assertFalse( "check showFindArtifacts", ui.isShowFindArtifacts() );
// from user
assertFalse( "check appletFindEnabled", ui.isAppletFindEnabled() );
}
@Test
public void testGetConfigurationSystemOverride()
throws Exception
{
System.setProperty( "org.apache.archiva.webapp.ui.appletFindEnabled", "false" );
ArchivaConfiguration archivaConfiguration = lookup( ArchivaConfiguration.class, "test-configuration" );
archivaConfiguration.reload();
try
{
Configuration configuration = archivaConfiguration.getConfiguration();
assertFalse( "check boolean", configuration.getWebapp().getUi().isAppletFindEnabled() );
}
finally
{
System.getProperties().remove( "org.apache.archiva.webapp.ui.appletFindEnabled" );
archivaConfiguration.reload();
Configuration configuration = archivaConfiguration.getConfiguration();
assertTrue( "check boolean", configuration.getWebapp().getUi().isAppletFindEnabled() );
}
}
@Test
public void testStoreConfiguration()
throws Exception
{
File file = getTestFile( "target/test/test-file.xml" );
file.delete();
assertFalse( file.exists() );
// TODO: remove with commons-configuration 1.4
//file.getParentFile().mkdirs();
//FileUtils.writeStringToFile( file, "<configuration/>", null );
DefaultArchivaConfiguration archivaConfiguration =
(DefaultArchivaConfiguration) lookup( ArchivaConfiguration.class, "test-save" );
archivaConfiguration.reload();
Configuration configuration = new Configuration();
configuration.setVersion( "1" );
configuration.setWebapp( new WebappConfiguration() );
configuration.getWebapp().setUi( new UserInterfaceOptions() );
configuration.getWebapp().getUi().setAppletFindEnabled( false );
// add a change listener
ConfigurationListener listener = createMock( ConfigurationListener.class );
archivaConfiguration.addListener( listener );
listener.configurationEvent( new ConfigurationEvent( ConfigurationEvent.SAVED ) );
replay( listener );
archivaConfiguration.save( configuration );
verify( listener );
assertTrue( "Check file exists", file.exists() );
// check it
configuration = archivaConfiguration.getConfiguration();
assertFalse( "check value", configuration.getWebapp().getUi().isAppletFindEnabled() );
// read it back
archivaConfiguration = (DefaultArchivaConfiguration) lookup( ArchivaConfiguration.class, "test-read-saved" );
archivaConfiguration.reload();
configuration = archivaConfiguration.getConfiguration();
assertFalse( "check value", configuration.getWebapp().getUi().isAppletFindEnabled() );
}
private static ConfigurationListener createConfigurationListenerMockControl()
{
return createMock( ConfigurationListener.class );// MockControl.createControl( ConfigurationListener.class );
}
@Test
public void testStoreConfigurationUser()
throws Exception
{
File baseFile = getTestFile( "target/test/test-file.xml" );
baseFile.delete();
assertFalse( baseFile.exists() );
File userFile = getTestFile( "target/test/test-file-user.xml" );
userFile.delete();
assertFalse( userFile.exists() );
userFile.getParentFile().mkdirs();
FileUtils.writeStringToFile( userFile, "<configuration/>", Charset.forName( "UTF-8" ) );
ArchivaConfiguration archivaConfiguration = lookup( ArchivaConfiguration.class, "test-save-user" );
Configuration configuration = new Configuration();
configuration.setWebapp( new WebappConfiguration() );
configuration.getWebapp().setUi( new UserInterfaceOptions() );
configuration.getWebapp().getUi().setAppletFindEnabled( false );
archivaConfiguration.save( configuration );
assertTrue( "Check file exists", userFile.exists() );
assertFalse( "Check file not created", baseFile.exists() );
// check it
configuration = archivaConfiguration.getConfiguration();
assertFalse( "check value", configuration.getWebapp().getUi().isAppletFindEnabled() );
}
@Test
public void testStoreConfigurationLoadedFromDefaults()
throws Exception
{
File baseFile = getTestFile( "target/test/test-file.xml" );
baseFile.delete();
assertFalse( baseFile.exists() );
File userFile = getTestFile( "target/test/test-file-user.xml" );
userFile.delete();
assertFalse( userFile.exists() );
ArchivaConfiguration archivaConfiguration = lookup( ArchivaConfiguration.class, "test-save-user-defaults" );
archivaConfiguration.reload();
Configuration configuration = new Configuration();
configuration.setWebapp( new WebappConfiguration() );
configuration.getWebapp().setUi( new UserInterfaceOptions() );
configuration.getWebapp().getUi().setAppletFindEnabled( false );
// add a change listener
ConfigurationListener listener = createConfigurationListenerMockControl();
archivaConfiguration.addListener( listener );
listener.configurationEvent( new ConfigurationEvent( ConfigurationEvent.SAVED ) );
replay( listener );
archivaConfiguration.save( configuration );
verify( listener );
assertTrue( "Check file exists", userFile.exists() );
assertFalse( "Check file not created", baseFile.exists() );
// check it
configuration = archivaConfiguration.getConfiguration();
assertFalse( "check value", configuration.getWebapp().getUi().isAppletFindEnabled() );
}
@Test
public void testDefaultUserConfigFilename()
throws Exception
{
DefaultArchivaConfiguration archivaConfiguration =
(DefaultArchivaConfiguration) lookup( ArchivaConfiguration.class, "default" );
archivaConfiguration.reload();
assertEquals( System.getProperty( "user.home" ) + "/.m2/archiva.xml",
archivaConfiguration.getUserConfigFilename() );
assertEquals( System.getProperty( "appserver.base", "${appserver.base}" ) + "/conf/archiva.xml",
archivaConfiguration.getAltConfigFilename() );
}
@Test
public void testStoreConfigurationFallback()
throws Exception
{
File baseFile = getTestFile( "target/test/test-file.xml" );
baseFile.delete();
assertFalse( baseFile.exists() );
File userFile = getTestFile( "target/test/test-file-user.xml" );
userFile.delete();
assertFalse( userFile.exists() );
baseFile.getParentFile().mkdirs();
FileUtils.writeStringToFile( baseFile, "<configuration/>", Charset.forName( "UTF-8" ) );
ArchivaConfiguration archivaConfiguration =
(ArchivaConfiguration) lookup( ArchivaConfiguration.class, "test-save-user-fallback" );
archivaConfiguration.reload();
Configuration configuration = new Configuration();
configuration.setWebapp( new WebappConfiguration() );
configuration.getWebapp().setUi( new UserInterfaceOptions() );
configuration.getWebapp().getUi().setAppletFindEnabled( false );
archivaConfiguration.save( configuration );
assertTrue( "Check file exists", baseFile.exists() );
assertFalse( "Check file not created", userFile.exists() );
// check it
configuration = archivaConfiguration.getConfiguration();
assertFalse( "check value", configuration.getWebapp().getUi().isAppletFindEnabled() );
}
@Test
public void testStoreConfigurationFailsWhenReadFromBothLocationsNoLists()
throws Exception
{
File baseFile = getTestFile( "target/test/test-file.xml" );
baseFile.delete();
assertFalse( baseFile.exists() );
File userFile = getTestFile( "target/test/test-file-user.xml" );
userFile.delete();
assertFalse( userFile.exists() );
baseFile.getParentFile().mkdirs();
FileUtils.writeStringToFile( baseFile, "<configuration/>", Charset.forName( "UTF-8" ) );
userFile.getParentFile().mkdirs();
FileUtils.writeStringToFile( userFile, "<configuration/>", Charset.forName( "UTF-8" ) );
ArchivaConfiguration archivaConfiguration = lookup( ArchivaConfiguration.class, "test-save-user" );
archivaConfiguration.reload();
Configuration configuration = archivaConfiguration.getConfiguration();
assertTrue( "check value", configuration.getWebapp().getUi().isAppletFindEnabled() );
configuration.getWebapp().getUi().setAppletFindEnabled( false );
archivaConfiguration.save( configuration );
assertTrue( "Check file exists", baseFile.exists() );
assertEquals( "Check base file is unchanged", "<configuration/>",
FileUtils.readFileToString( baseFile, Charset.forName( "UTF-8" ) ) );
assertTrue( "Check file exists", userFile.exists() );
assertFalse( "Check base file is changed",
"<configuration/>".equals( FileUtils.readFileToString( userFile, Charset.forName( "UTF-8" ) ) ) );
// check it
configuration = archivaConfiguration.getConfiguration();
assertFalse( "check value", configuration.getWebapp().getUi().isAppletFindEnabled() );
}
@Test
public void testStoreConfigurationFailsWhenReadFromBothLocationsUserHasLists()
throws Exception
{
File baseFile = getTestFile( "target/test/test-file.xml" );
baseFile.delete();
assertFalse( baseFile.exists() );
File userFile = getTestFile( "target/test/test-file-user.xml" );
userFile.delete();
assertFalse( userFile.exists() );
userFile.getParentFile().mkdirs();
FileUtils.copyFile( getTestFile( "src/test/conf/conf-user.xml" ), userFile );
baseFile.getParentFile().mkdirs();
FileUtils.writeStringToFile( baseFile, "<configuration/>", Charset.forName( "UTF-8" ) );
ArchivaConfiguration archivaConfiguration = lookup( ArchivaConfiguration.class, "test-save-user" );
archivaConfiguration.reload();
Configuration configuration = archivaConfiguration.getConfiguration();
assertTrue( "check value", configuration.getWebapp().getUi().isShowFindArtifacts() );
configuration.getWebapp().getUi().setShowFindArtifacts( false );
archivaConfiguration.save( configuration );
assertTrue( "Check file exists", baseFile.exists() );
assertEquals( "Check base file is unchanged", "<configuration/>",
FileUtils.readFileToString( baseFile, Charset.forName( "UTF-8" ) ) );
assertTrue( "Check file exists", userFile.exists() );
assertFalse( "Check base file is changed",
"<configuration/>".equals( FileUtils.readFileToString( userFile, Charset.forName( "UTF-8" ) ) ) );
// check it
configuration = archivaConfiguration.getConfiguration();
assertFalse( "check value", configuration.getWebapp().getUi().isShowFindArtifacts() );
}
@Test
public void testStoreConfigurationFailsWhenReadFromBothLocationsAppserverHasLists()
throws Exception
{
File baseFile = getTestFile( "target/test/test-file.xml" );
baseFile.delete();
assertFalse( baseFile.exists() );
File userFile = getTestFile( "target/test/test-file-user.xml" );
userFile.delete();
assertFalse( userFile.exists() );
baseFile.getParentFile().mkdirs();
FileUtils.copyFile( getTestFile( "src/test/conf/conf-base.xml" ), baseFile );
userFile.getParentFile().mkdirs();
FileUtils.writeStringToFile( userFile, "<configuration/>", Charset.forName( "UTF-8" ) );
ArchivaConfiguration archivaConfiguration = lookup( ArchivaConfiguration.class, "test-save-user" );
archivaConfiguration.reload();
Configuration configuration = archivaConfiguration.getConfiguration();
assertTrue( "check value", configuration.getWebapp().getUi().isAppletFindEnabled() );
configuration.getWebapp().getUi().setAppletFindEnabled( false );
try
{
archivaConfiguration.save( configuration );
fail( "Configuration saving should not succeed if it was loaded from two locations" );
}
catch ( IndeterminateConfigurationException e )
{
// check it was reverted
configuration = archivaConfiguration.getConfiguration();
assertTrue( "check value", configuration.getWebapp().getUi().isAppletFindEnabled() );
}
}
@Test
public void testLoadConfigurationFromInvalidBothLocationsOnDisk()
throws Exception
{
ArchivaConfiguration archivaConfiguration =
lookup( ArchivaConfiguration.class, "test-not-allowed-to-write-to-both" );
Configuration config = archivaConfiguration.getConfiguration();
try
{
archivaConfiguration.save( config );
fail( "Should have thrown a RegistryException because the configuration can't be saved." );
}
catch ( RegistryException e )
{
/* expected exception */
}
}
@Test
public void testLoadConfigurationFromInvalidUserLocationOnDisk()
throws Exception
{
File testConfDir = getTestFile( "target/test-appserver-base/conf/" );
testConfDir.mkdirs();
ArchivaConfiguration archivaConfiguration =
lookup( ArchivaConfiguration.class, "test-not-allowed-to-write-to-user" );
Configuration config = archivaConfiguration.getConfiguration();
archivaConfiguration.save( config );
// No Exception == test passes.
// Expected Path is: Should not have thrown an exception.
}
@Test
public void testConfigurationUpgradeFrom09()
throws Exception
{
ArchivaConfiguration archivaConfiguration = lookup( ArchivaConfiguration.class, "test-upgrade-09" );
// we just use the defaults when upgrading from 0.9 at this point.
Configuration configuration = archivaConfiguration.getConfiguration();
// test-upgrade-09 contains a managed with id: local so it's 3 managed
assertConfiguration( configuration, 3, 1, 1 );
assertEquals( "check network proxies", 0, configuration.getNetworkProxies().size() );
ManagedRepositoryConfiguration repository = configuration.getManagedRepositories().get( 0 );
assertEquals( "check managed repositories", "${appserver.base}/repositories/internal",
repository.getLocation() );
assertEquals( "check managed repositories", "Archiva Managed Internal Repository", repository.getName() );
assertEquals( "check managed repositories", "internal", repository.getId() );
assertEquals( "check managed repositories", "default", repository.getLayout() );
assertTrue( "check managed repositories", repository.isScanned() );
}
@Test
public void testConfigurationUpgradeFrom13()
throws Exception
{
ArchivaConfiguration archivaConfiguration = lookup( ArchivaConfiguration.class, "test-upgrade-1.3" );
// we just use the defaults when upgrading from 1.3 at this point.
Configuration configuration = archivaConfiguration.getConfiguration();
assertConfiguration( configuration, 2, 2, 2 );
assertEquals( "check network proxies", 0, configuration.getNetworkProxies().size() );
ManagedRepositoryConfiguration repository = configuration.getManagedRepositories().get( 0 );
assertEquals( "check managed repositories", "${appserver.base}/data/repositories/internal",
repository.getLocation() );
assertEquals( "check managed repositories", "Archiva Managed Internal Repository", repository.getName() );
assertEquals( "check managed repositories", "internal", repository.getId() );
assertEquals( "check managed repositories", "default", repository.getLayout() );
assertTrue( "check managed repositories", repository.isScanned() );
log.info( "knowContentConsumers {}", configuration.getRepositoryScanning().getKnownContentConsumers() );
assertFalse(
configuration.getRepositoryScanning().getKnownContentConsumers().contains( "update-db-artifact" ) );
assertFalse( configuration.getRepositoryScanning().getKnownContentConsumers().contains(
"update-db-repository-metadata" ) );
assertTrue(
configuration.getRepositoryScanning().getKnownContentConsumers().contains( "create-archiva-metadata" ) );
assertTrue(
configuration.getRepositoryScanning().getKnownContentConsumers().contains( "duplicate-artifacts" ) );
}
@Test
public void testAutoDetectV1()
throws Exception
{
// Setup the autodetect-v1.xml file in the target directory (so we can save/load it)
File userFile = getTestFile( "target/test-autodetect-v1/archiva-user.xml" );
userFile.delete();
assertFalse( userFile.exists() );
userFile.getParentFile().mkdirs();
FileUtils.copyFile( getTestFile( "src/test/conf/autodetect-v1.xml" ), userFile );
// Load the original (unconverted) archiva.xml
ArchivaConfiguration archivaConfiguration = lookup( ArchivaConfiguration.class, "test-autodetect-v1" );
archivaConfiguration.reload();
Configuration configuration = archivaConfiguration.getConfiguration();
assertConfiguration( configuration, 2, 2, 2 );
assertEquals( "check network proxies", 1, configuration.getNetworkProxies().size() );
ManagedRepositoryConfiguration repository = configuration.getManagedRepositories().get( 0 );
assertEquals( "check managed repositories", "${appserver.base}/repositories/internal",
repository.getLocation() );
assertEquals( "check managed repositories", "Archiva Managed Internal Repository", repository.getName() );
assertEquals( "check managed repositories", "internal", repository.getId() );
assertEquals( "check managed repositories", "default", repository.getLayout() );
assertTrue( "check managed repositories", repository.isScanned() );
// Test that only 1 set of repositories exist.
assertEquals( "check managed repositories size.", 2, configuration.getManagedRepositories().size() );
assertEquals( "check remote repositories size.", 2, configuration.getRemoteRepositories().size() );
assertEquals( "check v1 repositories size.", 0, configuration.getRepositories().size() );
// Save the file.
archivaConfiguration.save( configuration );
// Reload.
archivaConfiguration = lookup( ArchivaConfiguration.class, "test-autodetect-v1" );
configuration = archivaConfiguration.getConfiguration();
// Test that only 1 set of repositories exist.
assertEquals( "check managed repositories size.", 2, configuration.getManagedRepositories().size() );
assertEquals( "check managed repositories size.", 2, configuration.getManagedRepositoriesAsMap().size() );
assertEquals( "check remote repositories size.", 2, configuration.getRemoteRepositories().size() );
assertEquals( "check remote repositories size.", 2, configuration.getRemoteRepositoriesAsMap().size() );
assertEquals( "check v1 repositories size.", 0, configuration.getRepositories().size() );
String actualXML = FileUtils.readFileToString( userFile, Charset.forName( "UTF-8" ) );
XMLAssert.assertXpathNotExists( "//configuration/repositories/repository", actualXML );
XMLAssert.assertXpathNotExists( "//configuration/repositories", actualXML );
}
@Test
public void testArchivaV1()
throws Exception
{
ArchivaConfiguration archivaConfiguration = lookup( ArchivaConfiguration.class, "test-archiva-v1" );
Configuration configuration = archivaConfiguration.getConfiguration();
assertConfiguration( configuration, 2, 2, 2 );
assertEquals( "check network proxies", 1, configuration.getNetworkProxies().size() );
assertEquals( "check managed repositories", 2, configuration.getManagedRepositories().size() );
assertEquals( "check v1 repositories size.", 0, configuration.getRepositories().size() );
Map<String, ManagedRepositoryConfiguration> map = configuration.getManagedRepositoriesAsMap();
ManagedRepositoryConfiguration repository = map.get( "internal" );
assertEquals( "check managed repositories", "${appserver.base}/repositories/internal",
repository.getLocation() );
assertEquals( "check managed repositories", "Archiva Managed Internal Repository", repository.getName() );
assertEquals( "check managed repositories", "internal", repository.getId() );
assertEquals( "check managed repositories", "default", repository.getLayout() );
assertTrue( "check managed repositories", repository.isScanned() );
assertFalse( "check managed repositories", repository.isSnapshots() );
repository = map.get( "snapshots" );
assertEquals( "check managed repositories", "${appserver.base}/repositories/snapshots",
repository.getLocation() );
assertEquals( "check managed repositories", "Archiva Managed Snapshot Repository", repository.getName() );
assertEquals( "check managed repositories", "snapshots", repository.getId() );
assertEquals( "check managed repositories", "default", repository.getLayout() );
assertFalse( "check managed repositories", repository.isScanned() );
assertTrue( "check managed repositories", repository.isSnapshots() );
}
@Test
public void testCronExpressionsWithComma()
throws Exception
{
File baseFile = getTestFile( "target/test/test-file.xml" );
baseFile.delete();
assertFalse( baseFile.exists() );
File userFile = getTestFile( "target/test/test-file-user.xml" );
userFile.delete();
assertFalse( userFile.exists() );
baseFile.getParentFile().mkdirs();
FileUtils.copyFile( getTestFile( "src/test/conf/escape-cron-expressions.xml" ), baseFile );
userFile.getParentFile().mkdirs();
FileUtils.writeStringToFile( userFile, "<configuration/>", Charset.defaultCharset() );
final ArchivaConfiguration archivaConfiguration = lookup( ArchivaConfiguration.class, "test-cron-expressions" );
archivaConfiguration.reload();
Configuration configuration = archivaConfiguration.getConfiguration();
ManagedRepositoryConfiguration repository = configuration.getManagedRepositories().get( 0 );
assertEquals( "check cron expression", "0 0,30 * * * ?", repository.getRefreshCronExpression().trim() );
// add a test listener to confirm it doesn't see the escaped format. We don't need to test the number of calls,
// etc. as it's done in other tests
archivaConfiguration.addListener( new ConfigurationListener()
{
@Override
public void configurationEvent( ConfigurationEvent event )
{
assertEquals( ConfigurationEvent.SAVED, event.getType() );
}
} );
archivaConfiguration.save( configuration );
configuration = archivaConfiguration.getConfiguration();
// test for the escape character '\' showing up on repositories.jsp
repository.setRefreshCronExpression( "0 0,20 0 * * ?" );
archivaConfiguration.save( configuration );
repository = archivaConfiguration.getConfiguration().findManagedRepositoryById( "snapshots" );
assertEquals( "check cron expression", "0 0,20 0 * * ?", repository.getRefreshCronExpression() );
}
@Test
public void testRemoveLastElements()
throws Exception
{
File baseFile = getTestFile( "target/test/test-file.xml" );
baseFile.delete();
assertFalse( baseFile.exists() );
File userFile = getTestFile( "target/test/test-file-user.xml" );
userFile.delete();
assertFalse( userFile.exists() );
baseFile.getParentFile().mkdirs();
FileUtils.copyFile( getTestFile( "src/test/conf/conf-single-list-elements.xml" ), baseFile );
userFile.getParentFile().mkdirs();
FileUtils.writeStringToFile( userFile, "<configuration/>", Charset.forName( "UTF-8" ) );
ArchivaConfiguration archivaConfiguration = lookup( ArchivaConfiguration.class, "test-remove-central" );
archivaConfiguration.reload();
Configuration configuration = archivaConfiguration.getConfiguration();
RepositoryGroupConfiguration repositoryGroup = configuration.getRepositoryGroups().get( 0 );
assertNotNull( repositoryGroup );
configuration.removeRepositoryGroup( repositoryGroup );
assertTrue( configuration.getRepositoryGroups().isEmpty() );
RemoteRepositoryConfiguration repository = configuration.getRemoteRepositoriesAsMap().get( "central" );
assertNotNull( repository );
configuration.removeRemoteRepository( repository );
assertTrue( configuration.getRemoteRepositories().isEmpty() );
ManagedRepositoryConfiguration managedRepository =
configuration.getManagedRepositoriesAsMap().get( "snapshots" );
assertNotNull( managedRepository );
configuration.removeManagedRepository( managedRepository );
assertTrue( configuration.getManagedRepositories().isEmpty() );
ProxyConnectorConfiguration proxyConnector = configuration.getProxyConnectors().get( 0 );
assertNotNull( proxyConnector );
configuration.removeProxyConnector( proxyConnector );
assertTrue( configuration.getProxyConnectors().isEmpty() );
NetworkProxyConfiguration networkProxy = configuration.getNetworkProxiesAsMap().get( "proxy" );
assertNotNull( networkProxy );
configuration.removeNetworkProxy( networkProxy );
assertTrue( configuration.getNetworkProxies().isEmpty() );
LegacyArtifactPath path = configuration.getLegacyArtifactPaths().get( 0 );
assertNotNull( path );
configuration.removeLegacyArtifactPath( path );
assertTrue( configuration.getLegacyArtifactPaths().isEmpty() );
RepositoryScanningConfiguration scanning = configuration.getRepositoryScanning();
String consumer = scanning.getKnownContentConsumers().get( 0 );
assertNotNull( consumer );
scanning.removeKnownContentConsumer( consumer );
// default values
assertFalse( scanning.getKnownContentConsumers().isEmpty() );
consumer = scanning.getInvalidContentConsumers().get( 0 );
assertNotNull( consumer );
scanning.removeInvalidContentConsumer( consumer );
assertTrue( scanning.getInvalidContentConsumers().isEmpty() );
archivaConfiguration.save( configuration );
archivaConfiguration = lookup( ArchivaConfiguration.class, "test-read-saved" );
configuration = archivaConfiguration.getConfiguration();
assertNull( configuration.getRemoteRepositoriesAsMap().get( "central" ) );
assertTrue( configuration.getRepositoryGroups().isEmpty() );
assertNull( configuration.getManagedRepositoriesAsMap().get( "snapshots" ) );
assertTrue( configuration.getProxyConnectors().isEmpty() );
assertNull( configuration.getNetworkProxiesAsMap().get( "proxy" ) );
assertTrue( configuration.getLegacyArtifactPaths().isEmpty() );
scanning = configuration.getRepositoryScanning();
assertFalse( scanning.getKnownContentConsumers().isEmpty() );
assertTrue( scanning.getInvalidContentConsumers().isEmpty() );
}
/**
* [MRM-582] Remote Repositories with empty <username> and <password> fields shouldn't be created in configuration.
*/
@Test
public void testGetConfigurationFixEmptyRemoteRepoUsernamePassword()
throws Exception
{
ArchivaConfiguration archivaConfiguration = lookup( ArchivaConfiguration.class, "test-configuration" );
Configuration configuration = archivaConfiguration.getConfiguration();
assertConfiguration( configuration, 2, 2, 2 );
assertEquals( "check remote repositories", 2, configuration.getRemoteRepositories().size() );
RemoteRepositoryConfiguration repository =
configuration.getRemoteRepositoriesAsMap().get( "maven2-repository.dev.java.net" );
assertEquals( "remote repository.url", "https://maven2-repository.dev.java.net/nonav/repository",
repository.getUrl() );
assertEquals( "remote repository.name", "Java.net Repository for Maven 2", repository.getName() );
assertEquals( "remote repository.id", "maven2-repository.dev.java.net", repository.getId() );
assertEquals( "remote repository.layout", "default", repository.getLayout() );
assertNull( "remote repository.username == null", repository.getUsername() );
assertNull( "remote repository.password == null", repository.getPassword() );
}
}