75e5bc4e81
Renamed the spy variable to streamerSpy across all e2e test files so that its purpose is immediately clear without needing to look up the declaration.
128 lines
4.6 KiB
Go
128 lines
4.6 KiB
Go
package e2e
|
|
|
|
import (
|
|
"net/http"
|
|
|
|
"github.com/navidrome/navidrome/conf"
|
|
. "github.com/onsi/ginkgo/v2"
|
|
. "github.com/onsi/gomega"
|
|
)
|
|
|
|
var _ = Describe("stream.view (legacy streaming)", Ordered, func() {
|
|
var (
|
|
mp3TrackID string // Come Together (mp3, 320kbps)
|
|
flacTrackID string // TC FLAC Standard (flac, 900kbps)
|
|
)
|
|
|
|
BeforeAll(func() {
|
|
setupTestDB()
|
|
|
|
songs, err := ds.MediaFile(ctx).GetAll()
|
|
Expect(err).ToNot(HaveOccurred())
|
|
byTitle := map[string]string{}
|
|
for _, s := range songs {
|
|
byTitle[s.Title] = s.ID
|
|
}
|
|
mp3TrackID = byTitle["Come Together"]
|
|
Expect(mp3TrackID).ToNot(BeEmpty())
|
|
flacTrackID = byTitle["TC FLAC Standard"]
|
|
Expect(flacTrackID).ToNot(BeEmpty())
|
|
})
|
|
|
|
Describe("raw / direct play", func() {
|
|
It("streams raw when no format or maxBitRate is specified", func() {
|
|
w := doRawReq("stream", "id", flacTrackID)
|
|
Expect(w.Code).To(Equal(http.StatusOK))
|
|
Expect(streamerSpy.LastRequest.Format).To(BeElementOf("raw", ""))
|
|
})
|
|
|
|
It("streams raw when format=raw is explicitly requested", func() {
|
|
w := doRawReq("stream", "id", flacTrackID, "format", "raw")
|
|
Expect(w.Code).To(Equal(http.StatusOK))
|
|
Expect(streamerSpy.LastRequest.Format).To(BeElementOf("raw", ""))
|
|
})
|
|
|
|
It("streams raw when maxBitRate is >= source bitrate", func() {
|
|
w := doRawReq("stream", "id", flacTrackID, "maxBitRate", "1000")
|
|
Expect(w.Code).To(Equal(http.StatusOK))
|
|
Expect(streamerSpy.LastRequest.Format).To(BeElementOf("raw", ""))
|
|
})
|
|
|
|
It("streams raw when format matches source and bitrate is not lower", func() {
|
|
w := doRawReq("stream", "id", mp3TrackID, "format", "mp3", "maxBitRate", "320")
|
|
Expect(w.Code).To(Equal(http.StatusOK))
|
|
Expect(streamerSpy.LastRequest.Format).To(Equal("raw"))
|
|
})
|
|
})
|
|
|
|
Describe("transcoding with explicit format", func() {
|
|
It("transcodes to mp3 when format=mp3 is requested", func() {
|
|
w := doRawReq("stream", "id", flacTrackID, "format", "mp3")
|
|
Expect(w.Code).To(Equal(http.StatusOK))
|
|
Expect(streamerSpy.LastRequest.Format).To(Equal("mp3"))
|
|
// Should use the mp3 default bitrate (192kbps)
|
|
Expect(streamerSpy.LastRequest.BitRate).To(Equal(192))
|
|
})
|
|
|
|
It("transcodes to opus when format=opus is requested (no maxBitRate)", func() {
|
|
w := doRawReq("stream", "id", flacTrackID, "format", "opus")
|
|
Expect(w.Code).To(Equal(http.StatusOK))
|
|
Expect(streamerSpy.LastRequest.Format).To(Equal("opus"))
|
|
// Should use the opus default bitrate (128kbps)
|
|
Expect(streamerSpy.LastRequest.BitRate).To(Equal(128))
|
|
})
|
|
|
|
It("transcodes to opus with specified maxBitRate", func() {
|
|
w := doRawReq("stream", "id", flacTrackID, "format", "opus", "maxBitRate", "192")
|
|
Expect(w.Code).To(Equal(http.StatusOK))
|
|
Expect(streamerSpy.LastRequest.Format).To(Equal("opus"))
|
|
Expect(streamerSpy.LastRequest.BitRate).To(Equal(192))
|
|
})
|
|
|
|
It("transcodes to mp3 with specified maxBitRate", func() {
|
|
w := doRawReq("stream", "id", flacTrackID, "format", "mp3", "maxBitRate", "128")
|
|
Expect(w.Code).To(Equal(http.StatusOK))
|
|
Expect(streamerSpy.LastRequest.Format).To(Equal("mp3"))
|
|
Expect(streamerSpy.LastRequest.BitRate).To(Equal(128))
|
|
})
|
|
|
|
It("transcodes MP3 to opus when format=opus is requested", func() {
|
|
w := doRawReq("stream", "id", mp3TrackID, "format", "opus")
|
|
Expect(w.Code).To(Equal(http.StatusOK))
|
|
Expect(streamerSpy.LastRequest.Format).To(Equal("opus"))
|
|
})
|
|
|
|
It("transcodes same format when maxBitRate is lower than source", func() {
|
|
w := doRawReq("stream", "id", mp3TrackID, "format", "mp3", "maxBitRate", "128")
|
|
Expect(w.Code).To(Equal(http.StatusOK))
|
|
Expect(streamerSpy.LastRequest.Format).To(Equal("mp3"))
|
|
Expect(streamerSpy.LastRequest.BitRate).To(Equal(128))
|
|
})
|
|
})
|
|
|
|
Describe("downsampling with maxBitRate only", func() {
|
|
It("transcodes using default downsampling format when maxBitRate < source bitrate", func() {
|
|
conf.Server.DefaultDownsamplingFormat = "opus"
|
|
w := doRawReq("stream", "id", flacTrackID, "maxBitRate", "192")
|
|
Expect(w.Code).To(Equal(http.StatusOK))
|
|
Expect(streamerSpy.LastRequest.Format).To(Equal("opus"))
|
|
Expect(streamerSpy.LastRequest.BitRate).To(Equal(192))
|
|
})
|
|
|
|
It("streams raw when maxBitRate >= source bitrate (no downsampling needed)", func() {
|
|
conf.Server.DefaultDownsamplingFormat = "opus"
|
|
w := doRawReq("stream", "id", mp3TrackID, "maxBitRate", "320")
|
|
Expect(w.Code).To(Equal(http.StatusOK))
|
|
Expect(streamerSpy.LastRequest.Format).To(BeElementOf("raw", ""))
|
|
})
|
|
})
|
|
|
|
Describe("timeOffset", func() {
|
|
It("passes timeOffset to the stream request", func() {
|
|
w := doRawReq("stream", "id", flacTrackID, "format", "mp3", "timeOffset", "30")
|
|
Expect(w.Code).To(Equal(http.StatusOK))
|
|
Expect(streamerSpy.LastRequest.Offset).To(Equal(30))
|
|
})
|
|
})
|
|
})
|