From ef97b50b63abb5cd0f5f138741abc256259d36b5 Mon Sep 17 00:00:00 2001 From: 4drian3d Date: Fri, 17 Jun 2022 15:24:23 +0000 Subject: [PATCH] test: Implement AssertJ assertions test: Split listener code for testing --- build.gradle.kts | 1 + .../kickredirect/listener/KickListener.java | 78 +++++++---- .../dreamerzero/kickredirect/EventBundle.java | 10 +- .../kickredirect/KickResultType.java | 8 +- .../kickredirect/ListenerTest.java | 66 --------- .../kickredirect/ServerUtilsTest.java | 29 ++-- .../{ => listener}/DebugTest.java | 49 +++---- .../kickredirect/listener/ListenerTest.java | 127 ++++++++++++++++++ 8 files changed, 233 insertions(+), 135 deletions(-) delete mode 100644 src/test/java/me/dreamerzero/kickredirect/ListenerTest.java rename src/test/java/me/dreamerzero/kickredirect/{ => listener}/DebugTest.java (63%) create mode 100644 src/test/java/me/dreamerzero/kickredirect/listener/ListenerTest.java diff --git a/build.gradle.kts b/build.gradle.kts index 450983a..2e7c3f9 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -28,6 +28,7 @@ dependencies { testImplementation("org.spongepowered:configurate-hocon:$configurate") testImplementation(platform("org.junit:junit-bom:5.8.1")) testImplementation("org.junit.jupiter:junit-jupiter") + testImplementation("org.assertj:assertj-core:3.23.1") testImplementation("com.velocitypowered:velocity-api:3.1.2-SNAPSHOT") testImplementation("org.slf4j:slf4j-api:1.7.32") testImplementation("com.github.ben-manes.caffeine:caffeine:$caffeine") diff --git a/src/main/java/me/dreamerzero/kickredirect/listener/KickListener.java b/src/main/java/me/dreamerzero/kickredirect/listener/KickListener.java index 082441c..af18620 100644 --- a/src/main/java/me/dreamerzero/kickredirect/listener/KickListener.java +++ b/src/main/java/me/dreamerzero/kickredirect/listener/KickListener.java @@ -6,12 +6,15 @@ import com.velocitypowered.api.event.PostOrder; import com.velocitypowered.api.event.Subscribe; import com.velocitypowered.api.event.player.KickedFromServerEvent; +import com.velocitypowered.api.event.player.KickedFromServerEvent.ServerKickResult; +import com.velocitypowered.api.proxy.Player; import com.velocitypowered.api.proxy.server.RegisteredServer; import me.dreamerzero.kickredirect.KickRedirect; import me.dreamerzero.kickredirect.enums.CheckMode; import me.dreamerzero.kickredirect.utils.DebugInfo; import me.dreamerzero.kickredirect.utils.ServerUtils; +import net.kyori.adventure.text.Component; import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder; import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer; @@ -28,13 +31,11 @@ public KickListener(final KickRedirect plugin){ public void onKickFromServer(final KickedFromServerEvent event, final Continuation continuation){ if(!event.getResult().isAllowed()){ continuation.resume(); - plugin.debugCache().put(event.getPlayer().getUniqueId(), new DebugInfo(event, null)); + cache(event, null); return; } - final Optional optional = event.getServerKickReason().map(SERIALIZER::serialize); - if (optional.isPresent() && containsCheck(optional.get()) - || optional.isEmpty() && plugin.config().get().redirectOnNullMessage() - ) { + + if (reasonCheck(event)) { final RegisteredServer server = ServerUtils.getConfigServer(plugin); if (server == null) { plugin.getProxy().getConsoleCommandSource().sendMessage( @@ -47,37 +48,62 @@ public void onKickFromServer(final KickedFromServerEvent event, final Continuati ) ) ); - final String kickMessage = plugin.messages().get().kickMessage(); - if(!kickMessage.isBlank()) { - event.setResult( - KickedFromServerEvent.DisconnectPlayer.create( - plugin.formatter().format(kickMessage, event.getPlayer()) - ) - ); - } + applyKickResult(event); continuation.resume(); - plugin.debugCache().put(event.getPlayer().getUniqueId(), new DebugInfo(event, null)); + cache(event, null); return; } - final String redirectMessage = plugin.messages().get().redirectMessage(); - event.setResult(redirectMessage.isBlank() - ? KickedFromServerEvent.RedirectPlayer.create(server) - : KickedFromServerEvent.RedirectPlayer.create( - server, plugin.formatter().format(redirectMessage, event.getPlayer()))); + event.setResult(redirectResult(server, event.getPlayer())); continuation.resume(); - plugin.debugCache().put(event.getPlayer().getUniqueId(), new DebugInfo(event, server.getServerInfo().getName())); + cache(event, server.getServerInfo().getName()); return; } continuation.resume(); - plugin.debugCache().put(event.getPlayer().getUniqueId(), new DebugInfo(event, null)); + cache(event, null); } - private boolean containsCheck(final String message) { - for (final String msg : plugin.config().get().getMessagesToCheck()) { - if (message.contains(msg)) { - return plugin.config().get().checkMode() == CheckMode.WHITELIST; + void cache(KickedFromServerEvent event, String serverName) { + if(plugin.config().get().debug()) + plugin.debugCache() + .put( + event.getPlayer().getUniqueId(), + new DebugInfo(event, serverName) + ); + } + + boolean reasonCheck(KickedFromServerEvent event) { + final Optional optional = event.getServerKickReason().map(SERIALIZER::serialize); + if(optional.isPresent()) { + final String message = optional.get(); + for (final String msg : plugin.config().get().getMessagesToCheck()) { + if (message.contains(msg)) { + return plugin.config().get().checkMode() == CheckMode.WHITELIST; + } } + return plugin.config().get().checkMode() != CheckMode.WHITELIST; + } else { + return plugin.config().get().redirectOnNullMessage(); + } + } + + ServerKickResult redirectResult(RegisteredServer server, Player player) { + final String redirectMessage = plugin.messages().get().redirectMessage(); + if(redirectMessage.isBlank()) { + return KickedFromServerEvent.RedirectPlayer.create(server); + } else { + final Component message = plugin.formatter().format(redirectMessage, player); + return KickedFromServerEvent.RedirectPlayer.create(server, message); + } + } + + void applyKickResult(KickedFromServerEvent event) { + final String kickMessage = plugin.messages().get().kickMessage(); + if(!kickMessage.isBlank()) { + event.setResult( + KickedFromServerEvent.DisconnectPlayer.create( + plugin.formatter().format(kickMessage, event.getPlayer()) + ) + ); } - return plugin.config().get().checkMode() != CheckMode.WHITELIST; } } diff --git a/src/test/java/me/dreamerzero/kickredirect/EventBundle.java b/src/test/java/me/dreamerzero/kickredirect/EventBundle.java index 996339d..dc562e8 100644 --- a/src/test/java/me/dreamerzero/kickredirect/EventBundle.java +++ b/src/test/java/me/dreamerzero/kickredirect/EventBundle.java @@ -29,10 +29,12 @@ private EventBundle(final Builder builder) { this.plugin = new KickRedirect( this.proxyServer, Path.of("build", "reports", "tests", "test"), - LoggerFactory.getLogger(ListenerTest.class), + LoggerFactory.getLogger(EventBundle.class), this.proxyServer.getPluginManager() ); plugin.initialize(true); + if(builder.debug) + plugin.config().get().debug(true); this.continuation = new TestContinuation(); this.player = builder.player; this.event = builder.event; @@ -79,6 +81,7 @@ public EventTask applyDebug() { public static class Builder implements AbstractBuilder { private Player player; private KickedFromServerEvent event; + private boolean debug; private Builder() {} @@ -92,6 +95,11 @@ public Builder event(EventBuilder event) { return this; } + public Builder debug(boolean debug) { + this.debug = debug; + return this; + } + @Override public @NotNull EventBundle build() { return new EventBundle(this); diff --git a/src/test/java/me/dreamerzero/kickredirect/KickResultType.java b/src/test/java/me/dreamerzero/kickredirect/KickResultType.java index c534cee..72ae1b1 100644 --- a/src/test/java/me/dreamerzero/kickredirect/KickResultType.java +++ b/src/test/java/me/dreamerzero/kickredirect/KickResultType.java @@ -9,24 +9,24 @@ public enum KickResultType { NOTIFY { @Override - ServerKickResult result(Component component) { + public ServerKickResult result(Component component) { return KickedFromServerEvent.Notify.create(component); } }, DISCONNECT{ @Override - ServerKickResult result(Component component) { + public ServerKickResult result(Component component) { return KickedFromServerEvent.DisconnectPlayer.create(component); } }, REDIRECT{ @Override - ServerKickResult result(Component component) { + public ServerKickResult result(Component component) { return KickedFromServerEvent.RedirectPlayer.create(new TestRegisteredServer(), component); } }; - ServerKickResult result(Component component) { + public ServerKickResult result(Component component) { return null; } } diff --git a/src/test/java/me/dreamerzero/kickredirect/ListenerTest.java b/src/test/java/me/dreamerzero/kickredirect/ListenerTest.java deleted file mode 100644 index 4a467c8..0000000 --- a/src/test/java/me/dreamerzero/kickredirect/ListenerTest.java +++ /dev/null @@ -1,66 +0,0 @@ -package me.dreamerzero.kickredirect; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertInstanceOf; -import static org.junit.jupiter.api.Assertions.assertTrue; - -import com.velocitypowered.api.event.player.KickedFromServerEvent; - -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import me.dreamerzero.kickredirect.listener.objects.TestPlayer; -import me.dreamerzero.kickredirect.listener.objects.TestRegisteredServer; -import net.kyori.adventure.text.Component; - -class ListenerTest { - - @Test - @DisplayName("Correct Redirect") - void testCorrectRedirect() { - EventBundle bundle = EventBundle.builder() - .player(new TestPlayer("4drian3d", true)) - .event(EventBuilder.builder() - .result(KickResultType.DISCONNECT.result(Component.text(""))) - .server(new TestRegisteredServer()) - ) - .build(); - - bundle.applyListener(); - - assertInstanceOf(KickedFromServerEvent.RedirectPlayer.class, bundle.getEvent().getResult()); - } - - @Test - @DisplayName("Exact Server") - void testexactServer() { - EventBundle bundle = EventBundle.builder() - .player(new TestPlayer("4drian3d", true)) - .event(EventBuilder.builder() - .result(KickResultType.DISCONNECT.result(Component.text(""))) - .server(new TestRegisteredServer()) - ) - .build(); - - bundle.applyListener(); - - assertEquals( - bundle.getProxyServer().getServer("lobby1").orElse(null), - ((KickedFromServerEvent.RedirectPlayer)bundle.getEvent().getResult()).getServer()); - } - - @Test - void testContinuation() { - EventBundle bundle = EventBundle.builder() - .player(new TestPlayer("4drian3d", true)) - .event(EventBuilder.builder() - .result(KickResultType.DISCONNECT.result(Component.text(""))) - .server(new TestRegisteredServer()) - ) - .build(); - - bundle.applyListener(); - - assertTrue(bundle.getContinuation().resumed()); - } -} diff --git a/src/test/java/me/dreamerzero/kickredirect/ServerUtilsTest.java b/src/test/java/me/dreamerzero/kickredirect/ServerUtilsTest.java index e845b21..4fff9d4 100644 --- a/src/test/java/me/dreamerzero/kickredirect/ServerUtilsTest.java +++ b/src/test/java/me/dreamerzero/kickredirect/ServerUtilsTest.java @@ -1,8 +1,9 @@ package me.dreamerzero.kickredirect; -import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.assertj.core.api.Assertions.assertThat; + import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -16,26 +17,32 @@ class ServerUtilsTest { void configSendMode() { EventBundle bundle = EventBundle.builder().build(); - assertEquals( - bundle.getProxyServer().getServer("lobby1").orElse(null), - ServerUtils.getConfigServer(bundle.getPlugin())); + var server = ServerUtils.getConfigServer(bundle.getPlugin()); + assertThat(bundle.getProxyServer().getServer("lobby1")) + .isPresent() + .contains(server); } @Test void randomSendMode() { EventBundle bundle = EventBundle.builder().build(); - assertNotNull(ServerUtils.getRandomServer(bundle.getPlugin())); + assertThat(ServerUtils.getRandomServer(bundle.getPlugin())) + .isNotNull() + .isIn(bundle.getProxyServer().getAllServers()); } @Test void firstServer() { EventBundle bundle = EventBundle.builder().build(); - assertNotNull(ServerUtils.getFirstServer(bundle.getPlugin())); - assertEquals( - bundle.getProxyServer().getServer("lobby1").orElse(null), - ServerUtils.getConfigServer(bundle.getPlugin())); + var server = ServerUtils.getFirstServer(bundle.getPlugin()); + + assertThat(server).isNotNull(); + + assertThat(bundle.getProxyServer().getServer("lobby1")) + .isPresent() + .contains(server); } @Test @@ -44,6 +51,8 @@ void emptiestServer() { RegisteredServer server = ServerUtils.getEmptiestServer(bundle.getPlugin()); assertNotNull(server); - assertEquals(server, bundle.getProxyServer().getServer("lobby2").orElse(null)); + assertThat(bundle.getProxyServer().getServer("lobby2")) + .isPresent() + .contains(server); } } diff --git a/src/test/java/me/dreamerzero/kickredirect/DebugTest.java b/src/test/java/me/dreamerzero/kickredirect/listener/DebugTest.java similarity index 63% rename from src/test/java/me/dreamerzero/kickredirect/DebugTest.java rename to src/test/java/me/dreamerzero/kickredirect/listener/DebugTest.java index 8893ec1..b47fd80 100644 --- a/src/test/java/me/dreamerzero/kickredirect/DebugTest.java +++ b/src/test/java/me/dreamerzero/kickredirect/listener/DebugTest.java @@ -1,56 +1,49 @@ -package me.dreamerzero.kickredirect; +package me.dreamerzero.kickredirect.listener; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.fail; +import static org.assertj.core.api.Assertions.assertThat; + import java.util.concurrent.CountDownLatch; import org.junit.jupiter.api.Test; -import com.velocitypowered.api.proxy.Player; +import me.dreamerzero.kickredirect.EventBuilder; +import me.dreamerzero.kickredirect.EventBundle; +import me.dreamerzero.kickredirect.KickResultType; import me.dreamerzero.kickredirect.listener.objects.TestContinuation; import me.dreamerzero.kickredirect.listener.objects.TestPlayer; import me.dreamerzero.kickredirect.listener.objects.TestRegisteredServer; -import me.dreamerzero.kickredirect.utils.DebugInfo; import net.kyori.adventure.text.Component; class DebugTest { - @Test - void testDebug() { - Player player = new TestPlayer("4drian3d", true); - EventBundle bundle = EventBundle.builder() - .player(player) - .event(EventBuilder.builder() - .duringServerConnect(false) - .result(KickResultType.DISCONNECT.result(Component.text(""))) - .server(new TestRegisteredServer()) - ) - .build(); - - bundle.applyListener(); - assertNotNull(bundle.getPlugin().debugCache().getIfPresent(player.getUniqueId())); - } @Test - void testEquality() { + void testKickListenerDebug() { EventBundle bundle = EventBundle.builder() .player(new TestPlayer("4drian3d", true)) .event(EventBuilder.builder() - .reason(null) + .duringServerConnect(false) .result(KickResultType.DISCONNECT.result(Component.text(""))) - .server(new TestRegisteredServer()) + .server(new TestRegisteredServer().name("TEstServer")) ) + .debug(true) .build(); - bundle.applyListener(); - DebugInfo debuginfo = bundle.getPlugin() - .debugCache().getIfPresent(bundle.getPlayer().getUniqueId()); + KickListener listener = new KickListener(bundle.getPlugin()); + listener.cache(bundle.getEvent(), "TEstServer"); - assertEquals("4drian3d", debuginfo.playerName()); + var cache = bundle.getPlugin().debugCache(); + assertNotNull(cache); + + assertThat(cache.asMap()) + .containsKey(bundle.getPlayer().getUniqueId()); } + @Test void testDebugListener() { EventBundle bundle = EventBundle.builder() @@ -60,9 +53,8 @@ void testDebugListener() { .result(KickResultType.DISCONNECT.result(Component.text(""))) .server(new TestRegisteredServer().name("TEstServer")) ) + .debug(true) .build(); - - bundle.getPlugin().config().get().debug(true); bundle.applyListener(); CountDownLatch latch = new CountDownLatch(1); @@ -79,8 +71,9 @@ public void resume() { } catch (Exception e) { fail("Exception on CountDown latch"); } - assertEquals(0, latch.getCount()); + var cache = bundle.getPlugin().debugCache(); + assertNotNull(cache.getIfPresent(bundle.getPlayer().getUniqueId())); } } diff --git a/src/test/java/me/dreamerzero/kickredirect/listener/ListenerTest.java b/src/test/java/me/dreamerzero/kickredirect/listener/ListenerTest.java new file mode 100644 index 0000000..9e0fa7d --- /dev/null +++ b/src/test/java/me/dreamerzero/kickredirect/listener/ListenerTest.java @@ -0,0 +1,127 @@ +package me.dreamerzero.kickredirect.listener; + +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertInstanceOf; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import static org.assertj.core.api.Assertions.assertThat; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import com.velocitypowered.api.event.player.KickedFromServerEvent; + +import me.dreamerzero.kickredirect.EventBuilder; +import me.dreamerzero.kickredirect.EventBundle; +import me.dreamerzero.kickredirect.KickResultType; +import me.dreamerzero.kickredirect.listener.objects.TestPlayer; +import me.dreamerzero.kickredirect.listener.objects.TestRegisteredServer; +import net.kyori.adventure.text.Component; + +class ListenerTest { + @Test + void testAllowed() { + EventBuilder builder = EventBuilder.builder() + .player(new TestPlayer("aea", false)) + .server(new TestRegisteredServer()) + .reason(Component.text("test")); + + KickedFromServerEvent event = builder + .result(KickResultType.REDIRECT.result(Component.empty())) + .build(); + + assertFalse(event.getResult().isAllowed()); + + event = builder + .result(KickResultType.NOTIFY.result(Component.empty())) + .build(); + + assertFalse(event.getResult().isAllowed()); + + event = builder + .result(KickResultType.DISCONNECT.result(Component.empty())) + .build(); + + assertTrue(event.getResult().isAllowed()); + } + + @Test + void reasonTest() { + EventBundle bundle = EventBundle.builder() + .debug(true) + .build(); + EventBuilder builder = EventBuilder.builder() + .player(new TestPlayer("aea", false)) + .server(new TestRegisteredServer()) + .result(KickResultType.DISCONNECT.result(Component.empty())); + KickedFromServerEvent event = builder + .reason(Component.text("kicked from server")) + .build(); + + KickListener listener = new KickListener(bundle.getPlugin()); + + assertTrue(listener.reasonCheck(event)); + + event = builder.reason(Component.empty()).build(); + + assertFalse(listener.reasonCheck(event)); + + event = builder.reason(null).build(); + + assertTrue(listener.reasonCheck(event)); + } + + @Test + @DisplayName("Correct Redirect") + void testCorrectRedirect() { + EventBundle bundle = EventBundle.builder() + .player(new TestPlayer("4drian3d", true)) + .event(EventBuilder.builder() + .result(KickResultType.DISCONNECT.result(Component.text(""))) + .server(new TestRegisteredServer()) + ) + .build(); + + KickListener listener = new KickListener(bundle.getPlugin()); + + assertThat(listener.redirectResult(new TestRegisteredServer(), bundle.getPlayer())) + .isInstanceOf(KickedFromServerEvent.RedirectPlayer.class); + } + + @Test + @DisplayName("Exact Server") + void testexactServer() { + EventBundle bundle = EventBundle.builder() + .player(new TestPlayer("4drian3d", true)) + .event(EventBuilder.builder() + .result(KickResultType.DISCONNECT.result(Component.text(""))) + .server(new TestRegisteredServer()) + ) + .build(); + + bundle.applyListener(); + + var result = assertInstanceOf( + KickedFromServerEvent.RedirectPlayer.class, + bundle.getEvent().getResult()); + + assertThat(bundle.getProxyServer().getServer("lobby1")) + .isPresent() + .contains(result.getServer()); + } + + @Test + void testContinuation() { + EventBundle bundle = EventBundle.builder() + .player(new TestPlayer("4drian3d", true)) + .event(EventBuilder.builder() + .result(KickResultType.DISCONNECT.result(Component.text(""))) + .server(new TestRegisteredServer()) + ) + .build(); + + bundle.applyListener(); + + assertTrue(bundle.getContinuation().resumed()); + } +}