Files

71 lines
2.4 KiB
Go

package liveview
import (
"context"
"testing"
"time"
"yovision.local/sense/app/sense/media"
)
func TestRejectCredentialBaseURL(t *testing.T) {
if _, err := NewService("http://user:pass@127.0.0.1:8889", time.Minute); err == nil {
t.Fatal("credential base URL accepted")
}
}
func TestSessionIsOwnerBoundAndExpires(t *testing.T) {
service, err := NewService("http://127.0.0.1:8889", time.Minute)
if err != nil {
t.Fatal(err)
}
now := time.Date(2026, 8, 12, 0, 0, 0, 0, time.UTC)
service.now = func() time.Time { return now }
route := media.Route{ID: "device:main", DeviceID: "device", ProfileToken: "main", Path: "sense_device_main", Desired: "running", Actual: "ready"}
service.route = func(context.Context, string) (media.Route, error) { return route, nil }
session, err := service.Create(context.Background(), "owner-a", route.ID)
if err != nil {
t.Fatal(err)
}
if _, err := service.Get(context.Background(), "owner-b", session.ID); err == nil {
t.Fatal("other owner accessed session")
}
now = now.Add(2 * time.Minute)
if _, err := service.Get(context.Background(), "owner-a", session.ID); err == nil {
t.Fatal("expired session remained active")
}
}
func TestTTLIsBounded(t *testing.T) {
service, err := NewService("http://127.0.0.1:8889", time.Hour)
if err != nil {
t.Fatal(err)
}
if service.ttl != 2*time.Minute {
t.Fatalf("ttl=%v", service.ttl)
}
}
func TestSessionPollRefreshesOnDemandMediaState(t *testing.T) {
service, err := NewService("http://127.0.0.1:8889", time.Minute)
if err != nil {
t.Fatal(err)
}
route := media.Route{ID: "device:main", DeviceID: "device", ProfileToken: "main", Path: "sense_device_main", Desired: "running", Actual: "waiting"}
service.route = func(context.Context, string) (media.Route, error) { return route, nil }
service.refresh = func(context.Context, string) (media.Route, error) {
updated := route
updated.Actual = "ready"
updated.Detail = "上游拉流正常"
updated.Readers = 1
return updated, nil
}
session, err := service.Create(context.Background(), "owner", route.ID)
if err != nil || session.Status != "waiting" || session.PlayerURL == "" {
t.Fatalf("session=%#v err=%v", session, err)
}
updated, err := service.Get(context.Background(), "owner", session.ID)
if err != nil || updated.Status != "ready" || updated.Detail != "上游拉流正常" {
t.Fatalf("updated=%#v err=%v", updated, err)
}
}