mirror of
https://github.com/logos-storage/logos-storage-nim.git
synced 2026-01-04 06:23:06 +00:00
* WiP: migrating CodexClient to chronos http client * fix(api): fixes #1163 * feat: fully working API integration tests * convert most of the tests in testupdownload * feat: working updownload tests on async client * feat: make testsales work with async codexclient * feat: make testpurchasing work with async codexclient * feat: make testblockexpiration work with async codexclient * feat: make marketplacesuite work with async codexclient * make testproofs work with async codexclient * chore: refactor client to express higher level in terms of lower level operations * fix: set correct content-length for erasure-coded datasets * feat: make testecbug work with async client * feat: make testvalidator work with async client * refactor: simplify request aliases, add close operation * wire back client.close at node shutdown * refactor: remove unused exception * fix: use await instead of waitFor on async call sites
99 lines
3.2 KiB
Nim
99 lines
3.2 KiB
Nim
import pkg/codex/rest/json
|
|
import ./twonodes
|
|
import ../codex/examples
|
|
import json
|
|
from pkg/libp2p import Cid, `$`
|
|
|
|
twonodessuite "Uploads and downloads":
|
|
test "node allows local file downloads", twoNodesConfig:
|
|
let content1 = "some file contents"
|
|
let content2 = "some other contents"
|
|
|
|
let cid1 = (await client1.upload(content1)).get
|
|
let cid2 = (await client2.upload(content2)).get
|
|
|
|
let resp1 = (await client1.download(cid1, local = true)).get
|
|
let resp2 = (await client2.download(cid2, local = true)).get
|
|
|
|
check:
|
|
content1 == resp1
|
|
content2 == resp2
|
|
|
|
test "node allows remote file downloads", twoNodesConfig:
|
|
let content1 = "some file contents"
|
|
let content2 = "some other contents"
|
|
|
|
let cid1 = (await client1.upload(content1)).get
|
|
let cid2 = (await client2.upload(content2)).get
|
|
|
|
let resp2 = (await client1.download(cid2, local = false)).get
|
|
let resp1 = (await client2.download(cid1, local = false)).get
|
|
|
|
check:
|
|
content1 == resp1
|
|
content2 == resp2
|
|
|
|
test "node fails retrieving non-existing local file", twoNodesConfig:
|
|
let content1 = "some file contents"
|
|
let cid1 = (await client1.upload(content1)).get # upload to first node
|
|
let resp2 =
|
|
await client2.download(cid1, local = true) # try retrieving from second node
|
|
|
|
check:
|
|
resp2.error.msg == "404"
|
|
|
|
proc checkRestContent(cid: Cid, content: ?!string) =
|
|
let c = content.tryGet()
|
|
|
|
# tried to JSON (very easy) and checking the resulting object (would be much nicer)
|
|
# spent an hour to try and make it work.
|
|
let jsonData = parseJson(c)
|
|
|
|
check jsonData.hasKey("cid") == true
|
|
|
|
check jsonData["cid"].getStr() == $cid
|
|
check jsonData.hasKey("manifest") == true
|
|
|
|
let manifest = jsonData["manifest"]
|
|
|
|
check manifest.hasKey("treeCid") == true
|
|
check manifest["treeCid"].getStr() ==
|
|
"zDzSvJTezk7bJNQqFq8k1iHXY84psNuUfZVusA5bBQQUSuyzDSVL"
|
|
check manifest.hasKey("datasetSize") == true
|
|
check manifest["datasetSize"].getInt() == 18
|
|
check manifest.hasKey("blockSize") == true
|
|
check manifest["blockSize"].getInt() == 65536
|
|
check manifest.hasKey("protected") == true
|
|
check manifest["protected"].getBool() == false
|
|
|
|
test "node allows downloading only manifest", twoNodesConfig:
|
|
let content1 = "some file contents"
|
|
let cid1 = (await client1.upload(content1)).get
|
|
|
|
let resp2 = await client1.downloadManifestOnly(cid1)
|
|
checkRestContent(cid1, resp2)
|
|
|
|
test "node allows downloading content without stream", twoNodesConfig:
|
|
let
|
|
content1 = "some file contents"
|
|
cid1 = (await client1.upload(content1)).get
|
|
resp1 = await client2.downloadNoStream(cid1)
|
|
|
|
checkRestContent(cid1, resp1)
|
|
|
|
let resp2 = (await client2.download(cid1, local = true)).get
|
|
check:
|
|
content1 == resp2
|
|
|
|
test "reliable transfer test", twoNodesConfig:
|
|
proc transferTest(a: CodexClient, b: CodexClient) {.async.} =
|
|
let data = await RandomChunker.example(blocks = 8)
|
|
let cid = (await a.upload(data)).get
|
|
let response = (await b.download(cid)).get
|
|
check:
|
|
@response.mapIt(it.byte) == data
|
|
|
|
for run in 0 .. 10:
|
|
await transferTest(client1, client2)
|
|
await transferTest(client2, client1)
|