@@ -89,7 +89,7 @@ func testGeneratorWriter(
89
89
func testGenerator (t * testing.T , reset func (), gen func () (string , bool )) {
90
90
t .Run ("Writer" , func (t * testing.T ) {
91
91
testGeneratorWriter (t , reset , gen , func (w io.Writer ) recordWriter {
92
- return NewWriter (w )
92
+ return NewWriter (w , 0 , false )
93
93
})
94
94
})
95
95
@@ -175,7 +175,7 @@ func TestBoundary(t *testing.T) {
175
175
176
176
func TestFlush (t * testing.T ) {
177
177
buf := new (bytes.Buffer )
178
- w := NewWriter (buf )
178
+ w := NewWriter (buf , 0 , false )
179
179
// Write a couple of records. Everything should still be held
180
180
// in the record.Writer buffer, so that buf.Len should be 0.
181
181
w0 , _ := w .Next ()
@@ -240,7 +240,7 @@ func TestNonExhaustiveRead(t *testing.T) {
240
240
p := make ([]byte , 10 )
241
241
rnd := rand .New (rand .NewPCG (0 , 1 ))
242
242
243
- w := NewWriter (buf )
243
+ w := NewWriter (buf , 0 , false )
244
244
for i := 0 ; i < n ; i ++ {
245
245
length := len (p ) + rnd .IntN (3 * blockSize )
246
246
s := string (uint8 (i )) + "123456789abcdefgh"
@@ -267,7 +267,7 @@ func TestNonExhaustiveRead(t *testing.T) {
267
267
func TestStaleReader (t * testing.T ) {
268
268
buf := new (bytes.Buffer )
269
269
270
- w := NewWriter (buf )
270
+ w := NewWriter (buf , 0 , false )
271
271
_ , err := w .WriteRecord ([]byte ("0" ))
272
272
require .NoError (t , err )
273
273
@@ -313,7 +313,7 @@ func makeTestRecords(recordLengths ...int) (*testRecords, error) {
313
313
}
314
314
315
315
buf := new (bytes.Buffer )
316
- w := NewWriter (buf )
316
+ w := NewWriter (buf , base . DiskFileNum ( 0 ), false )
317
317
for i , rec := range ret .records {
318
318
wRec , err := w .Next ()
319
319
if err != nil {
@@ -616,7 +616,7 @@ func TestLastRecordOffset(t *testing.T) {
616
616
617
617
func TestNoLastRecordOffset (t * testing.T ) {
618
618
buf := new (bytes.Buffer )
619
- w := NewWriter (buf )
619
+ w := NewWriter (buf , 0 , false )
620
620
defer w .Close ()
621
621
622
622
if _ , err := w .LastRecordOffset (); err != ErrNoLastRecord {
@@ -682,7 +682,7 @@ func TestInvalidLogNum(t *testing.T) {
682
682
func TestSize (t * testing.T ) {
683
683
var buf bytes.Buffer
684
684
zeroes := make ([]byte , 8 << 10 )
685
- w := NewWriter (& buf )
685
+ w := NewWriter (& buf , 0 , false )
686
686
for i := 0 ; i < 100 ; i ++ {
687
687
n := rand .IntN (len (zeroes ))
688
688
_ , err := w .WriteRecord (zeroes [:n ])
@@ -1099,6 +1099,41 @@ func describeWALSyncBlocks(
1099
1099
f .ToTreePrinter (n )
1100
1100
}
1101
1101
1102
+ func TestManifestSyncOffset (t * testing.T ) {
1103
+ buf := new (bytes.Buffer )
1104
+ w := NewWriter (buf , 0 , true )
1105
+ w .WriteRecord (bytes .Repeat ([]byte {1 }, blockSize - walSyncHeaderSize ))
1106
+ w .WriteRecord (bytes .Repeat ([]byte {2 }, blockSize - walSyncHeaderSize ))
1107
+
1108
+ raw := buf .Bytes ()
1109
+ r := NewReader (bytes .NewReader (raw ), 0 )
1110
+ r .loggerForTesting = & readerLogger {}
1111
+ for {
1112
+ _ , err := r .Next ()
1113
+ if err != nil {
1114
+ require .True (t , errors .Is (err , io .EOF ))
1115
+ require .True (t , r .loggerForTesting .(* readerLogger ).getLog () == "" )
1116
+ break
1117
+ }
1118
+ }
1119
+
1120
+ // Check that corrupting a chunk should result in us reading ahead and returning
1121
+ // an ErrInvalidChunk.
1122
+ raw [0 ] ^= 0xFF
1123
+ r = NewReader (bytes .NewReader (raw ), 0 )
1124
+ r .loggerForTesting = & readerLogger {}
1125
+ for {
1126
+ _ , err := r .Next ()
1127
+ if err != nil {
1128
+ require .True (t , errors .Is (err , ErrInvalidChunk ))
1129
+ logStr := r .loggerForTesting .(* readerLogger ).getLog ()
1130
+ require .True (t , logStr != "" )
1131
+ println (logStr )
1132
+ break
1133
+ }
1134
+ }
1135
+ }
1136
+
1102
1137
func BenchmarkRecordWrite (b * testing.B ) {
1103
1138
for _ , size := range []int {8 , 16 , 32 , 64 , 256 , 1028 , 4096 , 65_536 } {
1104
1139
b .Run (fmt .Sprintf ("size=%d" , size ), func (b * testing.B ) {
0 commit comments