mirror of
https://github.com/mamoe/mirai.git
synced 2025-02-05 13:29:35 +08:00
Rearrange network tests
This commit is contained in:
parent
9286d2124e
commit
7f2f1e9759
@ -9,6 +9,8 @@
|
||||
|
||||
package net.mamoe.mirai.internal.network
|
||||
|
||||
import net.mamoe.mirai.internal.test.AbstractTest
|
||||
|
||||
internal class PacketCodecTest : AbstractCodecTest()
|
||||
|
||||
internal abstract class AbstractCodecTest
|
||||
internal abstract class AbstractCodecTest : AbstractTest()
|
@ -12,9 +12,10 @@ package net.mamoe.mirai.internal.network
|
||||
import net.mamoe.mirai.internal.network.components.ServerAddress
|
||||
import net.mamoe.mirai.internal.network.components.ServerList
|
||||
import net.mamoe.mirai.internal.network.components.ServerListImpl
|
||||
import net.mamoe.mirai.internal.test.AbstractTest
|
||||
import kotlin.test.*
|
||||
|
||||
internal class ServerListTest {
|
||||
internal class ServerListTest : AbstractTest() {
|
||||
|
||||
@Test
|
||||
fun canInitializeDefaults() {
|
||||
|
@ -9,6 +9,7 @@
|
||||
|
||||
package net.mamoe.mirai.internal.network.component
|
||||
|
||||
import net.mamoe.mirai.internal.test.AbstractTest
|
||||
import org.junit.jupiter.api.Test
|
||||
import kotlin.test.assertEquals
|
||||
|
||||
@ -16,7 +17,7 @@ private class TestComponent {
|
||||
companion object : ComponentKey<TestComponent>
|
||||
}
|
||||
|
||||
internal class ComponentKeyTest {
|
||||
internal class ComponentKeyTest : AbstractTest() {
|
||||
|
||||
@Test
|
||||
fun testComponentName() {
|
||||
|
@ -9,6 +9,7 @@
|
||||
|
||||
package net.mamoe.mirai.internal.network.component
|
||||
|
||||
import net.mamoe.mirai.internal.test.AbstractTest
|
||||
import org.junit.jupiter.api.Test
|
||||
import kotlin.test.assertEquals
|
||||
|
||||
@ -24,7 +25,7 @@ private data class TestComponent3(
|
||||
companion object : ComponentKey<TestComponent3>
|
||||
}
|
||||
|
||||
internal class ComponentStorageTest {
|
||||
internal class ComponentStorageTest : AbstractTest() {
|
||||
@Test
|
||||
fun `can put component`() {
|
||||
val storage = ConcurrentComponentStorage().apply {
|
||||
|
@ -9,7 +9,7 @@
|
||||
|
||||
@file:Suppress("MemberVisibilityCanBePrivate")
|
||||
|
||||
package net.mamoe.mirai.internal.network.handler
|
||||
package net.mamoe.mirai.internal.network.framework
|
||||
|
||||
import net.mamoe.mirai.internal.MockBot
|
||||
import net.mamoe.mirai.internal.network.component.ConcurrentComponentStorage
|
||||
@ -19,9 +19,12 @@ import net.mamoe.mirai.internal.network.context.SsoProcessorContextImpl
|
||||
import net.mamoe.mirai.internal.network.handler.state.LoggingStateObserver
|
||||
import net.mamoe.mirai.internal.network.handler.state.SafeStateObserver
|
||||
import net.mamoe.mirai.internal.network.handler.state.StateObserver
|
||||
import net.mamoe.mirai.internal.test.AbstractTest
|
||||
import net.mamoe.mirai.utils.MiraiLogger
|
||||
import org.junit.jupiter.api.TestInstance
|
||||
|
||||
internal abstract class AbstractNetworkHandlerTest {
|
||||
@TestInstance(TestInstance.Lifecycle.PER_METHOD)
|
||||
internal abstract class AbstractMockNetworkHandlerTest : AbstractTest() {
|
||||
protected open fun createNetworkHandlerContext() = TestNetworkHandlerContext(bot, logger, components)
|
||||
protected open fun createNetworkHandler() = TestNetworkHandler(createNetworkHandlerContext())
|
||||
|
@ -0,0 +1,88 @@
|
||||
/*
|
||||
* Copyright 2019-2021 Mamoe Technologies and contributors.
|
||||
*
|
||||
* 此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 许可证的约束, 可以在以下链接找到该许可证.
|
||||
* Use of this source code is governed by the GNU AGPLv3 license that can be found through the following link.
|
||||
*
|
||||
* https://github.com/mamoe/mirai/blob/master/LICENSE
|
||||
*/
|
||||
|
||||
package net.mamoe.mirai.internal.network.framework
|
||||
|
||||
import net.mamoe.mirai.internal.MockBot
|
||||
import net.mamoe.mirai.internal.QQAndroidBot
|
||||
import net.mamoe.mirai.internal.network.QQAndroidClient
|
||||
import net.mamoe.mirai.internal.network.component.ComponentStorage
|
||||
import net.mamoe.mirai.internal.network.component.ConcurrentComponentStorage
|
||||
import net.mamoe.mirai.internal.network.component.plus
|
||||
import net.mamoe.mirai.internal.network.components.*
|
||||
import net.mamoe.mirai.internal.network.context.SsoProcessorContext
|
||||
import net.mamoe.mirai.internal.network.context.SsoProcessorContextImpl
|
||||
import net.mamoe.mirai.internal.network.context.SsoSession
|
||||
import net.mamoe.mirai.internal.network.handler.NetworkHandler
|
||||
import net.mamoe.mirai.internal.network.handler.NetworkHandlerContextImpl
|
||||
import net.mamoe.mirai.internal.network.handler.NetworkHandlerFactory
|
||||
import net.mamoe.mirai.internal.network.handler.state.StateObserver
|
||||
import net.mamoe.mirai.internal.test.AbstractTest
|
||||
import net.mamoe.mirai.utils.MiraiLogger
|
||||
import net.mamoe.mirai.utils.debug
|
||||
import java.net.InetSocketAddress
|
||||
|
||||
/**
|
||||
* With real factory and components as in [QQAndroidBot.components].
|
||||
*/
|
||||
internal abstract class AbstractRealNetworkHandlerTest<H : NetworkHandler>(
|
||||
private val factory: NetworkHandlerFactory<H>,
|
||||
) : AbstractTest() {
|
||||
val bot = MockBot()
|
||||
val networkLogger = MiraiLogger.TopLevel
|
||||
|
||||
protected open val defaultComponents = ConcurrentComponentStorage().apply {
|
||||
val components = this
|
||||
val configuration = bot.configuration
|
||||
set(SsoProcessorContext, SsoProcessorContextImpl(bot))
|
||||
set(SsoProcessor, object : SsoProcessor {
|
||||
override val client: QQAndroidClient get() = bot.client
|
||||
override val ssoSession: SsoSession get() = bot.client
|
||||
override fun createObserverChain(): StateObserver = StateObserver.NOP
|
||||
override suspend fun login(handler: NetworkHandler) {
|
||||
networkLogger.debug { "SsoProcessor.login" }
|
||||
}
|
||||
})
|
||||
set(HeartbeatProcessor, object : HeartbeatProcessor {
|
||||
override suspend fun doHeartbeatNow(networkHandler: NetworkHandler) {
|
||||
networkLogger.debug { "HeartbeatProcessor.doHeartbeatNow" }
|
||||
}
|
||||
})
|
||||
set(KeyRefreshProcessor, KeyRefreshProcessorImpl(networkLogger))
|
||||
set(ConfigPushProcessor, ConfigPushProcessorImpl(networkLogger))
|
||||
|
||||
set(BotInitProcessor, object : BotInitProcessor {
|
||||
override suspend fun init() {
|
||||
networkLogger.debug { "BotInitProcessor.init" }
|
||||
}
|
||||
})
|
||||
set(ContactCacheService, ContactCacheServiceImpl(bot))
|
||||
set(ContactUpdater, ContactUpdaterImpl(bot, components, networkLogger))
|
||||
set(BdhSessionSyncer, BdhSessionSyncerImpl(configuration, networkLogger, components))
|
||||
set(ServerList, ServerListImpl())
|
||||
set(PacketHandler, LoggingPacketHandler(bot, components, networkLogger))
|
||||
set(PacketCodec, PacketCodecImpl())
|
||||
set(OtherClientUpdater, OtherClientUpdaterImpl(bot, components, bot.logger))
|
||||
set(ConfigPushSyncer, ConfigPushSyncerImpl())
|
||||
|
||||
set(StateObserver, StateObserver.NOP)
|
||||
|
||||
}
|
||||
|
||||
protected open fun createHandler(additionalComponents: ComponentStorage? = null): NetworkHandler {
|
||||
return factory.create(
|
||||
NetworkHandlerContextImpl(
|
||||
bot,
|
||||
networkLogger,
|
||||
additionalComponents?.plus(defaultComponents) ?: defaultComponents
|
||||
),
|
||||
InetSocketAddress.createUnresolved("localhost", 123)
|
||||
)
|
||||
}
|
||||
}
|
@ -0,0 +1,24 @@
|
||||
/*
|
||||
* Copyright 2019-2021 Mamoe Technologies and contributors.
|
||||
*
|
||||
* 此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 许可证的约束, 可以在以下链接找到该许可证.
|
||||
* Use of this source code is governed by the GNU AGPLv3 license that can be found through the following link.
|
||||
*
|
||||
* https://github.com/mamoe/mirai/blob/master/LICENSE
|
||||
*/
|
||||
|
||||
package net.mamoe.mirai.internal.network.framework
|
||||
|
||||
import net.mamoe.mirai.internal.network.handler.NetworkHandler
|
||||
import kotlin.contracts.InvocationKind
|
||||
import kotlin.contracts.contract
|
||||
|
||||
internal fun <R> NetworkHandler.useNetworkHandler(action: NetworkHandler.(handler: NetworkHandler) -> R): R {
|
||||
contract { callsInPlace(action, InvocationKind.EXACTLY_ONCE) }
|
||||
val r = kotlin.runCatching { action(this) }
|
||||
r.fold(
|
||||
onSuccess = { close(null) },
|
||||
onFailure = { close(it) }
|
||||
)
|
||||
return r.getOrThrow()
|
||||
}
|
@ -7,10 +7,12 @@
|
||||
* https://github.com/mamoe/mirai/blob/master/LICENSE
|
||||
*/
|
||||
|
||||
package net.mamoe.mirai.internal.network
|
||||
package net.mamoe.mirai.internal.network.framework
|
||||
|
||||
import net.mamoe.mirai.event.events.BotOnlineEvent
|
||||
import net.mamoe.mirai.internal.QQAndroidBot
|
||||
import net.mamoe.mirai.internal.network.QQAndroidClient
|
||||
import net.mamoe.mirai.internal.network.WLoginSigInfo
|
||||
import net.mamoe.mirai.internal.network.context.AccountSecrets
|
||||
import net.mamoe.mirai.internal.network.context.AccountSecretsImpl
|
||||
import net.mamoe.mirai.internal.network.context.SsoSession
|
@ -7,7 +7,7 @@
|
||||
* https://github.com/mamoe/mirai/blob/master/LICENSE
|
||||
*/
|
||||
|
||||
package net.mamoe.mirai.internal.network.handler
|
||||
package net.mamoe.mirai.internal.network.framework
|
||||
|
||||
import kotlinx.coroutines.CompletableDeferred
|
||||
import net.mamoe.mirai.internal.MockBot
|
||||
@ -17,6 +17,9 @@ import net.mamoe.mirai.internal.network.component.ConcurrentComponentStorage
|
||||
import net.mamoe.mirai.internal.network.components.SsoProcessor
|
||||
import net.mamoe.mirai.internal.network.components.SsoProcessorImpl
|
||||
import net.mamoe.mirai.internal.network.context.SsoProcessorContextImpl
|
||||
import net.mamoe.mirai.internal.network.handler.NetworkHandler
|
||||
import net.mamoe.mirai.internal.network.handler.NetworkHandlerContext
|
||||
import net.mamoe.mirai.internal.network.handler.NetworkHandlerSupport
|
||||
import net.mamoe.mirai.internal.network.handler.state.LoggingStateObserver
|
||||
import net.mamoe.mirai.internal.network.handler.state.SafeStateObserver
|
||||
import net.mamoe.mirai.internal.network.handler.state.StateObserver
|
@ -0,0 +1,24 @@
|
||||
/*
|
||||
* Copyright 2019-2021 Mamoe Technologies and contributors.
|
||||
*
|
||||
* 此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 许可证的约束, 可以在以下链接找到该许可证.
|
||||
* Use of this source code is governed by the GNU AGPLv3 license that can be found through the following link.
|
||||
*
|
||||
* https://github.com/mamoe/mirai/blob/master/LICENSE
|
||||
*/
|
||||
|
||||
package net.mamoe.mirai.internal.network.handler
|
||||
|
||||
import net.mamoe.mirai.internal.network.framework.AbstractRealNetworkHandlerTest
|
||||
import net.mamoe.mirai.internal.network.impl.netty.NettyNetworkHandler
|
||||
import net.mamoe.mirai.internal.network.impl.netty.NettyNetworkHandlerFactory
|
||||
import net.mamoe.mirai.internal.test.runBlockingUnit
|
||||
import kotlin.test.Test
|
||||
|
||||
internal class HandlerEventTest : AbstractRealNetworkHandlerTest<NettyNetworkHandler>(NettyNetworkHandlerFactory) {
|
||||
|
||||
@Test
|
||||
fun `BotOnlineEvent after successful logon`() = runBlockingUnit {
|
||||
bot.login()
|
||||
}
|
||||
}
|
@ -9,6 +9,7 @@
|
||||
|
||||
package net.mamoe.mirai.internal.network.handler
|
||||
|
||||
import net.mamoe.mirai.internal.network.framework.AbstractMockNetworkHandlerTest
|
||||
import net.mamoe.mirai.internal.network.handler.NetworkHandler.State
|
||||
import net.mamoe.mirai.internal.network.handler.selector.AbstractKeepAliveNetworkHandlerSelector
|
||||
import net.mamoe.mirai.internal.test.runBlockingUnit
|
||||
@ -25,13 +26,10 @@ private class TestSelector(val createInstance0: () -> NetworkHandler) :
|
||||
}
|
||||
}
|
||||
|
||||
internal class KeepAliveNetworkHandlerSelectorTest {
|
||||
|
||||
private fun createHandler() = TestNetworkHandler(TestNetworkHandlerContext())
|
||||
|
||||
internal class KeepAliveNetworkHandlerSelectorTest : AbstractMockNetworkHandlerTest() {
|
||||
@Test
|
||||
fun `can initialize instance`() {
|
||||
val selector = TestSelector { createHandler().apply { setState(State.OK) } }
|
||||
val selector = TestSelector { createNetworkHandler().apply { setState(State.OK) } }
|
||||
runBlockingUnit(timeout = 3.seconds) { selector.awaitResumeInstance() }
|
||||
assertNotNull(selector.getResumedInstance())
|
||||
}
|
||||
@ -41,7 +39,7 @@ internal class KeepAliveNetworkHandlerSelectorTest {
|
||||
val selector = TestSelector {
|
||||
fail("initialize called")
|
||||
}
|
||||
val handler = createHandler()
|
||||
val handler = createNetworkHandler()
|
||||
selector.setCurrent(handler)
|
||||
assertSame(handler, selector.getResumedInstance())
|
||||
}
|
||||
@ -49,9 +47,9 @@ internal class KeepAliveNetworkHandlerSelectorTest {
|
||||
@Test
|
||||
fun `initialize another when closed`() {
|
||||
val selector = TestSelector {
|
||||
createHandler().apply { setState(State.OK) }
|
||||
createNetworkHandler().apply { setState(State.OK) }
|
||||
}
|
||||
val handler = createHandler()
|
||||
val handler = createNetworkHandler()
|
||||
selector.setCurrent(handler)
|
||||
assertSame(handler, selector.getResumedInstance())
|
||||
handler.setState(State.CLOSED)
|
@ -0,0 +1,24 @@
|
||||
/*
|
||||
* Copyright 2019-2021 Mamoe Technologies and contributors.
|
||||
*
|
||||
* 此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 许可证的约束, 可以在以下链接找到该许可证.
|
||||
* Use of this source code is governed by the GNU AGPLv3 license that can be found through the following link.
|
||||
*
|
||||
* https://github.com/mamoe/mirai/blob/master/LICENSE
|
||||
*/
|
||||
|
||||
package net.mamoe.mirai.internal.network.handler
|
||||
|
||||
import net.mamoe.mirai.internal.network.framework.AbstractMockNetworkHandlerTest
|
||||
import kotlin.test.Test
|
||||
|
||||
/**
|
||||
* @see NetworkHandler.resumeConnection
|
||||
*/
|
||||
internal class ResumeConnectionTest : AbstractMockNetworkHandlerTest() {
|
||||
|
||||
@Test
|
||||
fun `resumeConnection switches a state that can send packet`() {
|
||||
createNetworkHandler().sendPacket
|
||||
}
|
||||
}
|
@ -9,6 +9,7 @@
|
||||
|
||||
package net.mamoe.mirai.internal.network.handler
|
||||
|
||||
import net.mamoe.mirai.internal.network.framework.AbstractMockNetworkHandlerTest
|
||||
import net.mamoe.mirai.internal.network.handler.NetworkHandler.State.CONNECTING
|
||||
import net.mamoe.mirai.internal.network.handler.NetworkHandler.State.INITIALIZED
|
||||
import net.mamoe.mirai.internal.network.handler.state.StateChangedObserver
|
||||
@ -18,7 +19,7 @@ import org.junit.jupiter.api.TestInstance
|
||||
import kotlin.test.assertEquals
|
||||
|
||||
@TestInstance(TestInstance.Lifecycle.PER_METHOD)
|
||||
internal class StateObserverTest : AbstractNetworkHandlerTest() {
|
||||
internal class StateObserverTest : AbstractMockNetworkHandlerTest() {
|
||||
@Test
|
||||
fun `can trigger observer`() {
|
||||
val called = ArrayList<Pair<NetworkHandlerSupport.BaseStateImpl, NetworkHandlerSupport.BaseStateImpl>>()
|
||||
|
@ -7,12 +7,13 @@
|
||||
* https://github.com/mamoe/mirai/blob/master/LICENSE
|
||||
*/
|
||||
|
||||
package net.mamoe.mirai.internal.network
|
||||
package net.mamoe.mirai.internal.network.impl.netty
|
||||
|
||||
import io.netty.channel.DefaultChannelPromise
|
||||
import io.netty.channel.embedded.EmbeddedChannel
|
||||
import kotlinx.coroutines.delay
|
||||
import kotlinx.coroutines.launch
|
||||
import net.mamoe.mirai.internal.test.AbstractTest
|
||||
import net.mamoe.mirai.internal.test.runBlockingUnit
|
||||
import org.junit.jupiter.api.AfterAll
|
||||
import org.junit.jupiter.api.Test
|
||||
@ -20,7 +21,10 @@ import kotlin.test.assertFailsWith
|
||||
import kotlin.test.assertTrue
|
||||
import kotlin.time.seconds
|
||||
|
||||
internal class NettyTestUnit {
|
||||
/**
|
||||
* @see awaitKt
|
||||
*/
|
||||
internal class NettyUtilsTest : AbstractTest() {
|
||||
companion object {
|
||||
private val channel = EmbeddedChannel()
|
||||
|
Loading…
Reference in New Issue
Block a user