diff --git a/replays/hlsRecorder.go b/replays/hlsRecorder.go index 36ff17c4e..c654408ec 100644 --- a/replays/hlsRecorder.go +++ b/replays/hlsRecorder.go @@ -84,17 +84,6 @@ func NewRecording(streamID string) *HLSRecorder { return &h } -// SetOutputConfigurations sets the output configurations for this stream. -func (h *HLSRecorder) SetOutputConfigurations(configs []HLSOutputConfiguration) { - h.outputConfigurations = configs -} - -// StreamBegan is called when a stream is started. -func (h *HLSRecorder) StreamBegan(id string) { - h.streamID = id - h.startTime = time.Now() -} - // SegmentWritten is called when a segment is written to disk. func (h *HLSRecorder) SegmentWritten(path string) { outputConfigurationIndexString := utils.GetIndexFromFilePath(path) diff --git a/replays/replay_test.go b/replays/replay_test.go new file mode 100644 index 000000000..7d6c215b3 --- /dev/null +++ b/replays/replay_test.go @@ -0,0 +1,89 @@ +package replays + +import ( + "context" + "database/sql" + "fmt" + "path/filepath" + "testing" + "time" + + "github.com/owncast/owncast/core/data" + "github.com/owncast/owncast/db" + log "github.com/sirupsen/logrus" + "github.com/teris-io/shortid" +) + +var ( + fakeStreamId = shortid.MustGenerate() + fakeSegmentCount = 300 + fakeSegmentDuration = 4 // Seconds + fakeStreamStartTime = time.Now() + fakeConfigId = "" +) + +func TestMain(m *testing.M) { + if err := data.SetupPersistence(":memory:"); err != nil { + panic(err) + } + + Setup() + populateFakeStream() + m.Run() +} + +func populateFakeStream() { + queries := data.GetDatastore().GetQueries() + + recording := NewRecording(fakeStreamId) + fakeConfigId = recording.outputConfigurations[0].ID + + for i := 0; i < fakeSegmentCount; i++ { + fakeSegmentName := fmt.Sprintf("%s-%d.ts", fakeStreamId, i) + if err := queries.InsertSegment(context.Background(), db.InsertSegmentParams{ + ID: shortid.MustGenerate(), + StreamID: fakeStreamId, + OutputConfigurationID: fakeConfigId, + Path: filepath.Join(fakeStreamId, fakeConfigId, "0", fakeSegmentName), + RelativeTimestamp: float32(i * fakeSegmentDuration), + Timestamp: sql.NullTime{Time: fakeStreamStartTime.Add(time.Duration(fakeSegmentDuration * i)), Valid: true}, + }); err != nil { + log.Errorln(err) + } + } + + if err := queries.SetStreamEnded(context.Background(), db.SetStreamEndedParams{ + ID: fakeStreamId, + EndTime: sql.NullTime{Time: fakeStreamStartTime.Add(time.Duration(fakeSegmentDuration * fakeSegmentCount)), Valid: true}, + }); err != nil { + log.Errorln(err) + } +} + +func TestStream(t *testing.T) { + playlist := NewPlaylistGenerator() + stream, err := playlist.GetStream(fakeStreamId) + if err != nil { + t.Error(err) + } + + if stream.ID != fakeStreamId { + t.Error("expected stream id", fakeStreamId, "got", stream.ID) + } +} + +func TestPlaylist(t *testing.T) { + playlist := NewPlaylistGenerator() + p, err := playlist.GenerateMediaPlaylistForStreamAndConfiguration(fakeStreamId, fakeConfigId) + if p == nil { + t.Error("expected playlist") + } + + if err != nil { + t.Error(err) + } + + if len(p.Segments) != fakeSegmentCount { + t.Error("expected", fakeSegmentCount, "segments, got", len(p.Segments)) + } +}