mirror of
https://github.com/status-im/status-go.git
synced 2025-01-10 06:36:32 +00:00
2c96475aac
Leveldb did not support topics only queries. This commit changes the behavior so that now we use the topics map if present.
58 lines
1.5 KiB
Go
58 lines
1.5 KiB
Go
package mailserver
|
|
|
|
import (
|
|
"io/ioutil"
|
|
"os"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
|
|
"github.com/ethereum/go-ethereum/rlp"
|
|
"github.com/status-im/status-go/eth-node/types"
|
|
waku "github.com/status-im/status-go/waku/common"
|
|
)
|
|
|
|
func TestLevelDB_BuildIteratorWithTopic(t *testing.T) {
|
|
topic := []byte{0x01, 0x02, 0x03, 0x04}
|
|
|
|
dir, err := ioutil.TempDir("/tmp", "status-go-test-level-db")
|
|
require.NoError(t, err)
|
|
|
|
db, err := NewLevelDB(dir)
|
|
|
|
defer func() {
|
|
_ = os.Remove(dir)
|
|
}()
|
|
|
|
require.NoError(t, err)
|
|
|
|
envelope, err := newTestEnvelope(topic)
|
|
require.NoError(t, err)
|
|
err = db.SaveEnvelope(envelope)
|
|
require.NoError(t, err)
|
|
|
|
iter, err := db.BuildIterator(CursorQuery{
|
|
start: NewDBKey(uint32(time.Now().Add(-time.Hour).Unix()), types.BytesToTopic(topic), types.Hash{}).Bytes(),
|
|
end: NewDBKey(uint32(time.Now().Add(time.Second).Unix()), types.BytesToTopic(topic), types.Hash{}).Bytes(),
|
|
topics: [][]byte{topic},
|
|
limit: 10,
|
|
})
|
|
topicsMap := make(map[types.TopicType]bool)
|
|
topicsMap[types.BytesToTopic(topic)] = true
|
|
require.NoError(t, err)
|
|
hasNext := iter.Next()
|
|
require.True(t, hasNext)
|
|
rawValue, err := iter.GetEnvelopeByTopicsMap(topicsMap)
|
|
require.NoError(t, err)
|
|
require.NotEmpty(t, rawValue)
|
|
var receivedEnvelope waku.Envelope
|
|
err = rlp.DecodeBytes(rawValue, &receivedEnvelope)
|
|
require.NoError(t, err)
|
|
require.EqualValues(t, waku.BytesToTopic(topic), receivedEnvelope.Topic)
|
|
|
|
err = iter.Release()
|
|
require.NoError(t, err)
|
|
require.NoError(t, iter.Error())
|
|
}
|