blob: 8f1f3aa650b7306cccd7638e6e41f5e0a6f67f0b [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2008, 2010 VMware Inc.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* VMware Inc. - initial contribution
*******************************************************************************/
package org.eclipse.virgo.repository.configuration;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import java.io.File;
import java.io.IOException;
import java.net.URI;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import org.junit.Before;
import org.junit.Test;
import org.eclipse.virgo.medic.test.eventlog.MockEventLogger;
import org.eclipse.virgo.repository.ArtifactBridge;
import org.eclipse.virgo.repository.configuration.ExternalStorageRepositoryConfiguration;
import org.eclipse.virgo.repository.configuration.PropertiesRepositoryConfigurationReader;
import org.eclipse.virgo.repository.configuration.RemoteRepositoryConfiguration;
import org.eclipse.virgo.repository.configuration.RepositoryConfiguration;
import org.eclipse.virgo.repository.configuration.RepositoryConfigurationException;
import org.eclipse.virgo.repository.configuration.WatchedStorageRepositoryConfiguration;
import org.eclipse.virgo.util.math.OrderedPair;
public class PropertiesRepositoryConfigurationReaderTests {
private PropertiesRepositoryConfigurationReader configurationReader;
private MockEventLogger eventLogger = new MockEventLogger();
@Before
public void createConfigurationReader() {
eventLogger.reinitialise();
configurationReader = new PropertiesRepositoryConfigurationReader(new File("indices"), Collections.<ArtifactBridge>emptySet(), eventLogger, null);
}
@Test
public void allRepositoryTypes() throws RepositoryConfigurationException {
Properties properties = new Properties();
properties.setProperty("a.type", "external");
properties.setProperty("a.searchPattern", "/**/*.jar");
properties.setProperty("b.type", "watched");
properties.setProperty("b.watchInterval", "5");
properties.setProperty("b.watchDirectory", "build/watched");
properties.setProperty("c.type", "remote");
properties.setProperty("c.indexRefreshInterval", "5");
properties.setProperty("c.uri", "http://watched.com");
properties.setProperty("chain", "a,b,c");
Map<String,RepositoryConfiguration> configurationMap = configurationReader.readConfiguration(properties).getFirst();
assertEquals(0, this.eventLogger.getLoggedEvents().size());
assertEquals(3, configurationMap.size());
assertTrue("Cannot find confguration 'a'", configurationMap.containsKey("a"));
assertEquals(ExternalStorageRepositoryConfiguration.class, configurationMap.get("a").getClass());
assertTrue("Cannot find confguration 'b'", configurationMap.containsKey("b"));
assertEquals(WatchedStorageRepositoryConfiguration.class, configurationMap.get("b").getClass());
assertTrue("Cannot find confguration 'c'", configurationMap.containsKey("c"));
assertEquals(RemoteRepositoryConfiguration.class, configurationMap.get("c").getClass());
}
@Test
public void absoluteWatchDirectory() throws RepositoryConfigurationException, IOException {
configurationReader = new PropertiesRepositoryConfigurationReader(new File("indices"), Collections.<ArtifactBridge>emptySet(), eventLogger, null, new File("foo/bar").getAbsoluteFile());
Properties properties = new Properties();
properties.setProperty("b.type", "watched");
properties.setProperty("b.watchInterval", "5");
properties.setProperty("b.watchDirectory", "build/watched");
Map<String, RepositoryConfiguration> configuration = configurationReader.readConfiguration(properties).getFirst();
RepositoryConfiguration repositoryConfiguration = configuration.get("b");
assertNotNull(repositoryConfiguration);
assertTrue(repositoryConfiguration instanceof WatchedStorageRepositoryConfiguration);
File directoryToWatch = ((WatchedStorageRepositoryConfiguration)repositoryConfiguration).getDirectoryToWatch();
assertEquals(new File("foo/bar/build/watched").getCanonicalFile(), directoryToWatch.getCanonicalFile());
}
@Test
public void unknownRepositoryTypes() throws RepositoryConfigurationException {
Properties properties = new Properties();
properties.setProperty("a.type", "whatever");
properties.setProperty("a.searchPattern", "/**/*.jar");
properties.setProperty("b.watchInterval", "5");
properties.setProperty("b.watchDirectory", "build/watched");
Map<String,RepositoryConfiguration> configurationMap = configurationReader.readConfiguration(properties).getFirst();
assertEquals(2, this.eventLogger.getLoggedEvents().size());
assertEquals(0, configurationMap.size());
}
@Test
public void chainReferencingNonExistentRepository() throws RepositoryConfigurationException {
Properties properties = new Properties();
properties.setProperty("a.type", "external");
properties.setProperty("a.searchPattern", "/**/*.jar");
properties.setProperty("chain", "a,b");
OrderedPair<Map<String,RepositoryConfiguration>,List<String>> configurations = configurationReader.readConfiguration(properties);
Map<String,RepositoryConfiguration> configurationMap = configurations.getFirst();
List<String> chainList = configurations.getSecond();
assertEquals(1, this.eventLogger.getLoggedEvents().size());
assertEquals(1, configurationMap.size());
assertEquals(1, chainList.size());
}
@Test
public void emptyChainProperty() throws RepositoryConfigurationException {
Properties properties = new Properties();
properties.setProperty("a.type", "external");
properties.setProperty("a.searchPattern", "/**/*.jar");
List<String> chainList = configurationReader.readConfiguration(properties).getSecond();
assertEquals(0, this.eventLogger.getLoggedEvents().size());
assertEquals(0, chainList.size());
}
@Test
public void duplicateRepositoriesInChain() throws RepositoryConfigurationException {
Properties properties = new Properties();
properties.setProperty("a.type", "external");
properties.setProperty("a.searchPattern", "/**/*.jar");
properties.setProperty("chain", "a,a");
List<String> chainList = configurationReader.readConfiguration(properties).getSecond();
assertEquals(1, this.eventLogger.getLoggedEvents().size());
assertEquals(1, chainList.size());
}
@Test
public void defaultingOfIndexRefreshIntervalAndWatchInterval() throws RepositoryConfigurationException {
Properties properties = new Properties();
properties.setProperty("watched-repo.type", "watched");
properties.setProperty("watched-repo.watchDirectory", "build/repository/watched");
properties.setProperty("remote-repo.type", "remote");
properties.setProperty("remote-repo.uri", "http://localhost:8080/org.eclipse.virgo.repository/foo");
properties.setProperty("chain", "watched-repo,remote-repo");
OrderedPair<Map<String,RepositoryConfiguration>,List<String>> configurations = configurationReader.readConfiguration(properties);
Map<String,RepositoryConfiguration> configurationMap = configurations.getFirst();
List<String> chainList = configurations.getSecond();
assertEquals(2, chainList.size());
assertEquals(2, configurationMap.size());
RepositoryConfiguration configuration = configurationMap.get(chainList.get(0));
assertTrue(configuration instanceof WatchedStorageRepositoryConfiguration);
assertEquals(5, ((WatchedStorageRepositoryConfiguration)configuration).getWatchInterval());
configuration = configurationMap.get(chainList.get(1));
assertTrue(configuration instanceof RemoteRepositoryConfiguration);
assertEquals(30, ((RemoteRepositoryConfiguration)configuration).getIndexUpdateInterval());
assertEquals(0, eventLogger.getLoggedEvents().size());
}
@Test
public void defaultingOfIndexRefreshIntervalAndWatchIntervalWhenMalformed() throws RepositoryConfigurationException {
Properties properties = new Properties();
properties.setProperty("watched-repo.type", "watched");
properties.setProperty("watched-repo.watchDirectory", "build/repository/watched");
properties.setProperty("watched-repo.watchInterval", "alpha");
properties.setProperty("remote-repo.type", "remote");
properties.setProperty("remote-repo.uri", "http://localhost:8080/org.eclipse.virgo.repository/foo");
properties.setProperty("remote-repo.indexRefreshInterval", "bravo");
properties.setProperty("chain", "watched-repo,remote-repo");
OrderedPair<Map<String,RepositoryConfiguration>,List<String>> configurations = configurationReader.readConfiguration(properties);
Map<String,RepositoryConfiguration> configurationMap = configurations.getFirst();
List<String> chainList = configurations.getSecond();
assertEquals(2, chainList.size());
assertEquals(2, configurationMap.size());
RepositoryConfiguration configuration = configurationMap.get(chainList.get(0));
assertTrue(configuration instanceof WatchedStorageRepositoryConfiguration);
assertEquals(5, ((WatchedStorageRepositoryConfiguration)configuration).getWatchInterval());
configuration = configurationMap.get(chainList.get(1));
assertTrue(configuration instanceof RemoteRepositoryConfiguration);
assertEquals(30, ((RemoteRepositoryConfiguration)configuration).getIndexUpdateInterval());
assertEquals(2, eventLogger.getLoggedEvents().size());
}
@Test
public void variableExpansion() throws RepositoryConfigurationException, IOException {
try {
System.setProperty("org.eclipse.virgo.repository.internal.test.string", "a");
System.setProperty("org.eclipse.virgo.repository.internal.test.int", "1");
Properties properties = new Properties();
properties.setProperty("bundles-ext.type", "external");
properties.setProperty("bundles-ext.searchPattern", "repository/${org.eclipse.virgo.repository.internal.test.string}/ext/*.jar");
properties.setProperty("watched-repo.type", "watched");
properties.setProperty("watched-repo.watchDirectory", "build/repository/${org.eclipse.virgo.repository.internal.test.string}");
properties.setProperty("watched-repo.watchInterval", "${org.eclipse.virgo.repository.internal.test.int}");
properties.setProperty("remote-repo.type", "remote");
properties.setProperty("remote-repo.uri", "http://localhost:${org.eclipse.virgo.repository.internal.test.int}/org.eclipse.virgo.repository/${org.eclipse.virgo.repository.internal.test.string}");
properties.setProperty("remote-repo.indexRefreshInterval", "${org.eclipse.virgo.repository.internal.test.int}");
properties.setProperty("chain", "bundles-ext,watched-repo,remote-repo");
OrderedPair<Map<String,RepositoryConfiguration>,List<String>> configurations = configurationReader.readConfiguration(properties);
Map<String,RepositoryConfiguration> configurationMap = configurations.getFirst();
List<String> chainList = configurations.getSecond();
assertEquals(3, chainList.size());
assertEquals(3, configurationMap.size());
ExternalStorageRepositoryConfiguration externalConfiguration = (ExternalStorageRepositoryConfiguration)configurationMap.get(chainList.get(0));
assertEquals(new File(".").getAbsolutePath() + File.separator + "repository" + File.separator + "a" + File.separator + "ext" + File.separatorChar + "*.jar", externalConfiguration.getSearchPattern());
WatchedStorageRepositoryConfiguration watchedConfiguration = (WatchedStorageRepositoryConfiguration)configurationMap.get(chainList.get(1));
assertEquals(new File("build/repository", "a").getCanonicalFile(), watchedConfiguration.getDirectoryToWatch().getCanonicalFile());
assertEquals(1, watchedConfiguration.getWatchInterval());
RemoteRepositoryConfiguration remoteConfiguration = (RemoteRepositoryConfiguration)configurationMap.get(chainList.get(2));
assertEquals(1, remoteConfiguration.getIndexUpdateInterval());
assertEquals(URI.create("http://localhost:1/org.eclipse.virgo.repository/a"), remoteConfiguration.getRepositoryUri());
assertEquals(0, eventLogger.getLoggedEvents().size());
} finally {
System.clearProperty("org.eclipse.virgo.repository.internal.test.string");
System.clearProperty("org.eclipse.virgo.repository.internal.test.int");
}
}
}