From b74b6da8a3c4b44371d2d54f115a941944e89eec Mon Sep 17 00:00:00 2001 From: Karlatemp Date: Sun, 18 Jul 2021 23:12:04 +0800 Subject: [PATCH] Add testing --- .../impl/netty/NettyBotNormalLoginTest.kt | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/mirai-core/src/commonTest/kotlin/network/impl/netty/NettyBotNormalLoginTest.kt b/mirai-core/src/commonTest/kotlin/network/impl/netty/NettyBotNormalLoginTest.kt index 09bc2af14..2dd638a13 100644 --- a/mirai-core/src/commonTest/kotlin/network/impl/netty/NettyBotNormalLoginTest.kt +++ b/mirai-core/src/commonTest/kotlin/network/impl/netty/NettyBotNormalLoginTest.kt @@ -10,31 +10,51 @@ package net.mamoe.mirai.internal.network.impl.netty import kotlinx.coroutines.awaitCancellation +import kotlinx.coroutines.delay 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.TestNettyNH import net.mamoe.mirai.internal.network.framework.setSsoProcessor 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.SelectorNetworkHandler 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.network.CustomLoginFailedException +import net.mamoe.mirai.utils.cast +import org.junit.jupiter.api.AfterEach import org.junit.jupiter.api.Test import java.io.IOException import kotlin.test.assertFailsWith import kotlin.test.assertFalse internal class NettyBotNormalLoginTest : AbstractNettyNHTest() { + init { + overrideComponents[BotOfflineEventMonitor] = BotOfflineEventMonitorImpl() + } + val selector = KeepAliveNetworkHandlerSelector(selectorLogger) { super.factory.create(createContext(), createAddress()) } + override val network: TestNettyNH + get() = bot.network.cast>().selector.getCurrentInstanceOrCreate().cast() + override fun createHandler(): NetworkHandler { return SelectorNetworkHandler(selector) } class CusLoginException(message: String?) : CustomLoginFailedException(true, message) + @AfterEach + fun `close bot`() = runBlockingUnit { + bot.logger.info("[TEST UNIT] Releasing bot....") + bot.closeAndJoin() + } + @Test fun `test login fail`() = runBlockingUnit { setSsoProcessor { throw CusLoginException("A") } @@ -55,4 +75,16 @@ internal class NettyBotNormalLoginTest : AbstractNettyNHTest() { } 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) + } }