Live video on the AT Protocol
1package localdb
2
3import (
4 "fmt"
5 "sync"
6 "testing"
7 "time"
8
9 "github.com/stretchr/testify/require"
10 "stream.place/streamplace/pkg/config"
11)
12
13func TestSegmentPerf(t *testing.T) {
14 config.DisableSQLLogging()
15 // dburl := filepath.Join(t.TempDir(), "test.db")
16 db, err := MakeDB(":memory:")
17 require.NoError(t, err)
18 // Create a ldb instance
19 ldb := db.(*LocalDatabase)
20 t.Cleanup(func() {
21 // os.Remove(dburl)
22 })
23
24 defer config.EnableSQLLogging()
25 // Create 250000 segments with timestamps 1 hour ago, each one second apart
26 wg := sync.WaitGroup{}
27 segCount := 250000
28 wg.Add(segCount)
29 baseTime := time.Now()
30 for i := 0; i < segCount; i++ {
31 segment := &Segment{
32 ID: fmt.Sprintf("segment-%d", i),
33 RepoDID: "did:plc:test123",
34 StartTime: baseTime.Add(-time.Duration(i) * time.Second).UTC(),
35 }
36 go func() {
37 defer wg.Done()
38 err = ldb.DB.Create(segment).Error
39 require.NoError(t, err)
40 }()
41 }
42 wg.Wait()
43
44 startTime := time.Now()
45 wg = sync.WaitGroup{}
46 runs := 1000
47 wg.Add(runs)
48 for i := 0; i < runs; i++ {
49 go func() {
50 defer wg.Done()
51 _, err := ldb.MostRecentSegments()
52 require.NoError(t, err)
53 // require.Len(t, segments, 1)
54 }()
55 }
56 wg.Wait()
57 fmt.Printf("Time taken: %s\n", time.Since(startTime))
58 require.Less(t, time.Since(startTime), 10*time.Second)
59}