Java tutorial
/** * Copyright (C) 2013 Red Hat, Inc. (jdcasey@commonjava.org) * * Licensed 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. */ package org.commonjava.maven.cartographer.ftest; import org.apache.commons.io.FileUtils; import org.apache.commons.io.IOUtils; import org.commonjava.cartographer.Cartographer; import org.commonjava.cartographer.INTERNAL.graph.discover.SourceManagerImpl; import org.commonjava.cartographer.boot.Options; import org.commonjava.cartographer.client.ClientCartographer; import org.commonjava.propulsor.boot.BootOptions; import org.commonjava.propulsor.boot.BootStatus; import org.commonjava.propulsor.boot.Booter; import org.commonjava.util.jhttpc.HttpFactory; import org.commonjava.util.jhttpc.auth.MemoryPasswordManager; import org.commonjava.util.jhttpc.auth.PasswordManager; import org.commonjava.util.jhttpc.model.SiteConfig; import org.commonjava.util.jhttpc.model.SiteConfigBuilder; import org.commonjava.util.jhttpc.util.UrlUtils; import org.junit.Assert; import org.junit.rules.TemporaryFolder; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.net.MalformedURLException; import java.util.ServiceLoader; import java.util.function.Consumer; import static org.commonjava.maven.cartographer.ftest.testutil.TestFileUtils.readResource; import static org.commonjava.maven.cartographer.ftest.testutil.TestFileUtils.writeConfigFile; import static org.hamcrest.core.IsEqual.equalTo; import static org.junit.Assert.assertThat; import static org.junit.Assert.fail; import org.jboss.weld.environment.se.WeldContainer; public class LocalTestDriver implements CartoTCKDriver { public static final String MAIN_CONF = "main.conf"; public static final String TEST_MAIN_CONF = "test-main.conf"; private Options options; private BootStatus bootStatus; private Booter booter; private PasswordManager passwordManager; private HttpFactory httpFactory; private SiteConfig siteConfig; private TemporaryFolder temp = new TemporaryFolder(); private Cartographer carto; private SourceManagerImpl sourceManager; private Consumer<File> configurator = defaultConfigWriter(); public Consumer<File> defaultConfigWriter() { return (configDir) -> writeConfigFile(configDir, MAIN_CONF, readResource(TEST_MAIN_CONF)); } public void setConfigurator(Consumer<File> configurator) { this.configurator = configurator; } @Override public Cartographer start(TemporaryFolder temp) throws Exception { sourceManager = new SourceManagerImpl(); temp.create(); File homeDir = temp.newFolder("carto-home"); File configDir = new File(homeDir, "etc"); configDir.mkdirs(); configurator.accept(configDir); final ServiceLoader<BootOptions> loader = ServiceLoader.load(BootOptions.class); final BootOptions opts = loader.iterator().next(); options = (Options) opts; options.setPort(-1); options.setHomeDir(homeDir.getAbsolutePath()); // Should not need this; the configurator should be smart enough to try ${carto.home}/etc/main.conf on its own. // options.setConfig( new File( configDir, MAIN_CONF ).getAbsolutePath() ); booter = new Booter(); bootStatus = booter.start(options); if (bootStatus == null) { fail("No boot status"); } Throwable t = bootStatus.getError(); if (t != null) { throw new RuntimeException("Failed to start Cartographer test server.", t); } assertThat(bootStatus.isSuccess(), equalTo(true)); WeldContainer container = booter.getContainer(); sourceManager = container.instance().select(SourceManagerImpl.class).get(); passwordManager = new MemoryPasswordManager(); siteConfig = new SiteConfigBuilder("local-test", formatUrl().toString()).withRequestTimeoutSeconds(30) .build(); httpFactory = new HttpFactory(passwordManager); carto = new ClientCartographer(siteConfig, httpFactory); return carto; } @Override public void stop() throws Exception { if (booter != null && bootStatus != null && bootStatus.isSuccess()) { booter.stop(); } temp.delete(); if (carto != null) { carto.close(); } } @Override public void createRepoAlias(String alias, String repoResource) throws Exception { System.out.println("Aliasing 'test' to: " + repoResource); sourceManager.withAlias("test", repoResource); } public HttpFactory getHttpFactory() throws Exception { return httpFactory; } public SiteConfig getSiteConfig() throws Exception { return siteConfig; } public PasswordManager getPasswordManager() throws Exception { return passwordManager; } private String formatUrl(String... pathParts) throws MalformedURLException { checkStarted(); return UrlUtils.buildUrl(String.format("http://localhost:%d/api", getPort()), pathParts); } private void checkStarted() { if (booter == null || bootStatus == null || !bootStatus.isSuccess()) { throw new RuntimeException("Cannot execute; Cartographer test server is not running."); } } private int getPort() { checkStarted(); return options.getPort(); } }