### Question:
ReadEntryProcessor extends PacketProcessorBase<ReadRequest> { public static ReadEntryProcessor create(ReadRequest request, Channel channel, BookieRequestProcessor requestProcessor, ExecutorService fenceThreadPool) { ReadEntryProcessor rep = RECYCLER.get(); rep.init(request, channel, requestProcessor); rep.fenceThreadPool = fenceThreadPool; return rep; } private  ReadEntryProcessor(Recycler.Handle<ReadEntryProcessor> recyclerHandle); static ReadEntryProcessor create(ReadRequest request,
                                            Channel channel,
                                            BookieRequestProcessor requestProcessor,
                                            ExecutorService fenceThreadPool); @Override String toString();  }### Answer:
@Test public void testNonFenceRequest() throws Exception { ChannelPromise promise = new DefaultChannelPromise(channel); AtomicReference<Object> writtenObject = new AtomicReference<>(); CountDownLatch latch = new CountDownLatch(1); doAnswer(invocationOnMock -> { writtenObject.set(invocationOnMock.getArgument(0)); latch.countDown(); return promise; }).when(channel).writeAndFlush(any(Response.class), any()); long ledgerId = System.currentTimeMillis(); ReadRequest request = new ReadRequest(BookieProtocol.CURRENT_PROTOCOL_VERSION, ledgerId, 1, (short) 0, new byte[]{}); ReadEntryProcessor processor = ReadEntryProcessor.create(request, channel, requestProcessor, null); processor.run(); latch.await(); verify(channel, times(1)).writeAndFlush(any(Response.class), any()); assertTrue(writtenObject.get() instanceof Response); Response response = (Response) writtenObject.get(); assertEquals(1, response.getEntryId()); assertEquals(ledgerId, response.getLedgerId()); assertEquals(BookieProtocol.READENTRY, response.getOpCode()); assertEquals(BookieProtocol.EOK, response.getErrorCode()); }