@@ -59,6 +59,16 @@ func (ts *testServer) GetOperations(
59
59
}, ts .err
60
60
}
61
61
62
+ func (ts * testServer ) FindTraces (
63
+ _ * storage.FindTracesRequest ,
64
+ s storage.TraceReader_FindTracesServer ,
65
+ ) error {
66
+ for _ , trace := range ts .traces {
67
+ s .Send (trace )
68
+ }
69
+ return ts .err
70
+ }
71
+
62
72
func (ts * testServer ) FindTraceIDs (
63
73
context.Context ,
64
74
* storage.FindTracesRequest ,
@@ -215,7 +225,7 @@ func TestTraceReader_GetTraces_GRPCClientError(t *testing.T) {
215
225
reader := NewTraceReader (conn )
216
226
getTracesIter := reader .GetTraces (context .Background (), tracestore.GetTraceParams {})
217
227
_ , err = jiter .FlattenWithErrors (getTracesIter )
218
- require .ErrorContains (t , err , "received error from grpc reader client " )
228
+ require .ErrorContains (t , err , "failed to execute GetTraces " )
219
229
}
220
230
221
231
func TestTraceReader_GetServices (t * testing.T ) {
@@ -237,7 +247,7 @@ func TestTraceReader_GetServices(t *testing.T) {
237
247
testServer : & testServer {
238
248
err : assert .AnError ,
239
249
},
240
- expectedError : "failed to get services " ,
250
+ expectedError : "failed to execute GetServices " ,
241
251
},
242
252
}
243
253
@@ -282,7 +292,7 @@ func TestTraceReader_GetOperations(t *testing.T) {
282
292
testServer : & testServer {
283
293
err : assert .AnError ,
284
294
},
285
- expectedError : "failed to get operations " ,
295
+ expectedError : "failed to execute GetOperations " ,
286
296
},
287
297
}
288
298
@@ -306,11 +316,121 @@ func TestTraceReader_GetOperations(t *testing.T) {
306
316
}
307
317
308
318
func TestTraceReader_FindTraces (t * testing.T ) {
309
- tr := & TraceReader {}
319
+ queryParams := tracestore.TraceQueryParams {
320
+ ServiceName : "service-a" ,
321
+ OperationName : "operation-a" ,
322
+ Attributes : pcommon .NewMap (),
323
+ }
324
+ tests := []struct {
325
+ name string
326
+ testServer * testServer
327
+ traces []* jptrace.TracesData
328
+ expectedTraces []ptrace.Traces
329
+ expectedError string
330
+ }{
331
+ {
332
+ name : "single trace" ,
333
+ testServer : & testServer {
334
+ traces : func () []* jptrace.TracesData {
335
+ trace := makeTestTrace ()
336
+ traces := []* jptrace.TracesData {(* jptrace .TracesData )(& trace )}
337
+ return traces
338
+ }(),
339
+ },
340
+ expectedTraces : []ptrace.Traces {makeTestTrace ()},
341
+ },
342
+ {
343
+ name : "multiple traces" ,
344
+ testServer : & testServer {
345
+ traces : func () []* jptrace.TracesData {
346
+ traceA := makeTestTrace ()
347
+ traceB := makeTestTrace ()
348
+ traces := []* jptrace.TracesData {
349
+ (* jptrace .TracesData )(& traceA ),
350
+ (* jptrace .TracesData )(& traceB ),
351
+ }
352
+ return traces
353
+ }(),
354
+ },
355
+ expectedTraces : []ptrace.Traces {makeTestTrace (), makeTestTrace ()},
356
+ },
357
+ {
358
+ name : "error" ,
359
+ testServer : & testServer {
360
+ traces : func () []* jptrace.TracesData {
361
+ trace := ptrace .NewTraces ()
362
+ traces := []* jptrace.TracesData {(* jptrace .TracesData )(& trace )}
363
+ return traces
364
+ }(),
365
+ err : assert .AnError ,
366
+ },
367
+ expectedError : "received error from grpc stream" ,
368
+ },
369
+ }
310
370
311
- require .Panics (t , func () {
312
- tr .FindTraces (context .Background (), tracestore.TraceQueryParams {})
371
+ for _ , test := range tests {
372
+ t .Run (test .name , func (t * testing.T ) {
373
+ conn := startTestServer (t , test .testServer )
374
+
375
+ reader := NewTraceReader (conn )
376
+ getTracesIter := reader .FindTraces (context .Background (), queryParams )
377
+ traces , err := jiter .FlattenWithErrors (getTracesIter )
378
+
379
+ if test .expectedError != "" {
380
+ require .ErrorContains (t , err , test .expectedError )
381
+ } else {
382
+ require .NoError (t , err )
383
+ require .Equal (t , test .expectedTraces , traces )
384
+ }
385
+ })
386
+ }
387
+ }
388
+
389
+ func TestTraceReader_FindTraces_YieldStopsIteration (t * testing.T ) {
390
+ queryParams := tracestore.TraceQueryParams {
391
+ ServiceName : "service-a" ,
392
+ OperationName : "operation-a" ,
393
+ Attributes : pcommon .NewMap (),
394
+ }
395
+ traceA := makeTestTrace ()
396
+ traceB := makeTestTrace ()
397
+ testServer := & testServer {
398
+ traces : []* jptrace.TracesData {
399
+ (* jptrace .TracesData )(& traceA ),
400
+ (* jptrace .TracesData )(& traceB ),
401
+ },
402
+ }
403
+
404
+ conn := startTestServer (t , testServer )
405
+ reader := NewTraceReader (conn )
406
+
407
+ getTracesIter := reader .FindTraces (context .Background (), queryParams )
408
+ var gotTraces []ptrace.Traces
409
+ getTracesIter (func (traces []ptrace.Traces , _ error ) bool {
410
+ gotTraces = append (gotTraces , traces ... )
411
+ return false
412
+ })
413
+
414
+ require .Len (t , gotTraces , 1 )
415
+ }
416
+
417
+ func TestTraceReader_FindTraces_GRPCClientError (t * testing.T ) {
418
+ queryParams := tracestore.TraceQueryParams {
419
+ ServiceName : "service-a" ,
420
+ OperationName : "operation-a" ,
421
+ Attributes : pcommon .NewMap (),
422
+ }
423
+ conn , err := grpc .NewClient (":0" ,
424
+ grpc .WithTransportCredentials (insecure .NewCredentials ()),
425
+ ) // create client without a started server
426
+ require .NoError (t , err )
427
+ t .Cleanup (func () {
428
+ conn .Close ()
313
429
})
430
+ reader := NewTraceReader (conn )
431
+ getTracesIter := reader .FindTraces (context .Background (), queryParams )
432
+ _ , err = jiter .FlattenWithErrors (getTracesIter )
433
+ require .ErrorContains (t , err , "failed to execute FindTraces" )
314
434
}
315
435
316
436
func TestTraceReader_FindTraceIDs (t * testing.T ) {
0 commit comments