2021-12-24 01:17:32 +00:00
|
|
|
package page_writer
|
|
|
|
|
|
|
|
import (
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
|
|
"os"
|
|
|
|
"testing"
|
|
|
|
)
|
|
|
|
|
|
|
|
func TestChunkedFileWriter_toActualOffset(t *testing.T) {
|
|
|
|
cw := NewChunkedFileWriter("", 16)
|
|
|
|
|
|
|
|
writeToFile(cw, 50, 60)
|
|
|
|
writeToFile(cw, 60, 64)
|
|
|
|
|
|
|
|
writeToFile(cw, 32, 40)
|
|
|
|
writeToFile(cw, 42, 48)
|
|
|
|
|
|
|
|
writeToFile(cw, 48, 50)
|
|
|
|
|
|
|
|
assert.Equal(t, 1, cw.chunkUsages[0].size(), "fully covered")
|
|
|
|
assert.Equal(t, 2, cw.chunkUsages[1].size(), "2 intervals")
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
func writeToFile(cw *ChunkedFileWriter, startOffset int64, stopOffset int64) {
|
|
|
|
|
|
|
|
_, chunkUsage := cw.toActualWriteOffset(startOffset)
|
|
|
|
|
|
|
|
// skip doing actual writing
|
|
|
|
|
|
|
|
innerOffset := startOffset % cw.ChunkSize
|
|
|
|
chunkUsage.MarkWritten(innerOffset, innerOffset+stopOffset-startOffset)
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestWriteChunkedFile(t *testing.T) {
|
|
|
|
x := NewChunkedFileWriter(os.TempDir(), 20)
|
2021-12-25 06:38:22 +00:00
|
|
|
defer x.Reset()
|
2021-12-24 01:17:32 +00:00
|
|
|
y := NewChunkedFileWriter(os.TempDir(), 12)
|
2021-12-25 06:38:22 +00:00
|
|
|
defer y.Reset()
|
2021-12-24 01:17:32 +00:00
|
|
|
|
|
|
|
batchSize := 4
|
|
|
|
buf := make([]byte, batchSize)
|
|
|
|
for i := 0; i < 256; i++ {
|
|
|
|
for x := 0; x < batchSize; x++ {
|
|
|
|
buf[x] = byte(i)
|
|
|
|
}
|
|
|
|
x.WriteAt(buf, int64(i*batchSize))
|
|
|
|
y.WriteAt(buf, int64((255-i)*batchSize))
|
|
|
|
}
|
|
|
|
|
|
|
|
a := make([]byte, 1)
|
|
|
|
b := make([]byte, 1)
|
|
|
|
for i := 0; i < 256*batchSize; i++ {
|
|
|
|
x.ReadDataAt(a, int64(i))
|
|
|
|
y.ReadDataAt(b, int64(256*batchSize-1-i))
|
|
|
|
assert.Equal(t, a[0], b[0], "same read")
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|