From adb67e79b36db02190ae73eeb069c3cc69478fc0 Mon Sep 17 00:00:00 2001 From: Gabe Kangas Date: Mon, 28 Aug 2023 19:34:40 -0700 Subject: [PATCH] chore(tests): more clip validation tests --- replays/replay_test.go | 67 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 66 insertions(+), 1 deletion(-) diff --git a/replays/replay_test.go b/replays/replay_test.go index 7d6c215b3..9b7408e6c 100644 --- a/replays/replay_test.go +++ b/replays/replay_test.go @@ -10,6 +10,7 @@ import ( "github.com/owncast/owncast/core/data" "github.com/owncast/owncast/db" + "github.com/owncast/owncast/utils" log "github.com/sirupsen/logrus" "github.com/teris-io/shortid" ) @@ -17,9 +18,12 @@ import ( var ( fakeStreamId = shortid.MustGenerate() fakeSegmentCount = 300 - fakeSegmentDuration = 4 // Seconds + fakeSegmentDuration = 0 fakeStreamStartTime = time.Now() fakeConfigId = "" + fakeClipper = shortid.MustGenerate() + fakeClipStartTime = 10 + fakeClipEndTime = 15 ) func TestMain(m *testing.M) { @@ -37,6 +41,7 @@ func populateFakeStream() { recording := NewRecording(fakeStreamId) fakeConfigId = recording.outputConfigurations[0].ID + fakeSegmentDuration = data.GetStreamLatencyLevel().SecondsPerSegment // Seconds for i := 0; i < fakeSegmentCount; i++ { fakeSegmentName := fmt.Sprintf("%s-%d.ts", fakeStreamId, i) @@ -87,3 +92,63 @@ func TestPlaylist(t *testing.T) { t.Error("expected", fakeSegmentCount, "segments, got", len(p.Segments)) } } + +func TestClip(t *testing.T) { + segmentDuration := data.GetStreamLatencyLevel().SecondsPerSegment + playlist := NewPlaylistGenerator() + clipId, _, err := AddClipForStream(fakeStreamId, "test clip", fakeClipper, float32(fakeClipStartTime), float32(fakeClipEndTime)) + if err != nil { + t.Error(err) + } + + clips, err := GetAllClips() + if err != nil { + t.Error(err) + } + + if len(clips) != 1 { + t.Error("expected 1 clip, got", len(clips)) + } + + clip := clips[0] + + if clip.ID != clipId { + t.Error("expected clip id", clipId, "got", clip.ID) + } + + if clip.Manifest != fmt.Sprintf("/clip/%s", clipId) { + t.Error("expected manifest id", fmt.Sprintf("/clip/%s", clipId), "got", clip.Manifest) + } + + expectedStartTime := float32(utils.RoundDownToNearest(float32(fakeClipStartTime), segmentDuration)) + if clip.RelativeStartTime != expectedStartTime { + t.Error("expected clip start time", fakeClipStartTime, "got", clip.RelativeStartTime) + } + + expectedEndTime := float32(utils.RoundUpToNearest(float32(fakeClipEndTime), segmentDuration)) + if clip.RelativeEndTime != expectedEndTime { + t.Error("expected clip end time", fakeClipEndTime, "got", clip.RelativeEndTime) + } + + expectedDuration := expectedEndTime - expectedStartTime + if float32(clip.DurationSeconds) != expectedDuration { + t.Error("expected clip duration", expectedDuration, "got", clip.DurationSeconds) + } + + p, err := playlist.GenerateMediaPlaylistForClipAndConfiguration(clipId, fakeConfigId) + if err != nil { + t.Error(err) + } + if p == nil { + t.Error("expected playlist") + } + + expectedSegmentCount := 3 + if len(p.Segments) != expectedSegmentCount { + t.Error("expected", expectedSegmentCount, "segments, got", len(p.Segments)) + } + + if p.TargetDuration != float64(fakeSegmentDuration) { + t.Error("expected target duration of", fakeSegmentDuration, "got", p.TargetDuration) + } +}