Added forwarding of selectors to grpc upstreams

This commit is contained in:
a10zn8
2022-11-29 19:43:20 +04:00
parent f780a545ef
commit d140546d0c
11 changed files with 193 additions and 31 deletions

View File

@@ -543,7 +543,7 @@ class NativeCallSpec extends Specification {
def nativeCall = nativeCall()
def ctx = new NativeCall.ValidCallContext(1, null, Stub(Multistream), Selector.empty, new AlwaysQuorum(),
new NativeCall.RawCallDetails("eth_getFilterUpdates", '["0xabcd"]'),
new NativeCall.WithFilterIdDecorator(), new NativeCall.NoneResultDecorator())
new NativeCall.WithFilterIdDecorator(), new NativeCall.NoneResultDecorator(), null)
when:
def act = nativeCall.parseParams(ctx)
then:
@@ -564,7 +564,7 @@ class NativeCallSpec extends Specification {
}
def call = new NativeCall.ValidCallContext(1, 10, TestingCommons.multistream(TestingCommons.api()), Selector.empty, quorum,
new NativeCall.ParsedCallDetails("eth_getFilterChanges", []),
new NativeCall.WithFilterIdDecorator(), new NativeCall.CreateFilterDecorator())
new NativeCall.WithFilterIdDecorator(), new NativeCall.CreateFilterDecorator(), null)
when:
def resp = nativeCall.executeOnRemote(call).block(Duration.ofSeconds(1))
@@ -586,7 +586,7 @@ class NativeCallSpec extends Specification {
}
def call = new NativeCall.ValidCallContext(1, 10, TestingCommons.multistream(TestingCommons.api()), Selector.empty, quorum,
new NativeCall.ParsedCallDetails("eth_getFilterChanges", []),
new NativeCall.WithFilterIdDecorator(), new NativeCall.CreateFilterDecorator())
new NativeCall.WithFilterIdDecorator(), new NativeCall.CreateFilterDecorator(), null)
when:
def resp = nativeCall.executeOnRemote(call).block(Duration.ofSeconds(1))

View File

