Create BroadcastReader based on quorum (#424)
This commit is contained in:
@@ -1,6 +1,8 @@
|
|||||||
package io.emeraldpay.dshackle.reader
|
package io.emeraldpay.dshackle.reader
|
||||||
|
|
||||||
|
import io.emeraldpay.dshackle.quorum.BroadcastQuorum
|
||||||
import io.emeraldpay.dshackle.quorum.CallQuorum
|
import io.emeraldpay.dshackle.quorum.CallQuorum
|
||||||
|
import io.emeraldpay.dshackle.quorum.MaximumValueQuorum
|
||||||
import io.emeraldpay.dshackle.quorum.QuorumRpcReader
|
import io.emeraldpay.dshackle.quorum.QuorumRpcReader
|
||||||
import io.emeraldpay.dshackle.reader.RpcReader.Result
|
import io.emeraldpay.dshackle.reader.RpcReader.Result
|
||||||
import io.emeraldpay.dshackle.upstream.Multistream
|
import io.emeraldpay.dshackle.upstream.Multistream
|
||||||
@@ -65,7 +67,7 @@ interface RpcReaderFactory {
|
|||||||
|
|
||||||
class Default : RpcReaderFactory {
|
class Default : RpcReaderFactory {
|
||||||
override fun create(data: RpcReaderData): RpcReader {
|
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)
|
return BroadcastReader(data.multistream.getAll(), data.matcher, data.signer, data.quorum, data.tracer)
|
||||||
}
|
}
|
||||||
val apis = data.multistream.getApiSource(data.matcher)
|
val apis = data.multistream.getApiSource(data.matcher)
|
||||||
|
|||||||
@@ -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<Multistream>()
|
||||||
|
private val tracer = mock<Tracer>()
|
||||||
|
|
||||||
|
@JvmStatic
|
||||||
|
fun data(): List<Arguments> {
|
||||||
|
return listOf(
|
||||||
|
Arguments.of(
|
||||||
|
RpcReaderFactory.RpcReaderData(
|
||||||
|
ms,
|
||||||
|
"method",
|
||||||
|
Selector.empty,
|
||||||
|
MaximumValueQuorum(),
|
||||||
|
null,
|
||||||
|
tracer,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Arguments.of(
|
||||||
|
RpcReaderFactory.RpcReaderData(
|
||||||
|
ms,
|
||||||
|
"method",
|
||||||
|
Selector.empty,
|
||||||
|
BroadcastQuorum(),
|
||||||
|
null,
|
||||||
|
tracer,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user