1
+ /*
2
+ * Copyright 2019-2022 Mamoe Technologies and contributors.
3
+ *
4
+ * 此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 许可证的约束, 可以在以下链接找到该许可证.
5
+ * Use of this source code is governed by the GNU AGPLv3 license that can be found through the following link.
6
+ *
7
+ * https://github.com/mamoe/mirai/blob/dev/LICENSE
8
+ */
9
+
10
+ package net.mamoe.mirai.internal.network.handler
11
+
12
+ import kotlinx.coroutines.test.runTest
13
+ import net.mamoe.mirai.internal.network.components.SsoProcessor
14
+ import net.mamoe.mirai.internal.network.framework.AbstractRealNetworkHandlerTest
15
+ import net.mamoe.mirai.internal.network.framework.TestCommonNetworkHandler
16
+ import net.mamoe.mirai.internal.network.framework.components.TestSsoProcessor
17
+ import net.mamoe.mirai.internal.network.handler.selector.SelectorNetworkHandler
18
+ import net.mamoe.mirai.internal.network.protocol.packet.login.WtLogin
19
+ import kotlin.test.Test
20
+ import kotlin.test.assertEquals
21
+ import kotlin.test.assertFailsWith
22
+
23
+ internal class SelectorLoginRecoveryTest :
24
+ AbstractRealNetworkHandlerTest <SelectorNetworkHandler <TestCommonNetworkHandler >>() {
25
+
26
+ // does not use selector
27
+ override val factory: NetworkHandlerFactory <SelectorNetworkHandler <TestCommonNetworkHandler >> =
28
+ NetworkHandlerFactory <SelectorNetworkHandler <TestCommonNetworkHandler >> { context, address ->
29
+ SelectorNetworkHandler (TestSelector {
30
+ object : TestCommonNetworkHandler (bot, context, address) {
31
+ }
32
+ })
33
+ }
34
+
35
+ /* *
36
+ * 登录时遇到未知错误, [WtLogin] 会抛 [IllegalStateException] (即抛不可挽救的异常),
37
+ * selector 应该停止登录, 不要重试, 重新抛出捕获的异常.
38
+ */
39
+ @Test
40
+ fun `rethrow exception caught during Bot_login` () = runTest {
41
+ val exceptionMessage = " Login failed!"
42
+ setComponent(SsoProcessor , object : TestSsoProcessor (bot) {
43
+ override suspend fun login (handler : NetworkHandler ) {
44
+ throw IllegalStateException (exceptionMessage)
45
+ }
46
+ })
47
+
48
+ assertFailsWith<IllegalStateException > {
49
+ bot.login()
50
+ }.let { e ->
51
+ assertEquals(exceptionMessage, e.message)
52
+ }
53
+ }
54
+ }
0 commit comments