mirror of https://github.com/waku-org/nwaku.git
128 lines
4.7 KiB
Nim
128 lines
4.7 KiB
Nim
{.used.}
|
|
|
|
import
|
|
testutils/unittests,
|
|
chronos,
|
|
stew/byteutils,
|
|
libp2p/crypto/crypto,
|
|
../../waku/v2/utils/pagination,
|
|
../../waku/v2/utils/time
|
|
|
|
procSuite "Pagination utils":
|
|
|
|
## Helpers
|
|
proc hashFromStr(input: string): MDigest[256] =
|
|
var ctx: sha256
|
|
|
|
ctx.init()
|
|
ctx.update(input.toBytes()) # converts the input to bytes
|
|
|
|
let hashed = ctx.finish() # computes the hash
|
|
ctx.clear()
|
|
|
|
return hashed
|
|
|
|
## Test vars
|
|
let
|
|
smallIndex1 = Index(digest: hashFromStr("1234"),
|
|
receiverTime: getNanosecondTime(0),
|
|
senderTime: getNanosecondTime(1000))
|
|
smallIndex2 = Index(digest: hashFromStr("1234567"), # digest is less significant than senderTime
|
|
receiverTime: getNanosecondTime(0),
|
|
senderTime: getNanosecondTime(1000))
|
|
largeIndex1 = Index(digest: hashFromStr("1234"),
|
|
receiverTime: getNanosecondTime(0),
|
|
senderTime: getNanosecondTime(9000)) # only senderTime differ from smallIndex1
|
|
largeIndex2 = Index(digest: hashFromStr("12345"), # only digest differs from smallIndex1
|
|
receiverTime: getNanosecondTime(0),
|
|
senderTime: getNanosecondTime(1000))
|
|
eqIndex1 = Index(digest: hashFromStr("0003"),
|
|
receiverTime: getNanosecondTime(0),
|
|
senderTime: getNanosecondTime(54321))
|
|
eqIndex2 = Index(digest: hashFromStr("0003"),
|
|
receiverTime: getNanosecondTime(0),
|
|
senderTime: getNanosecondTime(54321))
|
|
eqIndex3 = Index(digest: hashFromStr("0003"),
|
|
receiverTime: getNanosecondTime(9999), # receiverTime difference should have no effect on comparisons
|
|
senderTime: getNanosecondTime(54321))
|
|
diffPsTopic = Index(digest: hashFromStr("1234"),
|
|
receiverTime: getNanosecondTime(0),
|
|
senderTime: getNanosecondTime(1000),
|
|
pubsubTopic: "zzzz")
|
|
noSenderTime1 = Index(digest: hashFromStr("1234"),
|
|
receiverTime: getNanosecondTime(1100),
|
|
senderTime: getNanosecondTime(0),
|
|
pubsubTopic: "zzzz")
|
|
noSenderTime2 = Index(digest: hashFromStr("1234"),
|
|
receiverTime: getNanosecondTime(10000),
|
|
senderTime: getNanosecondTime(0),
|
|
pubsubTopic: "zzzz")
|
|
noSenderTime3 = Index(digest: hashFromStr("1234"),
|
|
receiverTime: getNanosecondTime(1200),
|
|
senderTime: getNanosecondTime(0),
|
|
pubsubTopic: "aaaa")
|
|
noSenderTime4 = Index(digest: hashFromStr("0"),
|
|
receiverTime: getNanosecondTime(1200),
|
|
senderTime: getNanosecondTime(0),
|
|
pubsubTopic: "zzzz")
|
|
|
|
## Test suite
|
|
asyncTest "Index comparison":
|
|
check:
|
|
# Index comparison with senderTime diff
|
|
cmp(smallIndex1, largeIndex1) < 0
|
|
cmp(smallIndex2, largeIndex1) < 0
|
|
|
|
# Index comparison with digest diff
|
|
cmp(smallIndex1, smallIndex2) < 0
|
|
cmp(smallIndex1, largeIndex2) < 0
|
|
cmp(smallIndex2, largeIndex2) > 0
|
|
cmp(largeIndex1, largeIndex2) > 0
|
|
|
|
# Index comparison when equal
|
|
cmp(eqIndex1, eqIndex2) == 0
|
|
|
|
# pubsubTopic difference
|
|
cmp(smallIndex1, diffPsTopic) < 0
|
|
|
|
# receiverTime diff plays no role when senderTime set
|
|
cmp(eqIndex1, eqIndex3) == 0
|
|
|
|
# receiverTime diff plays no role when digest/pubsubTopic equal
|
|
cmp(noSenderTime1, noSenderTime2) == 0
|
|
|
|
# sort on receiverTime with no senderTimestamp and unequal pubsubTopic
|
|
cmp(noSenderTime1, noSenderTime3) < 0
|
|
|
|
# sort on receiverTime with no senderTimestamp and unequal digest
|
|
cmp(noSenderTime1, noSenderTime4) < 0
|
|
|
|
# sort on receiverTime if no senderTimestamp on only one side
|
|
cmp(smallIndex1, noSenderTime1) < 0
|
|
cmp(noSenderTime1, smallIndex1) > 0 # Test symmetry
|
|
cmp(noSenderTime2, eqIndex3) < 0
|
|
cmp(eqIndex3, noSenderTime2) > 0 # Test symmetry
|
|
|
|
asyncTest "Index equality":
|
|
check:
|
|
# Exactly equal
|
|
eqIndex1 == eqIndex2
|
|
|
|
# Receiver time plays no role, even without sender time
|
|
eqIndex1 == eqIndex3
|
|
noSenderTime1 == noSenderTime2 # only receiver time differs, indices are equal
|
|
noSenderTime1 != noSenderTime3 # pubsubTopics differ
|
|
noSenderTime1 != noSenderTime4 # digests differ
|
|
|
|
# Unequal sender time
|
|
smallIndex1 != largeIndex1
|
|
|
|
# Unequal digest
|
|
smallIndex1 != smallIndex2
|
|
|
|
# Unequal hash and digest
|
|
smallIndex1 != eqIndex1
|
|
|
|
# Unequal pubsubTopic
|
|
smallIndex1 != diffPsTopic
|