@@ -301,6 +301,66 @@ func TestTraceHubServiceImpl_ListAndSendSpans_GetTenantsError(t *testing.T) {
301301 require .ErrorIs (t , err , tenantErr )
302302}
303303
304+ func TestTraceHubServiceImpl_ListAndSendSpans_WithoutLastSpanPageToken (t * testing.T ) {
305+ ctrl := gomock .NewController (t )
306+ t .Cleanup (ctrl .Finish )
307+
308+ mockTaskRepo := repo_mocks .NewMockITaskRepo (ctrl )
309+ mockTraceRepo := trepo_mocks .NewMockITraceRepo (ctrl )
310+ mockTenant := tenant_mocks .NewMockITenantProvider (ctrl )
311+ mockBuilder := builder_mocks .NewMockTraceFilterProcessorBuilder (ctrl )
312+ filterMock := spanfilter_mocks .NewMockFilter (ctrl )
313+
314+ impl := & TraceHubServiceImpl {
315+ taskRepo : mockTaskRepo ,
316+ traceRepo : mockTraceRepo ,
317+ tenantProvider : mockTenant ,
318+ buildHelper : mockBuilder ,
319+ }
320+
321+ now := time .Now ()
322+ sub , proc := newBackfillSubscriber (mockTaskRepo , now )
323+ domainRun := newDomainBackfillTaskRun (now )
324+ span := newTestSpan (now )
325+
326+ mockBuilder .EXPECT ().BuildPlatformRelatedFilter (gomock .Any (), loop_span .PlatformType (common .PlatformTypeCozeBot )).
327+ Return (filterMock , nil )
328+ filterMock .EXPECT ().BuildBasicSpanFilter (gomock .Any (), gomock .Any ()).Return ([]* loop_span.FilterField {}, true , nil )
329+ filterMock .EXPECT ().BuildRootSpanFilter (gomock .Any (), gomock .Any ()).Return ([]* loop_span.FilterField {}, nil )
330+ mockBuilder .EXPECT ().BuildGetTraceProcessors (gomock .Any (), gomock .Any ()).Return ([]span_processor.Processor (nil ), nil ).Times (2 )
331+ mockTenant .EXPECT ().GetTenantsByPlatformType (gomock .Any (), loop_span .PlatformType (common .PlatformTypeCozeBot )).Return ([]string {"tenant" }, nil )
332+
333+ mockTraceRepo .EXPECT ().ListSpans (gomock .Any (), gomock .Any ()).DoAndReturn (func (_ context.Context , param * repo.ListSpansParam ) (* repo.ListSpansResult , error ) {
334+ switch param .PageToken {
335+ case "" :
336+ return & repo.ListSpansResult {
337+ Spans : loop_span.SpanList {span },
338+ PageToken : "next" ,
339+ HasMore : true ,
340+ }, nil
341+ case "next" :
342+ return & repo.ListSpansResult {
343+ Spans : loop_span.SpanList {span },
344+ PageToken : "" ,
345+ HasMore : false ,
346+ }, nil
347+ default :
348+ return nil , errors .New ("invalid token" )
349+ }
350+ }).Times (2 )
351+
352+ mockTaskRepo .EXPECT ().GetTaskCount (gomock .Any (), int64 (1 )).Return (int64 (0 ), nil ).Times (2 )
353+ mockTaskRepo .EXPECT ().GetBackfillTaskRun (gomock .Any (), gomock .Nil (), int64 (1 )).Return (domainRun , nil ).Times (2 )
354+ mockTaskRepo .EXPECT ().UpdateTaskRunWithOCC (gomock .Any (), sub .tr .ID , sub .tr .WorkspaceID , gomock .AssignableToTypeOf (map [string ]interface {}{})).Return (nil ).Times (2 )
355+
356+ err := impl .listAndSendSpans (context .Background (), sub )
357+ require .NoError (t , err )
358+ require .True (t , proc .invokeCalled )
359+ require .NotNil (t , sub .tr .BackfillDetail )
360+ require .NotNil (t , sub .tr .BackfillDetail .LastSpanPageToken )
361+ require .Equal (t , "next" , sub .tr .BackfillDetail .LastSpanPageToken )
362+ }
363+
304364func TestTraceHubServiceImpl_ListAndSendSpans_Success (t * testing.T ) {
305365 ctrl := gomock .NewController (t )
306366 t .Cleanup (ctrl .Finish )
@@ -320,7 +380,7 @@ func TestTraceHubServiceImpl_ListAndSendSpans_Success(t *testing.T) {
320380
321381 now := time .Now ()
322382 sub , proc := newBackfillSubscriber (mockTaskRepo , now )
323- sub .tr .BackfillDetail = & entity.BackfillDetail {LastSpanPageToken : ptr . Of ( "prev" ) }
383+ sub .tr .BackfillDetail = & entity.BackfillDetail {LastSpanPageToken : "prev" }
324384 domainRun := newDomainBackfillTaskRun (now )
325385 span := newTestSpan (now )
326386
@@ -350,7 +410,7 @@ func TestTraceHubServiceImpl_ListAndSendSpans_Success(t *testing.T) {
350410 require .True (t , proc .invokeCalled )
351411 require .NotNil (t , sub .tr .BackfillDetail )
352412 require .NotNil (t , sub .tr .BackfillDetail .LastSpanPageToken )
353- require .Equal (t , "prev" , ptr . From ( sub .tr .BackfillDetail .LastSpanPageToken ) )
413+ require .Equal (t , "prev" , sub .tr .BackfillDetail .LastSpanPageToken )
354414}
355415
356416func TestTraceHubServiceImpl_ListAndSendSpans_ListError (t * testing.T ) {
0 commit comments