This repository has been archived by the owner on Oct 6, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathkeylist_test.go
79 lines (65 loc) · 2.1 KB
/
keylist_test.go
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
package db
import (
"encoding/binary"
"testing"
"github.com/Worldcoin/hubble-commander/models/stored"
"github.com/stretchr/testify/require"
bh "github.com/timshannon/badgerhold/v4"
)
func TestEncodeKeyList(t *testing.T) {
prefix := []byte("bh_prefix")
keyList := make(bh.KeyList, 5)
for i := range keyList {
keyList[i] = make([]byte, len(prefix)+4)
copy(keyList[i][:len(prefix)], prefix)
binary.BigEndian.PutUint32(keyList[i][len(prefix):], uint32(i))
}
encoded, err := EncodeKeyList(&keyList)
require.NoError(t, err)
require.EqualValues(t, len(keyList), binary.BigEndian.Uint32(encoded[0:4]))
require.EqualValues(t, len(keyList[0]), binary.BigEndian.Uint32(encoded[4:8]))
var decoded bh.KeyList
err = DecodeKeyList(encoded, &decoded)
require.NoError(t, err)
require.Equal(t, keyList, decoded)
}
func TestEncodeKeyList_ReturnsErrorWhenItemsHaveInconsistentLengths(t *testing.T) {
keyList := make(bh.KeyList, 5)
for i := 0; i < len(keyList)-1; i++ {
keyList[i] = make([]byte, 4)
binary.BigEndian.PutUint32(keyList[i], uint32(i))
}
keyList[4] = make([]byte, 8)
binary.BigEndian.PutUint64(keyList[4], uint64(4))
encoded, err := EncodeKeyList(&keyList)
require.Nil(t, encoded)
require.ErrorIs(t, err, ErrInconsistentItemsLength)
}
func TestDecodeKeyList_ReturnsErrorWhenKeyListHasInvalidDataLength(t *testing.T) {
data := make([]byte, 13)
data[0] = 2
data[1] = 5
var decoded bh.KeyList
err := DecodeKeyList(data, &decoded)
require.ErrorIs(t, err, ErrInvalidKeyListLength)
}
func TestKeyListMetadata_Bytes(t *testing.T) {
metadata := &KeyListMetadata{
ListLen: 5,
ItemLen: 10,
}
bytes := metadata.Bytes()
var decoded KeyListMetadata
err := decoded.SetBytes(bytes)
require.NoError(t, err)
require.Equal(t, *metadata, decoded)
}
func TestIndexKeyPrefix(t *testing.T) {
prefix := IndexKeyPrefix(stored.BatchedTxName, "Hash")
require.Equal(t, []byte("_bhIndex:BatchedTx:Hash:"), prefix)
}
func TestIndexKey(t *testing.T) {
value := stored.EncodeUint32(1)
prefix := IndexKey(stored.BatchedTxName, "Hash", value)
require.Equal(t, append([]byte("_bhIndex:BatchedTx:Hash:"), value...), prefix)
}