Skip to content

Commit 4c61fc3

Browse files
committed
support nullable contextual serializers tests
1 parent d4df8dc commit 4c61fc3

File tree

6 files changed

+79
-19
lines changed

6 files changed

+79
-19
lines changed

krpc/krpc-test/src/commonTest/kotlin/kotlinx/rpc/krpc/test/SamplingService.kt

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,22 +4,47 @@
44

55
// NOTE: preserve package for compatibility tests
66
@file:Suppress("PackageDirectoryMismatch")
7+
@file:UseSerializers(SamplingCustomStringSerializer::class)
8+
79
package org.jetbrains.krpc.test.api.util
810

911
import kotlinx.coroutines.flow.*
1012
import kotlinx.rpc.annotations.Rpc
1113
import kotlinx.rpc.krpc.test.plainFlow
14+
import kotlinx.serialization.Contextual
15+
import kotlinx.serialization.KSerializer
1216
import kotlinx.serialization.Serializable
17+
import kotlinx.serialization.UseSerializers
18+
import kotlinx.serialization.descriptors.PrimitiveKind
19+
import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor
20+
import kotlinx.serialization.descriptors.SerialDescriptor
21+
import kotlinx.serialization.encoding.Decoder
22+
import kotlinx.serialization.encoding.Encoder
1323

1424
@Serializable
1525
data class SamplingData(
1626
val data: String,
1727
)
1828

