package org.carlspring.strongbox.configuration;
import org.carlspring.strongbox.config.ClientConfig;
import org.carlspring.strongbox.config.CommonConfig;
import org.carlspring.strongbox.config.DataServiceConfig;
import org.carlspring.strongbox.config.StorageCoreConfig;
import org.carlspring.strongbox.resource.ConfigurationResourceResolver;
import org.carlspring.strongbox.services.ArtifactResolutionService;
import org.carlspring.strongbox.storage.Storage;
import org.carlspring.strongbox.storage.repository.Repository;
import org.carlspring.strongbox.storage.routing.RoutingRule;
import org.carlspring.strongbox.storage.routing.RoutingRules;
import org.carlspring.strongbox.storage.routing.RuleSet;
import org.carlspring.strongbox.xml.parsers.GenericParser;
import javax.inject.Inject;
import javax.xml.bind.JAXBException;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.context.annotation.Import;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import static org.carlspring.strongbox.testing.TestCaseWithRepository.STORAGE0;
import static org.junit.Assert.*;
/**
* @author mtodorov
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
public class ConfigurationManagerTest
{
@org.springframework.context.annotation.Configuration
@Import({ StorageCoreConfig.class,
CommonConfig.class,
ClientConfig.class,
DataServiceConfig.class
})
public static class SpringConfig
{
}
public static final String TEST_CLASSES = "target/test-classes";
public static final String CONFIGURATION_BASEDIR = TEST_CLASSES + "/xml";
public static final String CONFIGURATION_OUTPUT_FILE = CONFIGURATION_BASEDIR + "/strongbox-saved-cm.xml";
private GenericParser<Configuration> parser = new GenericParser<>(Configuration.class);
@Inject
private ConfigurationManager configurationManager;
@Inject
private ArtifactResolutionService artifactResolutionService;
@Before
public void setUp()
throws Exception
{
File xmlDir = new File(CONFIGURATION_BASEDIR);
if (!xmlDir.exists())
{
//noinspection ResultOfMethodCallIgnored
xmlDir.mkdirs();
}
}
@Test
public void testParseConfiguration()
throws IOException
{
final Configuration configuration = configurationManager.getConfiguration();
assertNotNull(configuration);
assertNotNull(configuration.getStorages());
assertNotNull(configuration.getRoutingRules());
assertFalse(configuration.getRoutingRules().getWildcardAcceptedRules().getRoutingRules().isEmpty());
assertFalse(configuration.getRoutingRules().getWildcardDeniedRules().getRoutingRules().isEmpty());
for (String storageId : configuration.getStorages().keySet())
{
assertNotNull("Storage ID was null!", storageId);
// assertTrue("No repositories were parsed!", !configuration.getStorages().get(storageId).getRepositories().isEmpty());
}
assertTrue("Unexpected number of storages!", configuration.getStorages().size() > 0);
assertEquals("Incorrect version!", "1.0", configuration.getVersion());
assertEquals("Incorrect port number!", 48080, configuration.getPort());
assertTrue("Repository should have required authentication!",
configuration.getStorages()
.get("storage0")
.getRepositories()
.get("snapshots").isSecured());
assertTrue(configuration.getStorages()
.get("storage0")
.getRepositories()
.get("releases").allowsDirectoryBrowsing());
}
@Test
public void testStoreConfiguration()
throws IOException, JAXBException
{
ProxyConfiguration proxyConfigurationGlobal = new ProxyConfiguration();
proxyConfigurationGlobal.setUsername("maven");
proxyConfigurationGlobal.setPassword("password");
proxyConfigurationGlobal.setHost("192.168.100.1");
proxyConfigurationGlobal.setPort(8080);
proxyConfigurationGlobal.addNonProxyHost("192.168.100.1");
proxyConfigurationGlobal.addNonProxyHost("192.168.100.2");
ProxyConfiguration proxyConfigurationRepository1 = new ProxyConfiguration();
proxyConfigurationRepository1.setUsername("maven");
proxyConfigurationRepository1.setPassword("password");
proxyConfigurationRepository1.setHost("192.168.100.5");
proxyConfigurationRepository1.setPort(8080);
proxyConfigurationRepository1.addNonProxyHost("192.168.100.10");
proxyConfigurationRepository1.addNonProxyHost("192.168.100.11");
Repository repository1 = new Repository("snapshots");
repository1.setProxyConfiguration(proxyConfigurationRepository1);
Repository repository2 = new Repository("releases");
Storage storage = new Storage();
storage.setId("myStorageId");
storage.setBasedir(new File(ConfigurationResourceResolver.getVaultDirectory() + "/storages" + STORAGE0)
.getAbsolutePath());
storage.addRepository(repository1);
storage.addRepository(repository2);
Configuration configuration = new Configuration();
configuration.addStorage(storage);
configuration.setProxyConfiguration(proxyConfigurationGlobal);
File outputFile = new File(CONFIGURATION_OUTPUT_FILE);
parser.store(configuration, outputFile.getCanonicalPath());
assertTrue("Failed to store the produced XML!", outputFile.length() > 0);
}
@Test
public void testGroupRepositories()
throws IOException, JAXBException
{
Repository repository1 = new Repository("snapshots");
Repository repository2 = new Repository("ext-snapshots");
Repository repository3 = new Repository("grp-snapshots");
repository3.addRepositoryToGroup(repository1.getId());
repository3.addRepositoryToGroup(repository2.getId());
Storage storage = new Storage("storage0");
storage.setBasedir(new File(ConfigurationResourceResolver.getVaultDirectory() + "/storages" + STORAGE0)
.getAbsolutePath());
storage.addRepository(repository1);
storage.addRepository(repository2);
storage.addRepository(repository3);
Configuration configuration = new Configuration();
configuration.addStorage(storage);
File outputFile = new File(CONFIGURATION_OUTPUT_FILE);
parser.store(configuration, outputFile.getCanonicalPath());
assertTrue("Failed to store the produced XML!", outputFile.length() > 0);
Configuration c = parser.parse(outputFile);
assertEquals("Failed to read repository groups!",
2,
c.getStorages().get("storage0")
.getRepositories()
.get("grp-snapshots")
.getGroupRepositories()
.size());
}
@Test
public void testRoutingRules()
throws JAXBException
{
Set<String> repositories = new LinkedHashSet<>();
repositories.addAll(Arrays.asList("int-releases", "int-snapshots"));
RoutingRule routingRule = new RoutingRule(".*(com|org)/artifacts.denied.in.memory.*", repositories);
List<RoutingRule> routingRulesList = new ArrayList<>();
routingRulesList.add(routingRule);
RuleSet ruleSet = new RuleSet();
ruleSet.setGroupRepository("group-internal");
ruleSet.setRoutingRules(routingRulesList);
RoutingRules routingRules = new RoutingRules();
routingRules.addAcceptRule("group-internal", ruleSet);
GenericParser<RoutingRules> parser = new GenericParser<>(RoutingRule.class,
RoutingRules.class,
RuleSet.class);
parser.store(routingRules, new ByteArrayOutputStream());
// parser.store(routingRules, System.out);
// Assuming that if there is no error, there is no problem.
// Not optimal, but that's as good as it gets right now.
}
}