### Question:
ResumableAsyncHandler implements AsyncHandler<Response> { @Override public State onStatusReceived(final HttpResponseStatus status) throws Exception { responseBuilder.accumulate(status); if (status.getStatusCode() == 200 || status.getStatusCode() == 206) { url = status.getUri().toUrl(); } else { return AsyncHandler.State.ABORT; } if (decoratedAsyncHandler != null) { return decoratedAsyncHandler.onStatusReceived(status); } return AsyncHandler.State.CONTINUE; } private  ResumableAsyncHandler(long byteTransferred, ResumableProcessor resumableProcessor,
                                AsyncHandler<Response> decoratedAsyncHandler, boolean accumulateBody);  ResumableAsyncHandler(long byteTransferred);  ResumableAsyncHandler(boolean accumulateBody);  ResumableAsyncHandler();  ResumableAsyncHandler(AsyncHandler<Response> decoratedAsyncHandler);  ResumableAsyncHandler(long byteTransferred, AsyncHandler<Response> decoratedAsyncHandler);  ResumableAsyncHandler(ResumableProcessor resumableProcessor);  ResumableAsyncHandler(ResumableProcessor resumableProcessor, boolean accumulateBody); @Override State onStatusReceived(final HttpResponseStatus status); @Override void onThrowable(Throwable t); @Override State onBodyPartReceived(HttpResponseBodyPart bodyPart); @Override Response onCompleted(); @Override State onHeadersReceived(HttpHeaders headers); @Override State onTrailingHeadersReceived(HttpHeaders headers); Request adjustRequestRange(Request request); ResumableAsyncHandler setResumableListener(ResumableListener resumableListener);  }### Answer:
@Test public void testOnStatusReceivedOkStatus() throws Exception { MapResumableProcessor processor = new MapResumableProcessor(); ResumableAsyncHandler handler = new ResumableAsyncHandler(processor); HttpResponseStatus responseStatus200 = mock(HttpResponseStatus.class); when(responseStatus200.getStatusCode()).thenReturn(200); when(responseStatus200.getUri()).thenReturn(mock(Uri.class)); State state = handler.onStatusReceived(responseStatus200); assertEquals(state, AsyncHandler.State.CONTINUE, "Status should be CONTINUE for a OK response"); }
@Test public void testOnStatusReceived206Status() throws Exception { MapResumableProcessor processor = new MapResumableProcessor(); ResumableAsyncHandler handler = new ResumableAsyncHandler(processor); HttpResponseStatus responseStatus206 = mock(HttpResponseStatus.class); when(responseStatus206.getStatusCode()).thenReturn(206); when(responseStatus206.getUri()).thenReturn(mock(Uri.class)); State state = handler.onStatusReceived(responseStatus206); assertEquals(state, AsyncHandler.State.CONTINUE, "Status should be CONTINUE for a 'Partial Content' response"); }
@Test public void testOnStatusReceivedOkStatusWithDecoratedAsyncHandler() throws Exception { HttpResponseStatus mockResponseStatus = mock(HttpResponseStatus.class); when(mockResponseStatus.getStatusCode()).thenReturn(200); when(mockResponseStatus.getUri()).thenReturn(mock(Uri.class)); @SuppressWarnings("unchecked") AsyncHandler<Response> decoratedAsyncHandler = mock(AsyncHandler.class); when(decoratedAsyncHandler.onStatusReceived(mockResponseStatus)).thenReturn(State.CONTINUE); ResumableAsyncHandler handler = new ResumableAsyncHandler(decoratedAsyncHandler); State state = handler.onStatusReceived(mockResponseStatus); verify(decoratedAsyncHandler).onStatusReceived(mockResponseStatus); assertEquals(state, State.CONTINUE, "State returned should be equal to the one returned from decoratedAsyncHandler"); }
@Test public void testOnStatusReceived500Status() throws Exception { MapResumableProcessor processor = new MapResumableProcessor(); ResumableAsyncHandler handler = new ResumableAsyncHandler(processor); HttpResponseStatus mockResponseStatus = mock(HttpResponseStatus.class); when(mockResponseStatus.getStatusCode()).thenReturn(500); when(mockResponseStatus.getUri()).thenReturn(mock(Uri.class)); State state = handler.onStatusReceived(mockResponseStatus); assertEquals(state, AsyncHandler.State.ABORT, "State should be ABORT for Internal Server Error status"); }