From 701d8812751caf012a20dcd09d8535c854ea1358 Mon Sep 17 00:00:00 2001 From: BuildTools <46540330+willkroboth@users.noreply.github.com> Date: Fri, 18 Aug 2023 09:30:30 -0400 Subject: [PATCH] Fix tests failing on 1.16 and 1.17 because those versions didn't implement certain plugin messaging related methods --- .../commandapi/test/CommandAPIServerMock.java | 11 +++++++++ .../test/network/NetworkTestBase.java | 24 +++++++++++++++++-- .../ProtocolVersionTooOldPacketTests.java | 2 +- .../test/network/SetVersionPacketTests.java | 2 +- .../UpdateRequirementsPacketTests.java | 4 ++-- 5 files changed, 37 insertions(+), 6 deletions(-) diff --git a/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-test/commandapi-bukkit-test-tests/src/test/java/dev/jorel/commandapi/test/CommandAPIServerMock.java b/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-test/commandapi-bukkit-test-tests/src/test/java/dev/jorel/commandapi/test/CommandAPIServerMock.java index 809c6cc93b..e7e644d7ba 100644 --- a/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-test/commandapi-bukkit-test-tests/src/test/java/dev/jorel/commandapi/test/CommandAPIServerMock.java +++ b/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-test/commandapi-bukkit-test-tests/src/test/java/dev/jorel/commandapi/test/CommandAPIServerMock.java @@ -16,6 +16,8 @@ import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.inventory.ItemFactory; +import org.bukkit.plugin.messaging.Messenger; +import org.bukkit.plugin.messaging.StandardMessenger; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -158,6 +160,15 @@ public WorldMock addSimpleWorld(String name) { // return MockPlatform.getInstance().getItemFactory(); // } + // 1.16 and 1.17 MockServers do not implement this method, but other versions do + // Easiest to just always override this method + // This is copied from MockBukkit-v1.18 + private final StandardMessenger messenger = new StandardMessenger(); + @Override + public @NotNull Messenger getMessenger() { + return messenger; + } + // Advancements List advancements = new ArrayList<>(); diff --git a/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-test/commandapi-bukkit-test-tests/src/test/java/dev/jorel/commandapi/test/network/NetworkTestBase.java b/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-test/commandapi-bukkit-test-tests/src/test/java/dev/jorel/commandapi/test/network/NetworkTestBase.java index b470a58c9d..bbccb4c337 100644 --- a/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-test/commandapi-bukkit-test-tests/src/test/java/dev/jorel/commandapi/test/network/NetworkTestBase.java +++ b/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-test/commandapi-bukkit-test-tests/src/test/java/dev/jorel/commandapi/test/network/NetworkTestBase.java @@ -1,17 +1,20 @@ package dev.jorel.commandapi.test.network; +import be.seeseemelk.mockbukkit.entity.PlayerMock; import dev.jorel.commandapi.CommandAPIBukkit; import dev.jorel.commandapi.network.*; import dev.jorel.commandapi.test.MockPlatform; import dev.jorel.commandapi.test.TestBase; import org.bukkit.entity.Player; +import org.bukkit.plugin.Plugin; +import org.bukkit.plugin.messaging.StandardMessenger; import org.mockito.ArgumentCaptor; +import org.mockito.Mockito; import org.mockito.exceptions.base.MockitoException; import static org.junit.jupiter.api.Assertions.*; import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.doCallRealMethod; -import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.*; public class NetworkTestBase extends TestBase { @@ -61,6 +64,23 @@ public void tearDown() { /*************************************************** * Utility methods for sending and receiving bytes * ***************************************************/ + + public PlayerMock getPluginMessagingPlayer(String name) { + PlayerMock player = spy(new PlayerMock(server, name)); + + // PlayerMock#sendPluginMessage is not implemented on versions 1.16 or 1.17 + // Easiest to always override the call + doAnswer(invocation -> { + Plugin source = invocation.getArgument(0); + String channel = invocation.getArgument(1); + byte[] message = invocation.getArgument(2); + StandardMessenger.validatePluginMessage(server.getMessenger(), source, channel, message); + return null; + }).when(player).sendPluginMessage(any(), any(), any()); + + return player; + } + public byte[] getSentBytes(Player target, CommandAPIPacket packet) { CommandAPIBukkit.get().getMessenger().sendPacket(target, packet); try { diff --git a/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-test/commandapi-bukkit-test-tests/src/test/java/dev/jorel/commandapi/test/network/ProtocolVersionTooOldPacketTests.java b/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-test/commandapi-bukkit-test-tests/src/test/java/dev/jorel/commandapi/test/network/ProtocolVersionTooOldPacketTests.java index a2c5f91a9e..509979bb3d 100644 --- a/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-test/commandapi-bukkit-test-tests/src/test/java/dev/jorel/commandapi/test/network/ProtocolVersionTooOldPacketTests.java +++ b/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-test/commandapi-bukkit-test-tests/src/test/java/dev/jorel/commandapi/test/network/ProtocolVersionTooOldPacketTests.java @@ -31,7 +31,7 @@ public void tearDown() { @Test void sendTestWithProtocolVersionTooOldPacket() { - PlayerMock player = server.addPlayer(); + PlayerMock player = getPluginMessagingPlayer("player"); // Packet is encoded as id, VarInt protocol version, then String for the reason inside assertArrayEquals( diff --git a/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-test/commandapi-bukkit-test-tests/src/test/java/dev/jorel/commandapi/test/network/SetVersionPacketTests.java b/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-test/commandapi-bukkit-test-tests/src/test/java/dev/jorel/commandapi/test/network/SetVersionPacketTests.java index ce8f93ac23..f800553ace 100644 --- a/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-test/commandapi-bukkit-test-tests/src/test/java/dev/jorel/commandapi/test/network/SetVersionPacketTests.java +++ b/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-test/commandapi-bukkit-test-tests/src/test/java/dev/jorel/commandapi/test/network/SetVersionPacketTests.java @@ -39,7 +39,7 @@ public int getProtocolVersion(Player player) { @Test void sendReceiveTestWithSetVersionPacket() { - PlayerMock player = server.addPlayer(); // Protocol version currently 0 + PlayerMock player = getPluginMessagingPlayer("player"); // Protocol version currently 0 assertEquals(0, getProtocolVersion(player)); diff --git a/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-test/commandapi-bukkit-test-tests/src/test/java/dev/jorel/commandapi/test/network/UpdateRequirementsPacketTests.java b/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-test/commandapi-bukkit-test-tests/src/test/java/dev/jorel/commandapi/test/network/UpdateRequirementsPacketTests.java index 98dcf63543..5dc1a01d9d 100644 --- a/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-test/commandapi-bukkit-test-tests/src/test/java/dev/jorel/commandapi/test/network/UpdateRequirementsPacketTests.java +++ b/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-test/commandapi-bukkit-test-tests/src/test/java/dev/jorel/commandapi/test/network/UpdateRequirementsPacketTests.java @@ -30,10 +30,10 @@ public void tearDown() { @Test void sendReceiveTestWithUpdateRequirementsPacket() { - PlayerMock player = Mockito.spy(new PlayerMock(server, "player")); + PlayerMock player = getPluginMessagingPlayer("player"); // Interrupt normal calls to updateCommands, because MockPlayer throws an UnimplementedOperationException + // getPluginMessagingPlayer already returns a mocked spy, so we don't have to spy ourselves Mockito.doNothing().when(player).updateCommands(); - server.addPlayer(player); // Protocol version currently 0