mirror of
https://github.com/status-im/nim-dagger.git
synced 2025-02-04 19:04:04 +00:00
7a0a48e4a5
* [build] disable XCannotRaiseY hint There are too many {.raises:[Defect].} in the libraries that we use, drowning out all other warnings and hints * [build] disable BareExcept warning Not yet enabled in a released version of Nim, so libraries that we depend on have not fixed this yet, drowning out our own hints and warnings * [build] disable DotLikeOps warning dot-like ops were an experiment that is not going land in Nim * [build] compile log statements in tests When running tests, all log statements are compiled. They are filtered out at runtime during a test run. * [build] do not build executable when running unit test It's already built in the integration test * [build] Fix warnings - remove unused code - remove unused imports - stop using deprecated stuff * [build] Put compiler flags behind nim version checks * [CI] remove Nim 1.2 compatibility
75 lines
2.3 KiB
Nim
75 lines
2.3 KiB
Nim
import std/strutils
|
|
|
|
import pkg/chronos
|
|
import pkg/asynctest
|
|
import pkg/libp2p
|
|
import pkg/stew/byteutils
|
|
import pkg/questionable/results
|
|
import pkg/codex/stores/cachestore
|
|
import pkg/codex/chunker
|
|
|
|
import ./commonstoretests
|
|
|
|
import ../helpers
|
|
|
|
suite "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
|
|
|
|
store = CacheStore.new(@[newBlock1, newBlock2, newBlock3])
|
|
check store.currentSize == 300
|
|
|
|
# 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
|
|
|
|
# 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 == newBlock2.data.len + newBlock3.data.len # 200
|
|
|
|
commonBlockStoreTests(
|
|
"Cache", proc: BlockStore =
|
|
BlockStore(CacheStore.new(cacheSize = 500, chunkSize = 1)))
|