From 43492bda1e1bd3c3e6355a756828e0edf0b65ce4 Mon Sep 17 00:00:00 2001 From: Woonduk Kang Date: Thu, 11 Jun 2015 14:13:39 +0900 Subject: [PATCH] refactoring collector - refactoring ObjectPool, add testcase --- .../collector/util/ByteBufferFactory.java | 17 +++++- .../collector/util/DatagramPacketFactory.java | 19 +++++- .../collector/util/DefaultObjectPool.java | 20 ++++--- .../util/DatagramPacketFactoryTest.java | 50 ++++++++++++++++ .../collector/util/DefaultObjectPoolTest.java | 58 +++++++++++++++++++ 5 files changed, 151 insertions(+), 13 deletions(-) create mode 100644 collector/src/test/java/com/navercorp/pinpoint/collector/util/DatagramPacketFactoryTest.java create mode 100644 collector/src/test/java/com/navercorp/pinpoint/collector/util/DefaultObjectPoolTest.java diff --git a/collector/src/main/java/com/navercorp/pinpoint/collector/util/ByteBufferFactory.java b/collector/src/main/java/com/navercorp/pinpoint/collector/util/ByteBufferFactory.java index 430301e48..0dd177508 100644 --- a/collector/src/main/java/com/navercorp/pinpoint/collector/util/ByteBufferFactory.java +++ b/collector/src/main/java/com/navercorp/pinpoint/collector/util/ByteBufferFactory.java @@ -23,11 +23,24 @@ import java.nio.ByteBuffer; */ public class ByteBufferFactory implements ObjectPoolFactory { - private static final int AcceptedSize = 65507; + public static final int UDP_MAX_PACKET_LENGTH = 65507; + + private final int bufferLength; + + public ByteBufferFactory() { + this(UDP_MAX_PACKET_LENGTH); + } + + public ByteBufferFactory(int bufferLength) { + if (bufferLength < 0 ) { + throw new IllegalArgumentException("negative bufferLength:" + bufferLength); + } + this.bufferLength = bufferLength; + } @Override public ByteBuffer create() { - return ByteBuffer.allocate(AcceptedSize); + return ByteBuffer.allocate(bufferLength); } @Override diff --git a/collector/src/main/java/com/navercorp/pinpoint/collector/util/DatagramPacketFactory.java b/collector/src/main/java/com/navercorp/pinpoint/collector/util/DatagramPacketFactory.java index 733396eb3..5df5a5d33 100644 --- a/collector/src/main/java/com/navercorp/pinpoint/collector/util/DatagramPacketFactory.java +++ b/collector/src/main/java/com/navercorp/pinpoint/collector/util/DatagramPacketFactory.java @@ -23,16 +23,29 @@ import java.net.DatagramPacket; */ public class DatagramPacketFactory implements ObjectPoolFactory { - private static final int AcceptedSize = 65507; + public static final int UDP_MAX_PACKET_LENGTH = 65507; + + private final int bufferLength; + + public DatagramPacketFactory() { + this(UDP_MAX_PACKET_LENGTH); + } + + public DatagramPacketFactory(int bufferLength) { + if (bufferLength < 0 ) { + throw new IllegalArgumentException("negative bufferLength:" + bufferLength); + } + this.bufferLength = bufferLength; + } @Override public DatagramPacket create() { - byte[] bytes = new byte[AcceptedSize]; + byte[] bytes = new byte[bufferLength]; return new DatagramPacket(bytes, 0, bytes.length); } @Override public void beforeReturn(DatagramPacket packet) { - packet.setLength(AcceptedSize); + packet.setLength(bufferLength); } } diff --git a/collector/src/main/java/com/navercorp/pinpoint/collector/util/DefaultObjectPool.java b/collector/src/main/java/com/navercorp/pinpoint/collector/util/DefaultObjectPool.java index 3298478f6..cbeaf8e3b 100644 --- a/collector/src/main/java/com/navercorp/pinpoint/collector/util/DefaultObjectPool.java +++ b/collector/src/main/java/com/navercorp/pinpoint/collector/util/DefaultObjectPool.java @@ -39,14 +39,14 @@ public class DefaultObjectPool implements ObjectPool { private void fill(int size) { for (int i = 0; i < size; i++) { - PooledObjectWrapper wrapper = createObject(); + PooledObjectWrapper wrapper = createObject(); queue.offer(wrapper); } } - private PooledObjectWrapper createObject() { + private PooledObjectWrapper createObject() { T t = this.factory.create(); - return new PooledObjectWrapper(t); + return new PooledObjectWrapper(t); } @Override @@ -60,7 +60,7 @@ public class DefaultObjectPool implements ObjectPool { } - public void returnObject(PooledObject t) { + private void returnObject(PooledObject t) { if (t == null) { return; } @@ -68,10 +68,14 @@ public class DefaultObjectPool implements ObjectPool { queue.offer(t); } - private class PooledObjectWrapper implements PooledObject { - private final V value; + public int size() { + return queue.size(); + } - public PooledObjectWrapper(V value) { + private class PooledObjectWrapper implements PooledObject { + private final T value; + + public PooledObjectWrapper(T value) { if (value == null) { throw new NullPointerException("value must not be null"); } @@ -79,7 +83,7 @@ public class DefaultObjectPool implements ObjectPool { } @Override - public V getObject() { + public T getObject() { return value; } diff --git a/collector/src/test/java/com/navercorp/pinpoint/collector/util/DatagramPacketFactoryTest.java b/collector/src/test/java/com/navercorp/pinpoint/collector/util/DatagramPacketFactoryTest.java new file mode 100644 index 000000000..ccc2faf09 --- /dev/null +++ b/collector/src/test/java/com/navercorp/pinpoint/collector/util/DatagramPacketFactoryTest.java @@ -0,0 +1,50 @@ +/* + * Copyright 2014 NAVER Corp. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.navercorp.pinpoint.collector.util; + +import org.junit.Assert; +import org.junit.Test; + +import java.net.DatagramPacket; + +import static org.junit.Assert.*; + +/** + * @author emeroad + */ +public class DatagramPacketFactoryTest { + + @Test + public void testCreate() throws Exception { + int bufferLength = 10; + DatagramPacketFactory factory = new DatagramPacketFactory(bufferLength); + DatagramPacket packet = factory.create(); + Assert.assertEquals(bufferLength, packet.getLength()); + } + + @Test + public void testBeforeReturn() throws Exception { + int bufferLength = 10; + DatagramPacketFactory factory = new DatagramPacketFactory(bufferLength); + DatagramPacket packet = factory.create(); + + packet.setLength(1); + factory.beforeReturn(packet); + Assert.assertEquals(bufferLength, packet.getLength()); + + } +} \ No newline at end of file diff --git a/collector/src/test/java/com/navercorp/pinpoint/collector/util/DefaultObjectPoolTest.java b/collector/src/test/java/com/navercorp/pinpoint/collector/util/DefaultObjectPoolTest.java new file mode 100644 index 000000000..d3641899f --- /dev/null +++ b/collector/src/test/java/com/navercorp/pinpoint/collector/util/DefaultObjectPoolTest.java @@ -0,0 +1,58 @@ +/* + * Copyright 2014 NAVER Corp. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.navercorp.pinpoint.collector.util; + +import org.junit.Assert; +import org.junit.Test; + +import java.net.DatagramPacket; + +import static org.mockito.Mockito.mock; + +/** + * @author emeroad + */ +public class DefaultObjectPoolTest { + + @Test + public void testGetObject() throws Exception { + DefaultObjectPool pool = new DefaultObjectPool(new DatagramPacketFactory(), 1); + + PooledObject pooledObject = pool.getObject(); + Assert.assertEquals(0, pool.size()); + + pooledObject.returnObject(); + Assert.assertEquals(1, pool.size()); + } + + @Test + public void testReset() throws Exception { + DefaultObjectPool pool = new DefaultObjectPool(new DatagramPacketFactory(), 1); + + PooledObject pooledObject = pool.getObject(); + DatagramPacket packet = pooledObject.getObject(); + + packet.setLength(10); + + pooledObject.returnObject(); + + DatagramPacket check = pooledObject.getObject(); + + Assert.assertSame(check, packet); + Assert.assertEquals(packet.getLength(), DatagramPacketFactory.UDP_MAX_PACKET_LENGTH); + } +} \ No newline at end of file