Added forwarding of selectors to grpc upstreams
This commit is contained in:
@@ -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))
|
||||
|
||||
@@ -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)
|
||||
|
||||
117
src/test/kotlin/io/emeraldpay/dshackle/rpc/SelectorsTest.kt
Normal file
117
src/test/kotlin/io/emeraldpay/dshackle/rpc/SelectorsTest.kt
Normal 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))
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user