blob: 71fcd46460e3e113c78f9f16be4bc78672464d67 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2009, 2015 Tasktop Technologies 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:
* Tasktop Technologies - initial API and implementation
*******************************************************************************/
package org.eclipse.mylyn.bugzilla.tests.core;
import java.net.InetSocketAddress;
import java.net.Proxy;
import java.util.HashSet;
import java.util.Set;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.mylyn.bugzilla.tests.AbstractBugzillaTest;
import org.eclipse.mylyn.bugzilla.tests.support.BugzillaFixture;
import org.eclipse.mylyn.commons.net.AbstractWebLocation;
import org.eclipse.mylyn.commons.net.AuthenticationCredentials;
import org.eclipse.mylyn.commons.net.AuthenticationType;
import org.eclipse.mylyn.commons.sdk.util.CommonTestUtil.PrivilegeLevel;
import org.eclipse.mylyn.internal.bugzilla.core.BugzillaAttribute;
import org.eclipse.mylyn.internal.bugzilla.core.BugzillaAttributeMapper;
import org.eclipse.mylyn.internal.bugzilla.core.BugzillaClient;
import org.eclipse.mylyn.internal.bugzilla.core.BugzillaRepositoryConnector;
import org.eclipse.mylyn.internal.bugzilla.core.BugzillaVersion;
import org.eclipse.mylyn.internal.bugzilla.core.RepositoryConfiguration;
import org.eclipse.mylyn.internal.tasks.core.RepositoryQuery;
import org.eclipse.mylyn.internal.tasks.core.TaskRepositoryLocation;
import org.eclipse.mylyn.tasks.core.IRepositoryQuery;
import org.eclipse.mylyn.tasks.core.RepositoryResponse;
import org.eclipse.mylyn.tasks.core.RepositoryStatus;
import org.eclipse.mylyn.tasks.core.TaskRepository;
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.UrlBuilder;
/**
* @author Robert Elves
* @author Thomas Ehrnhoefer
* @author Frank Becker
* @author David Green
*/
public class BugzillaClientTest extends AbstractBugzillaTest {
public void testRDFProductConfig() throws Exception {
if (BugzillaVersion.BUGZILLA_4_4.compareTo(BugzillaFixture.current().getBugzillaVersion()) == 0
|| BugzillaVersion.BUGZILLA_HEAD.compareTo(BugzillaFixture.current().getBugzillaVersion()) == 0) {
// FIXME: need fix of bug#372600
return;
}
RepositoryConfiguration config = client.getRepositoryConfiguration();
assertNotNull(config);
assertEquals(0, config.getInstallVersion()
.compareMajorMinorOnly(new BugzillaVersion(BugzillaFixture.current().getVersion())));
if (BugzillaFixture.current().isCustomWorkflowAndStatus()) {
assertEquals(8, config.getOptionValues(BugzillaAttribute.BUG_STATUS).size());
} else if (BugzillaFixture.current()
.getBugzillaVersion()
.compareMajorMinorOnly(BugzillaVersion.BUGZILLA_4_0) < 0) {
assertEquals(7, config.getOptionValues(BugzillaAttribute.BUG_STATUS).size());
} else {
assertEquals(5, config.getOptionValues(BugzillaAttribute.BUG_STATUS).size());
}
if (config.getOptionValues(BugzillaAttribute.RESOLUTION).contains("LATER")) {
assertEquals(8, config.getOptionValues(BugzillaAttribute.RESOLUTION).size());
assertEquals(8, config.getOptionValues(BugzillaAttribute.REP_PLATFORM).size());
assertEquals(36, config.getOptionValues(BugzillaAttribute.OP_SYS).size());
assertEquals(5, config.getOptionValues(BugzillaAttribute.PRIORITY).size());
} else {
if (BugzillaVersion.BUGZILLA_4_0
.compareMajorMinorOnly(new BugzillaVersion(BugzillaFixture.current().getVersion())) > 0) {
assertEquals(6, config.getOptionValues(BugzillaAttribute.RESOLUTION).size());
} else {
assertEquals(5, config.getOptionValues(BugzillaAttribute.RESOLUTION).size());
}
assertEquals(4, config.getOptionValues(BugzillaAttribute.REP_PLATFORM).size());
assertEquals(5, config.getOptionValues(BugzillaAttribute.OP_SYS).size());
assertEquals(6, config.getOptionValues(BugzillaAttribute.PRIORITY).size());
}
assertEquals(7, config.getOptionValues(BugzillaAttribute.BUG_SEVERITY).size());
assertEquals(3, config.getOptionValues(BugzillaAttribute.PRODUCT).size());
if (BugzillaFixture.current().isCustomWorkflowAndStatus()) {
assertEquals(5, config.getOpenStatusValues().size());
assertEquals(3, config.getClosedStatusValues().size());
} else if (BugzillaFixture.current()
.getBugzillaVersion()
.compareMajorMinorOnly(BugzillaVersion.BUGZILLA_4_0) < 0) {
assertEquals(4, config.getOpenStatusValues().size());
assertEquals(3, config.getClosedStatusValues().size());
} else {
assertEquals(3, config.getOpenStatusValues().size());
assertEquals(2, config.getClosedStatusValues().size());
}
assertEquals(2, config.getOptionValues(BugzillaAttribute.KEYWORDS).size());
assertEquals(2, config.getProductOptionValues(BugzillaAttribute.COMPONENT, "ManualTest").size());
assertEquals(4, config.getProductOptionValues(BugzillaAttribute.VERSION, "ManualTest").size());
assertEquals(4, config.getProductOptionValues(BugzillaAttribute.TARGET_MILESTONE, "ManualTest").size());
assertEquals(1, config.getProductOptionValues(BugzillaAttribute.COMPONENT, "TestProduct").size());
assertEquals(1, config.getProductOptionValues(BugzillaAttribute.VERSION, "TestProduct").size());
assertEquals(1, config.getProductOptionValues(BugzillaAttribute.TARGET_MILESTONE, "TestProduct").size());
assertEquals(2, config.getProductOptionValues(BugzillaAttribute.COMPONENT, "Product with Spaces").size());
assertEquals(4, config.getProductOptionValues(BugzillaAttribute.VERSION, "Product with Spaces").size());
assertEquals(4,
config.getProductOptionValues(BugzillaAttribute.TARGET_MILESTONE, "Product with Spaces").size());
}
public void testValidate() throws Exception {
TaskRepository repository = BugzillaFixture.current().repository();
AbstractWebLocation location = BugzillaFixture.current().location();
client = new BugzillaClient(location, repository, BugzillaFixture.current().connector());
client.validate(new NullProgressMonitor());
}
public void testValidateInvalidProxy() throws Exception {
TaskRepository repository = BugzillaFixture.current().repository();
AbstractWebLocation location = BugzillaFixture.current().location(PrivilegeLevel.USER,
new Proxy(Proxy.Type.HTTP, new InetSocketAddress("localhost", 12356)));
client = new BugzillaClient(location, repository, BugzillaFixture.current().connector());
try {
client.validate(new NullProgressMonitor());
fail("invalid proxy did not cause connection error");
} catch (Exception e) {
// ignore
}
}
public void testValidateAnonymous() throws Exception {
TaskRepository repository = BugzillaFixture.current().repository();
AuthenticationCredentials anonymousCreds = new AuthenticationCredentials("", "");
repository.setCredentials(AuthenticationType.REPOSITORY, anonymousCreds, false);
TaskRepositoryLocation location = new TaskRepositoryLocation(repository);
client = new BugzillaClient(location, repository, BugzillaFixture.current().connector());
client.validate(new NullProgressMonitor());
}
public void testValidateAnonymousPlusHTTP() throws Exception {
TaskRepository repository = BugzillaFixture.current().repository();
AuthenticationCredentials anonymousCreds = new AuthenticationCredentials("", "");
repository.setCredentials(AuthenticationType.REPOSITORY, anonymousCreds, false);
repository.setCredentials(AuthenticationType.HTTP, new AuthenticationCredentials("YYYYYYYY", "XXXXXXXX"),
false);
TaskRepositoryLocation location = new TaskRepositoryLocation(repository);
client = new BugzillaClient(location, repository, BugzillaFixture.current().connector());
try {
client.validate(new NullProgressMonitor());
} catch (CoreException e) {
assertEquals("Expected login error, got: " + e.getMessage(), RepositoryStatus.ERROR_REPOSITORY_LOGIN,
e.getStatus().getCode());
}
}
public void testValidateUser() throws Exception {
TaskRepository repository = BugzillaFixture.current().repository();
TaskRepositoryLocation location = new TaskRepositoryLocation(repository);
client = new BugzillaClient(location, repository, BugzillaFixture.current().connector());
client.validate(new NullProgressMonitor());
}
public void testValidateUserPlusHTTP() throws Exception {
TaskRepository repository = BugzillaFixture.current().repository();
repository.setCredentials(AuthenticationType.HTTP, new AuthenticationCredentials("YYYYYYYY", "XXXXXXXX"),
false);
TaskRepositoryLocation location = new TaskRepositoryLocation(repository);
client = new BugzillaClient(location, repository, BugzillaFixture.current().connector());
try {
client.validate(new NullProgressMonitor());
} catch (Exception e) {
assertEquals("Unable to login to " + repository.getUrl()
+ ".\n\n\n The username or password you entered is not valid.\n\n"
+ "Please validate credentials via Task Repositories view.", e.getMessage());
}
}
public void testCommentQuery() throws Exception {
BugzillaRepositoryConnector connector = BugzillaFixture.current().connector();
BugzillaAttributeMapper mapper = new BugzillaAttributeMapper(repository, connector);
TaskData newData = new TaskData(mapper, BugzillaFixture.current().getConnectorKind(),
BugzillaFixture.current().getRepositoryUrl(), "");
assertTrue(connector.getTaskDataHandler().initializeTaskData(repository, newData, null,
new NullProgressMonitor()));
newData.getRoot().getMappedAttribute(TaskAttribute.SUMMARY).setValue("testCommentQuery()");
newData.getRoot().getMappedAttribute(TaskAttribute.PRODUCT).setValue("TestProduct");
newData.getRoot().getMappedAttribute(TaskAttribute.COMPONENT).setValue("TestComponent");
newData.getRoot().getMappedAttribute(BugzillaAttribute.OP_SYS.getKey()).setValue("All");
long timestamp = System.currentTimeMillis();
newData.getRoot().getMappedAttribute(TaskAttribute.DESCRIPTION).setValue("" + timestamp);
RepositoryResponse response = client.postTaskData(newData, new NullProgressMonitor());
String bugid = response.getTaskId();
RepositoryQuery query = new RepositoryQuery(BugzillaFixture.current().getConnectorKind(), "123");
query.setRepositoryUrl(BugzillaFixture.current().getRepositoryUrl());
if (BugzillaFixture.current().getBugzillaVersion().compareMajorMinorOnly(BugzillaVersion.BUGZILLA_4_0) < 0) {
query.setUrl("?long_desc_type=allwordssubstr&long_desc=" + timestamp + "&bug_status=NEW&");
} else {
query.setUrl("?long_desc_type=allwordssubstr&long_desc=" + timestamp + "&bug_status=CONFIRMED&");
}
final Set<TaskData> returnedData = new HashSet<TaskData>();
TaskDataCollector collector = new TaskDataCollector() {
@Override
public void accept(TaskData taskData) {
returnedData.add(taskData);
}
};
client.getSearchHits(query, collector, mapper, new NullProgressMonitor());
assertEquals(1, returnedData.size());
assertEquals(bugid, returnedData.iterator().next().getTaskId());
}
/**
* test for bug 335278: enhance search result handler to handle additional attributes
*/
public void testQueryRealName_Bug335278() throws Exception {
String taskId = harness.enhanceSearchTaskExists();
if (taskId == null) {
taskId = harness.createEnhanceSearchTask();
}
IRepositoryQuery query = new RepositoryQuery(BugzillaFixture.current().getConnectorKind(), "query");
UrlBuilder urlBuilder = UrlBuilder.build(BugzillaFixture.current().repository()).append("/buglist.cgi");
urlBuilder.parameter("short_desc=test%20EnhanceSearch&columnlist",
"bug_severity,priority,assigned_to,bug_status,resolution,short_desc,changeddate,reporter,assigned_to_realname,reporter_realname,product,component");
query.setUrl(urlBuilder.toString());
final Set<TaskData> returnedData = new HashSet<TaskData>();
TaskDataCollector collector = new TaskDataCollector() {
@Override
public void accept(TaskData taskData) {
returnedData.add(taskData);
}
};
TaskAttributeMapper mapper = BugzillaFixture.current()
.connector()
.getTaskDataHandler()
.getAttributeMapper(BugzillaFixture.current().repository());
client.getSearchHits(query, collector, mapper, new NullProgressMonitor());
assertTrue(returnedData.size() > 0);
for (TaskData taskData : returnedData) {
TaskAttribute reporterName = taskData.getRoot().getAttribute(BugzillaAttribute.REPORTER_NAME.getKey());
TaskAttribute assignedToName = taskData.getRoot().getAttribute(BugzillaAttribute.ASSIGNED_TO_NAME.getKey());
assertHasValue(reporterName);
assertHasValue(assignedToName);
}
}
private void assertHasValue(TaskAttribute attribute) {
assertNotNull(attribute);
assertNotNull(attribute.getValue());
assertTrue(attribute.getValue().trim().length() > 0);
}
public void testLeadingZeros() throws Exception {
String taskNumber = "0002";
TaskData taskData = BugzillaFixture.current().getTask(taskNumber, client);
assertNotNull(taskData);
assertNotNull(taskData);
TaskAttribute idAttribute = taskData.getRoot().getAttribute(BugzillaAttribute.BUG_ID.getKey());
assertNotNull(idAttribute);
assertEquals("2", idAttribute.getValue());
}
}