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) }