xworkmate-bridge/internal/desktop/pipeline_test.go
2026-06-07 22:30:12 +08:00

86 lines
2.0 KiB
Go

package desktop
import (
"strings"
"testing"
)
func TestBuildGStreamerUsesBrowserFriendlyH264(t *testing.T) {
pm := NewPipelineManager()
tool, args, err := pm.buildGStreamer(PipelineConfig{
Display: ":11.0",
Port: 5004,
Bitrate: 2000,
})
if err != nil {
t.Fatalf("buildGStreamer returned error: %v", err)
}
if tool != "gst-launch-1.0" {
t.Fatalf("expected gst-launch-1.0, got %q", tool)
}
joined := strings.Join(args, " ")
for _, expected := range []string{
"video/x-raw,format=I420",
"width=1280",
"height=720",
"x264enc",
"tune=zerolatency",
"key-int-max=30",
"byte-stream=true",
"video/x-h264,profile=baseline",
"rtph264pay",
"config-interval=1",
} {
if !strings.Contains(joined, expected) {
t.Fatalf("expected GStreamer args to contain %q, got %s", expected, joined)
}
}
}
func TestNormalizeVideoDimensionUsesEvenValues(t *testing.T) {
if got := normalizeVideoDimension(1353, 1280); got != 1352 {
t.Fatalf("expected odd dimension to be rounded down to 1352, got %d", got)
}
if got := normalizeVideoDimension(0, 720); got != 720 {
t.Fatalf("expected fallback for zero dimension, got %d", got)
}
if got := normalizeVideoDimension(1, 720); got != 720 {
t.Fatalf("expected fallback for too-small dimension, got %d", got)
}
}
func TestBuildFFmpegUsesBrowserFriendlyH264(t *testing.T) {
pm := NewPipelineManager()
tool, args, err := pm.buildFFmpeg(PipelineConfig{
Display: ":11.0",
Port: 5004,
Bitrate: 2000,
FPS: 30,
Width: 1280,
Height: 720,
})
if err != nil {
t.Fatalf("buildFFmpeg returned error: %v", err)
}
if tool != "ffmpeg" {
t.Fatalf("expected ffmpeg, got %q", tool)
}
joined := strings.Join(args, " ")
for _, expected := range []string{
"-c:v libx264",
"-tune zerolatency",
"-profile:v baseline",
"-pix_fmt yuv420p",
"-x264-params repeat-headers=1",
"-g 30",
} {
if !strings.Contains(joined, expected) {
t.Fatalf("expected FFmpeg args to contain %q, got %s", expected, joined)
}
}
}