solution: refactoring
This commit is contained in:
@@ -18,13 +18,11 @@ package io.emeraldpay.dshackle.test
|
||||
import com.fasterxml.jackson.databind.ObjectMapper
|
||||
import com.google.protobuf.ByteString
|
||||
import io.emeraldpay.api.proto.BlockchainOuterClass
|
||||
import io.emeraldpay.dshackle.upstream.DirectCallMethods
|
||||
import io.emeraldpay.dshackle.upstream.calls.DirectCallMethods
|
||||
import io.emeraldpay.dshackle.upstream.ethereum.DirectEthereumApi
|
||||
import io.emeraldpay.grpc.Chain
|
||||
import io.grpc.stub.StreamObserver
|
||||
import io.infinitape.etherjar.rpc.ReactorRpcClient
|
||||
import io.infinitape.etherjar.rpc.RpcClient
|
||||
import io.infinitape.etherjar.rpc.RpcException
|
||||
import io.infinitape.etherjar.rpc.RpcResponseError
|
||||
import io.infinitape.etherjar.rpc.json.ResponseJson
|
||||
import org.jetbrains.annotations.NotNull
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
package io.emeraldpay.dshackle.test
|
||||
|
||||
import com.fasterxml.jackson.databind.ObjectMapper
|
||||
import io.emeraldpay.dshackle.upstream.DirectCallMethods
|
||||
import io.emeraldpay.dshackle.upstream.calls.DirectCallMethods
|
||||
import io.emeraldpay.dshackle.upstream.ethereum.DirectEthereumApi
|
||||
import io.infinitape.etherjar.rpc.ReactorBatch
|
||||
import io.infinitape.etherjar.rpc.ReactorRpcClient
|
||||
@@ -25,8 +25,6 @@ import io.infinitape.etherjar.rpc.RpcCallResponse
|
||||
import reactor.core.publisher.Flux
|
||||
import reactor.core.publisher.Mono
|
||||
|
||||
import java.util.concurrent.CompletableFuture
|
||||
|
||||
class EthereumApiStub extends DirectEthereumApi {
|
||||
|
||||
private String id
|
||||
|
||||
@@ -16,9 +16,9 @@
|
||||
package io.emeraldpay.dshackle.test
|
||||
|
||||
import io.emeraldpay.dshackle.config.UpstreamsConfig
|
||||
import io.emeraldpay.dshackle.upstream.CallMethods
|
||||
import io.emeraldpay.dshackle.upstream.NodeDetailsList
|
||||
import io.emeraldpay.dshackle.upstream.QuorumBasedMethods
|
||||
import io.emeraldpay.dshackle.upstream.calls.CallMethods
|
||||
import io.emeraldpay.dshackle.startup.QuorumForLabels
|
||||
import io.emeraldpay.dshackle.upstream.calls.QuorumBasedMethods
|
||||
import io.emeraldpay.dshackle.upstream.ethereum.DirectEthereumApi
|
||||
import io.emeraldpay.dshackle.upstream.ethereum.EthereumHead
|
||||
import io.emeraldpay.dshackle.upstream.ethereum.EthereumUpstream
|
||||
@@ -46,7 +46,7 @@ class EthereumUpstreamMock extends EthereumUpstream {
|
||||
|
||||
EthereumUpstreamMock(@NotNull String id, @NotNull Chain chain, @NotNull DirectEthereumApi api, CallMethods methods) {
|
||||
super(id, chain, api, null,
|
||||
UpstreamsConfig.Options.getDefaults(), new NodeDetailsList.NodeDetails(1, new UpstreamsConfig.Labels()),
|
||||
UpstreamsConfig.Options.getDefaults(), new QuorumForLabels.QuorumItem(1, new UpstreamsConfig.Labels()),
|
||||
methods)
|
||||
setLag(0)
|
||||
setStatus(UpstreamAvailability.OK)
|
||||
|
||||
@@ -21,16 +21,13 @@ import com.fasterxml.jackson.databind.ObjectMapper
|
||||
import com.fasterxml.jackson.databind.module.SimpleModule
|
||||
import io.emeraldpay.dshackle.cache.Caches
|
||||
import io.emeraldpay.dshackle.upstream.AggregatedUpstream
|
||||
import io.emeraldpay.dshackle.upstream.CallMethods
|
||||
import io.emeraldpay.dshackle.upstream.ChainUpstreams
|
||||
import io.emeraldpay.dshackle.upstream.DirectCallMethods
|
||||
import io.emeraldpay.dshackle.upstream.QuorumBasedMethods
|
||||
import io.emeraldpay.dshackle.upstream.calls.DirectCallMethods
|
||||
import io.emeraldpay.dshackle.upstream.ethereum.DirectEthereumApi
|
||||
import io.emeraldpay.dshackle.upstream.ethereum.EthereumUpstream
|
||||
import io.emeraldpay.grpc.Chain
|
||||
import io.infinitape.etherjar.rpc.JacksonRpcConverter
|
||||
import io.infinitape.etherjar.rpc.ReactorRpcClient
|
||||
import io.infinitape.etherjar.rpc.RpcClient
|
||||
|
||||
import java.text.SimpleDateFormat
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@ package io.emeraldpay.dshackle.test
|
||||
import io.emeraldpay.dshackle.cache.Caches
|
||||
import io.emeraldpay.dshackle.upstream.AggregatedUpstream
|
||||
import io.emeraldpay.dshackle.upstream.ChainUpstreams
|
||||
import io.emeraldpay.dshackle.upstream.QuorumBasedMethods
|
||||
import io.emeraldpay.dshackle.upstream.calls.QuorumBasedMethods
|
||||
import io.emeraldpay.dshackle.upstream.Upstream
|
||||
import io.emeraldpay.dshackle.upstream.Upstreams
|
||||
import io.emeraldpay.grpc.Chain
|
||||
|
||||
@@ -19,6 +19,7 @@ import io.emeraldpay.dshackle.cache.Caches
|
||||
import io.emeraldpay.dshackle.quorum.AlwaysQuorum
|
||||
import io.emeraldpay.dshackle.test.EthereumUpstreamMock
|
||||
import io.emeraldpay.dshackle.test.TestingCommons
|
||||
import io.emeraldpay.dshackle.upstream.calls.DirectCallMethods
|
||||
import io.emeraldpay.dshackle.upstream.ethereum.DirectEthereumApi
|
||||
import io.emeraldpay.grpc.Chain
|
||||
import spock.lang.Specification
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package io.emeraldpay.dshackle.upstream
|
||||
|
||||
import io.emeraldpay.dshackle.startup.UpstreamChange
|
||||
import io.emeraldpay.dshackle.test.EthereumUpstreamMock
|
||||
import io.emeraldpay.dshackle.test.TestingCommons
|
||||
import io.emeraldpay.grpc.Chain
|
||||
|
||||
@@ -16,8 +16,10 @@
|
||||
package io.emeraldpay.dshackle.upstream
|
||||
|
||||
import io.emeraldpay.dshackle.config.UpstreamsConfig
|
||||
import io.emeraldpay.dshackle.startup.QuorumForLabels
|
||||
import io.emeraldpay.dshackle.test.EthereumApiStub
|
||||
import io.emeraldpay.dshackle.test.TestingCommons
|
||||
import io.emeraldpay.dshackle.upstream.calls.QuorumBasedMethods
|
||||
import io.emeraldpay.dshackle.upstream.ethereum.DirectEthereumApi
|
||||
import io.emeraldpay.dshackle.upstream.ethereum.EthereumUpstream
|
||||
import io.emeraldpay.dshackle.upstream.ethereum.EthereumWs
|
||||
@@ -50,7 +52,7 @@ class FilteredApisSpec extends Specification {
|
||||
new DirectEthereumApi(rpcClient, null, objectMapper, ethereumTargets),
|
||||
(EthereumWs) null,
|
||||
new UpstreamsConfig.Options(),
|
||||
new NodeDetailsList.NodeDetails(1, UpstreamsConfig.Labels.fromMap(it)),
|
||||
new QuorumForLabels.QuorumItem(1, UpstreamsConfig.Labels.fromMap(it)),
|
||||
ethereumTargets
|
||||
)
|
||||
}
|
||||
|
||||
@@ -16,49 +16,50 @@
|
||||
package io.emeraldpay.dshackle.upstream
|
||||
|
||||
import io.emeraldpay.dshackle.config.UpstreamsConfig
|
||||
import io.emeraldpay.dshackle.startup.QuorumForLabels
|
||||
import org.codehaus.groovy.runtime.DefaultGroovyMethods
|
||||
import spock.lang.Specification
|
||||
|
||||
class NodeDetailsListSpec extends Specification {
|
||||
class QuorumForLabelsSpec extends Specification {
|
||||
|
||||
def "Adds new node"() {
|
||||
setup:
|
||||
def list = new NodeDetailsList()
|
||||
def list = new QuorumForLabels()
|
||||
when:
|
||||
list.add(new NodeDetailsList.NodeDetails(1, asLabels([foo: "bar"])))
|
||||
list.add(new QuorumForLabels.QuorumItem(1, asLabels([foo: "bar"])))
|
||||
then:
|
||||
list.nodes.size() == 1
|
||||
with(list.nodes.get(0)) {
|
||||
list.all.size() == 1
|
||||
with(list.all.get(0)) {
|
||||
quorum == 1
|
||||
DefaultGroovyMethods.equals(labels, [foo: "bar"])
|
||||
}
|
||||
|
||||
when:
|
||||
list.add(new NodeDetailsList.NodeDetails(2, asLabels([foo: "not-bar"])))
|
||||
list.add(new QuorumForLabels.QuorumItem(2, asLabels([foo: "not-bar"])))
|
||||
then:
|
||||
list.nodes.size() == 2
|
||||
with(list.nodes.get(0)) {
|
||||
list.all.size() == 2
|
||||
with(list.all.get(0)) {
|
||||
quorum == 1
|
||||
DefaultGroovyMethods.equals(labels, [foo: "bar"])
|
||||
}
|
||||
with(list.nodes.get(1)) {
|
||||
with(list.all.get(1)) {
|
||||
quorum == 2
|
||||
DefaultGroovyMethods.equals(labels, [foo: "not-bar"])
|
||||
}
|
||||
|
||||
when:
|
||||
list.add(new NodeDetailsList.NodeDetails(1, asLabels([foo: "bar", baz: "baz"])))
|
||||
list.add(new QuorumForLabels.QuorumItem(1, asLabels([foo: "bar", baz: "baz"])))
|
||||
then:
|
||||
list.nodes.size() == 3
|
||||
with(list.nodes.get(0)) {
|
||||
list.all.size() == 3
|
||||
with(list.all.get(0)) {
|
||||
quorum == 1
|
||||
DefaultGroovyMethods.equals(labels, [foo: "bar"])
|
||||
}
|
||||
with(list.nodes.get(1)) {
|
||||
with(list.all.get(1)) {
|
||||
quorum == 2
|
||||
DefaultGroovyMethods.equals(labels, [foo: "not-bar"])
|
||||
}
|
||||
with(list.nodes.get(2)) {
|
||||
with(list.all.get(2)) {
|
||||
quorum == 1
|
||||
DefaultGroovyMethods.equals(labels, [foo: "bar", baz: "baz"])
|
||||
}
|
||||
@@ -66,19 +67,19 @@ class NodeDetailsListSpec extends Specification {
|
||||
|
||||
def "Updates existing node"() {
|
||||
setup:
|
||||
def list = new NodeDetailsList()
|
||||
list.add(new NodeDetailsList.NodeDetails(1, asLabels([foo: "bar"])))
|
||||
list.add(new NodeDetailsList.NodeDetails(1, asLabels([baz: "true"])))
|
||||
def list = new QuorumForLabels()
|
||||
list.add(new QuorumForLabels.QuorumItem(1, asLabels([foo: "bar"])))
|
||||
list.add(new QuorumForLabels.QuorumItem(1, asLabels([baz: "true"])))
|
||||
|
||||
when:
|
||||
list.add(new NodeDetailsList.NodeDetails(2, asLabels([baz: "true"])))
|
||||
list.add(new QuorumForLabels.QuorumItem(2, asLabels([baz: "true"])))
|
||||
then:
|
||||
list.nodes.size() == 2
|
||||
with(list.nodes.get(0)) {
|
||||
list.all.size() == 2
|
||||
with(list.all.get(0)) {
|
||||
quorum == 1
|
||||
DefaultGroovyMethods.equals(labels, [foo: "bar"])
|
||||
}
|
||||
with(list.nodes.get(1)) {
|
||||
with(list.all.get(1)) {
|
||||
quorum == 3
|
||||
DefaultGroovyMethods.equals(labels, [baz: "true"])
|
||||
}
|
||||
@@ -86,23 +87,23 @@ class NodeDetailsListSpec extends Specification {
|
||||
|
||||
def "Applies all from another list"() {
|
||||
setup:
|
||||
def list1 = new NodeDetailsList()
|
||||
list1.add(new NodeDetailsList.NodeDetails(1, asLabels([foo: "bar"])))
|
||||
list1.add(new NodeDetailsList.NodeDetails(2, asLabels([baz: "true"])))
|
||||
list1.add(new NodeDetailsList.NodeDetails(3, asLabels([baz: "true", bar: "bar"])))
|
||||
def list1 = new QuorumForLabels()
|
||||
list1.add(new QuorumForLabels.QuorumItem(1, asLabels([foo: "bar"])))
|
||||
list1.add(new QuorumForLabels.QuorumItem(2, asLabels([baz: "true"])))
|
||||
list1.add(new QuorumForLabels.QuorumItem(3, asLabels([baz: "true", bar: "bar"])))
|
||||
|
||||
def list2 = new NodeDetailsList()
|
||||
list1.add(new NodeDetailsList.NodeDetails(4, asLabels([foo: "bar"])))
|
||||
list1.add(new NodeDetailsList.NodeDetails(5, asLabels([baz: "true", bar: "bar"])))
|
||||
list1.add(new NodeDetailsList.NodeDetails(6, asLabels([bar: "bar"])))
|
||||
def list2 = new QuorumForLabels()
|
||||
list1.add(new QuorumForLabels.QuorumItem(4, asLabels([foo: "bar"])))
|
||||
list1.add(new QuorumForLabels.QuorumItem(5, asLabels([baz: "true", bar: "bar"])))
|
||||
list1.add(new QuorumForLabels.QuorumItem(6, asLabels([bar: "bar"])))
|
||||
|
||||
def list = new NodeDetailsList()
|
||||
def list = new QuorumForLabels()
|
||||
when:
|
||||
list.add(list1)
|
||||
list.add(list2)
|
||||
def nodes = list.nodes.toSorted { it.quorum }
|
||||
def nodes = list.all.toSorted { it.quorum }
|
||||
then:
|
||||
list.nodes.size() == 4
|
||||
list.all.size() == 4
|
||||
with(nodes.get(0)) {
|
||||
quorum == 2
|
||||
DefaultGroovyMethods.equals(labels, [baz: "true"])
|
||||
@@ -13,9 +13,12 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package io.emeraldpay.dshackle.upstream
|
||||
package io.emeraldpay.dshackle.upstream.calls
|
||||
|
||||
import io.emeraldpay.dshackle.quorum.AlwaysQuorum
|
||||
import io.emeraldpay.dshackle.upstream.calls.AggregatedCallMethods
|
||||
import io.emeraldpay.dshackle.upstream.calls.CallMethods
|
||||
import io.emeraldpay.dshackle.upstream.calls.DirectCallMethods
|
||||
import spock.lang.Specification
|
||||
|
||||
class AggregatedCallMethodsSpec extends Specification {
|
||||
@@ -13,9 +13,11 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package io.emeraldpay.dshackle.upstream
|
||||
package io.emeraldpay.dshackle.upstream.calls
|
||||
|
||||
import io.emeraldpay.dshackle.quorum.AlwaysQuorum
|
||||
import io.emeraldpay.dshackle.upstream.calls.DirectCallMethods
|
||||
import io.emeraldpay.dshackle.upstream.calls.ManagedCallMethods
|
||||
import spock.lang.Specification
|
||||
|
||||
class ManagedCallMethodsSpec extends Specification {
|
||||
@@ -16,7 +16,7 @@
|
||||
package io.emeraldpay.dshackle.upstream.ethereum
|
||||
|
||||
import io.emeraldpay.dshackle.test.TestingCommons
|
||||
import io.emeraldpay.dshackle.upstream.DirectCallMethods
|
||||
import io.emeraldpay.dshackle.upstream.calls.DirectCallMethods
|
||||
import io.infinitape.etherjar.rpc.ReactorRpcClient
|
||||
import io.infinitape.etherjar.rpc.RpcException
|
||||
import io.infinitape.etherjar.rpc.RpcResponseError
|
||||
|
||||
@@ -22,22 +22,17 @@ import io.emeraldpay.api.proto.BlockchainOuterClass
|
||||
import io.emeraldpay.api.proto.Common
|
||||
import io.emeraldpay.dshackle.test.MockServer
|
||||
import io.emeraldpay.dshackle.test.TestingCommons
|
||||
import io.emeraldpay.dshackle.upstream.QuorumBasedMethods
|
||||
import io.emeraldpay.dshackle.upstream.UpstreamAvailability
|
||||
import io.emeraldpay.dshackle.upstream.grpc.GrpcUpstream
|
||||
import io.emeraldpay.grpc.Chain
|
||||
import io.grpc.stub.StreamObserver
|
||||
import io.infinitape.etherjar.domain.BlockHash
|
||||
import io.infinitape.etherjar.rpc.JacksonRpcConverter
|
||||
import io.infinitape.etherjar.rpc.ReactorRpcClient
|
||||
import io.infinitape.etherjar.rpc.emerald.ReactorEmeraldClient
|
||||
import io.infinitape.etherjar.rpc.json.BlockJson
|
||||
import reactor.test.StepVerifier
|
||||
import spock.lang.Specification
|
||||
|
||||
import java.time.Duration
|
||||
import java.util.concurrent.CompletableFuture
|
||||
import java.util.concurrent.Executors
|
||||
|
||||
class GrpcUpstreamSpec extends Specification {
|
||||
|
||||
|
||||
Reference in New Issue
Block a user