2c96475aac
Leveldb did not support topics only queries. This commit changes the behavior so that now we use the topics map if present.
57 lines
1.5 KiB
Go
57 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())
|
|
}
|