mirror of
https://github.com/Minestom/Minestom.git
synced 2025-02-16 04:11:39 +01:00
Fix packet tests
This commit is contained in:
parent
b5a53f8b6b
commit
a561cd0a3e
@ -260,10 +260,10 @@ public final class PacketUtils {
|
||||
writeFramedPacket(buffer, id, serializer, packet, compression ? MinecraftServer.getCompressionThreshold() : 0);
|
||||
}
|
||||
|
||||
public static void writeFramedPacket(@NotNull ByteBuffer buffer,
|
||||
public static <T> void writeFramedPacket(@NotNull ByteBuffer buffer,
|
||||
int id,
|
||||
@NotNull NetworkBuffer.Type<ServerPacket> type,
|
||||
@NotNull ServerPacket packet,
|
||||
@NotNull NetworkBuffer.Type<T> type,
|
||||
@NotNull T packet,
|
||||
int compressionThreshold) {
|
||||
NetworkBuffer networkBuffer = new NetworkBuffer(buffer, false);
|
||||
if (compressionThreshold <= 0) {
|
||||
|
@ -26,15 +26,12 @@ import net.minestom.server.recipe.RecipeCategory;
|
||||
import org.junit.jupiter.api.BeforeAll;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
import java.util.concurrent.ThreadLocalRandom;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.fail;
|
||||
|
||||
/**
|
||||
* Ensures that packet can be written and read correctly.
|
||||
@ -160,32 +157,28 @@ public class PacketWriteReadTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void serverTest() {
|
||||
SERVER_PACKETS.forEach(PacketWriteReadTest::testPacket);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void clientTest() {
|
||||
CLIENT_PACKETS.forEach(PacketWriteReadTest::testPacket);
|
||||
}
|
||||
|
||||
private static void testPacket(NetworkBuffer.Writer writeable) {
|
||||
try {
|
||||
byte[] bytes = NetworkBuffer.makeArray(buffer -> buffer.write(writeable));
|
||||
var readerConstructor = writeable.getClass().getConstructor(NetworkBuffer.class);
|
||||
NetworkBuffer reader = new NetworkBuffer();
|
||||
reader.write(NetworkBuffer.RAW_BYTES, bytes);
|
||||
var createdPacket = readerConstructor.newInstance(reader);
|
||||
assertEquals(writeable, createdPacket);
|
||||
} catch (NoSuchMethodException | InvocationTargetException | InstantiationException
|
||||
| IllegalAccessException e) {
|
||||
fail(writeable.toString(), e);
|
||||
public void serverTest() throws NoSuchFieldException, IllegalAccessException {
|
||||
for (var packet : SERVER_PACKETS) {
|
||||
var packetClass = packet.getClass();
|
||||
NetworkBuffer.Type<ServerPacket> serializer = (NetworkBuffer.Type<ServerPacket>) packetClass.getField("SERIALIZER").get(packetClass);
|
||||
testPacket(serializer, packet);
|
||||
}
|
||||
}
|
||||
|
||||
private static byte[] generateByteArray(int size) {
|
||||
byte[] array = new byte[size];
|
||||
ThreadLocalRandom.current().nextBytes(array);
|
||||
return array;
|
||||
@Test
|
||||
public void clientTest() throws NoSuchFieldException, IllegalAccessException {
|
||||
for (var packet : CLIENT_PACKETS) {
|
||||
var packetClass = packet.getClass();
|
||||
NetworkBuffer.Type<ClientPacket> serializer = (NetworkBuffer.Type<ClientPacket>) packetClass.getField("SERIALIZER").get(packetClass);
|
||||
testPacket(serializer, packet);
|
||||
}
|
||||
}
|
||||
|
||||
private static <T> void testPacket(NetworkBuffer.Type<T> networkType, T packet) {
|
||||
byte[] bytes = NetworkBuffer.makeArray(buffer -> networkType.write(buffer, packet));
|
||||
NetworkBuffer reader = new NetworkBuffer();
|
||||
reader.write(NetworkBuffer.RAW_BYTES, bytes);
|
||||
var createdPacket = networkType.read(reader);
|
||||
assertEquals(packet, createdPacket);
|
||||
}
|
||||
}
|
||||
|
@ -24,7 +24,7 @@ public class SocketReadTest {
|
||||
var packet = new ClientPluginMessagePacket("channel", new byte[2000]);
|
||||
|
||||
var buffer = ObjectPool.PACKET_POOL.get();
|
||||
PacketUtils.writeFramedPacket(buffer, 0x0A, packet, compressed ? 256 : 0);
|
||||
PacketUtils.writeFramedPacket(buffer, 0x0A, ClientPluginMessagePacket.SERIALIZER, packet, compressed ? 256 : 0);
|
||||
|
||||
var wrapper = BinaryBuffer.wrap(buffer);
|
||||
wrapper.reset(0, buffer.position());
|
||||
@ -37,7 +37,7 @@ public class SocketReadTest {
|
||||
assertEquals(1, packets.size());
|
||||
var rawPacket = packets.get(0);
|
||||
assertEquals(0x0A, rawPacket.left());
|
||||
var readPacket = new ClientPluginMessagePacket(new NetworkBuffer(rawPacket.right()));
|
||||
var readPacket = ClientPluginMessagePacket.SERIALIZER.read(new NetworkBuffer(rawPacket.right()));
|
||||
assertEquals("channel", readPacket.channel());
|
||||
assertEquals(2000, readPacket.data().length);
|
||||
}
|
||||
@ -48,8 +48,8 @@ public class SocketReadTest {
|
||||
var packet = new ClientPluginMessagePacket("channel", new byte[2000]);
|
||||
|
||||
var buffer = ObjectPool.PACKET_POOL.get();
|
||||
PacketUtils.writeFramedPacket(buffer, 0x0A, packet, compressed ? 256 : 0);
|
||||
PacketUtils.writeFramedPacket(buffer, 0x0A, packet, compressed ? 256 : 0);
|
||||
PacketUtils.writeFramedPacket(buffer, 0x0A, ClientPluginMessagePacket.SERIALIZER, packet, compressed ? 256 : 0);
|
||||
PacketUtils.writeFramedPacket(buffer, 0x0A, ClientPluginMessagePacket.SERIALIZER, packet, compressed ? 256 : 0);
|
||||
|
||||
var wrapper = BinaryBuffer.wrap(buffer);
|
||||
wrapper.reset(0, buffer.position());
|
||||
@ -62,7 +62,7 @@ public class SocketReadTest {
|
||||
assertEquals(2, packets.size());
|
||||
for (var rawPacket : packets) {
|
||||
assertEquals(0x0A, rawPacket.left());
|
||||
var readPacket = new ClientPluginMessagePacket(new NetworkBuffer(rawPacket.right()));
|
||||
var readPacket = ClientPluginMessagePacket.SERIALIZER.read(new NetworkBuffer(rawPacket.right()));
|
||||
assertEquals("channel", readPacket.channel());
|
||||
assertEquals(2000, readPacket.data().length);
|
||||
}
|
||||
@ -76,7 +76,7 @@ public class SocketReadTest {
|
||||
var packet = new ClientPluginMessagePacket("channel", new byte[2000]);
|
||||
|
||||
var buffer = ObjectPool.PACKET_POOL.get();
|
||||
PacketUtils.writeFramedPacket(buffer, 0x0A, packet, compressed ? 256 : 0);
|
||||
PacketUtils.writeFramedPacket(buffer, 0x0A, ClientPluginMessagePacket.SERIALIZER, packet, compressed ? 256 : 0);
|
||||
Utils.writeVarInt(buffer, 200); // incomplete 200 bytes packet
|
||||
|
||||
var wrapper = BinaryBuffer.wrap(buffer);
|
||||
@ -91,7 +91,7 @@ public class SocketReadTest {
|
||||
assertEquals(1, packets.size());
|
||||
var rawPacket = packets.get(0);
|
||||
assertEquals(0x0A, rawPacket.left());
|
||||
var readPacket = new ClientPluginMessagePacket(new NetworkBuffer(rawPacket.right()));
|
||||
var readPacket = ClientPluginMessagePacket.SERIALIZER.read(new NetworkBuffer(rawPacket.right()));
|
||||
assertEquals("channel", readPacket.channel());
|
||||
assertEquals(2000, readPacket.data().length);
|
||||
}
|
||||
@ -104,7 +104,7 @@ public class SocketReadTest {
|
||||
var packet = new ClientPluginMessagePacket("channel", new byte[2000]);
|
||||
|
||||
var buffer = ObjectPool.PACKET_POOL.get();
|
||||
PacketUtils.writeFramedPacket(buffer, 0x0A, packet, compressed ? 256 : 0);
|
||||
PacketUtils.writeFramedPacket(buffer, 0x0A, ClientPluginMessagePacket.SERIALIZER, packet, compressed ? 256 : 0);
|
||||
buffer.put((byte) -85); // incomplete var-int length
|
||||
|
||||
var wrapper = BinaryBuffer.wrap(buffer);
|
||||
@ -119,7 +119,7 @@ public class SocketReadTest {
|
||||
assertEquals(1, packets.size());
|
||||
var rawPacket = packets.get(0);
|
||||
assertEquals(0x0A, rawPacket.left());
|
||||
var readPacket = new ClientPluginMessagePacket(new NetworkBuffer(rawPacket.right()));
|
||||
var readPacket = ClientPluginMessagePacket.SERIALIZER.read(new NetworkBuffer(rawPacket.right()));
|
||||
assertEquals("channel", readPacket.channel());
|
||||
assertEquals(2000, readPacket.data().length);
|
||||
}
|
||||
|
@ -4,7 +4,6 @@ import net.minestom.server.network.packet.server.ServerPacket;
|
||||
import net.minestom.server.utils.ObjectPool;
|
||||
import net.minestom.server.utils.PacketUtils;
|
||||
import net.minestom.server.utils.Utils;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import java.nio.charset.StandardCharsets;
|
||||
@ -17,19 +16,15 @@ import static org.junit.jupiter.api.Assertions.assertNotEquals;
|
||||
public class SocketWriteTest {
|
||||
|
||||
record IntPacket(int value) implements ServerPacket.Play {
|
||||
@Override
|
||||
public void write(@NotNull NetworkBuffer writer) {
|
||||
writer.write(INT, value);
|
||||
}
|
||||
|
||||
public static final NetworkBuffer.Type<IntPacket> SERIALIZER = NetworkBufferTemplate.template(
|
||||
INT, IntPacket::value,
|
||||
IntPacket::new);
|
||||
}
|
||||
|
||||
record CompressiblePacket(String value) implements ServerPacket.Play {
|
||||
@Override
|
||||
public void write(@NotNull NetworkBuffer writer) {
|
||||
writer.write(STRING, value);
|
||||
}
|
||||
|
||||
public static final NetworkBuffer.Type<CompressiblePacket> SERIALIZER = NetworkBufferTemplate.template(
|
||||
STRING, CompressiblePacket::value,
|
||||
CompressiblePacket::new);
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -37,7 +32,7 @@ public class SocketWriteTest {
|
||||
var packet = new IntPacket(5);
|
||||
|
||||
var buffer = ObjectPool.PACKET_POOL.get();
|
||||
PacketUtils.writeFramedPacket(buffer, 1, packet, -1);
|
||||
PacketUtils.writeFramedPacket(buffer, 1, IntPacket.SERIALIZER, packet, -1);
|
||||
|
||||
// 3 bytes length [var-int] + 1 byte packet id [var-int] + 4 bytes int
|
||||
// The 3 bytes var-int length is hardcoded for performance purpose, could change in the future
|
||||
@ -49,8 +44,8 @@ public class SocketWriteTest {
|
||||
var packet = new IntPacket(5);
|
||||
|
||||
var buffer = ObjectPool.PACKET_POOL.get();
|
||||
PacketUtils.writeFramedPacket(buffer, 1, packet, -1);
|
||||
PacketUtils.writeFramedPacket(buffer, 1, packet, -1);
|
||||
PacketUtils.writeFramedPacket(buffer, 1, IntPacket.SERIALIZER, packet, -1);
|
||||
PacketUtils.writeFramedPacket(buffer, 1, IntPacket.SERIALIZER, packet, -1);
|
||||
|
||||
// 3 bytes length [var-int] + 1 byte packet id [var-int] + 4 bytes int
|
||||
// The 3 bytes var-int length is hardcoded for performance purpose, could change in the future
|
||||
@ -66,7 +61,7 @@ public class SocketWriteTest {
|
||||
var packet = new CompressiblePacket(string);
|
||||
|
||||
var buffer = ObjectPool.PACKET_POOL.get();
|
||||
PacketUtils.writeFramedPacket(buffer, 1, packet, 256);
|
||||
PacketUtils.writeFramedPacket(buffer, 1, CompressiblePacket.SERIALIZER, packet, 256);
|
||||
|
||||
// 3 bytes packet length [var-int] + 3 bytes data length [var-int] + 1 byte packet id [var-int] + payload
|
||||
// The 3 bytes var-int length is hardcoded for performance purpose, could change in the future
|
||||
@ -78,7 +73,7 @@ public class SocketWriteTest {
|
||||
var packet = new IntPacket(5);
|
||||
|
||||
var buffer = ObjectPool.PACKET_POOL.get();
|
||||
PacketUtils.writeFramedPacket(buffer, 1, packet, 256);
|
||||
PacketUtils.writeFramedPacket(buffer, 1, IntPacket.SERIALIZER, packet, 256);
|
||||
|
||||
// 3 bytes packet length [var-int] + 3 bytes data length [var-int] + 1 byte packet id [var-int] + 4 bytes int
|
||||
// The 3 bytes var-int length is hardcoded for performance purpose, could change in the future
|
||||
@ -90,8 +85,8 @@ public class SocketWriteTest {
|
||||
var packet = new IntPacket(5);
|
||||
|
||||
var buffer = ObjectPool.PACKET_POOL.get();
|
||||
PacketUtils.writeFramedPacket(buffer, 1, packet, 256);
|
||||
PacketUtils.writeFramedPacket(buffer, 1, packet, 256);
|
||||
PacketUtils.writeFramedPacket(buffer, 1, IntPacket.SERIALIZER, packet, 256);
|
||||
PacketUtils.writeFramedPacket(buffer, 1, IntPacket.SERIALIZER, packet, 256);
|
||||
|
||||
// 3 bytes packet length [var-int] + 3 bytes data length [var-int] + 1 byte packet id [var-int] + 4 bytes int
|
||||
// The 3 bytes var-int length is hardcoded for performance purpose, could change in the future
|
||||
|
@ -25,6 +25,7 @@ public class DeclareRecipesPacketTest {
|
||||
)
|
||||
));
|
||||
|
||||
assertThrows(IllegalArgumentException.class, () -> NetworkBuffer.makeArray(packet::write));
|
||||
assertThrows(IllegalArgumentException.class, () -> NetworkBuffer.makeArray(networkBuffer ->
|
||||
DeclareRecipesPacket.SERIALIZER.write(networkBuffer, packet)));
|
||||
}
|
||||
}
|
||||
|
@ -13,34 +13,34 @@ public class ParticleDataTest {
|
||||
public void testDustParticleDefault() {
|
||||
Particle particle = Particle.DUST;
|
||||
ParticlePacket packet = new ParticlePacket(particle, true, 0, 0, 0, 0, 0, 0, 0, 0);
|
||||
assertDoesNotThrow(() -> packet.write(new NetworkBuffer()));
|
||||
assertDoesNotThrow(() -> ParticlePacket.SERIALIZER.write(new NetworkBuffer(), packet));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDustParticleInvalid() {
|
||||
var particle = Particle.DUST.withProperties(null, 1);
|
||||
ParticlePacket packet = new ParticlePacket(particle, true, 0, 0, 0, 0, 0, 0, 0, 0);
|
||||
assertThrows(NullPointerException.class, () -> packet.write(new NetworkBuffer()));
|
||||
assertThrows(NullPointerException.class, () -> ParticlePacket.SERIALIZER.write(new NetworkBuffer(), packet));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testParticleValid() {
|
||||
var particle = Particle.ENTITY_EFFECT;
|
||||
ParticlePacket packet = new ParticlePacket(particle, true, 0, 0, 0, 0, 0, 0, 0, 0);
|
||||
assertDoesNotThrow(() -> packet.write(new NetworkBuffer()));
|
||||
assertDoesNotThrow(() -> ParticlePacket.SERIALIZER.write(new NetworkBuffer(), packet));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testParticleData() {
|
||||
var particle = Particle.ENTITY_EFFECT;
|
||||
ParticlePacket packet = new ParticlePacket(particle, true, 0, 0, 0, 0, 0, 0, 0, 0);
|
||||
assertDoesNotThrow(() -> packet.write(new NetworkBuffer()));
|
||||
assertDoesNotThrow(() -> ParticlePacket.SERIALIZER.write(new NetworkBuffer(), packet));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void invalidBlock() {
|
||||
var particle = Particle.BLOCK.withBlock(null);
|
||||
ParticlePacket packet = new ParticlePacket(particle, true, 0, 0, 0, 0, 0, 0, 0, 0);
|
||||
assertThrows(NullPointerException.class, () -> packet.write(new NetworkBuffer()));
|
||||
assertThrows(NullPointerException.class, () -> ParticlePacket.SERIALIZER.write(new NetworkBuffer(), packet));
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user