logos-storage-nim/tests/codex/teststorestream.nim
Chrysostomos Nanakos 46cf0389a4
refactor!: fix compilation issues
Signed-off-by: Chrysostomos Nanakos <chris@include.gr>
2026-01-07 16:50:04 +02:00

111 lines
2.8 KiB
Nim

import pkg/chronos
import pkg/codex/[streams, stores, indexingstrategy, manifest, blocktype as bt]
import ../asynctest
import ./examples
import ./helpers
asyncchecksuite "StoreStream":
var
manifest: Manifest
store: BlockStore
stream: StoreStream
# Check that `buf` contains `size` bytes with values start, start+1...
proc sequentialBytes(buf: seq[byte], size: int, start: int): bool =
for i in 0 ..< size:
if int(buf[i]) != start + i:
return false
return true
let
data = [
byte 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41,
42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61,
62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81,
82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99,
]
chunkSize = 10
teardown:
await stream.close()
setup:
store = CacheStore.new()
manifest = await storeDataGetManifest(
store, MockChunker.new(dataset = data, chunkSize = chunkSize)
)
stream = StoreStream.new(store, manifest)
test "Read all blocks < blockSize":
var
buf = newSeq[byte](8)
n = 0
while not stream.atEof:
let read = (await stream.readOnce(addr buf[0], buf.len))
if not stream.atEof:
check read == 8
else:
check read == 4
check sequentialBytes(buf, read, n)
n += read
test "Read all blocks == blockSize":
var
buf = newSeq[byte](10)
n = 0
while not stream.atEof:
let read = (await stream.readOnce(addr buf[0], buf.len))
check read == 10
check sequentialBytes(buf, read, n)
n += read
test "Read all blocks > blockSize":
var
buf = newSeq[byte](11)
n = 0
while not stream.atEof:
let read = (await stream.readOnce(addr buf[0], buf.len))
if not stream.atEof:
check read == 11
else:
check read == 1
check sequentialBytes(buf, read, n)
n += read
test "Read exact bytes within block boundary":
var buf = newSeq[byte](5)
await stream.readExactly(addr buf[0], 5)
check sequentialBytes(buf, 5, 0)
test "Read exact bytes outside of block boundary":
var buf = newSeq[byte](15)
await stream.readExactly(addr buf[0], 15)
check sequentialBytes(buf, 15, 0)
suite "StoreStream - Size Tests":
var stream: StoreStream
teardown:
await stream.close()
test "Should return dataset size as stream size":
let manifest = Manifest.new(
treeCid = Cid.example, datasetSize = 80.NBytes, blockSize = 10.NBytes
)
stream = StoreStream.new(CacheStore.new(), manifest)
check stream.size == 80