mirror of
https://github.com/navidrome/navidrome.git
synced 2026-05-03 06:51:16 +00:00
test(subsonic): add handler tests for ErrTranscodingBusy in all endpoints
This commit is contained in:
parent
803d96bf8c
commit
179ba1e600
@ -7,6 +7,8 @@ import (
|
|||||||
"net/http"
|
"net/http"
|
||||||
"net/http/httptest"
|
"net/http/httptest"
|
||||||
|
|
||||||
|
"github.com/navidrome/navidrome/conf"
|
||||||
|
"github.com/navidrome/navidrome/conf/configtest"
|
||||||
"github.com/navidrome/navidrome/core/stream"
|
"github.com/navidrome/navidrome/core/stream"
|
||||||
"github.com/navidrome/navidrome/model"
|
"github.com/navidrome/navidrome/model"
|
||||||
"github.com/navidrome/navidrome/tests"
|
"github.com/navidrome/navidrome/tests"
|
||||||
@ -322,6 +324,47 @@ var _ = Describe("Transcode endpoints", func() {
|
|||||||
Expect(fakeStreamer.captured.Channels).To(Equal(2))
|
Expect(fakeStreamer.captured.Channels).To(Equal(2))
|
||||||
Expect(fakeStreamer.captured.Offset).To(Equal(10))
|
Expect(fakeStreamer.captured.Offset).To(Equal(10))
|
||||||
})
|
})
|
||||||
|
|
||||||
|
It("returns 503 when transcoding throttle is full", func() {
|
||||||
|
busyStreamer := &busyMediaStreamer{}
|
||||||
|
router = New(ds, nil, busyStreamer, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, mockTD)
|
||||||
|
mockMFRepo.SetData(model.MediaFiles{{ID: "song-1"}})
|
||||||
|
mockTD.resolvedReq = stream.Request{Format: "mp3", BitRate: 128}
|
||||||
|
|
||||||
|
r := newGetRequest("mediaId=song-1", "mediaType=song", "transcodeParams=valid-token")
|
||||||
|
resp, err := router.GetTranscodeStream(w, r)
|
||||||
|
Expect(err).ToNot(HaveOccurred())
|
||||||
|
Expect(resp).To(BeNil())
|
||||||
|
Expect(w.Code).To(Equal(http.StatusServiceUnavailable))
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
Describe("Stream - throttle", func() {
|
||||||
|
It("returns error when transcoding throttle is full", func() {
|
||||||
|
busyStreamer := &busyMediaStreamer{}
|
||||||
|
router = New(ds, nil, busyStreamer, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, mockTD)
|
||||||
|
mockMFRepo.SetData(model.MediaFiles{{ID: "song-1"}})
|
||||||
|
|
||||||
|
r := newGetRequest("id=song-1")
|
||||||
|
_, err := router.Stream(w, r)
|
||||||
|
Expect(err).To(HaveOccurred())
|
||||||
|
Expect(err.Error()).To(ContainSubstring("too many concurrent transcodes"))
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
Describe("Download - throttle", func() {
|
||||||
|
It("returns error when transcoding throttle is full", func() {
|
||||||
|
DeferCleanup(configtest.SetupConfig())
|
||||||
|
conf.Server.EnableDownloads = true
|
||||||
|
busyStreamer := &busyMediaStreamer{}
|
||||||
|
router = New(ds, nil, busyStreamer, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, mockTD)
|
||||||
|
mockMFRepo.SetData(model.MediaFiles{{ID: "song-1"}})
|
||||||
|
|
||||||
|
r := newGetRequest("id=song-1")
|
||||||
|
_, err := router.Download(w, r)
|
||||||
|
Expect(err).To(HaveOccurred())
|
||||||
|
Expect(err.Error()).To(ContainSubstring("too many concurrent transcodes"))
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
Describe("bpsToKbps", func() {
|
Describe("bpsToKbps", func() {
|
||||||
@ -422,3 +465,10 @@ func (f *fakeMediaStreamer) NewStream(_ context.Context, _ *model.MediaFile, req
|
|||||||
f.captured = &req
|
f.captured = &req
|
||||||
return nil, errStreamCaptured
|
return nil, errStreamCaptured
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// busyMediaStreamer always returns ErrTranscodingBusy from NewStream
|
||||||
|
type busyMediaStreamer struct{}
|
||||||
|
|
||||||
|
func (b *busyMediaStreamer) NewStream(_ context.Context, _ *model.MediaFile, _ stream.Request) (*stream.Stream, error) {
|
||||||
|
return nil, stream.ErrTranscodingBusy
|
||||||
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user