Make SCUM logs live relay only
This commit is contained in:
@@ -0,0 +1,66 @@
|
||||
package companion
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"io"
|
||||
"net/http"
|
||||
"strings"
|
||||
"testing"
|
||||
"time"
|
||||
)
|
||||
|
||||
func TestClientStreamLogEventsUsesComponentSessionBodyAndSSE(t *testing.T) {
|
||||
stamp := time.Date(2026, 8, 31, 2, 0, 0, 0, time.UTC)
|
||||
config := loadTestConfig(t)
|
||||
client := newTestClient(t, config, roundTripFunc(func(request *http.Request) (*http.Response, error) {
|
||||
if request.Method != http.MethodPost || request.URL.Scheme != "https" || request.URL.Host != "platform.example.test" || request.URL.Path != logEventsPath {
|
||||
t.Fatalf("unexpected log stream request: %s %s", request.Method, request.URL.String())
|
||||
}
|
||||
if request.Header.Get("Authorization") != "" {
|
||||
t.Fatalf("component session must stay in the typed JSON body, got Authorization header")
|
||||
}
|
||||
if request.Header.Get("Accept") != "text/event-stream" || request.Header.Get("Content-Type") != "application/json" {
|
||||
t.Fatalf("unexpected log stream headers: %+v", request.Header)
|
||||
}
|
||||
var body logStreamRequest
|
||||
decodeRequest(t, request, &body)
|
||||
if body.SessionToken != "session-token" {
|
||||
t.Fatalf("unexpected session token body: %#v", body)
|
||||
}
|
||||
logPayload, _ := json.Marshal(LogStreamEvent{ServerInstanceID: "server-1", StreamID: "stream-1", Source: "process", StreamKey: "stdout", LogSessionID: "session-live", SessionStartedAt: stamp, LatestSeq: 7, Entry: LogEntry{Seq: 7, Timestamp: stamp.Add(time.Second), Line: "SCUM LOGIN 76561198000000001 10.0.0.1", Redacted: true}})
|
||||
bodyText := strings.Join([]string{
|
||||
"event: ready",
|
||||
"data: {\"serverInstanceId\":\"server-1\"}",
|
||||
"",
|
||||
"event: log",
|
||||
"data: " + string(logPayload),
|
||||
"",
|
||||
": heartbeat",
|
||||
"",
|
||||
}, "\n")
|
||||
return &http.Response{StatusCode: http.StatusOK, Header: http.Header{"Content-Type": []string{"text/event-stream"}}, Body: io.NopCloser(strings.NewReader(bodyText)), Request: request}, nil
|
||||
}), stamp)
|
||||
client.mu.Lock()
|
||||
client.sessionToken = "session-token"
|
||||
client.sessionExpiresAt = stamp.Add(time.Hour)
|
||||
client.mu.Unlock()
|
||||
|
||||
var events []LogStreamEvent
|
||||
if err := client.StreamLogEvents(context.Background(), func(event LogStreamEvent) error {
|
||||
events = append(events, event)
|
||||
return nil
|
||||
}); err != nil {
|
||||
t.Fatalf("stream log events: %v", err)
|
||||
}
|
||||
if len(events) != 1 || events[0].Entry.Seq != 7 || events[0].Entry.Line != "SCUM LOGIN 76561198000000001 10.0.0.1" {
|
||||
t.Fatalf("unexpected streamed log events: %#v", events)
|
||||
}
|
||||
}
|
||||
|
||||
func TestReadLogEventStreamRejectsMalformedLogEvent(t *testing.T) {
|
||||
err := readLogEventStream(context.Background(), strings.NewReader("event: log\ndata: {not-json}\n\n"), func(LogStreamEvent) error { return nil })
|
||||
if err == nil || !strings.Contains(err.Error(), "decode log event") {
|
||||
t.Fatalf("expected malformed log event rejection, got %v", err)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user