Skip to content

Commit

Permalink
log HTTP-response in case status was not OK
Browse files Browse the repository at this point in the history
fixes #JENKINS-57697
  • Loading branch information
sephiroth-j committed Nov 5, 2020
1 parent 61c433a commit daf9a60
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 1 deletion.
Expand Up @@ -23,6 +23,7 @@
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.UncheckedIOException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
Expand Down Expand Up @@ -98,13 +99,16 @@ public String testConnection() throws ApiClientException {
return conn.getHeaderField("X-Powered-By");
} else if (conn.getResponseCode() == HTTP_UNAUTHORIZED || conn.getResponseCode() == HTTP_FORBIDDEN) {
throw new ApiClientException("Authentication or authorization failure");
} else {
logger.log("An error occurred connecting to Dependency-Track - HTTP response code: " + conn.getResponseCode() + " " + conn.getResponseMessage());
logHttpError(conn);
throw new ApiClientException("An error occurred connecting to Dependency-Track");
}
} catch (ApiClientException e) {
throw e;
} catch (IOException e) {
throw new ApiClientException("An error occurred connecting to Dependency-Track", e);
}
throw new ApiClientException("An error occurred connecting to Dependency-Track");
}

public List<Project> getProjects() throws ApiClientException {
Expand Down Expand Up @@ -174,6 +178,7 @@ public Project lookupProject(String projectName, String projectVersion) throws A
throw new ApiClientException("An error occurred while looking up project id", e);
}
} else {
logHttpError(conn);
throw new ApiClientException("An error occurred while looking up project id - HTTP response code: " + conn.getResponseCode() + " " + conn.getResponseMessage());
}
} catch (ApiClientException e) {
Expand Down Expand Up @@ -201,6 +206,7 @@ public List<Finding> getFindings(String projectUuid) throws ApiClientException {
throw new ApiClientException("An error occurred while retrieving findings", e);
}
} else {
logHttpError(conn);
throw new ApiClientException("An error occurred while retrieving findings - HTTP response code: " + conn.getResponseCode() + " " + conn.getResponseMessage());
}
} catch (ApiClientException e) {
Expand Down Expand Up @@ -270,16 +276,20 @@ public UploadResult upload(String projectId, String projectName, String projectV
}
case HTTP_BAD_REQUEST:
logger.log(Messages.Builder_Payload_Invalid());
logHttpError(conn);
break;
case HTTP_UNAUTHORIZED:
logger.log(Messages.Builder_Unauthorized());
logHttpError(conn);
break;
case HTTP_NOT_FOUND:
logger.log(Messages.Builder_Project_NotFound());
logHttpError(conn);
break;
default:
logger.log(Messages.Builder_Error_Connect() + ": "
+ conn.getResponseCode() + " " + conn.getResponseMessage());
logHttpError(conn);
break;
}
return new UploadResult(false);
Expand All @@ -304,6 +314,7 @@ public boolean isTokenBeingProcessed(String token) throws ApiClientException {
}
} else {
logger.log("An acceptable response was not returned: " + conn.getResponseCode());
logHttpError(conn);
throw new ApiClientException("An acceptable response was not returned - HTTP response code: " + conn.getResponseCode() + " " + conn.getResponseMessage());
}
} catch (ApiClientException e) {
Expand All @@ -317,4 +328,12 @@ private String getResponseBody(InputStream in) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(in, StandardCharsets.UTF_8));
return reader.lines().collect(Collectors.joining());
}

private void logHttpError(final HttpURLConnection conn) {
try (InputStream in = new BufferedInputStream(conn.getErrorStream())) {
logger.log(getResponseBody(in));
} catch (UncheckedIOException | IOException ignore) {
// ignored ... the error stream might have been closed already or whatever
}
}
}
Expand Up @@ -51,6 +51,7 @@
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.ArgumentMatchers.startsWith;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

Expand Down Expand Up @@ -117,6 +118,24 @@ public void testConnectionTestUnauth() {
.hasMessage("Authentication or authorization failure");
}

@Test
public void testConnectionTestInternalError() {
server = HttpServer.create()
.host("localhost")
.port(0)
.route(routes -> routes.get(ApiClient.PROJECT_URL, (request, response) -> response.status(HttpResponseStatus.INTERNAL_SERVER_ERROR).sendString(Mono.just("something went wrong"))))
.bindNow();

ApiClient uut = createClient();

assertThatCode(() -> uut.testConnection()).isInstanceOf(ApiClientException.class)
.hasNoCause()
.hasMessage("An error occurred connecting to Dependency-Track");

verify(logger).log(startsWith("An error occurred connecting to Dependency-Track - HTTP response code: 500"));
verify(logger).log(eq("something went wrong"));
}

@Test()
public void getProjectsTest() throws ApiClientException {
server = HttpServer.create()
Expand Down

0 comments on commit daf9a60

Please sign in to comment.