mirror of
https://github.com/status-im/nim-dagger.git
synced 2025-01-10 06:36:06 +00:00
2396c4d76d
* Blockexchange uses merkle root and index to fetch blocks * Links the network store getTree to the local store. * Update codex/stores/repostore.nim Co-authored-by: Dmitriy Ryajov <dryajov@gmail.com> Signed-off-by: Tomasz Bekas <tomasz.bekas@gmail.com> * Rework erasure.nim to include recent cleanup * Revert accidential changes to lib versions * Addressing review comments * Storing proofs instead of trees * Fix a comment * Fix broken tests * Fix for broken testerasure.nim * Addressing PR comments --------- Signed-off-by: Tomasz Bekas <tomasz.bekas@gmail.com> Co-authored-by: benbierens <thatbenbierens@gmail.com> Co-authored-by: Dmitriy Ryajov <dryajov@gmail.com>
74 lines
2.3 KiB
Nim
74 lines
2.3 KiB
Nim
import std/strutils
|
|
|
|
import pkg/chronos
|
|
import pkg/asynctest
|
|
import pkg/stew/byteutils
|
|
import pkg/questionable/results
|
|
import pkg/codex/stores/cachestore
|
|
import pkg/codex/chunker
|
|
|
|
import ./commonstoretests
|
|
|
|
import ../helpers
|
|
|
|
checksuite "Cache Store":
|
|
var
|
|
newBlock, newBlock1, newBlock2, newBlock3: Block
|
|
store: CacheStore
|
|
|
|
setup:
|
|
newBlock = Block.new("New Kids on the Block".toBytes()).tryGet()
|
|
newBlock1 = Block.new("1".repeat(100).toBytes()).tryGet()
|
|
newBlock2 = Block.new("2".repeat(100).toBytes()).tryGet()
|
|
newBlock3 = Block.new("3".repeat(100).toBytes()).tryGet()
|
|
store = CacheStore.new()
|
|
|
|
test "constructor":
|
|
# cache size cannot be smaller than chunk size
|
|
expect ValueError:
|
|
discard CacheStore.new(cacheSize = 1, chunkSize = 2)
|
|
|
|
store = CacheStore.new(cacheSize = 100, chunkSize = 1)
|
|
check store.currentSize == 0'nb
|
|
|
|
store = CacheStore.new(@[newBlock1, newBlock2, newBlock3])
|
|
check store.currentSize == 300'nb
|
|
|
|
# initial cache blocks total more than cache size, currentSize should
|
|
# never exceed max cache size
|
|
store = CacheStore.new(
|
|
blocks = @[newBlock1, newBlock2, newBlock3],
|
|
cacheSize = 200,
|
|
chunkSize = 1)
|
|
check store.currentSize == 200'nb
|
|
|
|
# cache size cannot be less than chunks size
|
|
expect ValueError:
|
|
discard CacheStore.new(
|
|
cacheSize = 99,
|
|
chunkSize = 100)
|
|
|
|
test "putBlock":
|
|
(await store.putBlock(newBlock1)).tryGet()
|
|
check (await store.hasBlock(newBlock1.cid)).tryGet()
|
|
|
|
# block size bigger than entire cache
|
|
store = CacheStore.new(cacheSize = 99, chunkSize = 98)
|
|
(await store.putBlock(newBlock1)).tryGet()
|
|
check not (await store.hasBlock(newBlock1.cid)).tryGet()
|
|
|
|
# block being added causes removal of LRU block
|
|
store = CacheStore.new(
|
|
@[newBlock1, newBlock2, newBlock3],
|
|
cacheSize = 200,
|
|
chunkSize = 1)
|
|
check:
|
|
not (await store.hasBlock(newBlock1.cid)).tryGet()
|
|
(await store.hasBlock(newBlock2.cid)).tryGet()
|
|
(await store.hasBlock(newBlock2.cid)).tryGet()
|
|
store.currentSize.int == newBlock2.data.len + newBlock3.data.len # 200
|
|
|
|
commonBlockStoreTests(
|
|
"Cache", proc: BlockStore =
|
|
BlockStore(CacheStore.new(cacheSize = 1000, chunkSize = 1)))
|