Fix Jira issue not found
After I9a0183b58, plugin was able to connect to a Jira server but failed
to find or annotate issues. The method URL(context,spec) in JiraRestApi
caused the issue: If the spec begins with a forward slash, it replaces
the path provided in the passed URL context as a first parameter.
This is fixed by appending the spec to the URL string and converting it
directly into the URL.
Bug: Issue 8263
Change-Id: I3ff701b25d9c69a4ebed88e3ff07f6390ea177a9
diff --git a/src/main/java/com/googlesource/gerrit/plugins/its/jira/restapi/JiraRestApi.java b/src/main/java/com/googlesource/gerrit/plugins/its/jira/restapi/JiraRestApi.java
index 9d7589d..1282dae 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/its/jira/restapi/JiraRestApi.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/its/jira/restapi/JiraRestApi.java
@@ -14,12 +14,12 @@
package com.googlesource.gerrit.plugins.its.jira.restapi;
+import com.google.common.annotations.VisibleForTesting;
import com.google.gson.Gson;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
-import java.net.MalformedURLException;
import java.net.Proxy;
import java.net.ProxySelector;
import java.net.URL;
@@ -30,7 +30,7 @@
/** Jira Rest Client. */
public class JiraRestApi<T> {
private static final String BASE_PREFIX = "rest/api/2";
- private final URL baseUrl;
+ private final String baseUrl;
private final String auth;
private final Gson gson;
@@ -45,10 +45,9 @@
* @param user username of the jira user
* @param pass password of the jira user
*/
- JiraRestApi(URL url, String user, String pass, Class<T> classOfT, String classPrefix)
- throws MalformedURLException {
+ JiraRestApi(URL url, String user, String pass, Class<T> classOfT, String classPrefix) {
this.auth = Base64.getEncoder().encodeToString((user + ":" + pass).getBytes());
- this.baseUrl = new URL(url, BASE_PREFIX + classPrefix);
+ this.baseUrl = url + BASE_PREFIX + classPrefix;
this.gson = new Gson();
this.classOfT = classOfT;
}
@@ -80,7 +79,8 @@
return doGet(spec, passCode, null);
}
- URL getBaseUrl() {
+ @VisibleForTesting
+ String getBaseUrl() {
return baseUrl;
}
@@ -97,7 +97,7 @@
private HttpURLConnection prepHttpConnection(String spec, boolean isPostRequest)
throws IOException {
- URL url = new URL(baseUrl, spec);
+ URL url = new URL(baseUrl + spec);
ProxySelector proxySelector = ProxySelector.getDefault();
Proxy proxy = HttpSupport.proxyFor(proxySelector, url);
HttpURLConnection conn = (HttpURLConnection) url.openConnection(proxy);
diff --git a/src/main/java/com/googlesource/gerrit/plugins/its/jira/restapi/JiraRestApiProvider.java b/src/main/java/com/googlesource/gerrit/plugins/its/jira/restapi/JiraRestApiProvider.java
index 3c4da25..c4c468d 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/its/jira/restapi/JiraRestApiProvider.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/its/jira/restapi/JiraRestApiProvider.java
@@ -14,20 +14,19 @@
this.pass = pass;
}
- public <T> JiraRestApi<T> get(Class<T> classOfT, String classPrefix)
- throws MalformedURLException {
+ public <T> JiraRestApi<T> get(Class<T> classOfT, String classPrefix) {
return new JiraRestApi<>(url, user, pass, classOfT, classPrefix);
}
- public JiraRestApi<JiraIssue> getIssue() throws MalformedURLException {
+ public JiraRestApi<JiraIssue> getIssue() {
return get(JiraIssue.class, "/issue");
}
- public JiraRestApi<JiraServerInfo> getServerInfo() throws MalformedURLException {
+ public JiraRestApi<JiraServerInfo> getServerInfo() {
return get(JiraServerInfo.class, "/serverInfo");
}
- public JiraRestApi<JiraProject[]> getProjects() throws MalformedURLException {
+ public JiraRestApi<JiraProject[]> getProjects() {
return get(JiraProject[].class, "/project");
}
}
diff --git a/src/test/java/com/googlesource/gerrit/plugins/its/jira/restapi/JiraRestApiTest.java b/src/test/java/com/googlesource/gerrit/plugins/its/jira/restapi/JiraRestApiTest.java
index 77fb4bf..a789353 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/its/jira/restapi/JiraRestApiTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/its/jira/restapi/JiraRestApiTest.java
@@ -12,7 +12,7 @@
JiraRestApi<JiraServerInfo> serverInfo =
new JiraRestApiProvider(nonRootJiraUrl, "", "").getServerInfo();
- String jiraApiUrl = serverInfo.getBaseUrl().toString();
+ String jiraApiUrl = serverInfo.getBaseUrl();
assertThat(jiraApiUrl).startsWith(nonRootJiraUrl);
}
@@ -22,7 +22,7 @@
JiraRestApi<JiraServerInfo> serverInfo =
new JiraRestApiProvider(nonRootJiraUrl, "", "").getServerInfo();
- String jiraApiUrl = serverInfo.getBaseUrl().toString();
+ String jiraApiUrl = serverInfo.getBaseUrl();
assertThat(jiraApiUrl).startsWith(nonRootJiraUrl);
}
@@ -32,7 +32,7 @@
JiraRestApi<JiraServerInfo> serverInfo =
new JiraRestApiProvider(rootJiraUrl, "", "").getServerInfo();
- String jiraApiUrl = serverInfo.getBaseUrl().toString();
+ String jiraApiUrl = serverInfo.getBaseUrl();
assertThat(jiraApiUrl).startsWith(rootJiraUrl);
}
}