Return a 404 on ResourceNotFoundException Current implementation returns a 500, which is incorrect. A ResourceNotFoundException indicates a resource could not be found, which is REST translates to a 404 http code. Returning a 404 will ensure that clients will be able to correctly identify missing projects. Bug: Issue 16730 Change-Id: Ifb331dcee7165b7b2f2b33879c6c3cd2edfe8cc2
diff --git a/src/main/java/com/googlesource/gerrit/plugins/replication/pull/api/PullReplicationFilter.java b/src/main/java/com/googlesource/gerrit/plugins/replication/pull/api/PullReplicationFilter.java index 7027239..df43519 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/replication/pull/api/PullReplicationFilter.java +++ b/src/main/java/com/googlesource/gerrit/plugins/replication/pull/api/PullReplicationFilter.java
@@ -22,6 +22,7 @@ import static javax.servlet.http.HttpServletResponse.SC_CREATED; import static javax.servlet.http.HttpServletResponse.SC_FORBIDDEN; import static javax.servlet.http.HttpServletResponse.SC_INTERNAL_SERVER_ERROR; +import static javax.servlet.http.HttpServletResponse.SC_NOT_FOUND; import static javax.servlet.http.HttpServletResponse.SC_OK; import com.google.common.flogger.FluentLogger; @@ -152,9 +153,12 @@ } catch (ResourceConflictException e) { RestApiServlet.replyError( httpRequest, httpResponse, SC_CONFLICT, e.getMessage(), e.caching(), e); - } catch (InitProjectException | ResourceNotFoundException e) { + } catch (InitProjectException e) { RestApiServlet.replyError( httpRequest, httpResponse, SC_INTERNAL_SERVER_ERROR, e.getMessage(), e.caching(), e); + } catch (ResourceNotFoundException e) { + RestApiServlet.replyError( + httpRequest, httpResponse, SC_NOT_FOUND, e.getMessage(), e.caching(), e); } catch (NoSuchElementException e) { RestApiServlet.replyError( httpRequest, httpResponse, SC_BAD_REQUEST, "Project name not present in the url", e);
diff --git a/src/test/java/com/googlesource/gerrit/plugins/replication/pull/api/PullReplicationFilterTest.java b/src/test/java/com/googlesource/gerrit/plugins/replication/pull/api/PullReplicationFilterTest.java index 2ed1466..bdad210 100644 --- a/src/test/java/com/googlesource/gerrit/plugins/replication/pull/api/PullReplicationFilterTest.java +++ b/src/test/java/com/googlesource/gerrit/plugins/replication/pull/api/PullReplicationFilterTest.java
@@ -242,7 +242,7 @@ } @Test - public void shouldBe500WhenResourceNotFound() throws Exception { + public void shouldBe404WhenResourceNotFound() throws Exception { when(request.getRequestURI()).thenReturn(DELETE_PROJECT_URI); when(request.getMethod()).thenReturn("DELETE"); when(projectsCollection.parse(TopLevelResource.INSTANCE, IdString.fromDecoded(PROJECT_NAME))) @@ -254,7 +254,7 @@ final PullReplicationFilter pullReplicationFilter = createPullReplicationFilter(); pullReplicationFilter.doFilter(request, response, filterChain); - verify(response).setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); + verify(response).setStatus(HttpServletResponse.SC_NOT_FOUND); } @Test