@@ -84,7 +84,7 @@ class WsConnectionSpec extends Specification {
when:
Flux.from(ws.handle(wsApiMock.inbound, wsApiMock.outbound)).subscribe()
def act = ws.call(new JsonRpcRequest("eth_getTransactionByHash", ["0x3ec2ebf5d0ec474d0ac6bc50d2770d8409ad76e119968e7919f85d5ec8915200"], 15, null))
def act = ws.call(new JsonRpcRequest("eth_getTransactionByHash", ["0x3ec2ebf5d0ec474d0ac6bc50d2770d8409ad76e119968e7919f85d5ec8915200"], 15, null, null))
then:
StepVerifier.create(act)
@@ -106,7 +106,7 @@ class WsConnectionSpec extends Specification {
when:
Flux.from(ws.handle(wsApiMock.inbound, wsApiMock.outbound)).subscribe()
def act = ws.call(new JsonRpcRequest("eth_getTransactionByHash", ["0x3ec2ebf5d0ec474d0ac6bc50d2770d8409ad76e119968e7919f85d5ec8915200"], 15, null))
def act = ws.call(new JsonRpcRequest("eth_getTransactionByHash", ["0x3ec2ebf5d0ec474d0ac6bc50d2770d8409ad76e119968e7919f85d5ec8915200"], 15, null, null))
then:
StepVerifier.create(act)
@@ -130,7 +130,7 @@ class WsConnectionSpec extends Specification {
when:
Flux.from(ws.handle(wsApiMock.inbound, wsApiMock.outbound)).subscribe()
def act = ws.call(new JsonRpcRequest("eth_getTransactionByHash", ["0x3ec2ebf5d0ec474d0ac6bc50d2770d8409ad76e119968e7919f85d5ec8915200"], 15, null))
def act = ws.call(new JsonRpcRequest("eth_getTransactionByHash", ["0x3ec2ebf5d0ec474d0ac6bc50d2770d8409ad76e119968e7919f85d5ec8915200"], 15, null, null))
then:
StepVerifier.create(act)

View File

@@ -0,0 +1,117 @@
package io.emeraldpay.dshackle.rpc
import io.emeraldpay.api.proto.BlockchainOuterClass.*
import org.junit.jupiter.api.Assertions.*
import org.junit.jupiter.params.ParameterizedTest
import org.junit.jupiter.params.provider.Arguments
import org.junit.jupiter.params.provider.MethodSource
import java.util.stream.Stream
internal class SelectorsTest {
companion object {
@JvmStatic
fun data(): Stream<Arguments> {
val leafLabelSelector = LabelSelector.newBuilder().build()
return Stream.of(
Arguments.of(
Selector.newBuilder().setLabelSelector(leafLabelSelector).build(),
null
),
Arguments.of(
Selector.newBuilder().setShouldBeForwarded(true)
.setLabelSelector(leafLabelSelector).build(),
Selector.newBuilder().setShouldBeForwarded(true)
.setLabelSelector(leafLabelSelector).build()
),
Arguments.of(
Selector.newBuilder().setOrSelector(OrSelector.newBuilder()).build(),
null
),
Arguments.of(
Selector.newBuilder().setShouldBeForwarded(true)
.setOrSelector(OrSelector.newBuilder()).build(),
null
),
Arguments.of(
Selector.newBuilder().setShouldBeForwarded(true)
.setOrSelector(
OrSelector.newBuilder().addSelectors(
Selector.newBuilder().setLabelSelector(leafLabelSelector)
)
).build(),
null
),
Arguments.of(
Selector.newBuilder().setShouldBeForwarded(true)
.setOrSelector(
OrSelector.newBuilder().addSelectors(
Selector.newBuilder().setShouldBeForwarded(true)
.setLabelSelector(leafLabelSelector)
)
).build(),
Selector.newBuilder().setShouldBeForwarded(true)
.setLabelSelector(leafLabelSelector).build()
),
Arguments.of(
Selector.newBuilder().setShouldBeForwarded(true)
.setOrSelector(
OrSelector.newBuilder()
.addSelectors(Selector.newBuilder().setShouldBeForwarded(true).setLabelSelector(leafLabelSelector))
.addSelectors(Selector.newBuilder().setShouldBeForwarded(true).setLabelSelector(leafLabelSelector))
.addSelectors(Selector.newBuilder().setLabelSelector(leafLabelSelector))
).build(),
Selector.newBuilder().setShouldBeForwarded(true)
.setOrSelector(
OrSelector.newBuilder()
.addSelectors(Selector.newBuilder().setShouldBeForwarded(true).setLabelSelector(leafLabelSelector))
.addSelectors(Selector.newBuilder().setShouldBeForwarded(true).setLabelSelector(leafLabelSelector))
).build()
),
Arguments.of(
Selector.newBuilder().setShouldBeForwarded(true)
.setAndSelector(
AndSelector.newBuilder()
.addSelectors(Selector.newBuilder().setShouldBeForwarded(true).setLabelSelector(leafLabelSelector))
.addSelectors(Selector.newBuilder().setShouldBeForwarded(true).setLabelSelector(leafLabelSelector))
.addSelectors(Selector.newBuilder().setLabelSelector(leafLabelSelector))
).build(),
Selector.newBuilder().setShouldBeForwarded(true)
.setAndSelector(
AndSelector.newBuilder()
.addSelectors(Selector.newBuilder().setShouldBeForwarded(true).setLabelSelector(leafLabelSelector))
.addSelectors(Selector.newBuilder().setShouldBeForwarded(true).setLabelSelector(leafLabelSelector))
).build()
),
Arguments.of(
Selector.newBuilder().setShouldBeForwarded(true)
.setNotSelector(
NotSelector.newBuilder()
.setSelector(Selector.newBuilder().setShouldBeForwarded(true).setLabelSelector(leafLabelSelector))
).build(),
Selector.newBuilder().setShouldBeForwarded(true)
.setNotSelector(
NotSelector.newBuilder()
.setSelector(Selector.newBuilder().setShouldBeForwarded(true).setLabelSelector(leafLabelSelector))
).build()
),
Arguments.of(
Selector.newBuilder().setShouldBeForwarded(true)
.setNotSelector(
NotSelector.newBuilder()
.setSelector(Selector.newBuilder().setLabelSelector(leafLabelSelector))
).build(),
null
)
)
}
}
@ParameterizedTest
@MethodSource("data")
fun testKeepForwarded(input: Selector, expected: Selector?) {
assertEquals(expected, Selectors.keepForwarded(input))
}
}