Add testing

This commit is contained in:
Karlatemp 2021-07-18 23:12:04 +08:00
parent 6ab2d7e4c0
commit b74b6da8a3

View File

@ -10,31 +10,51 @@
package net.mamoe.mirai.internal.network.impl.netty package net.mamoe.mirai.internal.network.impl.netty
import kotlinx.coroutines.awaitCancellation import kotlinx.coroutines.awaitCancellation
import kotlinx.coroutines.delay
import kotlinx.coroutines.isActive import kotlinx.coroutines.isActive
import net.mamoe.mirai.internal.network.components.BotOfflineEventMonitor
import net.mamoe.mirai.internal.network.components.BotOfflineEventMonitorImpl
import net.mamoe.mirai.internal.network.framework.AbstractNettyNHTest import net.mamoe.mirai.internal.network.framework.AbstractNettyNHTest
import net.mamoe.mirai.internal.network.framework.TestNettyNH
import net.mamoe.mirai.internal.network.framework.setSsoProcessor import net.mamoe.mirai.internal.network.framework.setSsoProcessor
import net.mamoe.mirai.internal.network.handler.NetworkHandler import net.mamoe.mirai.internal.network.handler.NetworkHandler
import net.mamoe.mirai.internal.network.handler.selector.KeepAliveNetworkHandlerSelector import net.mamoe.mirai.internal.network.handler.selector.KeepAliveNetworkHandlerSelector
import net.mamoe.mirai.internal.network.handler.selector.SelectorNetworkHandler import net.mamoe.mirai.internal.network.handler.selector.SelectorNetworkHandler
import net.mamoe.mirai.internal.network.handler.selectorLogger import net.mamoe.mirai.internal.network.handler.selectorLogger
import net.mamoe.mirai.internal.network.protocol.packet.login.StatSvc
import net.mamoe.mirai.internal.test.runBlockingUnit import net.mamoe.mirai.internal.test.runBlockingUnit
import net.mamoe.mirai.network.CustomLoginFailedException import net.mamoe.mirai.network.CustomLoginFailedException
import net.mamoe.mirai.utils.cast
import org.junit.jupiter.api.AfterEach
import org.junit.jupiter.api.Test import org.junit.jupiter.api.Test
import java.io.IOException import java.io.IOException
import kotlin.test.assertFailsWith import kotlin.test.assertFailsWith
import kotlin.test.assertFalse import kotlin.test.assertFalse
internal class NettyBotNormalLoginTest : AbstractNettyNHTest() { internal class NettyBotNormalLoginTest : AbstractNettyNHTest() {
init {
overrideComponents[BotOfflineEventMonitor] = BotOfflineEventMonitorImpl()
}
val selector = KeepAliveNetworkHandlerSelector(selectorLogger) { val selector = KeepAliveNetworkHandlerSelector(selectorLogger) {
super.factory.create(createContext(), createAddress()) super.factory.create(createContext(), createAddress())
} }
override val network: TestNettyNH
get() = bot.network.cast<SelectorNetworkHandler<*>>().selector.getCurrentInstanceOrCreate().cast()
override fun createHandler(): NetworkHandler { override fun createHandler(): NetworkHandler {
return SelectorNetworkHandler(selector) return SelectorNetworkHandler(selector)
} }
class CusLoginException(message: String?) : CustomLoginFailedException(true, message) class CusLoginException(message: String?) : CustomLoginFailedException(true, message)
@AfterEach
fun `close bot`() = runBlockingUnit {
bot.logger.info("[TEST UNIT] Releasing bot....")
bot.closeAndJoin()
}
@Test @Test
fun `test login fail`() = runBlockingUnit { fun `test login fail`() = runBlockingUnit {
setSsoProcessor { throw CusLoginException("A") } setSsoProcessor { throw CusLoginException("A") }
@ -55,4 +75,16 @@ internal class NettyBotNormalLoginTest : AbstractNettyNHTest() {
} }
bot.login() bot.login()
} }
@Test
fun `test resume after MsfOffline received`() = runBlockingUnit {
bot.login()
bot.network.close(StatSvc.ReqMSFOffline.MsfOfflineToken(0, 0, 0))
eventDispatcher.joinBroadcast()
delay(1000L) // auto resume in BotOfflineEventMonitor
eventDispatcher.joinBroadcast()
assertState(NetworkHandler.State.OK)
}
} }