problem: Ethereum Address tracking has complex non-reactive logic

This commit is contained in:
Igor Artamonov
2020-05-03 13:55:14 -04:00
parent 0f5c6c70a4
commit 3fcc2e6d52
3 changed files with 59 additions and 166 deletions

View File

@@ -63,8 +63,7 @@ class TrackEthereumAddressSpec extends Specification {
def apiMock = TestingCommons.api(Stub(ReactorRpcClient))
def upstreamMock = TestingCommons.upstream(apiMock)
Upstreams upstreams = new UpstreamsMock(Chain.ETHEREUM, upstreamMock)
TrackEthereumAddress trackAddress = new TrackEthereumAddress(upstreams, Schedulers.immediate())
trackAddress.init()
TrackEthereumAddress trackAddress = new TrackEthereumAddress(upstreams)
apiMock.answer("eth_getBalance", ["0xe2c8fa8120d813cd0b5e6add120295bf20cfa09f", "latest"], "0x499602D2")
when:
@@ -74,7 +73,6 @@ class TrackEthereumAddressSpec extends Specification {
.expectNext(exp)
.expectComplete()
.verify(Duration.ofSeconds(3))
!trackAddress.isTracked(Chain.ETHEREUM, Address.from(address1))
}
def "recheck address after each block"() {
@@ -102,12 +100,10 @@ class TrackEthereumAddressSpec extends Specification {
return it
}
def blocksBus = TopicProcessor.create()
def apiMock = TestingCommons.api(Stub(ReactorRpcClient))
def upstreamMock = TestingCommons.upstream(apiMock)
Upstreams upstreams = new UpstreamsMock(Chain.ETHEREUM, upstreamMock)
TrackEthereumAddress trackAddress = new TrackEthereumAddress(upstreams, Schedulers.immediate())
trackAddress.init()
TrackEthereumAddress trackAddress = new TrackEthereumAddress(upstreams)
apiMock.answerOnce("eth_getBalance", ["0xe2c8fa8120d813cd0b5e6add120295bf20cfa09f", "latest"], "0x499602D2")
apiMock.answerOnce("eth_getBalance", ["0xe2c8fa8120d813cd0b5e6add120295bf20cfa09f", "latest"], "0xff98")
@@ -116,16 +112,11 @@ class TrackEthereumAddressSpec extends Specification {
then:
StepVerifier.create(flux)
.expectNext(exp1)
.then {
assert trackAddress.isTracked(Chain.ETHEREUM, Address.from(address1))
}
.then {
upstreamMock.nextBlock(BlockContainer.from(block2, TestingCommons.objectMapper()))
}
.expectNext(exp2)
.thenCancel()
.verify(Duration.ofSeconds(3))
Thread.sleep(50)
!trackAddress.isTracked(Chain.ETHEREUM, Address.from(address1))
}
}