diff --git a/src/main/kotlin/io/emeraldpay/dshackle/reader/RpcReaderFactory.kt b/src/main/kotlin/io/emeraldpay/dshackle/reader/RpcReaderFactory.kt index 4b9f1423..6ead791a 100644 --- a/src/main/kotlin/io/emeraldpay/dshackle/reader/RpcReaderFactory.kt +++ b/src/main/kotlin/io/emeraldpay/dshackle/reader/RpcReaderFactory.kt @@ -1,6 +1,8 @@ package io.emeraldpay.dshackle.reader +import io.emeraldpay.dshackle.quorum.BroadcastQuorum import io.emeraldpay.dshackle.quorum.CallQuorum +import io.emeraldpay.dshackle.quorum.MaximumValueQuorum import io.emeraldpay.dshackle.quorum.QuorumRpcReader import io.emeraldpay.dshackle.reader.RpcReader.Result import io.emeraldpay.dshackle.upstream.Multistream @@ -65,7 +67,7 @@ interface RpcReaderFactory { class Default : RpcReaderFactory { override fun create(data: RpcReaderData): RpcReader { - if (data.method == "eth_sendRawTransaction" || data.method == "eth_getTransactionCount") { + if (data.quorum is MaximumValueQuorum || data.quorum is BroadcastQuorum) { return BroadcastReader(data.multistream.getAll(), data.matcher, data.signer, data.quorum, data.tracer) } val apis = data.multistream.getApiSource(data.matcher) diff --git a/src/test/kotlin/io/emeraldpay/dshackle/reader/RpcReaderFactoryTest.kt b/src/test/kotlin/io/emeraldpay/dshackle/reader/RpcReaderFactoryTest.kt new file mode 100644 index 00000000..5b2f0aa4 --- /dev/null +++ b/src/test/kotlin/io/emeraldpay/dshackle/reader/RpcReaderFactoryTest.kt @@ -0,0 +1,57 @@ +package io.emeraldpay.dshackle.reader + +import io.emeraldpay.dshackle.quorum.BroadcastQuorum +import io.emeraldpay.dshackle.quorum.MaximumValueQuorum +import io.emeraldpay.dshackle.upstream.Multistream +import io.emeraldpay.dshackle.upstream.Selector +import org.junit.jupiter.api.Assertions.assertTrue +import org.junit.jupiter.params.ParameterizedTest +import org.junit.jupiter.params.provider.Arguments +import org.junit.jupiter.params.provider.MethodSource +import org.mockito.kotlin.mock +import org.springframework.cloud.sleuth.Tracer + +class RpcReaderFactoryTest { + private val defaultFactory = RpcReaderFactory.Default() + + @ParameterizedTest + @MethodSource("data") + fun `create BroadcastReader for MaximumValueQuorum and BroadcastQuorum`( + rpcReaderData: RpcReaderFactory.RpcReaderData, + ) { + val reader = defaultFactory.create(rpcReaderData) + + assertTrue(reader is BroadcastReader) + } + + companion object { + private val ms = mock() + private val tracer = mock() + + @JvmStatic + fun data(): List { + return listOf( + Arguments.of( + RpcReaderFactory.RpcReaderData( + ms, + "method", + Selector.empty, + MaximumValueQuorum(), + null, + tracer, + ), + ), + Arguments.of( + RpcReaderFactory.RpcReaderData( + ms, + "method", + Selector.empty, + BroadcastQuorum(), + null, + tracer, + ), + ), + ) + } + } +}