| /******************************************************************************* |
| * Copyright (c) 2009, 2010 Steffen Pingel and others. |
| * 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: |
| * Steffen Pingel - initial API and implementation |
| *******************************************************************************/ |
| |
| package org.eclipse.mylyn.trac.tests.support; |
| |
| import java.net.Proxy; |
| import java.util.HashSet; |
| import java.util.Set; |
| |
| import org.eclipse.core.runtime.Assert; |
| import org.eclipse.mylyn.commons.net.IProxyProvider; |
| import org.eclipse.mylyn.commons.net.WebLocation; |
| import org.eclipse.mylyn.commons.net.WebUtil; |
| import org.eclipse.mylyn.commons.repositories.core.auth.UserCredentials; |
| import org.eclipse.mylyn.commons.sdk.util.CommonTestUtil; |
| import org.eclipse.mylyn.commons.sdk.util.CommonTestUtil.PrivilegeLevel; |
| import org.eclipse.mylyn.commons.sdk.util.FixtureConfiguration; |
| import org.eclipse.mylyn.commons.sdk.util.TestConfiguration; |
| import org.eclipse.mylyn.internal.trac.core.TracClientFactory; |
| import org.eclipse.mylyn.internal.trac.core.TracCorePlugin; |
| import org.eclipse.mylyn.internal.trac.core.TracRepositoryConnector; |
| import org.eclipse.mylyn.internal.trac.core.client.ITracClient; |
| import org.eclipse.mylyn.internal.trac.core.client.ITracClient.Version; |
| import org.eclipse.mylyn.tasks.core.TaskRepository; |
| import org.eclipse.mylyn.tests.util.TestFixture; |
| |
| /** |
| * Initializes Trac repositories to a defined state. This is done once per test run, since cleaning and initializing the |
| * repository for each test method would take too long. |
| * |
| * @author Steffen Pingel |
| */ |
| public class TracFixture extends TestFixture { |
| |
| public static String TAG_MISC = "misc"; |
| |
| public static final String TAG_TEST = "test"; |
| |
| private static TracFixture current; |
| |
| public static TracFixture current() { |
| if (current == null) { |
| current = TestConfiguration.getDefault().discoverDefault(TracFixture.class, "trac"); |
| current.activate(); |
| } |
| return current; |
| } |
| |
| private final Version accessMode; |
| |
| private final String version; |
| |
| private final Set<String> tags; |
| |
| private final boolean excluded; |
| |
| public TracFixture(Version accessMode, String url, String version, String info) { |
| super(TracCorePlugin.CONNECTOR_KIND, url); |
| Assert.isNotNull(accessMode); |
| Assert.isNotNull(info); |
| this.accessMode = accessMode; |
| this.version = version; |
| this.tags = new HashSet<String>(); |
| this.excluded = info.startsWith("Test"); |
| setInfo("Trac", version, info); |
| } |
| |
| public TracFixture(FixtureConfiguration configuration) { |
| this(Version.fromVersion(configuration.getProperties().get("version")), configuration.getUrl(), |
| configuration.getVersion(), configuration.getInfo()); |
| if (configuration.getTags() != null) { |
| this.tags.addAll(configuration.getTags()); |
| } |
| } |
| |
| @Override |
| public TracFixture activate() { |
| current = this; |
| setUpFramework(); |
| return this; |
| } |
| |
| @Override |
| protected TestFixture getDefault() { |
| return TestConfiguration.getDefault().discoverDefault(TracFixture.class, "trac"); |
| } |
| |
| public ITracClient connect() throws Exception { |
| return connect(repositoryUrl); |
| } |
| |
| public ITracClient connectXmlRpc(PrivilegeLevel level) throws Exception { |
| UserCredentials credentials = CommonTestUtil.getCredentials(level); |
| return connect(repositoryUrl, credentials.getUserName(), credentials.getPassword(), |
| getDefaultProxy(repositoryUrl), Version.XML_RPC); |
| } |
| |
| private Proxy getDefaultProxy(String url) { |
| return WebUtil.getProxyForUrl(url); |
| } |
| |
| public ITracClient connect(String url) throws Exception { |
| return connect(url, getDefaultProxy(url), PrivilegeLevel.USER); |
| } |
| |
| public ITracClient connect(String url, Proxy proxy, PrivilegeLevel level) throws Exception { |
| UserCredentials credentials = CommonTestUtil.getCredentials(level); |
| return connect(url, credentials.getUserName(), credentials.getPassword(), proxy); |
| } |
| |
| public ITracClient connect(String url, String username, String password) throws Exception { |
| return connect(url, username, password, getDefaultProxy(url)); |
| } |
| |
| public ITracClient connect(String url, String username, String password, Proxy proxy) throws Exception { |
| return connect(url, username, password, proxy, accessMode); |
| } |
| |
| public ITracClient connect(String url, String username, String password, final Proxy proxy, Version version) |
| throws Exception { |
| WebLocation location = new WebLocation(url, username, password, new IProxyProvider() { |
| public Proxy getProxyForHost(String host, String proxyType) { |
| return proxy; |
| } |
| }); |
| return TracClientFactory.createClient(location, version); |
| } |
| |
| public Version getAccessMode() { |
| return accessMode; |
| } |
| |
| public String getVersion() { |
| return version; |
| } |
| |
| public boolean isXmlRpcEnabled() { |
| return Version.XML_RPC.name().equals(getAccessMode()); |
| } |
| |
| public TaskRepository singleRepository(TracRepositoryConnector connector) { |
| connector.getClientManager().writeCache(); |
| TaskRepository repository = super.singleRepository(); |
| |
| // XXX avoid failing test due to stale client |
| connector.getClientManager().clearClients(); |
| |
| connector.getClientManager().readCache(); |
| return repository; |
| } |
| |
| @Override |
| public TaskRepository singleRepository() { |
| return singleRepository(connector()); |
| } |
| |
| @Override |
| protected void configureRepository(TaskRepository repository) { |
| repository.setTimeZoneId(ITracClient.TIME_ZONE); |
| repository.setCharacterEncoding(ITracClient.CHARSET); |
| repository.setVersion(accessMode.name()); |
| } |
| |
| @Override |
| protected void resetRepositories() { |
| TracCorePlugin.getDefault().getConnector().getClientManager().clearClients(); |
| } |
| |
| @Override |
| public TracRepositoryConnector connector() { |
| return (TracRepositoryConnector) super.connector(); |
| } |
| |
| public TracHarness createHarness() { |
| return new TracHarness(this); |
| } |
| |
| @Override |
| public boolean hasTag(String tag) { |
| return tags.contains(tag); |
| } |
| |
| public boolean requiresAuthentication() { |
| return getInfo().contains("AllBasicAuth"); |
| } |
| |
| @Override |
| public boolean isExcluded() { |
| return super.isExcluded() || excluded; |
| } |
| |
| public void waitToGuaranteeTaskUpdate() { |
| if (getVersion().compareTo("0.12") < 0) { |
| // Trac 0.11 can fail with database errors if subsequent task updates happen too quickly |
| try { |
| Thread.sleep(1000); |
| } catch (InterruptedException e) { |
| throw new RuntimeException(e); |
| } |
| } |
| } |
| |
| } |