Add unit tests for slayer

Kill server networking as soon as shutdown process starts
This commit is contained in:
Ceikry
2022-04-24 15:08:08 +00:00
committed by Ryan
parent 75f1e092d5
commit eab32ccef8
3 changed files with 106 additions and 2 deletions
@@ -39,6 +39,7 @@ public final class SystemTermination {
SystemLogger.logInfo("[SystemTerminator] Initializing termination sequence - do not shutdown!"); SystemLogger.logInfo("[SystemTerminator] Initializing termination sequence - do not shutdown!");
try { try {
Server.setRunning(false); Server.setRunning(false);
Server.getReactor().terminate();
for (Iterator<Player> it = Repository.getPlayers().iterator(); it.hasNext();) { for (Iterator<Player> it = Repository.getPlayers().iterator(); it.hasNext();) {
try { try {
Player p = it.next(); Player p = it.next();
@@ -74,11 +74,11 @@ class SlayerFlags {
* Get/Set canEarnPoints flag * Get/Set canEarnPoints flag
*/ */
fun canEarnPoints(): Boolean { fun canEarnPoints(): Boolean {
return (taskFlags shr 16) and 1 == 1 return (taskFlags shr 20) and 1 == 1
} }
fun flagCanEarnPoints() { fun flagCanEarnPoints() {
taskFlags = taskFlags or (1 shl 16) taskFlags = taskFlags or (1 shl 20)
} }
/** /**
*============================================== *==============================================
@@ -148,4 +148,12 @@ class SlayerFlags {
return getTaskAmount() != 0 return getTaskAmount() != 0
} }
fun fullClear() {
taskFlags = 0
rewardFlags = 0
equipmentFlags = 0
completedTasks = 0
taskStreak = 0
}
} }
+95
View File
@@ -1,8 +1,21 @@
import api.IfaceSettingsBuilder 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.Assertions
import org.junit.jupiter.api.Test 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 { object APITests {
val testPlayer = Player(PlayerDetails("test", "testing"))
val testPlayer2 = Player(PlayerDetails("test2", "testing"))
@Test fun testIfaceSettings(){ @Test fun testIfaceSettings(){
var builder = IfaceSettingsBuilder() var builder = IfaceSettingsBuilder()
val testOptions = builder.enableOptions(0..9).build() val testOptions = builder.enableOptions(0..9).build()
@@ -46,5 +59,87 @@ object APITests {
Assertions.assertEquals(15466494, testAllOptions, "Testing all options") 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())
}
} }