@@ -109,6 +109,16 @@ marketplacesuite(name = "Marketplace", stopOnRequestFail = true):
109109
110110 discard await waitForRequestToStart ()
111111
112+ var counter = 0
113+ var transferEvent = newAsyncEvent ()
114+ proc onTransfer (eventResult: ?! Transfer ) =
115+ assert not eventResult.isErr
116+ counter += 1
117+ if counter == 6 :
118+ transferEvent.fire ()
119+
120+ let tokenSubscription = await token.subscribe (Transfer , onTransfer)
121+
112122 let purchase = (await client.getPurchase (id)).get
113123 check purchase.error == none string
114124
@@ -119,17 +129,18 @@ marketplacesuite(name = "Marketplace", stopOnRequestFail = true):
119129 # only with new transaction
120130 await ethProvider.advanceTime (duration.u256)
121131
132+ await transferEvent.wait ().wait (timeout = chronos.seconds (60 ))
133+
122134 # Checking that the hosting node received reward for at least the time between <expiry;end>
123135 let slotSize = slotSize (blocks, ecNodes, ecTolerance)
124136 let pricePerSlotPerSecond = minPricePerBytePerSecond * slotSize
125- check eventually (await token.balanceOf (hostAccount)) - startBalanceHost >=
137+ check (await token.balanceOf (hostAccount)) - startBalanceHost >=
126138 (duration - 5 * 60 ).u256 * pricePerSlotPerSecond * ecNodes.u256
127139
128140 # Checking that client node receives some funds back that were not used for the host nodes
129- check eventually (
130- (await token.balanceOf (clientAccount)) - clientBalanceBeforeFinished > 0 ,
131- timeout = 10 * 1000 , # give client a bit of time to withdraw its funds
132- )
141+ check ((await token.balanceOf (clientAccount)) - clientBalanceBeforeFinished > 0 )
142+
143+ await tokenSubscription.unsubscribe ()
133144
134145 test " SP are able to process slots after workers were busy with other slots and ignored them" ,
135146 NodeConfigs (
@@ -286,33 +297,47 @@ marketplacesuite(name = "Marketplace payouts", stopOnRequestFail = true):
286297 check eventually (slotIdxFilled.isSome, timeout = expiry.int * 1000 )
287298 let slotId = slotId (! (await clientApi.requestId (id)), ! slotIdxFilled)
288299
300+ var counter = 0
301+ var transferEvent = newAsyncEvent ()
302+ proc onTransfer (eventResult: ?! Transfer ) =
303+ assert not eventResult.isErr
304+ counter += 1
305+ if counter == 3 :
306+ transferEvent.fire ()
307+
308+ let tokenAddress = await marketplace.token ()
309+ let token = Erc20Token .new (tokenAddress, ethProvider.getSigner ())
310+ let tokenSubscription = await token.subscribe (Transfer , onTransfer)
311+
289312 # wait until sale is cancelled
290313 await ethProvider.advanceTime (expiry.u256)
291314
292315 await requestCancelledEvent.wait ().wait (timeout = chronos.seconds (5 ))
293316
294317 await advanceToNextPeriod ()
295318
319+ await transferEvent.wait ().wait (timeout = chronos.seconds (60 ))
320+
296321 let slotSize = slotSize (blocks, ecNodes, ecTolerance)
297322 let pricePerSlotPerSecond = minPricePerBytePerSecond * slotSize
298323
299- check eventually (
324+ check (
300325 let endBalanceProvider = (await token.balanceOf (provider.ethAccount))
301326 endBalanceProvider > startBalanceProvider and
302327 endBalanceProvider < startBalanceProvider + expiry.u256 * pricePerSlotPerSecond
303328 )
304- check eventually (
329+ check (
305330 (
306331 let endBalanceClient = (await token.balanceOf (client.ethAccount))
307332 let endBalanceProvider = (await token.balanceOf (provider.ethAccount))
308333 (startBalanceClient - endBalanceClient) ==
309334 (endBalanceProvider - startBalanceProvider)
310- ),
311- timeout = 10 * 1000 , # give client a bit of time to withdraw its funds
335+ )
312336 )
313337
314338 await slotFilledSubscription.unsubscribe ()
315339 await requestCancelledSubscription.unsubscribe ()
340+ await tokenSubscription.unsubscribe ()
316341
317342 test " the collateral is returned after a sale is ignored" ,
318343 NodeConfigs (
@@ -386,12 +411,15 @@ marketplacesuite(name = "Marketplace payouts", stopOnRequestFail = true):
386411 let client = provider.client
387412 check eventually (
388413 block :
389- let availabilities = (await client.getAvailabilities ()).get
390- let availability = availabilities[0 ]
391- let slots = (await client.getSlots ()).get
392- let availableSlots = (3 - slots.len).u256
393-
394- availability.totalRemainingCollateral ==
395- availableSlots * slotSize * minPricePerBytePerSecond,
414+ try :
415+ let availabilities = (await client.getAvailabilities ()).get
416+ let availability = availabilities[0 ]
417+ let slots = (await client.getSlots ()).get
418+ let availableSlots = (3 - slots.len).u256
419+
420+ availability.totalRemainingCollateral ==
421+ availableSlots * slotSize * minPricePerBytePerSecond
422+ except HttpConnectionError :
423+ return false ,
396424 timeout = 30 * 1000 ,
397425 )
0 commit comments