Skip to content

Commit 6dbf764

Browse files
committed
Fixed protocol compat tests
1 parent f5581ee commit 6dbf764

File tree

1 file changed

+41
-19
lines changed

1 file changed

+41
-19
lines changed

tests/krpc-protocol-compatibility-tests/src/test/kotlin/kotlinx/rpc/krpc/test/compat/KrpcProtocolCompatibilityTestsBase.kt

Lines changed: 41 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,11 @@ package kotlinx.rpc.krpc.test.compat
66

77
import ch.qos.logback.classic.Logger
88
import kotlinx.coroutines.CoroutineScope
9+
import kotlinx.coroutines.Dispatchers
910
import kotlinx.coroutines.ExperimentalCoroutinesApi
10-
import kotlinx.coroutines.debug.DebugProbes
1111
import kotlinx.coroutines.test.TestScope
12+
import kotlinx.coroutines.withContext
13+
import kotlinx.rpc.krpc.test.compat.service.TestStarter
1214
import kotlinx.rpc.test.runTestWithCoroutinesProbes
1315
import org.junit.jupiter.api.DynamicTest
1416
import org.slf4j.LoggerFactory
@@ -22,6 +24,7 @@ import kotlin.time.Duration.Companion.seconds
2224
enum class Versions {
2325
v0_9,
2426
v0_8,
27+
Latest
2528
;
2629
}
2730

@@ -36,29 +39,48 @@ class VersionRolePair(
3639

3740
@Suppress("unused")
3841
val Versions.client get() = VersionRolePair(this, Role.Client)
42+
3943
@Suppress("unused")
4044
val Versions.server get() = VersionRolePair(this, Role.Server)
4145

4246
abstract class KrpcProtocolCompatibilityTestsBase {
43-
class LoadedStarter(val version: Versions, val classLoader: URLClassLoader) {
44-
val starter = classLoader
47+
interface LoadedStarter {
48+
val version: Versions
49+
val starter: Starter
50+
suspend fun close()
51+
}
52+
53+
class LoadedStarterImpl(override val version: Versions, val classLoader: URLClassLoader) : LoadedStarter {
54+
override val starter = classLoader
4555
.loadClass("kotlinx.rpc.krpc.test.compat.service.TestStarter")
4656
.getDeclaredConstructor()
4757
.newInstance() as Starter
4858

49-
suspend fun close() {
50-
classLoader.close()
59+
override suspend fun close() {
60+
withContext(Dispatchers.IO) {
61+
classLoader.close()
62+
}
5163
starter.stopClient()
5264
starter.stopServer()
5365
}
5466
}
5567

5668
private fun prepareStarters(exclude: List<Versions>): List<LoadedStarter> {
57-
return Versions.entries.filter { it !in exclude }.map { version ->
69+
return Versions.entries.filter { it !in exclude && it != Versions.Latest }.map { version ->
5870
val versionResourcePath = javaClass.classLoader.getResource(version.name)!!
5971
val versionClassLoader = URLClassLoader(arrayOf(versionResourcePath), javaClass.classLoader)
6072

61-
LoadedStarter(version, versionClassLoader)
73+
LoadedStarterImpl(version, versionClassLoader)
74+
} + latestStarter()
75+
}
76+
77+
private fun latestStarter() = object : LoadedStarter {
78+
override val version: Versions = Versions.Latest
79+
override val starter: Starter = TestStarter()
80+
81+
override suspend fun close() {
82+
starter.stopClient()
83+
starter.stopServer()
6284
}
6385
}
6486

@@ -80,20 +102,20 @@ abstract class KrpcProtocolCompatibilityTestsBase {
80102
timeout: Duration = 10.seconds,
81103
body: suspend TestEnv.() -> Unit,
82104
): Stream<DynamicTest> {
83-
return prepareStarters(exclude).map {
84-
DynamicTest.dynamicTest("$role ${it.version}") {
105+
return prepareStarters(exclude).map { old ->
106+
DynamicTest.dynamicTest("$role ${old.version}") {
85107
runTestWithCoroutinesProbes(timeout = timeout) {
86-
DebugProbes.withDebugProbes {
87-
val root = LoggerFactory.getLogger(org.slf4j.Logger.ROOT_LOGGER_NAME) as Logger
88-
val testAppender = root.getAppender("TEST") as TestLogAppender
108+
val root = LoggerFactory.getLogger(org.slf4j.Logger.ROOT_LOGGER_NAME) as Logger
109+
val testAppender = root.getAppender("TEST") as TestLogAppender
110+
testAppender.events.clear()
111+
val new = latestStarter()
112+
try {
113+
val env = TestEnv(old.starter, new.starter, testAppender, this)
114+
body(env)
115+
} finally {
89116
testAppender.events.clear()
90-
try {
91-
val env = TestEnv(it.starter, it.starter, testAppender, this)
92-
body(env)
93-
} finally {
94-
testAppender.events.clear()
95-
it.close()
96-
}
117+
old.close()
118+
new.close()
97119
}
98120
}
99121
}

0 commit comments

Comments
 (0)