@ -1,6 +1,7 @@
package bloomgateway
import (
"math"
"testing"
"time"
@ -8,6 +9,7 @@ import (
"github.com/stretchr/testify/require"
"github.com/grafana/loki/pkg/logproto"
"github.com/grafana/loki/pkg/logql/syntax"
v1 "github.com/grafana/loki/pkg/storage/bloom/v1"
)
@ -32,7 +34,6 @@ func TestTask(t *testing.T) {
from , through := task . Bounds ( )
require . Equal ( t , ts . Add ( - 1 * time . Hour ) , from )
require . Equal ( t , ts , through )
require . Equal ( t , truncateDay ( ts ) , task . day )
} )
}
@ -50,14 +51,18 @@ func createTasksForRequests(t *testing.T, tenant string, requests ...*logproto.F
return tasks
}
func TestTaskMerge Iterator ( t * testing . T ) {
func TestTask_Request Iterator ( t * testing . T ) {
ts := mktime ( "2024-01-24 12:00" )
day := truncateDay ( ts )
tenant := "fake"
tokenizer := v1 . NewNGramTokenizer ( 4 , 0 )
t . Run ( "empty requests result in empty iterator" , func ( t * testing . T ) {
it := newTaskMergeIterator ( day , tokenizer )
t . Run ( "empty request yields empty iterator" , func ( t * testing . T ) {
swb := seriesWithBounds {
bounds : model . Interval { Start : 0 , End : math . MaxInt64 } ,
series : [ ] * logproto . GroupedChunkRefs { } ,
}
task , _ := NewTask ( tenant , swb , [ ] syntax . LineFilter { } )
it := task . RequestIter ( tokenizer )
// nothing to iterate over
require . False ( t , it . Next ( ) )
} )
@ -97,7 +102,14 @@ func TestTaskMergeIterator(t *testing.T) {
}
tasks := createTasksForRequests ( t , tenant , r1 , r2 , r3 )
it := newTaskMergeIterator ( day , tokenizer , tasks ... )
iters := make ( [ ] v1 . PeekingIterator [ v1 . Request ] , 0 , len ( tasks ) )
for _ , task := range tasks {
iters = append ( iters , v1 . NewPeekingIter ( task . RequestIter ( tokenizer ) ) )
}
// merge the request iterators using the heap sort iterator
it := v1 . NewHeapIterator [ v1 . Request ] ( func ( r1 , r2 v1 . Request ) bool { return r1 . Fp < r2 . Fp } , iters ... )
// first item
require . True ( t , it . Next ( ) )