29+
data class SamplingCustomString(
30+
val data: String,
31+
)
32+
33+
object SamplingCustomStringSerializer : KSerializer<SamplingCustomString> {
34+
override val descriptor: SerialDescriptor
35+
get() = PrimitiveSerialDescriptor("SamplingCustomStringSerializer", PrimitiveKind.STRING)
36+
37+
override fun serialize(encoder: Encoder, value: SamplingCustomString): Unit = encoder.encodeString(value.data)
38+
39+
override fun deserialize(decoder: Decoder): SamplingCustomString = SamplingCustomString(decoder.decodeString())
40+
}
41+
1942
@Rpc
2043
interface SamplingService {
2144
suspend fun echo(arg1: String, data: SamplingData): SamplingData
2245

46+
suspend fun parseNullableArg(arg1: String, arg2: @Contextual() SamplingCustomString?): String
47+
2348
suspend fun clientStream(flow: Flow<Int>): List<Int>
2449

2550
fun serverFlow(): Flow<SamplingData>
@@ -29,7 +54,11 @@ interface SamplingService {
2954

3055
class SamplingServiceImpl : SamplingService {
3156
override suspend fun echo(arg1: String, data: SamplingData): SamplingData {
32-
return data
57+
return SamplingData("$arg1 ${data.data}")
58+
}
59+
60+
override suspend fun parseNullableArg(arg1: String, arg2: SamplingCustomString?): String {
61+
return "$arg1 ${arg2?.data}"
3362
}
3463

3564
override suspend fun clientStream(flow: Flow<Int>): List<Int> {

krpc/krpc-test/src/jvmTest/kotlin/kotlinx/rpc/krpc/test/api/ApiVersioningTest.kt

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,16 @@ class ApiVersioningTest {
4848
@Test
4949
fun testEchoSampling() = wireSamplingTest("echo") {
5050
sample {
51-
val response = echo("Hello", SamplingData("data"))
52-
assertEquals(SamplingData("data"), response)
51+
val response = echo("Hello", SamplingData("World"))
52+
assertEquals(SamplingData("Hello World"), response)
53+
}
54+
}
55+
56+
@Test
57+
fun testParseNullableArgSampling() = wireSamplingTest("parseNullableArg") {
58+
sample(SamplingFormat.Json) {
59+
val response = parseNullableArg("Hello", null)
60+
assertEquals("Hello null", response)
5361
}
5462
}
5563

krpc/krpc-test/src/jvmTest/kotlin/kotlinx/rpc/krpc/test/api/WireSamplingTestScope.kt

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,11 @@ import kotlinx.rpc.krpc.test.debugCoroutines
3838
import kotlinx.rpc.registerService
3939
import kotlinx.rpc.withService
4040
import kotlinx.serialization.ExperimentalSerializationApi
41+
import kotlinx.serialization.json.Json
42+
import kotlinx.serialization.modules.SerializersModule
43+
import kotlinx.serialization.protobuf.ProtoBuf
44+
import org.jetbrains.krpc.test.api.util.SamplingCustomString
45+
import org.jetbrains.krpc.test.api.util.SamplingCustomStringSerializer
4146
import org.jetbrains.krpc.test.api.util.SamplingService
4247
import org.jetbrains.krpc.test.api.util.SamplingServiceImpl
4348
import java.nio.file.Files
@@ -308,11 +313,19 @@ private class WireToolkit(scope: CoroutineScope, format: SamplingFormat, val log
308313
@OptIn(ExperimentalSerializationApi::class)
309314
enum class SamplingFormat(val commentBinaryOutput: Boolean, val init: KrpcSerialFormatConfiguration.() -> Unit) {
310315
Json(false, {
311-
json()
316+
json(Json {
317+
serializersModule = SerializersModule {
318+
contextual(SamplingCustomString::class, SamplingCustomStringSerializer)
319+
}
320+
})
312321
}),
313322

314323
Protobuf(true, {
315-
protobuf()
324+
protobuf(ProtoBuf {
325+
serializersModule = SerializersModule {
326+
contextual(SamplingCustomString::class, SamplingCustomStringSerializer)
327+
}
328+
})
316329
}),
317330
;
318331

krpc/krpc-test/src/jvmTest/resources/wire_dumps/0_8_0/echo_json.gold

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22
[Server] [Receive] $ {"type":"org.jetbrains.krpc.internal.transport.RPCProtocolMessage.Handshake","supportedPlugins":[-32767,-32766,-32765,-32764]}
33
[Server] [Send] $ {"type":"org.jetbrains.krpc.internal.transport.RPCProtocolMessage.Handshake","supportedPlugins":[-32767,-32766,-32765,-32764],"connectionId":1}
44
[Client] [Receive] $ {"type":"org.jetbrains.krpc.internal.transport.RPCProtocolMessage.Handshake","supportedPlugins":[-32767,-32766,-32765,-32764],"connectionId":1}
5-
[Client] [Send] $ {"type":"org.jetbrains.krpc.RPCMessage.CallData","callId":"1:echo:1","serviceType":"org.jetbrains.krpc.test.api.util.SamplingService","method":"echo","callType":"Method","data":"{\"arg1\":\"Hello\",\"data\":{\"data\":\"data\"}}","connectionId":1,"serviceId":1,"pluginParams":{"-32763":""}}
6-
[Server] [Receive] $ {"type":"org.jetbrains.krpc.RPCMessage.CallData","callId":"1:echo:1","serviceType":"org.jetbrains.krpc.test.api.util.SamplingService","method":"echo","callType":"Method","data":"{\"arg1\":\"Hello\",\"data\":{\"data\":\"data\"}}","connectionId":1,"serviceId":1,"pluginParams":{"-32763":""}}
7-
[Server] [Send] $ {"type":"org.jetbrains.krpc.RPCMessage.CallSuccess","callId":"1:echo:1","serviceType":"org.jetbrains.krpc.test.api.util.SamplingService","data":"{\"data\":\"data\"}","connectionId":1,"serviceId":1}
8-
[Client] [Receive] $ {"type":"org.jetbrains.krpc.RPCMessage.CallSuccess","callId":"1:echo:1","serviceType":"org.jetbrains.krpc.test.api.util.SamplingService","data":"{\"data\":\"data\"}","connectionId":1,"serviceId":1}
5+
[Client] [Send] $ {"type":"org.jetbrains.krpc.RPCMessage.CallData","callId":"1:echo:1","serviceType":"org.jetbrains.krpc.test.api.util.SamplingService","method":"echo","callType":"Method","data":"{\"arg1\":\"Hello\",\"data\":{\"data\":\"World\"}}","connectionId":1,"serviceId":1,"pluginParams":{"-32763":""}}
6+
[Server] [Receive] $ {"type":"org.jetbrains.krpc.RPCMessage.CallData","callId":"1:echo:1","serviceType":"org.jetbrains.krpc.test.api.util.SamplingService","method":"echo","callType":"Method","data":"{\"arg1\":\"Hello\",\"data\":{\"data\":\"World\"}}","connectionId":1,"serviceId":1,"pluginParams":{"-32763":""}}
7+
[Server] [Send] $ {"type":"org.jetbrains.krpc.RPCMessage.CallSuccess","callId":"1:echo:1","serviceType":"org.jetbrains.krpc.test.api.util.SamplingService","data":"{\"data\":\"Hello World\"}","connectionId":1,"serviceId":1}
8+
[Client] [Receive] $ {"type":"org.jetbrains.krpc.RPCMessage.CallSuccess","callId":"1:echo:1","serviceType":"org.jetbrains.krpc.test.api.util.SamplingService","data":"{\"data\":\"Hello World\"}","connectionId":1,"serviceId":1}
99
[Client] [Send] $ {"type":"org.jetbrains.krpc.internal.transport.RPCGenericMessage","connectionId":null,"pluginParams":{"-32767":"cancellation","-32766":"REQUEST","-32764":"org.jetbrains.krpc.test.api.util.SamplingService","-32765":"1:echo:1"}}
10-
[Server] [Receive] $ {"type":"org.jetbrains.krpc.internal.transport.RPCGenericMessage","connectionId":null,"pluginParams":{"-32767":"cancellation","-32766":"REQUEST","-32764":"org.jetbrains.krpc.test.api.util.SamplingService","-32765":"1:echo:1"}}
10+
[Server] [Receive] $ {"type":"org.jetbrains.krpc.internal.transport.RPCGenericMessage","connectionId":null,"pluginParams":{"-32767":"cancellation","-32766":"REQUEST","-32764":"org.jetbrains.krpc.test.api.util.SamplingService","-32765":"1:echo:1"}}

krpc/krpc-test/src/jvmTest/resources/wire_dumps/0_8_0/echo_protobuf.gold

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,15 @@
66
[Server] [Send] $ 0a426f72672e6a6574627261696e732e6b7270632e696e7465726e616c2e7472616e73706f72742e52504350726f746f636f6c4d6573736167652e48616e647368616b65122e088180feffffffffffff01088280feffffffffffff01088380feffffffffffff01088480feffffffffffff011001
77
// decoded: ?Borg.jetbrains.krpc.internal.transport.RPCProtocolMessage.Handshake?.??????????????????????????????????????????????
88
[Client] [Receive] $ 0a426f72672e6a6574627261696e732e6b7270632e696e7465726e616c2e7472616e73706f72742e52504350726f746f636f6c4d6573736167652e48616e647368616b65122e088180feffffffffffff01088280feffffffffffff01088380feffffffffffff01088480feffffffffffff011001
9-
// decoded: ??org.jetbrains.krpc.internal.transport.RPCMessage.CallDataBinary?h??1:echo:1?0org.jetbrains.krpc.test.api.util.SamplingService??echo ?*???Hello????data0?8?B??????????????
10-
[Client] [Send] $ 0a3f6f72672e6a6574627261696e732e6b7270632e696e7465726e616c2e7472616e73706f72742e5250434d6573736167652e43616c6c4461746142696e61727912680a08313a6563686f3a3112306f72672e6a6574627261696e732e6b7270632e746573742e6170692e7574696c2e53616d706c696e67536572766963651a046563686f20002a0f0a0548656c6c6f12060a046461746130013801420d088580feffffffffffff011200
11-
// decoded: ??org.jetbrains.krpc.internal.transport.RPCMessage.CallDataBinary?h??1:echo:1?0org.jetbrains.krpc.test.api.util.SamplingService??echo ?*???Hello????data0?8?B??????????????
12-
[Server] [Receive] $ 0a3f6f72672e6a6574627261696e732e6b7270632e696e7465726e616c2e7472616e73706f72742e5250434d6573736167652e43616c6c4461746142696e61727912680a08313a6563686f3a3112306f72672e6a6574627261696e732e6b7270632e746573742e6170692e7574696c2e53616d706c696e67536572766963651a046563686f20002a0f0a0548656c6c6f12060a046461746130013801420d088580feffffffffffff011200
13-
// decoded: ?Borg.jetbrains.krpc.internal.transport.RPCMessage.CallSuccessBinary?H??1:echo:1?0org.jetbrains.krpc.test.api.util.SamplingService????data ?(?
14-
[Server] [Send] $ 0a426f72672e6a6574627261696e732e6b7270632e696e7465726e616c2e7472616e73706f72742e5250434d6573736167652e43616c6c5375636365737342696e61727912480a08313a6563686f3a3112306f72672e6a6574627261696e732e6b7270632e746573742e6170692e7574696c2e53616d706c696e67536572766963651a060a046461746120012801
15-
// decoded: ?Borg.jetbrains.krpc.internal.transport.RPCMessage.CallSuccessBinary?H??1:echo:1?0org.jetbrains.krpc.test.api.util.SamplingService????data ?(?
16-
[Client] [Receive] $ 0a426f72672e6a6574627261696e732e6b7270632e696e7465726e616c2e7472616e73706f72742e5250434d6573736167652e43616c6c5375636365737342696e61727912480a08313a6563686f3a3112306f72672e6a6574627261696e732e6b7270632e746573742e6170692e7574696c2e53616d706c696e67536572766963651a060a046461746120012801
9+
// decoded: ??org.jetbrains.krpc.internal.transport.RPCMessage.CallDataBinary?i??1:echo:1?0org.jetbrains.krpc.test.api.util.SamplingService??echo ?*???Hello????World0?8?B??????????????
10+
[Client] [Send] $ 0a3f6f72672e6a6574627261696e732e6b7270632e696e7465726e616c2e7472616e73706f72742e5250434d6573736167652e43616c6c4461746142696e61727912690a08313a6563686f3a3112306f72672e6a6574627261696e732e6b7270632e746573742e6170692e7574696c2e53616d706c696e67536572766963651a046563686f20002a100a0548656c6c6f12070a05576f726c6430013801420d088580feffffffffffff011200
11+
// decoded: ??org.jetbrains.krpc.internal.transport.RPCMessage.CallDataBinary?i??1:echo:1?0org.jetbrains.krpc.test.api.util.SamplingService??echo ?*???Hello????World0?8?B??????????????
12+
[Server] [Receive] $ 0a3f6f72672e6a6574627261696e732e6b7270632e696e7465726e616c2e7472616e73706f72742e5250434d6573736167652e43616c6c4461746142696e61727912690a08313a6563686f3a3112306f72672e6a6574627261696e732e6b7270632e746573742e6170692e7574696c2e53616d706c696e67536572766963651a046563686f20002a100a0548656c6c6f12070a05576f726c6430013801420d088580feffffffffffff011200
13+
// decoded: ?Borg.jetbrains.krpc.internal.transport.RPCMessage.CallSuccessBinary?O??1:echo:1?0org.jetbrains.krpc.test.api.util.SamplingService????Hello World ?(?
14+
[Server] [Send] $ 0a426f72672e6a6574627261696e732e6b7270632e696e7465726e616c2e7472616e73706f72742e5250434d6573736167652e43616c6c5375636365737342696e617279124f0a08313a6563686f3a3112306f72672e6a6574627261696e732e6b7270632e746573742e6170692e7574696c2e53616d706c696e67536572766963651a0d0a0b48656c6c6f20576f726c6420012801
15+
// decoded: ?Borg.jetbrains.krpc.internal.transport.RPCMessage.CallSuccessBinary?O??1:echo:1?0org.jetbrains.krpc.test.api.util.SamplingService????Hello World ?(?
16+
[Client] [Receive] $ 0a426f72672e6a6574627261696e732e6b7270632e696e7465726e616c2e7472616e73706f72742e5250434d6573736167652e43616c6c5375636365737342696e617279124f0a08313a6563686f3a3112306f72672e6a6574627261696e732e6b7270632e746573742e6170692e7574696c2e53616d706c696e67536572766963651a0d0a0b48656c6c6f20576f726c6420012801
1717
// decoded: ?7org.jetbrains.krpc.internal.transport.RPCGenericMessage??????????????????cancellation???????????????REQUEST?=????????????0org.jetbrains.krpc.test.api.util.SamplingService???????????????1:echo:1
1818
[Client] [Send] $ 0a376f72672e6a6574627261696e732e6b7270632e696e7465726e616c2e7472616e73706f72742e52504347656e657269634d6573736167651287011219088180feffffffffffff01120c63616e63656c6c6174696f6e1214088280feffffffffffff01120752455155455354123d088480feffffffffffff0112306f72672e6a6574627261696e732e6b7270632e746573742e6170692e7574696c2e53616d706c696e67536572766963651215088380feffffffffffff011208313a6563686f3a31
1919
// decoded: ?7org.jetbrains.krpc.internal.transport.RPCGenericMessage??????????????????cancellation???????????????REQUEST?=????????????0org.jetbrains.krpc.test.api.util.SamplingService???????????????1:echo:1
20-
[Server] [Receive] $ 0a376f72672e6a6574627261696e732e6b7270632e696e7465726e616c2e7472616e73706f72742e52504347656e657269634d6573736167651287011219088180feffffffffffff01120c63616e63656c6c6174696f6e1214088280feffffffffffff01120752455155455354123d088480feffffffffffff0112306f72672e6a6574627261696e732e6b7270632e746573742e6170692e7574696c2e53616d706c696e67536572766963651215088380feffffffffffff011208313a6563686f3a31
20+
[Server] [Receive] $ 0a376f72672e6a6574627261696e732e6b7270632e696e7465726e616c2e7472616e73706f72742e52504347656e657269634d6573736167651287011219088180feffffffffffff01120c63616e63656c6c6174696f6e1214088280feffffffffffff01120752455155455354123d088480feffffffffffff0112306f72672e6a6574627261696e732e6b7270632e746573742e6170692e7574696c2e53616d706c696e67536572766963651215088380feffffffffffff011208313a6563686f3a31
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
[Client] [Send] $ {"type":"org.jetbrains.krpc.internal.transport.RPCProtocolMessage.Handshake","supportedPlugins":[-32767,-32766,-32765,-32764]}
2+
[Server] [Receive] $ {"type":"org.jetbrains.krpc.internal.transport.RPCProtocolMessage.Handshake","supportedPlugins":[-32767,-32766,-32765,-32764]}
3+
[Server] [Send] $ {"type":"org.jetbrains.krpc.internal.transport.RPCProtocolMessage.Handshake","supportedPlugins":[-32767,-32766,-32765,-32764],"connectionId":1}
4+
[Client] [Receive] $ {"type":"org.jetbrains.krpc.internal.transport.RPCProtocolMessage.Handshake","supportedPlugins":[-32767,-32766,-32765,-32764],"connectionId":1}
5+
[Client] [Send] $ {"type":"org.jetbrains.krpc.RPCMessage.CallData","callId":"1:parseNullableArg:1","serviceType":"org.jetbrains.krpc.test.api.util.SamplingService","method":"parseNullableArg","callType":"Method","data":"{\"arg1\":\"Hello\",\"arg2\":null}","connectionId":1,"serviceId":1,"pluginParams":{"-32763":""}}
6+
[Server] [Receive] $ {"type":"org.jetbrains.krpc.RPCMessage.CallData","callId":"1:parseNullableArg:1","serviceType":"org.jetbrains.krpc.test.api.util.SamplingService","method":"parseNullableArg","callType":"Method","data":"{\"arg1\":\"Hello\",\"arg2\":null}","connectionId":1,"serviceId":1,"pluginParams":{"-32763":""}}
7+
[Server] [Send] $ {"type":"org.jetbrains.krpc.RPCMessage.CallSuccess","callId":"1:parseNullableArg:1","serviceType":"org.jetbrains.krpc.test.api.util.SamplingService","data":"\"Hello null\"","connectionId":1,"serviceId":1}
8+
[Client] [Receive] $ {"type":"org.jetbrains.krpc.RPCMessage.CallSuccess","callId":"1:parseNullableArg:1","serviceType":"org.jetbrains.krpc.test.api.util.SamplingService","data":"\"Hello null\"","connectionId":1,"serviceId":1}
9+
[Client] [Send] $ {"type":"org.jetbrains.krpc.internal.transport.RPCGenericMessage","connectionId":null,"pluginParams":{"-32767":"cancellation","-32766":"REQUEST","-32764":"org.jetbrains.krpc.test.api.util.SamplingService","-32765":"1:parseNullableArg:1"}}
10+
[Server] [Receive] $ {"type":"org.jetbrains.krpc.internal.transport.RPCGenericMessage","connectionId":null,"pluginParams":{"-32767":"cancellation","-32766":"REQUEST","-32764":"org.jetbrains.krpc.test.api.util.SamplingService","-32765":"1:parseNullableArg:1"}}

0 commit comments

Comments
 (0)