Live video on the AT Protocol
1package model
2
3import (
4 "context"
5 "fmt"
6 "testing"
7 "time"
8
9 "github.com/stretchr/testify/require"
10)
11
12func TestSegmentCleaner(t *testing.T) {
13 db, err := MakeDB(":memory:")
14 require.NoError(t, err)
15 // Create a model instance
16 model := db.(*DBModel)
17
18 // Create a repo for testing
19 repo := &Repo{
20 DID: "did:plc:test123",
21 }
22 err = model.DB.Create(repo).Error
23 require.NoError(t, err)
24
25 // Create 100 segments with timestamps 1 hour ago, each one second apart
26 baseTime := time.Now().Add(-1 * time.Hour)
27 for i := 0; i < 100; i++ {
28 segment := &Segment{
29 ID: fmt.Sprintf("segment-%d", i),
30 RepoDID: repo.DID,
31 StartTime: baseTime.Add(time.Duration(i) * time.Second),
32 }
33 err = model.DB.Create(segment).Error
34 require.NoError(t, err)
35 }
36
37 // Verify we have 100 segments
38 var count int64
39 err = model.DB.Model(&Segment{}).Count(&count).Error
40 require.NoError(t, err)
41 require.Equal(t, int64(100), count)
42
43 // Run the segment cleaner
44 err = model.SegmentCleaner(context.Background())
45 require.NoError(t, err)
46
47 // Verify we now have only 10 segments
48 err = model.DB.Model(&Segment{}).Count(&count).Error
49 require.NoError(t, err)
50 require.Equal(t, int64(10), count)
51
52 // Verify the remaining segments are the most recent ones
53 var segments []Segment
54 err = model.DB.Model(&Segment{}).Order("start_time DESC").Find(&segments).Error
55 require.NoError(t, err)
56 require.Len(t, segments, 10)
57
58 // The segments should be the last 10 we created (the most recent ones)
59 for i, segment := range segments {
60 expectedTime := baseTime.Add(time.Duration(99-i) * time.Second)
61 // Allow a small tolerance for time comparison
62 require.WithinDuration(t, expectedTime, segment.StartTime, time.Second)
63 }
64}