clone

a self-hosted multitenant nostr relay with sites, file storage, git hosting, and inbox and outbox delivery

feat/ui-updates
tinyrelay / internal / storage / bench_test.go
bench_test.go 1.8K
1package storage23import (4 "context"5 "fmt"6 "testing"78 "github.com/FelineStateMachine/tinyrelay/internal/event"9)1011func BenchmarkSave(b *testing.B) {12 store := benchmarkStore(b)13 ctx := context.Background()14 b.ResetTimer()15 for i := 0; i < b.N; i++ {16 if _, err := store.Save(ctx, benchmarkEvent(i, "benchmark"), SaveOptions{Now: int64(i + 1), SearchMode: "full"}); err != nil {17 b.Fatal(err)18 }19 }20}2122func BenchmarkQuery(b *testing.B) {23 store := benchmarkStore(b)24 seedEvents(b, store, 1000)25 filter := event.Filter{Kinds: []int{1}}26 b.ResetTimer()27 for i := 0; i < b.N; i++ {28 if _, err := store.Query(context.Background(), filter, QueryOptions{Now: 2_000, Limit: 100}); err != nil {29 b.Fatal(err)30 }31 }32}3334func BenchmarkTextSearch(b *testing.B) {35 store := benchmarkStore(b)36 seedEvents(b, store, 1000)37 filter := event.Filter{Search: "needle"}38 b.ResetTimer()39 for i := 0; i < b.N; i++ {40 if _, err := store.Query(context.Background(), filter, QueryOptions{Now: 2_000, Limit: 100}); err != nil {41 b.Fatal(err)42 }43 }44}4546func benchmarkStore(b *testing.B) *Store {47 b.Helper()48 store, err := Open(context.Background(), b.TempDir()+"/bench.db")49 if err != nil {50 b.Fatal(err)51 }52 b.Cleanup(func() { _ = store.Close() })53 return store54}5556func seedEvents(b *testing.B, store *Store, count int) {57 b.Helper()58 for i := 0; i < count; i++ {59 if _, err := store.Save(context.Background(), benchmarkEvent(i, "seed needle text"), SaveOptions{Now: int64(i + 1), SearchMode: "full"}); err != nil {60 b.Fatal(err)61 }62 }63}6465func benchmarkEvent(index int, content string) event.Event {66 return event.Event{ID: fmt.Sprintf("%064x", index+1), PubKey: fmt.Sprintf("%064x", 1), CreatedAt: int64(index + 1), Kind: 1, Tags: [][]string{}, Content: content, Sig: fmt.Sprintf("%0128x", index+1)}67}