| /* |
| * 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. |
| */ |
| package org.apache.maven.wagon.tck.http; |
| |
| import java.io.File; |
| import java.io.IOException; |
| import java.util.HashSet; |
| import java.util.Set; |
| |
| import org.apache.maven.wagon.ConnectionException; |
| import org.apache.maven.wagon.Wagon; |
| import org.apache.maven.wagon.authentication.AuthenticationException; |
| import org.apache.maven.wagon.authentication.AuthenticationInfo; |
| import org.apache.maven.wagon.proxy.ProxyInfo; |
| import org.apache.maven.wagon.repository.Repository; |
| import org.apache.maven.wagon.tck.http.fixture.ServerFixture; |
| import org.codehaus.plexus.DefaultPlexusContainer; |
| import org.codehaus.plexus.PlexusContainer; |
| import org.codehaus.plexus.component.configurator.ComponentConfigurationException; |
| import org.codehaus.plexus.component.repository.exception.ComponentLifecycleException; |
| import org.codehaus.plexus.util.FileUtils; |
| import org.junit.After; |
| import org.junit.AfterClass; |
| import org.junit.Before; |
| import org.junit.BeforeClass; |
| import org.slf4j.Logger; |
| import org.slf4j.LoggerFactory; |
| |
| import static org.apache.maven.wagon.tck.http.util.TestUtil.getResource; |
| |
| /** |
| * |
| */ |
| public abstract class HttpWagonTests { |
| |
| private ServerFixture serverFixture; |
| |
| private static PlexusContainer container; |
| |
| private Wagon wagon; |
| |
| private static WagonTestCaseConfigurator configurator; |
| |
| private String baseUrl; |
| |
| private static final Set<File> TMP_FILES = new HashSet<>(); |
| |
| private Repository repo; |
| |
| private final Set<Object> notificationTargets = new HashSet<>(); |
| |
| // CHECKSTYLE_OFF: ConstantName |
| protected static final Logger logger = LoggerFactory.getLogger(HttpWagonTests.class); |
| // CHECKSTYLE_ON: ConstantName |
| |
| @Before |
| public void beforeEach() throws Exception { |
| serverFixture = new ServerFixture(isSsl()); |
| serverFixture.start(); |
| wagon = (Wagon) container.lookup(Wagon.ROLE, configurator.getWagonHint()); |
| } |
| |
| @BeforeClass |
| public static void beforeAll() throws Exception { |
| File keystore = getResource(ServerFixture.SERVER_SSL_KEYSTORE_RESOURCE_PATH); |
| |
| System.setProperty("javax.net.ssl.keyStore", keystore.getAbsolutePath()); |
| System.setProperty("javax.net.ssl.keyStorePassword", ServerFixture.SERVER_SSL_KEYSTORE_PASSWORD); |
| System.setProperty("javax.net.ssl.trustStore", keystore.getAbsolutePath()); |
| System.setProperty("javax.net.ssl.trustStorePassword", ServerFixture.SERVER_SSL_KEYSTORE_PASSWORD); |
| |
| container = new DefaultPlexusContainer(); |
| // container.initialize(); |
| // container.start(); |
| |
| configurator = (WagonTestCaseConfigurator) container.lookup(WagonTestCaseConfigurator.class.getName()); |
| } |
| |
| @After |
| public void afterEach() { |
| try { |
| wagon.disconnect(); |
| } catch (ConnectionException e) { |
| e.printStackTrace(); |
| } |
| |
| for (Object obj : notificationTargets) { |
| synchronized (obj) { |
| obj.notify(); |
| } |
| } |
| |
| if (serverFixture != null) { |
| try { |
| serverFixture.stop(); |
| } catch (Exception e) { |
| e.printStackTrace(); |
| } |
| } |
| |
| try { |
| container.release(wagon); |
| } catch (ComponentLifecycleException e) { |
| e.printStackTrace(); |
| } |
| } |
| |
| @AfterClass |
| public static void afterAll() { |
| for (File f : TMP_FILES) { |
| if (f.exists()) { |
| try { |
| FileUtils.forceDelete(f); |
| } catch (IOException e) { |
| e.printStackTrace(); |
| } |
| } |
| } |
| |
| if (container != null) { |
| try { |
| container.release(configurator); |
| } catch (ComponentLifecycleException e) { |
| e.printStackTrace(); |
| } |
| |
| container.dispose(); |
| } |
| } |
| |
| protected void addNotificationTarget(final Object target) { |
| notificationTargets.add(target); |
| } |
| |
| protected File newTempFile() throws IOException { |
| File f = File.createTempFile("wagon-target.", ".file"); |
| f.deleteOnExit(); |
| |
| return f; |
| } |
| |
| protected boolean isSsl() { |
| return false; |
| } |
| |
| protected ProxyInfo newProxyInfo() { |
| ProxyInfo info = new ProxyInfo(); |
| info.setType(isSsl() ? "https" : "http"); |
| info.setHost(ServerFixture.SERVER_HOST); |
| info.setPort(getPort()); |
| |
| return info; |
| } |
| |
| protected boolean isSupported() { |
| StackTraceElement[] elements = new Throwable().getStackTrace(); |
| String testCaseId = null; |
| String lastMethodName = null; |
| for (StackTraceElement e : elements) { |
| if (!e.getClassName().startsWith(getClass().getPackage().getName())) { |
| testCaseId = lastMethodName; |
| break; |
| } else { |
| lastMethodName = e.getMethodName(); |
| } |
| } |
| |
| if (testCaseId == null || !configurator.isSupported(testCaseId)) { |
| logger.error("Cannot run test: " + testCaseId + ". Wagon under test does not support this test case."); |
| return false; |
| } |
| |
| return true; |
| } |
| |
| protected boolean initTest(final AuthenticationInfo auth, final ProxyInfo proxy) |
| throws ComponentConfigurationException, ConnectionException, AuthenticationException { |
| return initTest(getBaseUrl(), auth, proxy); |
| } |
| |
| protected boolean initTest(final String baseUrl, final AuthenticationInfo auth, final ProxyInfo proxy) |
| throws ComponentConfigurationException, ConnectionException, AuthenticationException { |
| StackTraceElement[] elements = new Throwable().getStackTrace(); |
| String testCaseId = null; |
| String lastMethodName = null; |
| for (StackTraceElement e : elements) { |
| if (!e.getClassName().startsWith(getClass().getPackage().getName())) { |
| testCaseId = lastMethodName; |
| break; |
| } else { |
| lastMethodName = e.getMethodName(); |
| } |
| } |
| |
| if (testCaseId == null || !configurator.configureWagonForTest(wagon, testCaseId)) { |
| logger.error("Cannot run test: " + testCaseId + ". Wagon under test does not support this test case."); |
| |
| return false; |
| } |
| |
| try { |
| serverFixture.start(); |
| } catch (Exception e) { |
| throw new IllegalStateException("Failed to start: " + e.getMessage(), e); |
| } |
| |
| repo = new Repository("test", baseUrl); |
| |
| wagon.connect(repo, auth, proxy); |
| |
| return true; |
| } |
| |
| protected int getPort() { |
| return serverFixture.getHttpPort(); |
| } |
| |
| protected int getPortPropertyValue() { |
| return Integer.parseInt(System.getProperty("test.port", "-1")); |
| } |
| |
| protected String getBaseUrl() { |
| if (baseUrl == null) { |
| StringBuilder sb = new StringBuilder(); |
| sb.append(isSsl() ? "https" : "http"); |
| sb.append("://" + ServerFixture.SERVER_HOST + ":"); |
| sb.append(getPort()); |
| |
| baseUrl = sb.toString(); |
| } |
| |
| return baseUrl; |
| } |
| |
| protected ServerFixture getServerFixture() { |
| return serverFixture; |
| } |
| |
| protected static PlexusContainer getContainer() { |
| return container; |
| } |
| |
| protected Wagon getWagon() { |
| return wagon; |
| } |
| |
| protected static WagonTestCaseConfigurator getConfigurator() { |
| return configurator; |
| } |
| |
| protected static Set<File> getTmpfiles() { |
| return TMP_FILES; |
| } |
| |
| protected Repository getRepo() { |
| return repo; |
| } |
| } |