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
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<SelectorNetworkHandler<*>>().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)
}
}