64 lines
1.4 KiB
Go
64 lines
1.4 KiB
Go
package test
|
|
|
|
import (
|
|
"encoding/binary"
|
|
"fmt"
|
|
"slices"
|
|
"testing"
|
|
|
|
"fiatjaf.com/nostr"
|
|
"fiatjaf.com/nostr/eventstore"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func manyAuthorsTest(t *testing.T, db eventstore.Store) {
|
|
db.Init()
|
|
|
|
const total = 10000
|
|
const limit = 500
|
|
const authors = 1700
|
|
kinds := []nostr.Kind{6, 7, 8}
|
|
|
|
bigfilter := nostr.Filter{
|
|
Authors: make([]nostr.PubKey, authors),
|
|
Kinds: kinds,
|
|
Limit: limit,
|
|
}
|
|
for i := 0; i < authors; i++ {
|
|
sk := make([]byte, 32)
|
|
binary.BigEndian.PutUint32(sk, uint32(i%(total/5))+1)
|
|
pk := nostr.GetPublicKey([32]byte(sk))
|
|
bigfilter.Authors[i] = pk
|
|
}
|
|
|
|
ordered := make([]nostr.Event, 0, total)
|
|
for i := 0; i < total; i++ {
|
|
sk := make([]byte, 32)
|
|
binary.BigEndian.PutUint32(sk, uint32(i%(total/5))+1)
|
|
|
|
evt := nostr.Event{
|
|
CreatedAt: nostr.Timestamp(i*i) / 4,
|
|
Content: fmt.Sprintf("lots of stuff %d", i),
|
|
Tags: nostr.Tags{},
|
|
Kind: nostr.Kind(i % 10),
|
|
}
|
|
err := evt.Sign([32]byte(sk))
|
|
require.NoError(t, err)
|
|
|
|
err = db.SaveEvent(evt)
|
|
require.NoError(t, err)
|
|
|
|
if bigfilter.Matches(evt) {
|
|
ordered = append(ordered, evt)
|
|
}
|
|
}
|
|
|
|
res := slices.Collect(db.QueryEvents(bigfilter, 500))
|
|
require.Len(t, res, limit)
|
|
require.True(t, slices.IsSortedFunc(res, nostr.CompareEventReverse))
|
|
slices.SortFunc(ordered, nostr.CompareEventReverse)
|
|
require.Equal(t, ordered[0], res[0])
|
|
require.Equal(t, ordered[limit-1], res[limit-1])
|
|
require.Equal(t, ordered[0:limit], res)
|
|
}
|