2018-12-24 21:19:03 +01:00
|
|
|
import std/unittest, std/os, std/parseopt
|
|
|
|
|
|
|
|
import ../src/blobsets
|
|
|
|
|
|
|
|
suite "Blob set tests":
|
|
|
|
|
|
|
|
var
|
2019-03-18 21:26:59 +01:00
|
|
|
store = newNullStore()
|
2019-03-16 11:52:24 +01:00
|
|
|
randomCid = blobHash("")
|
2018-12-24 21:19:03 +01:00
|
|
|
|
|
|
|
# test "zero blob":
|
|
|
|
# doAssert(randomCid == zeroChunk)
|
|
|
|
|
|
|
|
proc randomize() =
|
2019-03-18 21:26:59 +01:00
|
|
|
randomCid = blobHash(randomCid.toHex)
|
2018-12-24 21:19:03 +01:00
|
|
|
|
|
|
|
proc testPath(s: BlobSet; root: string): BlobSet =
|
|
|
|
for path in walkDirRec(root):
|
|
|
|
randomize()
|
|
|
|
let
|
|
|
|
blob = randomCid
|
|
|
|
str = $randomCid
|
|
|
|
doAssert(str.toBlobid == randomCid)
|
2019-03-18 21:26:59 +01:00
|
|
|
result = insert(store, s, path, blob, 0)
|
|
|
|
let found = search(store, result, path)
|
2018-12-24 21:19:03 +01:00
|
|
|
doAssert(found == randomCid)
|
|
|
|
|
|
|
|
test "functional insert":
|
|
|
|
let
|
|
|
|
a = newBlobSet()
|
2019-03-18 21:26:59 +01:00
|
|
|
b = insert(store, a, "foo", randomCid, 0)
|
|
|
|
c = insert(store, b, "bar", randomCid, 0)
|
|
|
|
doAssert(contains(store, b, "foo"))
|
|
|
|
doAssert(contains(store, c, "foo"))
|
|
|
|
doAssert(contains(store, c, "bar"))
|
|
|
|
doAssert(not contains(store, a, "foo"))
|
|
|
|
doAssert(not contains(store, a, "bar"))
|
|
|
|
doAssert(not contains(store, b, "bar"))
|
2018-12-24 21:19:03 +01:00
|
|
|
|
2019-02-15 21:56:21 +01:00
|
|
|
test "apply":
|
|
|
|
var bs = newBlobSet()
|
|
|
|
for i in 1..1024:
|
|
|
|
let
|
|
|
|
name = $i
|
|
|
|
blob = blobHash name
|
2019-03-18 21:26:59 +01:00
|
|
|
bs = insert(store, bs, name, blob, 0)
|
2019-02-15 21:56:21 +01:00
|
|
|
for i in 1..1024:
|
|
|
|
let
|
|
|
|
name = $i
|
|
|
|
blob = blobHash name
|
2019-03-18 21:26:59 +01:00
|
|
|
other = search(store, bs, name)
|
2019-02-15 21:56:21 +01:00
|
|
|
doAssert(other == blob)
|
|
|
|
|
2019-03-18 21:26:59 +01:00
|
|
|
test "remove":
|
|
|
|
var bs = newBlobSet()
|
|
|
|
for i in 1..1024:
|
|
|
|
let
|
|
|
|
name = $i
|
|
|
|
blob = blobHash name
|
|
|
|
bs = insert(store, bs, name, blob, 0)
|
|
|
|
for i in 1..1024:
|
|
|
|
let name = $i
|
|
|
|
bs = remove(store, bs, name)
|
|
|
|
doAssert(not contains(store, bs, name))
|
|
|
|
|
2018-12-24 21:19:03 +01:00
|
|
|
test "sets":
|
|
|
|
var s = newBlobSet()
|
|
|
|
for kind, key, val in getopt():
|
|
|
|
if kind == cmdArgument:
|
|
|
|
s = s.testPath(key)
|
|
|
|
if s.isEmpty:
|
|
|
|
s = s.testPath(".")
|