@@ -11,22 +11,103 @@ import (
1111 "github.com/stretchr/testify/assert"
1212)
1313
14- type FakeBrowserTelemetryService struct {}
14+ type FakeBrowserTelemetryService struct {
15+ StreamFunc func () * ssestream.Stream [kernel.BrowserTelemetryStreamResponse ]
16+ }
1517
1618func (f * FakeBrowserTelemetryService ) StreamStreaming (ctx context.Context , id string , query kernel.BrowserTelemetryStreamParams , opts ... option.RequestOption ) * ssestream.Stream [kernel.BrowserTelemetryStreamResponse ] {
19+ if f .StreamFunc != nil {
20+ return f .StreamFunc ()
21+ }
1722 return makeStream ([]kernel.BrowserTelemetryStreamResponse {})
1823}
1924
20- func TestTelemetryStream_UnknownCategoryErrors (t * testing.T ) {
25+ func TestTelemetryStream_NilTelemetryErrors (t * testing.T ) {
2126 b := BrowsersCmd {browsers : & FakeBrowsersService {}}
2227
2328 err := b .TelemetryStream (context .Background (), BrowsersTelemetryStreamInput {
2429 Identifier : "session123" ,
25- Categories : []string {"invalid" },
2630 })
2731
2832 assert .Error (t , err )
29- assert .Contains (t , err .Error (), "unknown category" )
33+ assert .Contains (t , err .Error (), "telemetry service not available" )
34+ }
35+
36+ func TestTelemetryStream_UnknownCategoryPassesThrough (t * testing.T ) {
37+ setupStdoutCapture (t )
38+ fake := & FakeBrowsersService {GetFunc : func (ctx context.Context , id string , query kernel.BrowserGetParams , opts ... option.RequestOption ) (* kernel.BrowserGetResponse , error ) {
39+ return & kernel.BrowserGetResponse {SessionID : id }, nil
40+ }}
41+ b := BrowsersCmd {browsers : fake , telemetry : & FakeBrowserTelemetryService {}}
42+
43+ err := b .TelemetryStream (context .Background (), BrowsersTelemetryStreamInput {
44+ Identifier : "session123" ,
45+ Categories : []string {"future_category" },
46+ Seq : - 1 ,
47+ })
48+
49+ assert .NoError (t , err )
50+ }
51+
52+ func TestTelemetryStream_SystemCategoryAccepted (t * testing.T ) {
53+ setupStdoutCapture (t )
54+ fake := & FakeBrowsersService {GetFunc : func (ctx context.Context , id string , query kernel.BrowserGetParams , opts ... option.RequestOption ) (* kernel.BrowserGetResponse , error ) {
55+ return & kernel.BrowserGetResponse {SessionID : id }, nil
56+ }}
57+ b := BrowsersCmd {browsers : fake , telemetry : & FakeBrowserTelemetryService {}}
58+
59+ err := b .TelemetryStream (context .Background (), BrowsersTelemetryStreamInput {
60+ Identifier : "session123" ,
61+ Categories : []string {"system" },
62+ Seq : - 1 ,
63+ })
64+
65+ assert .NoError (t , err )
66+ }
67+
68+ func TestTelemetryStream_EventsFlow (t * testing.T ) {
69+ setupStdoutCapture (t )
70+ event := kernel.BrowserTelemetryStreamResponse {}
71+ if err := json .Unmarshal ([]byte (`{"event":{"type":"network_response","ts":1000000}}` ), & event ); err != nil {
72+ t .Fatalf ("unmarshal: %v" , err )
73+ }
74+ fakeBrowsers := & FakeBrowsersService {GetFunc : func (ctx context.Context , id string , query kernel.BrowserGetParams , opts ... option.RequestOption ) (* kernel.BrowserGetResponse , error ) {
75+ return & kernel.BrowserGetResponse {SessionID : id }, nil
76+ }}
77+ fakeTelemetry := & FakeBrowserTelemetryService {StreamFunc : func () * ssestream.Stream [kernel.BrowserTelemetryStreamResponse ] {
78+ return makeStream ([]kernel.BrowserTelemetryStreamResponse {event })
79+ }}
80+ b := BrowsersCmd {browsers : fakeBrowsers , telemetry : fakeTelemetry }
81+
82+ err := b .TelemetryStream (context .Background (), BrowsersTelemetryStreamInput {
83+ Identifier : "session123" ,
84+ Seq : - 1 ,
85+ })
86+
87+ assert .NoError (t , err )
88+ assert .Contains (t , outBuf .String (), "network_response" )
89+ }
90+
91+ func TestTelemetryStream_EventsFlow_JSON (t * testing.T ) {
92+ event := kernel.BrowserTelemetryStreamResponse {}
93+ if err := json .Unmarshal ([]byte (`{"event":{"type":"network_response","ts":1000000}}` ), & event ); err != nil {
94+ t .Fatalf ("unmarshal: %v" , err )
95+ }
96+ fakeBrowsers := & FakeBrowsersService {GetFunc : func (ctx context.Context , id string , query kernel.BrowserGetParams , opts ... option.RequestOption ) (* kernel.BrowserGetResponse , error ) {
97+ return & kernel.BrowserGetResponse {SessionID : id }, nil
98+ }}
99+ fakeTelemetry := & FakeBrowserTelemetryService {StreamFunc : func () * ssestream.Stream [kernel.BrowserTelemetryStreamResponse ] {
100+ return makeStream ([]kernel.BrowserTelemetryStreamResponse {event })
101+ }}
102+ b := BrowsersCmd {browsers : fakeBrowsers , telemetry : fakeTelemetry }
103+
104+ err := b .TelemetryStream (context .Background (), BrowsersTelemetryStreamInput {
105+ Identifier : "session123" ,
106+ Output : "json" ,
107+ Seq : - 1 ,
108+ })
109+
110+ assert .NoError (t , err )
30111}
31112
32113func makeEvent (t * testing.T , raw string ) kernel.BrowserTelemetryEventUnion {
0 commit comments