Detect and send node version in api (#445)
This commit is contained in:
@@ -5,6 +5,8 @@ import io.emeraldpay.api.proto.BlockchainOuterClass.NativeCallReplyItem
|
||||
import io.emeraldpay.api.proto.BlockchainOuterClass.NativeCallRequest
|
||||
import io.emeraldpay.dshackle.config.MainConfig
|
||||
import io.emeraldpay.dshackle.upstream.MultistreamHolder
|
||||
import io.emeraldpay.dshackle.upstream.UNKNOWN_CLIENT_VERSION
|
||||
import io.emeraldpay.dshackle.upstream.Upstream
|
||||
import io.emeraldpay.dshackle.upstream.signature.ResponseSigner
|
||||
import io.emeraldpay.dshackle.upstream.stream.Chunk
|
||||
import org.junit.jupiter.api.Test
|
||||
@@ -31,7 +33,7 @@ class NativeCallTest {
|
||||
),
|
||||
) {
|
||||
on { nativeCallResult(request) } doReturn Flux.just(
|
||||
NativeCall.CallResult.ok(1, null, "0x1".toByteArray(), null, "id", null),
|
||||
NativeCall.CallResult.ok(1, null, "0x1".toByteArray(), null, Upstream.UpstreamSettingsData("id"), null),
|
||||
)
|
||||
}
|
||||
|
||||
@@ -39,6 +41,7 @@ class NativeCallTest {
|
||||
.expectNext(
|
||||
NativeCallReplyItem.newBuilder()
|
||||
.setUpstreamId("id")
|
||||
.setUpstreamNodeVersion(UNKNOWN_CLIENT_VERSION)
|
||||
.setId(1)
|
||||
.setSucceed(true)
|
||||
.setPayload(ByteString.copyFrom("0x1".toByteArray()))
|
||||
@@ -60,7 +63,7 @@ class NativeCallTest {
|
||||
),
|
||||
) {
|
||||
on { nativeCallResult(request) } doReturn Flux.just(
|
||||
NativeCall.CallResult(1, null, null, NativeCall.CallError(50001, "message", null, null, "upId"), null, null),
|
||||
NativeCall.CallResult(1, null, null, NativeCall.CallError(50001, "message", null, null, Upstream.UpstreamSettingsData("upId")), null, null),
|
||||
)
|
||||
}
|
||||
|
||||
@@ -69,6 +72,7 @@ class NativeCallTest {
|
||||
NativeCallReplyItem.newBuilder()
|
||||
.setUpstreamId("upId")
|
||||
.setId(1)
|
||||
.setUpstreamNodeVersion(UNKNOWN_CLIENT_VERSION)
|
||||
.setSucceed(false)
|
||||
.setErrorMessage("message")
|
||||
.setItemErrorCode(50001)
|
||||
@@ -95,7 +99,7 @@ class NativeCallTest {
|
||||
),
|
||||
) {
|
||||
on { nativeCallResult(request) } doReturn Flux.just(
|
||||
NativeCall.CallResult.ok(1, null, "".toByteArray(), null, "upId", null, chunks),
|
||||
NativeCall.CallResult.ok(1, null, "".toByteArray(), null, Upstream.UpstreamSettingsData("upId"), null, chunks),
|
||||
)
|
||||
}
|
||||
|
||||
@@ -104,6 +108,7 @@ class NativeCallTest {
|
||||
NativeCallReplyItem.newBuilder()
|
||||
.setUpstreamId("upId")
|
||||
.setId(1)
|
||||
.setUpstreamNodeVersion(UNKNOWN_CLIENT_VERSION)
|
||||
.setChunked(true)
|
||||
.setSucceed(true)
|
||||
.setPayload(ByteString.copyFrom("0x1".toByteArray()))
|
||||
|
||||
@@ -0,0 +1,46 @@
|
||||
package io.emeraldpay.dshackle.upstream.near
|
||||
|
||||
import io.emeraldpay.dshackle.reader.ChainReader
|
||||
import io.emeraldpay.dshackle.upstream.ChainRequest
|
||||
import io.emeraldpay.dshackle.upstream.ChainResponse
|
||||
import io.emeraldpay.dshackle.upstream.Upstream
|
||||
import io.emeraldpay.dshackle.upstream.rpcclient.ListParams
|
||||
import org.junit.jupiter.api.Test
|
||||
import org.mockito.kotlin.doReturn
|
||||
import org.mockito.kotlin.mock
|
||||
import reactor.core.publisher.Mono
|
||||
import reactor.test.StepVerifier
|
||||
|
||||
class NearUpstreamSettingsDetectorTest {
|
||||
|
||||
@Test
|
||||
fun `detect client version`() {
|
||||
val reader = mock<ChainReader> {
|
||||
on { read(ChainRequest("status", ListParams())) } doReturn
|
||||
Mono.just(
|
||||
ChainResponse(
|
||||
"""
|
||||
{
|
||||
"version": {
|
||||
"build": "1.38.1",
|
||||
"rustc_version": "1.75.0",
|
||||
"version": "1.38.1"
|
||||
}
|
||||
}
|
||||
""".trimIndent().toByteArray(),
|
||||
null,
|
||||
),
|
||||
)
|
||||
}
|
||||
val up = mock<Upstream> {
|
||||
on { getIngressReader() } doReturn reader
|
||||
}
|
||||
|
||||
val detector = NearUpstreamSettingsDetector(up)
|
||||
|
||||
StepVerifier.create(detector.detectClientVersion())
|
||||
.expectNext("1.38.1")
|
||||
.expectComplete()
|
||||
.verify()
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,71 @@
|
||||
package io.emeraldpay.dshackle.upstream.solana
|
||||
|
||||
import io.emeraldpay.dshackle.reader.ChainReader
|
||||
import io.emeraldpay.dshackle.upstream.ChainCallError
|
||||
import io.emeraldpay.dshackle.upstream.ChainRequest
|
||||
import io.emeraldpay.dshackle.upstream.ChainResponse
|
||||
import io.emeraldpay.dshackle.upstream.UNKNOWN_CLIENT_VERSION
|
||||
import io.emeraldpay.dshackle.upstream.Upstream
|
||||
import io.emeraldpay.dshackle.upstream.rpcclient.ListParams
|
||||
import org.junit.jupiter.api.Test
|
||||
import org.mockito.kotlin.doReturn
|
||||
import org.mockito.kotlin.mock
|
||||
import reactor.core.publisher.Mono
|
||||
import reactor.test.StepVerifier
|
||||
|
||||
class SolanaUpstreamSettingsDetectorTest {
|
||||
|
||||
@Test
|
||||
fun `detect client version`() {
|
||||
val reader = mock<ChainReader> {
|
||||
on { read(ChainRequest("getVersion", ListParams())) } doReturn
|
||||
Mono.just(
|
||||
ChainResponse(
|
||||
"""
|
||||
{
|
||||
"feature-set": 2891131721,
|
||||
"solana-core": "1.16.7"
|
||||
}
|
||||
""".trimIndent().toByteArray(),
|
||||
null,
|
||||
),
|
||||
)
|
||||
}
|
||||
val up = mock<Upstream> {
|
||||
on { getIngressReader() } doReturn reader
|
||||
}
|
||||
|
||||
val detector = SolanaUpstreamSettingsDetector(up)
|
||||
|
||||
StepVerifier.create(detector.detectClientVersion())
|
||||
.expectNext("1.16.7")
|
||||
.expectComplete()
|
||||
.verify()
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `unknown client if there is an error`() {
|
||||
val reader = mock<ChainReader> {
|
||||
on { read(ChainRequest("getVersion", ListParams())) } doReturn
|
||||
Mono.just(
|
||||
ChainResponse(
|
||||
null,
|
||||
ChainCallError(
|
||||
1,
|
||||
"message",
|
||||
),
|
||||
),
|
||||
)
|
||||
}
|
||||
val up = mock<Upstream> {
|
||||
on { getIngressReader() } doReturn reader
|
||||
}
|
||||
|
||||
val detector = SolanaUpstreamSettingsDetector(up)
|
||||
|
||||
StepVerifier.create(detector.detectClientVersion())
|
||||
.expectNext(UNKNOWN_CLIENT_VERSION)
|
||||
.expectComplete()
|
||||
.verify()
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user