ceremonyclient/pebble/objstorage/objstorageprovider/readahead_test.go

60 lines
1.5 KiB
Go
Raw Permalink Normal View History

2024-01-03 07:31:42 +00:00
// Copyright 2023 The LevelDB-Go and Pebble Authors. All rights reserved. Use
// of this source code is governed by a BSD-style license that can be found in
// the LICENSE file.
package objstorageprovider
import (
"fmt"
"strconv"
"strings"
"testing"
"github.com/cockroachdb/datadriven"
"github.com/stretchr/testify/require"
)
func TestMaybeReadahead(t *testing.T) {
rs := makeReadaheadState(256 * 1024)
datadriven.RunTest(t, "testdata/readahead", func(t *testing.T, d *datadriven.TestData) string {
cacheHit := false
switch d.Cmd {
case "reset":
rs.size = initialReadaheadSize
rs.limit = 0
rs.numReads = 0
return ""
case "cache-read":
cacheHit = true
fallthrough
case "read":
args := strings.Split(d.Input, ",")
if len(args) != 2 {
return "expected 2 args: offset, size"
}
offset, err := strconv.ParseInt(strings.TrimSpace(args[0]), 10, 64)
require.NoError(t, err)
size, err := strconv.ParseInt(strings.TrimSpace(args[1]), 10, 64)
require.NoError(t, err)
var raSize int64
if cacheHit {
rs.recordCacheHit(offset, size)
} else {
raSize = rs.maybeReadahead(offset, size)
}
var buf strings.Builder
fmt.Fprintf(&buf, "readahead: %d\n", raSize)
fmt.Fprintf(&buf, "numReads: %d\n", rs.numReads)
fmt.Fprintf(&buf, "size: %d\n", rs.size)
fmt.Fprintf(&buf, "prevSize: %d\n", rs.prevSize)
fmt.Fprintf(&buf, "limit: %d", rs.limit)
return buf.String()
default:
return fmt.Sprintf("unknown command: %s", d.Cmd)
}
})
}