oficina / meet Public

Verify Home sessions through call stream and ICE routes

Paul Campbell pushed by paul@keymail.dev eee686a1d5d3290bc1cc74da36bba5b87ff71a69 parent 2ed8bcf
1 file changed, +66 −0
  • internal/meet/home_release_test.go +66 −0

CI passed — run details

diff --git a/internal/meet/home_release_test.go b/internal/meet/home_release_test.go
index b3a8da2..047a64a 100644
--- a/internal/meet/home_release_test.go
+++ b/internal/meet/home_release_test.go
@@ -1,11 +1,16 @@
package meet
import (
+ "bufio"
+ "context"
+ "encoding/json"
"net/http"
"net/http/httptest"
+ "net/url"
"regexp"
"strings"
"testing"
+ "time"
)
func TestHomeConnectionKeepsCurrentCallAndAgentRoutes(t *testing.T) {
@@ -26,6 +31,67 @@ func TestHomeConnectionKeepsCurrentCallAndAgentRoutes(t *testing.T) {
if w := f.do("GET", target, ""); w.Code != 200 {
t.Fatalf("call page: %d", w.Code)
}
+ room := strings.TrimSuffix(target, "/join")
+ if w := f.do("GET", room+"/stream?probe=1", ""); w.Code != http.StatusNoContent {
+ t.Fatalf("Home stream probe: %d", w.Code)
+ }
+ server := httptest.NewServer(f.handler)
+ defer server.Close()
+ ctx, cancel := context.WithTimeout(t.Context(), 5*time.Second)
+ defer cancel()
+ req, err := http.NewRequestWithContext(ctx, "GET", server.URL+room+"/stream", nil)
+ if err != nil {
+ t.Fatal(err)
+ }
+ origin, _ := url.Parse(homeTestOrigin)
+ req.Host = origin.Host
+ req.Header.Set("Accept", "text/event-stream")
+ for _, c := range f.cookies {
+ req.AddCookie(c)
+ }
+ resp, err := server.Client().Do(req)
+ if err != nil {
+ t.Fatal(err)
+ }
+ defer resp.Body.Close()
+ if resp.StatusCode != 200 {
+ t.Fatalf("Home stream: %d", resp.StatusCode)
+ }
+ scanner := bufio.NewScanner(resp.Body)
+ var hello struct{ Peer string }
+ for scanner.Scan() {
+ if strings.HasPrefix(scanner.Text(), "data:") {
+ if err := json.Unmarshal([]byte(strings.TrimSpace(strings.TrimPrefix(scanner.Text(), "data:"))), &hello); err != nil {
+ t.Fatal(err)
+ }
+ if hello.Peer != "" {
+ break
+ }
+ }
+ }
+ if hello.Peer == "" {
+ t.Fatalf("Home stream missing hello: %v", scanner.Err())
+ }
+ payload, err := json.Marshal(map[string]string{"type": "join", "peer": hello.Peer})
+ if err != nil {
+ t.Fatal(err)
+ }
+ signal := httptest.NewRequest("POST", homeTestOrigin+room+"/signal", strings.NewReader(string(payload)))
+ signal.Header.Set("Origin", homeTestOrigin)
+ signal.Header.Set("Content-Type", "application/json")
+ for _, c := range f.cookies {
+ signal.AddCookie(c)
+ }
+ joined := httptest.NewRecorder()
+ f.handler.ServeHTTP(joined, signal)
+ if joined.Code != 200 {
+ t.Fatalf("Home join signal: %d", joined.Code)
+ }
+ if w := f.do("GET", room+"/ice?peer="+hello.Peer, ""); w.Code != 200 {
+ t.Fatalf("Home admitted ICE: %d", w.Code)
+ }
+ resp.Body.Close()
+ cancel()
if w := f.do("GET", "/settings", ""); w.Code != 200 || !strings.Contains(w.Body.String(), "alice@example.test") {
t.Fatalf("settings lost existing principal: %d", w.Code)
}