feat: add scroll / iteration helpers
This commit is contained in:
parent
7d1910919c
commit
6eb7e62a0c
6 changed files with 196 additions and 11 deletions
84
pager_test.go
Normal file
84
pager_test.go
Normal file
|
@ -0,0 +1,84 @@
|
|||
package k2v_test
|
||||
|
||||
import (
|
||||
k2v "code.notaphish.fyi/milas/garage-k2v-go"
|
||||
"context"
|
||||
"fmt"
|
||||
"github.com/stretchr/testify/require"
|
||||
"strconv"
|
||||
"strings"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestScrollIndex(t *testing.T) {
|
||||
t.Parallel()
|
||||
f, ctx := newFixture(t)
|
||||
|
||||
pkPrefix := randomPk()
|
||||
for i := range 5 {
|
||||
require.NoError(t, f.cli.InsertItem(ctx, f.bucket, pkPrefix+"-"+strconv.Itoa(i), randomSk(), "", []byte("hello"+strconv.Itoa(i))))
|
||||
}
|
||||
|
||||
var responses []*k2v.ReadIndexResponse
|
||||
err := k2v.ScrollIndex(ctx, f.cli, f.bucket, k2v.ReadIndexQuery{Prefix: pkPrefix, Limit: 1}, func(resp *k2v.ReadIndexResponse) error {
|
||||
responses = append(responses, resp)
|
||||
return nil
|
||||
})
|
||||
require.NoError(t, err)
|
||||
require.Len(t, responses, 5)
|
||||
}
|
||||
|
||||
func ExampleScrollIndex() {
|
||||
ctx := context.Background()
|
||||
client := k2v.NewClient(k2v.EndpointFromEnv(), k2v.KeyFromEnv())
|
||||
defer client.Close()
|
||||
const bucket = "k2v-test"
|
||||
|
||||
pkPrefix := randomPk()
|
||||
for i := range 5 {
|
||||
_ = client.InsertItem(ctx, bucket, pkPrefix+"-"+strconv.Itoa(i), randomSk(), "", []byte("hello"))
|
||||
}
|
||||
|
||||
var responses []*k2v.ReadIndexResponse
|
||||
_ = k2v.ScrollIndex(ctx, client, bucket, k2v.ReadIndexQuery{Prefix: pkPrefix, Limit: 25}, func(resp *k2v.ReadIndexResponse) error {
|
||||
responses = append(responses, resp)
|
||||
return nil
|
||||
})
|
||||
fmt.Println(len(responses[0].PartitionKeys))
|
||||
// Output:
|
||||
// 5
|
||||
}
|
||||
|
||||
func TestScrollItems(t *testing.T) {
|
||||
t.Parallel()
|
||||
f, ctx := newFixture(t)
|
||||
|
||||
pk1 := randomKey("pk1")
|
||||
sk1 := randomKey("sk1")
|
||||
require.NoError(t, f.cli.InsertItem(ctx, f.bucket, pk1, sk1, "", []byte(strings.Join([]string{"hello", pk1, sk1}, "-"))))
|
||||
|
||||
pk2 := randomKey("pk2")
|
||||
for i := range 5 {
|
||||
skN := randomKey(fmt.Sprintf("sk%d", i+2))
|
||||
require.NoError(t, f.cli.InsertItem(ctx, f.bucket, pk2, skN, "", []byte(strings.Join([]string{"hello", pk2, skN, strconv.Itoa(i)}, "-"))))
|
||||
}
|
||||
|
||||
q := []k2v.BatchSearch{
|
||||
{
|
||||
PartitionKey: pk1,
|
||||
},
|
||||
{
|
||||
PartitionKey: pk2,
|
||||
Limit: 1,
|
||||
},
|
||||
}
|
||||
|
||||
var results []*k2v.BatchSearchResult
|
||||
err := k2v.ScrollBatchSearch(ctx, f.cli, f.bucket, q, func(result *k2v.BatchSearchResult) error {
|
||||
results = append(results, result)
|
||||
return nil
|
||||
})
|
||||
require.NoError(t, err)
|
||||
require.NotEmpty(t, results)
|
||||
require.Len(t, results, 6)
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue