diff --git a/pom.xml b/pom.xml
index ba08e2d62a..b3916598c8 100644
--- a/pom.xml
+++ b/pom.xml
@@ -86,6 +86,20 @@
js-scriptengine
${graalvm.version}
+
+
+
+ org.junit.jupiter
+ junit-jupiter-api
+ 5.7.2
+
+
+ org.junit.jupiter
+ junit-jupiter-engine
+ 5.7.2
+
+
+
diff --git a/src/test/java/net/packet/ByteBufInPacketTest.java b/src/test/java/net/packet/ByteBufInPacketTest.java
new file mode 100644
index 0000000000..595055cd00
--- /dev/null
+++ b/src/test/java/net/packet/ByteBufInPacketTest.java
@@ -0,0 +1,169 @@
+package net.packet;
+
+import io.netty.buffer.ByteBuf;
+import io.netty.buffer.Unpooled;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import java.awt.*;
+import java.nio.charset.StandardCharsets;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+class ByteBufInPacketTest {
+ private ByteBuf byteBuf;
+ private InPacket inPacket;
+
+ @BeforeEach
+ void reset() {
+ this.byteBuf = Unpooled.buffer();
+ this.inPacket = new ByteBufInPacket(byteBuf);
+ }
+
+ @Test
+ void readByte() {
+ final byte writtenByte = 123;
+ byteBuf.writeByte(writtenByte);
+
+ byte readByte = inPacket.readByte();
+
+ assertEquals(writtenByte, readByte);
+ }
+
+ @Test
+ void readShort() {
+ final short writtenShort = 12_345;
+ byteBuf.writeShortLE(writtenShort);
+
+ short readShort = inPacket.readShort();
+
+ assertEquals(writtenShort, readShort);
+ }
+
+ @Test
+ void readInt() {
+ final int writtenInt = 1_234_567_890;
+ byteBuf.writeIntLE(writtenInt);
+
+ int readInt = inPacket.readInt();
+
+ assertEquals(writtenInt, readInt);
+ }
+
+ @Test
+ void readLong() {
+ final long writtenLong = 9_223_372_036_854_775_807L;
+ byteBuf.writeLongLE(writtenLong);
+
+ long readLong = inPacket.readLong();
+
+ assertEquals(writtenLong, readLong);
+ }
+
+ @Test
+ void readPoint() {
+ final Point writtenPoint = new Point(111, 222);
+ byteBuf.writeShortLE((short) writtenPoint.getX());
+ byteBuf.writeShortLE((short) writtenPoint.getY());
+
+ Point readPoint = inPacket.readPoint();
+
+ assertEquals(writtenPoint, readPoint);
+ }
+
+ @Test
+ void readString() {
+ final String writtenString = "You have gained experience (+3200)";
+ byteBuf.writeShortLE(writtenString.length());
+ byte[] writtenStringBytes = writtenString.getBytes(StandardCharsets.US_ASCII);
+ byteBuf.writeBytes(writtenStringBytes);
+
+ String readString = inPacket.readString();
+
+ assertEquals(writtenString, readString);
+ }
+
+ @Test
+ void readBytes() {
+ byte[] writtenBytes = {10, 11, 12, 13, 14, 15};
+ byteBuf.writeBytes(writtenBytes);
+
+ byte[] byteBatch1 = inPacket.readBytes(1);
+ assertEquals(1, byteBatch1.length);
+ assertEquals(10, byteBatch1[0]);
+
+ byte[] byteBatch2 = inPacket.readBytes(2);
+ assertEquals(2, byteBatch2.length);
+ assertEquals(11, byteBatch2[0]);
+ assertEquals(12, byteBatch2[1]);
+
+ byte[] byteBatch3 = inPacket.readBytes(3);
+ assertEquals(3, byteBatch3.length);
+ assertEquals(13, byteBatch3[0]);
+ assertEquals(14, byteBatch3[1]);
+ assertEquals(15, byteBatch3[2]);
+ }
+
+ @Test
+ void skip() {
+ byte[] writtenBytes = {20, 21, 22, 23, 24, 25};
+ byteBuf.writeBytes(writtenBytes);
+
+ byte firstByte = inPacket.readByte();
+ assertEquals(20, firstByte);
+
+ inPacket.skip(3);
+
+ byte fifthByte = inPacket.readByte();
+ assertEquals(24, fifthByte);
+ }
+
+ @Test
+ void available() {
+ byte[] writtenBytes = {30, 31, 32, 33, 34, 35};
+ byteBuf.writeBytes(writtenBytes);
+
+ assertEquals(6, inPacket.available());
+
+ inPacket.readByte();
+ assertEquals(5, inPacket.available());
+
+ inPacket.readInt();
+ assertEquals(1, inPacket.available());
+ }
+
+ @Test
+ void seek() {
+ byte[] writtenBytes = {40, 41, 42, 43, 44, 45};
+ byteBuf.writeBytes(writtenBytes);
+
+ inPacket.seek(2);
+ assertEquals(4, inPacket.available());
+ byte byteAtSeek = inPacket.readByte();
+ assertEquals(42, byteAtSeek);
+
+ inPacket.seek(0);
+ byte byteAtReset = inPacket.readByte();
+ assertEquals(40, byteAtReset);
+ }
+
+ @Test
+ void getPosition() {
+ byte[] writtenBytes = {50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60};
+ byteBuf.writeBytes(writtenBytes);
+
+ assertEquals(0, inPacket.getPosition());
+
+ inPacket.readByte();
+ assertEquals(1, inPacket.getPosition());
+
+ inPacket.readShort();
+ assertEquals(3, inPacket.getPosition());
+
+ inPacket.readInt();
+ assertEquals(7, inPacket.getPosition());
+
+ inPacket.seek(5);
+ assertEquals(5, inPacket.getPosition());
+ }
+}
\ No newline at end of file