diff --git a/codex/market.nim b/codex/market.nim index 4c1ea467..be0d06fc 100644 --- a/codex/market.nim +++ b/codex/market.nim @@ -5,7 +5,6 @@ import pkg/ethers/erc20 import ./contracts/requests import ./clock import ./periods -import ./utils/exceptions export chronos export questionable diff --git a/codex/purchasing/states/cancelled.nim b/codex/purchasing/states/cancelled.nim index a4765276..ad54f6a0 100644 --- a/codex/purchasing/states/cancelled.nim +++ b/codex/purchasing/states/cancelled.nim @@ -2,7 +2,6 @@ import pkg/metrics import pkg/chronicles import ../statemachine import ./errorhandling -import ./error declareCounter(codex_purchases_cancelled, "codex purchases cancelled") diff --git a/codex/sales/states/provingsimulated.nim b/codex/sales/states/provingsimulated.nim index 501987b5..f5753cf2 100644 --- a/codex/sales/states/provingsimulated.nim +++ b/codex/sales/states/provingsimulated.nim @@ -4,7 +4,6 @@ when codex_enable_proof_failures: import pkg/chronicles import pkg/stint import pkg/ethers - import pkg/ethers/testing import ../../contracts/requests import ../../market diff --git a/tests/integration/codexclient.nim b/tests/integration/codexclient.nim index 6de8a8f6..d8657119 100644 --- a/tests/integration/codexclient.nim +++ b/tests/integration/codexclient.nim @@ -11,6 +11,8 @@ import pkg/codex/purchasing import pkg/codex/errors import pkg/codex/sales/reservations +export purchasing + type CodexClient* = ref object http: HttpClient baseurl: string @@ -142,5 +144,8 @@ proc restart*(client: CodexClient) = client.http.close() client.http = newHttpClient() -proc purchaseStateIs(client: CodexClient, id: PurchaseId, state: string): bool = +proc purchaseStateIs*(client: CodexClient, id: PurchaseId, state: string): bool = client.getPurchase(id).option.?state == some state + +proc requestId*(client: CodexClient, id: PurchaseId): ?RequestId = + return client.getPurchase(id).option.?requestId diff --git a/tests/integration/hardhat.nim b/tests/integration/hardhat.nim index 456e3f1a..06a7069a 100644 --- a/tests/integration/hardhat.nim +++ b/tests/integration/hardhat.nim @@ -70,7 +70,7 @@ proc start(node: HardhatProcess) = for arg in node.arguments: if arg.contains "--log-file=": let logFilePath = arg.split("=")[1] - node.captureOutput(logFilePath).track(node) + discard node.captureOutput(logFilePath).track(node) break proc waitUntilOutput*(node: HardhatProcess, output: string) = diff --git a/tests/integration/marketplacesuite.nim b/tests/integration/marketplacesuite.nim new file mode 100644 index 00000000..7c3492c6 --- /dev/null +++ b/tests/integration/marketplacesuite.nim @@ -0,0 +1,99 @@ +import std/times +import pkg/chronos +import pkg/codex/contracts/marketplace as mp +import pkg/codex/periods +import ./multinodes + +export mp +export multinodes + +template marketplacesuite*(name: string, startNodes: Nodes, body: untyped) = + + multinodesuite name, startNodes: + + var marketplace {.inject, used.}: Marketplace + var period: uint64 + var token {.inject, used.}: Erc20Token + + proc advanceToNextPeriod() {.async.} = + let periodicity = Periodicity(seconds: period.u256) + let currentPeriod = periodicity.periodOf(ethProvider.currentTime()) + let nextPeriod = periodicity.periodEnd(currentPeriod) + echo "advancing to next period start at ", nextPeriod + 1 + await ethProvider.advanceTimeTo(nextPeriod + 1) + + proc periods(p: int): uint64 = + p.uint64 * period + + template eventuallyP(condition: untyped, totalProofs: int, sleep: int): bool = + proc e: Future[bool] {.async.} = + for i in 0.. - (await token.balanceOf(!provider0.address)) - ) - echo "provider1 balance: ", (await token.balanceOf(!provider1.address)) - echo "provider0 balance: ", (await token.balanceOf(!provider0.address)) +# let purchaseId = await client0.requestStorage( +# cid, +# duration=totalProofs.periods, +# # tolerance=1 +# ) +# await sleepAsync(1.seconds) # allow time for provider0 to fill a slot - # var slotWasFreed = false - # proc onSlotFreed(event: SlotFreed) = - # if slotId(event.requestId, event.slotIndex) == slotId: - # slotWasFreed = true - # let subscription = await marketplace.subscribe(SlotFreed, onSlotFreed) +# # now add availability for provider1, which should allow provider1 to put +# # the remaining slot in its queue +# discard provider1.node.client.postAvailability( +# size=data.len.u256, # should match 1 slot only +# duration=totalProofs.periods.u256, +# minPrice=300.u256, +# maxCollateral=200.u256 +# ) - # for _ in 0.. +# (await token.balanceOf(!provider0.address)) +# ) +# echo "provider1 balance: ", (await token.balanceOf(!provider1.address)) +# echo "provider0 balance: ", (await token.balanceOf(!provider0.address))