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) } }