@@ -36,7 +36,7 @@ func captureStdout(t *testing.T, fn func()) string {
3636
3737type FakeBrowserTelemetryService struct {
3838 StreamFunc func () * ssestream.Stream [kernel.BrowserTelemetryStreamResponse ]
39- EventsFunc func (id string , query kernel.BrowserTelemetryEventsParams ) (* pagination.OffsetPagination [kernel.BrowserTelemetryEventsResponse ], error )
39+ EventsFunc func (id string , query kernel.BrowserTelemetryEventsParams , opts ... option. RequestOption ) (* pagination.OffsetPagination [kernel.BrowserTelemetryEventsResponse ], error )
4040 EventsAutoPagingFunc func () * pagination.OffsetPaginationAutoPager [kernel.BrowserTelemetryEventsResponse ]
4141}
4242
@@ -49,7 +49,7 @@ func (f *FakeBrowserTelemetryService) StreamStreaming(ctx context.Context, id st
4949
5050func (f * FakeBrowserTelemetryService ) Events (ctx context.Context , id string , query kernel.BrowserTelemetryEventsParams , opts ... option.RequestOption ) (* pagination.OffsetPagination [kernel.BrowserTelemetryEventsResponse ], error ) {
5151 if f .EventsFunc != nil {
52- return f .EventsFunc (id , query )
52+ return f .EventsFunc (id , query , opts ... )
5353 }
5454 return & pagination.OffsetPagination [kernel.BrowserTelemetryEventsResponse ]{}, nil
5555}
@@ -108,8 +108,9 @@ func TestTelemetryEvents_SinglePageTextAndParams(t *testing.T) {
108108 }}
109109 var gotID string
110110 var gotQuery kernel.BrowserTelemetryEventsParams
111- fakeTelemetry := & FakeBrowserTelemetryService {EventsFunc : func (id string , query kernel.BrowserTelemetryEventsParams ) (* pagination.OffsetPagination [kernel.BrowserTelemetryEventsResponse ], error ) {
112- gotID , gotQuery = id , query
111+ var gotOpts []option.RequestOption
112+ fakeTelemetry := & FakeBrowserTelemetryService {EventsFunc : func (id string , query kernel.BrowserTelemetryEventsParams , opts ... option.RequestOption ) (* pagination.OffsetPagination [kernel.BrowserTelemetryEventsResponse ], error ) {
113+ gotID , gotQuery , gotOpts = id , query , opts
113114 return telemetryEventsPage (t ,
114115 `{"event":{"type":"network_response","category":"network","ts":1000000},"seq":7}` ,
115116 `{"event":{"type":"network_request","category":"network","ts":2000000},"seq":8}` ,
@@ -122,15 +123,17 @@ func TestTelemetryEvents_SinglePageTextAndParams(t *testing.T) {
122123 Limit : 5 ,
123124 Since : "5m" ,
124125 Until : "2020-01-01T00:00:00Z" ,
125- Categories : []string {"network" },
126+ Categories : []string {"console" , " network" },
126127 })
127128
128129 assert .NoError (t , err )
129130 assert .Equal (t , "session123" , gotID )
130131 assert .Equal (t , int64 (5 ), gotQuery .Limit .Value )
131132 assert .Equal (t , "5m" , gotQuery .Since .Value )
132133 assert .Equal (t , "2020-01-01T00:00:00Z" , gotQuery .Until .Value )
133- assert .Equal (t , []string {"network" }, gotQuery .Category )
134+ // Categories go out as repeated query params, not the comma-joined typed field.
135+ assert .Empty (t , gotQuery .Category )
136+ assert .Len (t , gotOpts , 2 )
134137 out := outBuf .String ()
135138 assert .Contains (t , out , "network_response" )
136139 assert .Contains (t , out , "network_request" )
@@ -142,7 +145,7 @@ func TestTelemetryEvents_SinglePageJSON(t *testing.T) {
142145 fakeBrowsers := & FakeBrowsersService {GetFunc : func (ctx context.Context , id string , query kernel.BrowserGetParams , opts ... option.RequestOption ) (* kernel.BrowserGetResponse , error ) {
143146 return & kernel.BrowserGetResponse {SessionID : id }, nil
144147 }}
145- fakeTelemetry := & FakeBrowserTelemetryService {EventsFunc : func (id string , query kernel.BrowserTelemetryEventsParams ) (* pagination.OffsetPagination [kernel.BrowserTelemetryEventsResponse ], error ) {
148+ fakeTelemetry := & FakeBrowserTelemetryService {EventsFunc : func (id string , query kernel.BrowserTelemetryEventsParams , opts ... option. RequestOption ) (* pagination.OffsetPagination [kernel.BrowserTelemetryEventsResponse ], error ) {
146149 return telemetryEventsPage (t , `{"event":{"type":"network_response","ts":1000000},"seq":1}` ), nil
147150 }}
148151 b := BrowsersCmd {browsers : fakeBrowsers , telemetry : fakeTelemetry }
@@ -156,15 +159,58 @@ func TestTelemetryEvents_SinglePageJSON(t *testing.T) {
156159 assert .Contains (t , out , "network_response" )
157160}
158161
159- func TestTelemetryEvents_GetErrorSurfaces (t * testing.T ) {
162+ func TestTelemetryEvents_InvalidLimitErrors (t * testing.T ) {
163+ b := BrowsersCmd {browsers : & FakeBrowsersService {}, telemetry : & FakeBrowserTelemetryService {}}
164+
165+ for _ , lim := range []int64 {- 1 , 101 } {
166+ err := b .TelemetryEvents (context .Background (), BrowsersTelemetryEventsInput {Identifier : "session123" , Limit : lim })
167+ assert .Error (t , err )
168+ assert .Contains (t , err .Error (), "invalid --limit value" )
169+ }
170+ }
171+
172+ func TestTelemetryEvents_TypesFilterDropsNonMatching (t * testing.T ) {
173+ setupStdoutCapture (t )
160174 fakeBrowsers := & FakeBrowsersService {GetFunc : func (ctx context.Context , id string , query kernel.BrowserGetParams , opts ... option.RequestOption ) (* kernel.BrowserGetResponse , error ) {
161- return nil , fmt . Errorf ( "boom" )
175+ return & kernel. BrowserGetResponse { SessionID : id }, nil
162176 }}
163- b := BrowsersCmd {browsers : fakeBrowsers , telemetry : & FakeBrowserTelemetryService {}}
177+ fakeTelemetry := & FakeBrowserTelemetryService {EventsFunc : func (id string , query kernel.BrowserTelemetryEventsParams , opts ... option.RequestOption ) (* pagination.OffsetPagination [kernel.BrowserTelemetryEventsResponse ], error ) {
178+ return telemetryEventsPage (t ,
179+ `{"event":{"type":"network_request","category":"network","ts":1000000},"seq":1}` ,
180+ `{"event":{"type":"network_response","category":"network","ts":2000000},"seq":2}` ,
181+ ), nil
182+ }}
183+ b := BrowsersCmd {browsers : fakeBrowsers , telemetry : fakeTelemetry }
164184
165- err := b .TelemetryEvents (context .Background (), BrowsersTelemetryEventsInput {Identifier : "session123" })
185+ err := b .TelemetryEvents (context .Background (), BrowsersTelemetryEventsInput {
186+ Identifier : "session123" ,
187+ Types : []string {"network_response" },
188+ })
166189
167- assert .Error (t , err )
190+ assert .NoError (t , err )
191+ assert .Contains (t , outBuf .String (), "network_response" )
192+ assert .NotContains (t , outBuf .String (), "network_request" )
193+ }
194+
195+ func TestTelemetryEvents_FallsBackToIdentifierWhenGetFails (t * testing.T ) {
196+ setupStdoutCapture (t )
197+ // Get 404s (e.g. an ended session); the events archive is still readable, so the
198+ // command falls back to the identifier as the session id rather than failing.
199+ fakeBrowsers := & FakeBrowsersService {GetFunc : func (ctx context.Context , id string , query kernel.BrowserGetParams , opts ... option.RequestOption ) (* kernel.BrowserGetResponse , error ) {
200+ return nil , fmt .Errorf ("not found" )
201+ }}
202+ var gotID string
203+ fakeTelemetry := & FakeBrowserTelemetryService {EventsFunc : func (id string , query kernel.BrowserTelemetryEventsParams , opts ... option.RequestOption ) (* pagination.OffsetPagination [kernel.BrowserTelemetryEventsResponse ], error ) {
204+ gotID = id
205+ return telemetryEventsPage (t , `{"event":{"type":"cdp_disconnect","category":"connection","ts":1000000},"seq":1}` ), nil
206+ }}
207+ b := BrowsersCmd {browsers : fakeBrowsers , telemetry : fakeTelemetry }
208+
209+ err := b .TelemetryEvents (context .Background (), BrowsersTelemetryEventsInput {Identifier : "ended-session-id" })
210+
211+ assert .NoError (t , err )
212+ assert .Equal (t , "ended-session-id" , gotID )
213+ assert .Contains (t , outBuf .String (), "cdp_disconnect" )
168214}
169215
170216func TestTelemetryStream_NilTelemetryErrors (t * testing.T ) {
0 commit comments