@Test public void createWritesItemSource() throws IOException, PoolResourceException { // given ItemSourcePool mockedPool = mock(ItemSourcePool.class); ByteBuf byteBuf = createDefaultTestByteBuf(); ItemSource<ByteBuf> bufferedItemSource = new BufferedItemSource(byteBuf, source -> {}); when(mockedPool.getPooled()).thenReturn(bufferedItemSource); PooledItemSourceFactory pooledItemSourceFactory = new PooledItemSourceFactory(mockedPool); LogEvent logEvent = mock(LogEvent.class); ObjectWriter objectWriter = spy(new ObjectMapper().writerFor(LogEvent.class)); // when pooledItemSourceFactory.create(logEvent, objectWriter); // then verify(objectWriter).writeValue(any(DataOutput.class), eq(logEvent)); }
@Test public void throwsWhenCreateCantGetPooledElement() throws PoolResourceException { // given ItemSourcePool mockedPool = mock(ItemSourcePool.class); String expectedMessage = UUID.randomUUID().toString(); when(mockedPool.getPooled()).thenThrow(new PoolResourceException(expectedMessage)); PooledItemSourceFactory pooledItemSourceFactory = new PooledItemSourceFactory(mockedPool); expectedException.expect(IllegalStateException.class); expectedException.expectMessage(expectedMessage); // when pooledItemSourceFactory.create(mock(LogEvent.class), new ObjectMapper().writerFor(LogEvent.class)); }
@Test public void createRemovesFromPool() throws PoolResourceException { // given ItemSourcePool mockedPool = mock(ItemSourcePool.class); ByteBuf byteBuf = createDefaultTestByteBuf(); ItemSource<ByteBuf> bufferedItemSource = new BufferedItemSource(byteBuf, source -> {}); when(mockedPool.getPooled()).thenReturn(bufferedItemSource); PooledItemSourceFactory pooledItemSourceFactory = new PooledItemSourceFactory(mockedPool); // when pooledItemSourceFactory.create(mock(LogEvent.class), new ObjectMapper().writerFor(LogEvent.class)); // then verify(mockedPool).getPooled(); }
@Test public void createExceptionReleasesPooledElement() throws IOException, PoolResourceException { // given ItemSourcePool mockedPool = mock(ItemSourcePool.class); ByteBuf byteBuf = createDefaultTestByteBuf(); ItemSource<ByteBuf> bufferedItemSource = spy(new BufferedItemSource(byteBuf, source -> {})); when(mockedPool.getPooled()).thenReturn(bufferedItemSource); PooledItemSourceFactory pooledItemSourceFactory = new PooledItemSourceFactory(mockedPool); LogEvent logEvent = mock(LogEvent.class); ObjectWriter objectWriter = spy(new ObjectMapper().writerFor(LogEvent.class)); doThrow(new IOException("test exception")).when(objectWriter).writeValue(any(DataOutput.class), eq(logEvent)); ItemSource<ByteBuf> result = null; Exception caught = null; // when try { result = pooledItemSourceFactory.create(logEvent, objectWriter); } catch (Exception e) { caught = e; } // then assertNull(result); verify(bufferedItemSource).release(); assertEquals(IllegalArgumentException.class, caught.getClass()); }