@Test public void createEmptySourceRemovesFromPool() throws PoolResourceException { // given ItemSourcePool mockedPool = mock(ItemSourcePool.class); PooledItemSourceFactory pooledItemSourceFactory = new PooledItemSourceFactory(mockedPool); // when pooledItemSourceFactory.createEmptySource(); // then verify(mockedPool).getPooled(); }
@Test public void isBufferedReturnsTrue() { // given PooledItemSourceFactory pooledItemSourceFactory = new PooledItemSourceFactory(mock(ItemSourcePool.class)); // when boolean isBuffered = pooledItemSourceFactory.isBuffered(); // then assertEquals(true, isBuffered); }
@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)); }
@Override public PooledItemSourceFactory build() { if (initialPoolSize <= 0) { throw new ConfigurationException("initialPoolSize must be higher than 0 for " + PLUGIN_NAME); } if (itemSizeInBytes <= 0) { throw new ConfigurationException("itemSizeInBytes must be higher than 0 for " + PLUGIN_NAME); } if (poolName == null) { poolName = UUID.randomUUID().toString(); } if (resizePolicy == null) { ResizePolicy resizePolicy = createResizePolicy(); LOGGER.info("No configured {} found for pool {}. Defaulting to {}", ResizePolicy.ELEMENT_TYPE, poolName, resizePolicy.getClass().getSimpleName()); this.resizePolicy = resizePolicy; } return new PooledItemSourceFactory(configuredBufferedItemSourcePool()); }
@Override public BatchBuilder<Bulk> createBatchBuilder() { return new BatchBuilder<Bulk>() { private final BufferedBulk.Builder builder = new BufferedBulk.Builder() .withBuffer(pooledItemSourceFactory.createEmptySource()) .withObjectWriter(objectWriter) .withObjectReader(objectReader); @Override public void add(Object item) { builder.addAction((BulkableAction) item); } @Override public Bulk build() { return builder.build(); } }; }
public static PooledItemSourceFactory.Builder createDefaultTestSourceFactoryConfig() { return PooledItemSourceFactory.newBuilder() .withInitialPoolSize(DEFAULT_TEST_POOL_SIZE) .withItemSizeInBytes(DEFAULT_TEST_ITEM_SIZE_IN_BYTES); }
@Test public void lifecycleStopShutsDownPool() { // given ItemSourcePool pool = mock(ItemSourcePool.class); PooledItemSourceFactory.Builder sourceFactoryConfig = spy(createDefaultTestSourceFactoryConfig()); when(sourceFactoryConfig.configuredBufferedItemSourcePool()).thenReturn(pool); PooledItemSourceFactory factory = sourceFactoryConfig.build(); // when factory.stop(1000, TimeUnit.MILLISECONDS); // then verify(pool).shutdown(); }
@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)); }
@Override public PooledItemSourceFactory build() { if (initialPoolSize <= 0) { throw new ConfigurationException("initialPoolSize must be higher than 0 for " + PLUGIN_NAME); } if (itemSizeInBytes <= 0) { throw new ConfigurationException("itemSizeInBytes must be higher than 0 for " + PLUGIN_NAME); } if (poolName == null) { poolName = UUID.randomUUID().toString(); } if (resizePolicy == null) { ResizePolicy resizePolicy = createResizePolicy(); LOGGER.info("No configured {} found for pool {}. Defaulting to {}", ResizePolicy.ELEMENT_TYPE, poolName, resizePolicy.getClass().getSimpleName()); this.resizePolicy = resizePolicy; } return new PooledItemSourceFactory(configuredBufferedItemSourcePool()); }
@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 throwsWhenCreateEmptySourceCantGetPooledElement() 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.createEmptySource(); } @Test
@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()); }