mirror of
https://github.com/navidrome/navidrome.git
synced 2026-05-03 06:51:16 +00:00
test: improve FFmpeg context cancellation tests for cross-platform compatibility
Signed-off-by: Deluan <deluan@navidrome.org>
This commit is contained in:
parent
187eac268f
commit
578375ca71
@ -2,7 +2,7 @@ package ffmpeg
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"os/exec"
|
"runtime"
|
||||||
sync "sync"
|
sync "sync"
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
@ -121,24 +121,28 @@ var _ = Describe("ffmpeg", func() {
|
|||||||
})
|
})
|
||||||
|
|
||||||
Context("with mock process behavior", func() {
|
Context("with mock process behavior", func() {
|
||||||
var originalFfmpegPath string
|
var longRunningCmd string
|
||||||
|
|
||||||
BeforeEach(func() {
|
BeforeEach(func() {
|
||||||
originalFfmpegPath = ffmpegPath
|
|
||||||
// Use a long-running command for testing cancellation
|
// Use a long-running command for testing cancellation
|
||||||
ffmpegPath = "sleep"
|
switch runtime.GOOS {
|
||||||
})
|
case "windows":
|
||||||
|
// Use PowerShell's Start-Sleep
|
||||||
AfterEach(func() {
|
ffmpegPath = "powershell"
|
||||||
ffmpegPath = originalFfmpegPath
|
longRunningCmd = "powershell -Command Start-Sleep -Seconds 10"
|
||||||
|
default:
|
||||||
|
// Use sleep on Unix-like systems
|
||||||
|
ffmpegPath = "sleep"
|
||||||
|
longRunningCmd = "sleep 10"
|
||||||
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
It("should terminate the underlying process when context is cancelled", func() {
|
It("should terminate the underlying process when context is cancelled", func() {
|
||||||
ff := New()
|
ff := New()
|
||||||
ctx, cancel := context.WithTimeout(GinkgoT().Context(), 5*time.Second)
|
ctx, cancel := context.WithTimeout(GinkgoT().Context(), 5*time.Second)
|
||||||
|
defer cancel()
|
||||||
|
|
||||||
// Start a process that will run for a while
|
// Start a process that will run for a while
|
||||||
stream, err := ff.Transcode(ctx, "sleep 10", "tests/fixtures/test.mp3", 0, 0)
|
stream, err := ff.Transcode(ctx, longRunningCmd, "tests/fixtures/test.mp3", 0, 0)
|
||||||
Expect(err).ToNot(HaveOccurred())
|
Expect(err).ToNot(HaveOccurred())
|
||||||
defer stream.Close()
|
defer stream.Close()
|
||||||
|
|
||||||
@ -153,13 +157,9 @@ var _ = Describe("ffmpeg", func() {
|
|||||||
_, err = stream.Read(buf)
|
_, err = stream.Read(buf)
|
||||||
Expect(err).To(HaveOccurred(), "Expected stream to be closed due to process termination")
|
Expect(err).To(HaveOccurred(), "Expected stream to be closed due to process termination")
|
||||||
|
|
||||||
// Give some time for cleanup
|
// Verify the stream is closed by attempting another read
|
||||||
time.Sleep(100 * time.Millisecond)
|
_, err = stream.Read(buf)
|
||||||
|
Expect(err).To(HaveOccurred())
|
||||||
// Verify no sleep processes are left running
|
|
||||||
checkCmd := exec.Command("pgrep", "-f", "sleep 10")
|
|
||||||
err = checkCmd.Run()
|
|
||||||
Expect(err).To(HaveOccurred(), "Expected no 'sleep 10' processes to be running")
|
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user