Live video on the AT Protocol
at eli/podman-cache 64 lines 1.7 kB view raw
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}