@@ -83,6 +83,45 @@ func TestBoltStore_Scan(t *testing.T) {
8383 assert .Equal (t , 100 , cnt )
8484}
8585
86+ func TestBoltStore_ScanKeys (t * testing.T ) {
87+ ctx := context .Background ()
88+ t .Parallel ()
89+ st := mustStore (NewBoltStore (t .TempDir () + "/bolt.db" ))
90+
91+ for i := 0 ; i < 999 ; i ++ {
92+ keyStr := "prefix " + strconv .Itoa (i ) + "foo"
93+ key := []byte (keyStr )
94+ b := make ([]byte , 8 )
95+ binary .PutVarint (b , int64 (i ))
96+ err := st .Put (ctx , key , b )
97+ assert .NoError (t , err )
98+ }
99+
100+ res , err := st .ScanKeys (ctx , []byte ("prefix" ), []byte ("z" ), 100 )
101+ assert .NoError (t , err )
102+ assert .Equal (t , 100 , len (res ))
103+
104+ sortedKeys := make ([][]byte , 999 )
105+
106+ for _ , k := range res {
107+ str := string (k )
108+ i , err := strconv .Atoi (str [7 : len (str )- 3 ])
109+ assert .NoError (t , err )
110+ sortedKeys [i ] = k
111+ }
112+
113+ cnt := 0
114+ for i , k := range sortedKeys {
115+ if k == nil {
116+ continue
117+ }
118+ cnt ++
119+ assert .Equal (t , []byte ("prefix " + strconv .Itoa (i )+ "foo" ), k )
120+ }
121+
122+ assert .Equal (t , 100 , cnt )
123+ }
124+
86125func TestBoltStore_Txn (t * testing.T ) {
87126 t .Parallel ()
88127 t .Run ("success" , func (t * testing.T ) {
0 commit comments