Live video on the AT Protocol
at natb/command-errors 59 lines 1.3 kB view raw
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}