From eab32ccef89dca2c76cdecd5f82d5e1396cfac12 Mon Sep 17 00:00:00 2001 From: Ceikry Date: Sun, 24 Apr 2022 15:08:08 +0000 Subject: [PATCH] Add unit tests for slayer Kill server networking as soon as shutdown process starts --- .../core/game/system/SystemTermination.java | 1 + .../node/entity/skill/slayer/SlayerFlags.kt | 12 ++- Server/src/test/kotlin/APITests.kt | 95 +++++++++++++++++++ 3 files changed, 106 insertions(+), 2 deletions(-) diff --git a/Server/src/main/java/core/game/system/SystemTermination.java b/Server/src/main/java/core/game/system/SystemTermination.java index 29a564bb6..c59e468d6 100644 --- a/Server/src/main/java/core/game/system/SystemTermination.java +++ b/Server/src/main/java/core/game/system/SystemTermination.java @@ -39,6 +39,7 @@ public final class SystemTermination { SystemLogger.logInfo("[SystemTerminator] Initializing termination sequence - do not shutdown!"); try { Server.setRunning(false); + Server.getReactor().terminate(); for (Iterator it = Repository.getPlayers().iterator(); it.hasNext();) { try { Player p = it.next(); diff --git a/Server/src/main/kotlin/rs09/game/node/entity/skill/slayer/SlayerFlags.kt b/Server/src/main/kotlin/rs09/game/node/entity/skill/slayer/SlayerFlags.kt index f727573fb..f47e52ce1 100644 --- a/Server/src/main/kotlin/rs09/game/node/entity/skill/slayer/SlayerFlags.kt +++ b/Server/src/main/kotlin/rs09/game/node/entity/skill/slayer/SlayerFlags.kt @@ -74,11 +74,11 @@ class SlayerFlags { * Get/Set canEarnPoints flag */ fun canEarnPoints(): Boolean { - return (taskFlags shr 16) and 1 == 1 + return (taskFlags shr 20) and 1 == 1 } fun flagCanEarnPoints() { - taskFlags = taskFlags or (1 shl 16) + taskFlags = taskFlags or (1 shl 20) } /** *============================================== @@ -148,4 +148,12 @@ class SlayerFlags { return getTaskAmount() != 0 } + fun fullClear() { + taskFlags = 0 + rewardFlags = 0 + equipmentFlags = 0 + completedTasks = 0 + taskStreak = 0 + } + } \ No newline at end of file diff --git a/Server/src/test/kotlin/APITests.kt b/Server/src/test/kotlin/APITests.kt index 1792ff0d3..3a1b98a72 100644 --- a/Server/src/test/kotlin/APITests.kt +++ b/Server/src/test/kotlin/APITests.kt @@ -1,8 +1,21 @@ import api.IfaceSettingsBuilder +import core.game.node.entity.player.Player +import core.game.node.entity.player.info.PlayerDetails +import core.game.node.entity.skill.slayer.Master +import core.game.node.entity.skill.slayer.Tasks +import org.json.simple.JSONObject +import org.json.simple.parser.JSONParser +import org.junit.Assert import org.junit.jupiter.api.Assertions import org.junit.jupiter.api.Test +import rs09.game.node.entity.skill.slayer.SlayerFlags +import rs09.game.node.entity.skill.slayer.SlayerManager +import rs09.game.system.SystemLogger object APITests { + val testPlayer = Player(PlayerDetails("test", "testing")) + val testPlayer2 = Player(PlayerDetails("test2", "testing")) + @Test fun testIfaceSettings(){ var builder = IfaceSettingsBuilder() val testOptions = builder.enableOptions(0..9).build() @@ -46,5 +59,87 @@ object APITests { Assertions.assertEquals(15466494, testAllOptions, "Testing all options") } + @Test fun testSlayerManagerSaveAndLoadAndSaveProducesEquivalentJSON() { + var manager = SlayerManager() + manager.login(testPlayer) + manager.login(testPlayer2) + manager = SlayerManager.getInstance(testPlayer) + manager.flags.setPoints(20) + manager.flags.setMaster(Master.CHAELDAR) + manager.flags.setTask(Tasks.SKELETAL_WYVERN) + manager.flags.setTaskAmount(500) + val manager2 = SlayerManager.getInstance(testPlayer2) + + val jsonFirst = JSONObject() + manager.savePlayer(testPlayer, jsonFirst) + manager.parsePlayer(testPlayer2, jsonFirst) + + val jsonSecond = JSONObject() + manager2.savePlayer(testPlayer2, jsonSecond) + Assertions.assertEquals(jsonFirst.toJSONString(), jsonSecond.toJSONString()) + } + + @Test fun testSlayerSaveAndParseProducesEquivalent() { + var manager = SlayerManager() + manager.login(testPlayer) + manager = SlayerManager.getInstance(testPlayer) + manager.flags.setPoints(500) + manager.flags.unlockHelm() + manager.flags.unlockBroads() + manager.flags.unlockRing() + + val json = JSONObject() + manager.savePlayer(testPlayer, json) + manager.flags.fullClear() + manager.parsePlayer(testPlayer, json) + Assertions.assertEquals(500, manager.flags.getPoints(), "Points were not 500!") + Assertions.assertEquals(true, manager.flags.isHelmUnlocked(), "Helm was not unlocked!") + Assertions.assertEquals(true, manager.flags.isBroadsUnlocked(), "Broads were not unlocked!") + Assertions.assertEquals(true, manager.flags.isRingUnlocked(), "Ring was not unlocked!") + } + + @Test fun testSlayerDecrementTaskAmountHasNoSideEffects() { + var manager = SlayerManager() + manager.login(testPlayer) + manager = SlayerManager.getInstance(testPlayer) + manager.flags.setTask(Tasks.CAVE_BUG) + manager.flags.setTaskAmount(100) + manager.flags.taskStreak = 4 + manager.flags.completedTasks = 4 + manager.flags.setMaster(Master.MAZCHNA) + + while(manager.hasTask()) manager.decrementAmount(1) + manager.flags.taskStreak += 1 + manager.flags.completedTasks += 1 + manager.flags.flagCanEarnPoints() + + Assertions.assertEquals(0, manager.flags.getTaskAmount(), "Task amount was not 0!") + Assertions.assertEquals(5, manager.flags.taskStreak, "Task streak was not 5!") + Assertions.assertEquals(Tasks.CAVE_BUG, manager.flags.getTask(), "Task was not cave bugs!") + Assertions.assertEquals(Master.MAZCHNA, manager.flags.getMaster(), "Master was not Mazchna!") + } + + @Test fun testKnownProblemSaveParsesCorrectly() { + val jsonString = "{\"slayer\": {\n" + + " \"taskStreak\": \"21\",\n" + + " \"rewardFlags\": 17301511,\n" + + " \"equipmentFlags\": 31,\n" + + " \"taskFlags\": 307220,\n" + + " \"removedTasks\": [\n" + + " \"73\"\n" + + " ],\n" + + " \"totalTasks\": \"108\"\n" + + " }}" + + val slayerData = JSONParser().parse(jsonString) as JSONObject + var manager = SlayerManager() + manager.login(testPlayer) + manager = SlayerManager.getInstance(testPlayer) + manager.parsePlayer(testPlayer, slayerData) + + Assertions.assertEquals(21, manager.flags.taskStreak) + Assertions.assertNotEquals(0, manager.flags.getPoints()) + Assertions.assertEquals(true, manager.flags.isHelmUnlocked()) + } } \ No newline at end of file