| /******************************************************************************* |
| * Copyright (c) 2009, 2013 Tasktop Technologies and others. |
| * |
| * This program and the accompanying materials are made available under the |
| * terms of the Eclipse Public License v. 2.0 which is available at |
| * https://www.eclipse.org/legal/epl-2.0 |
| * |
| * SPDX-License-Identifier: EPL-2.0 |
| * |
| * Contributors: |
| * Tasktop Technologies - initial API and implementation |
| *******************************************************************************/ |
| |
| package org.eclipse.mylyn.bugzilla.tests.support; |
| |
| import java.io.File; |
| import java.io.IOException; |
| import java.io.InputStream; |
| import java.util.Collections; |
| import java.util.HashMap; |
| import java.util.Map; |
| |
| import org.eclipse.core.runtime.Assert; |
| import org.eclipse.core.runtime.CoreException; |
| import org.eclipse.core.runtime.NullProgressMonitor; |
| import org.eclipse.mylyn.commons.net.AbstractWebLocation; |
| import org.eclipse.mylyn.commons.net.AuthenticationType; |
| import org.eclipse.mylyn.commons.net.WebLocation; |
| 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.bugzilla.core.BugzillaAttribute; |
| import org.eclipse.mylyn.internal.bugzilla.core.BugzillaClient; |
| import org.eclipse.mylyn.internal.bugzilla.core.BugzillaClientManager; |
| import org.eclipse.mylyn.internal.bugzilla.core.BugzillaCorePlugin; |
| import org.eclipse.mylyn.internal.bugzilla.core.BugzillaRepositoryConnector; |
| import org.eclipse.mylyn.internal.bugzilla.core.BugzillaVersion; |
| import org.eclipse.mylyn.internal.bugzilla.core.IBugzillaConstants; |
| import org.eclipse.mylyn.tasks.core.ITaskMapping; |
| import org.eclipse.mylyn.tasks.core.RepositoryResponse; |
| import org.eclipse.mylyn.tasks.core.TaskMapping; |
| import org.eclipse.mylyn.tasks.core.TaskRepository; |
| import org.eclipse.mylyn.tasks.core.data.AbstractTaskDataHandler; |
| import org.eclipse.mylyn.tasks.core.data.TaskAttribute; |
| import org.eclipse.mylyn.tasks.core.data.TaskAttributeMapper; |
| import org.eclipse.mylyn.tasks.core.data.TaskData; |
| import org.eclipse.mylyn.tasks.core.data.TaskDataCollector; |
| import org.eclipse.mylyn.tests.util.TestFixture; |
| |
| import junit.framework.AssertionFailedError; |
| |
| /** |
| * @author Steffen Pingel |
| * @author Thomas Ehrnhoefer |
| * @author Frank Becker |
| */ |
| public class BugzillaFixture extends TestFixture { |
| |
| public static final String CUSTOM_WF = "Custom Workflow"; |
| |
| public static final String CUSTOM_WF_AND_STATUS = "Custom Workflow and Status"; |
| |
| private static BugzillaFixture current; |
| |
| private final String version; |
| |
| private final BugzillaVersion bugzillaVersion; |
| |
| private final Map<String, String> properties; |
| |
| private final Map<String, String> defaultproperties = new HashMap<String, String>() { |
| private static final long serialVersionUID = 6995247925138693239L; |
| |
| { |
| put("xmlrpc_enabled", "true"); |
| } |
| }; |
| |
| private BugzillaRepositoryConnector connector; |
| |
| public BugzillaFixture(FixtureConfiguration config) { |
| super(BugzillaCorePlugin.CONNECTOR_KIND, config.getUrl()); |
| this.version = config.getVersion(); |
| this.bugzillaVersion = new BugzillaVersion(version); |
| setInfo("Bugzilla", version, config.getInfo()); |
| this.properties = config.getProperties(); |
| } |
| |
| public BugzillaFixture(String url, String version, String info) { |
| super(BugzillaCorePlugin.CONNECTOR_KIND, url); |
| this.version = version; |
| this.bugzillaVersion = new BugzillaVersion(version); |
| setInfo("Bugzilla", version, info); |
| this.properties = null; |
| } |
| |
| public BugzillaVersion getBugzillaVersion() { |
| return bugzillaVersion; |
| } |
| |
| public static void cleanup010() throws Exception { |
| } |
| |
| public static BugzillaFixture current() { |
| if (current == null) { |
| current = TestConfiguration.getDefault().discoverDefault(BugzillaFixture.class, "bugzilla"); |
| current.activate(); |
| } |
| return current; |
| } |
| |
| @Override |
| public BugzillaFixture activate() { |
| current = this; |
| setUpFramework(); |
| return this; |
| } |
| |
| @Override |
| protected TestFixture getDefault() { |
| return TestConfiguration.getDefault().discoverDefault(BugzillaFixture.class, "bugzilla"); |
| } |
| |
| public String getVersion() { |
| return version; |
| } |
| |
| public BugzillaClient client() throws CoreException, IOException { |
| UserCredentials credentials = CommonTestUtil.getCredentials(PrivilegeLevel.USER); |
| return client(getRepositoryUrl(), credentials.getUserName(), credentials.getPassword(), "", "", "UTF-8"); |
| } |
| |
| public BugzillaClient client(String hostUrl, String username, String password, String htAuthUser, String htAuthPass, |
| String encoding) throws CoreException, IOException { |
| WebLocation location = new WebLocation(hostUrl); |
| location.setCredentials(AuthenticationType.REPOSITORY, username, password); |
| location.setCredentials(AuthenticationType.HTTP, htAuthUser, htAuthPass); |
| return client(location, encoding); |
| |
| } |
| |
| public BugzillaClient client(AbstractWebLocation location, String encoding) throws CoreException { |
| |
| TaskRepository taskRepository = new TaskRepository(BugzillaCorePlugin.CONNECTOR_KIND, location.getUrl()); |
| if (getDsciptorfile() != null) { |
| String filepath = "testdata/repository/" + getDsciptorfile(); |
| try { |
| File file = BugzillaFixture.getFile(filepath); |
| if (file != null) { |
| taskRepository.setProperty(IBugzillaConstants.BUGZILLA_DESCRIPTOR_FILE, file.getCanonicalPath()); |
| } |
| } catch (AssertionFailedError a) { |
| // ignore the Exception. The BUGZILLA_DESCRIPTOR_FILE does not exist so the property is null |
| } catch (IOException e) { |
| // ignore the Exception. The BUGZILLA_DESCRIPTOR_FILE does not exist so the property is null |
| } |
| } |
| |
| taskRepository.setCredentials(AuthenticationType.REPOSITORY, |
| location.getCredentials(AuthenticationType.REPOSITORY), false); |
| |
| taskRepository.setCredentials(AuthenticationType.HTTP, location.getCredentials(AuthenticationType.HTTP), false); |
| taskRepository.setCharacterEncoding(encoding); |
| taskRepository.setProperty(IBugzillaConstants.BUGZILLA_USE_XMLRPC, getProperty("xmlrpc_enabled")); |
| |
| connector = new BugzillaRepositoryConnector(); |
| BugzillaClientManager bugzillaClientManager = connector.getClientManager(); |
| BugzillaClient client = bugzillaClientManager.getClient(taskRepository, null); |
| |
| connector.getRepositoryConfiguration(taskRepository, false, new NullProgressMonitor()); |
| connector.writeRepositoryConfigFile(); |
| return client; |
| } |
| |
| public BugzillaClient client(PrivilegeLevel level) throws Exception { |
| AbstractWebLocation location = location(level); |
| return client(location, "UTF-8"); |
| } |
| |
| public static File getFile(String filename) throws IOException { |
| return CommonTestUtil.getFile(BugzillaFixture.class, filename); |
| } |
| |
| public static InputStream getResource(String filename) throws IOException { |
| return CommonTestUtil.getResource(BugzillaFixture.class, filename); |
| } |
| |
| /** |
| * Create and returns a minimal task. |
| * |
| * @param summary |
| * may be <code>null</code> |
| * @param description |
| * may be <code>null</code> |
| * @return The taskData retrieved from updating the task |
| */ |
| public TaskData createTask(PrivilegeLevel level, String summary, String description) throws Exception { |
| final String summaryNotNull = summary != null ? summary : "summary"; |
| final String descriptionNotNull = description != null ? description : "description"; |
| return createTask(level, new HashMap<String, String>() { |
| private static final long serialVersionUID = 1L; |
| { |
| put(TaskAttribute.SUMMARY, summaryNotNull); |
| put(TaskAttribute.DESCRIPTION, descriptionNotNull); |
| put(BugzillaAttribute.OP_SYS.getKey(), "All"); |
| put(BugzillaAttribute.REP_PLATFORM.getKey(), "All"); |
| put(BugzillaAttribute.VERSION.getKey(), "unspecified"); |
| } |
| }); |
| } |
| |
| public TaskData createTask(PrivilegeLevel level, Map<String, String> additionalAttributeValues) throws Exception { |
| Assert.isLegal(additionalAttributeValues.containsKey(TaskAttribute.SUMMARY), "need value for Summary"); |
| Assert.isLegal(additionalAttributeValues.containsKey(TaskAttribute.DESCRIPTION), "need value for Description"); |
| ITaskMapping initializationData = new TaskMapping() { |
| |
| @Override |
| public String getProduct() { |
| return "ManualTest"; |
| } |
| |
| @Override |
| public String getComponent() { |
| // ignore |
| return "ManualC1"; |
| } |
| |
| }; |
| BugzillaClient client = client(level); |
| AbstractTaskDataHandler taskDataHandler = connector().getTaskDataHandler(); |
| TaskAttributeMapper mapper = taskDataHandler.getAttributeMapper(repository()); |
| TaskData taskData = new TaskData(mapper, repository().getConnectorKind(), repository().getRepositoryUrl(), ""); |
| taskDataHandler.initializeTaskData(repository(), taskData, initializationData, null); |
| for (String attributeKey : additionalAttributeValues.keySet()) { |
| taskData.getRoot() |
| .createMappedAttribute(attributeKey) |
| .setValue(additionalAttributeValues.get(attributeKey)); |
| } |
| RepositoryResponse response = submitTask(taskData, client); |
| String bugId = response.getTaskId(); |
| return getTask(bugId, client); |
| } |
| |
| /** |
| * Retrieve task data for given task id |
| * |
| * @param id |
| * @param client |
| * @return The taskData retrieved |
| * @throws Exception |
| */ |
| public TaskData getTask(String id, BugzillaClient client) throws Exception { |
| final AbstractTaskDataHandler taskDataHandler = connector().getTaskDataHandler(); |
| TaskAttributeMapper mapper = taskDataHandler.getAttributeMapper(repository()); |
| final TaskData[] newData = new TaskData[1]; |
| client.getTaskData(Collections.singleton(id), new TaskDataCollector() { |
| @Override |
| public void accept(TaskData data) { |
| newData[0] = data; |
| } |
| }, mapper, null); |
| taskDataHandler.initializeTaskData(repository(), newData[0], null, null); |
| return newData[0]; |
| } |
| |
| public RepositoryResponse submitTask(TaskData taskData, BugzillaClient client) throws IOException, CoreException { |
| RepositoryResponse result = client.postTaskData(taskData, null); |
| return result; |
| } |
| |
| @Override |
| public BugzillaRepositoryConnector connector() { |
| return connector; |
| } |
| |
| public String getProperty(String key) { |
| String result = null; |
| if (properties != null) { |
| result = properties.get(key); |
| if (result == null) { |
| result = defaultproperties.get(key); |
| } |
| } else { |
| result = defaultproperties.get(key); |
| } |
| return result; |
| } |
| |
| public boolean isCustomWorkflowAndStatus() { |
| return Boolean.parseBoolean(getProperty("custom_wf_and_status")); |
| } |
| |
| public boolean isCustomWorkflow() { |
| return Boolean.parseBoolean(getProperty("custom_wf")); |
| } |
| |
| public boolean isXmlRpcEnabled() { |
| return Boolean.parseBoolean(getProperty("xmlrpc_enabled")); |
| } |
| |
| public String getDsciptorfile() { |
| return getProperty("desciptorfile"); |
| } |
| |
| public BugzillaHarness createHarness() { |
| return new BugzillaHarness(this); |
| } |
| |
| public boolean isBugzilla51OrGreater() { |
| return bugzillaVersion.compareTo(BugzillaVersion.BUGZILLA_5_1) < 0; |
| } |
| } |