mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-07-18 19:00:46 +00:00
core/rawdb: add test
This commit is contained in:
parent
da5f3919ed
commit
4755c96312
1 changed files with 48 additions and 0 deletions
|
|
@ -19,6 +19,7 @@ package rawdb
|
|||
import (
|
||||
"bytes"
|
||||
"os"
|
||||
"sync"
|
||||
"testing"
|
||||
|
||||
"github.com/ethereum/go-ethereum/ethdb"
|
||||
|
|
@ -105,3 +106,50 @@ func TestFreezerCleanup(t *testing.T) {
|
|||
t.Fatal("Failed to cleanup leftover directory")
|
||||
}
|
||||
}
|
||||
|
||||
func TestResettableFreezerWriteReadConcurrency(t *testing.T) {
|
||||
f, _ := newResettableFreezer(t.TempDir(), "", false, 2048, freezerTestTableDef)
|
||||
defer f.Close()
|
||||
|
||||
for i := uint64(0); i < 50; i++ {
|
||||
f.ModifyAncients(func(op ethdb.AncientWriteOp) error {
|
||||
return op.AppendRaw("test", i, bytes.Repeat([]byte{byte(i)}, 100))
|
||||
})
|
||||
}
|
||||
|
||||
var wg sync.WaitGroup
|
||||
errCh := make(chan error, 2)
|
||||
|
||||
wg.Add(1)
|
||||
go func() {
|
||||
defer wg.Done()
|
||||
for i := uint64(0); i < 100; i++ {
|
||||
_, err := f.ModifyAncients(func(op ethdb.AncientWriteOp) error {
|
||||
return op.AppendRaw("test", 50+i, bytes.Repeat([]byte{byte(i)}, 100))
|
||||
})
|
||||
if err != nil {
|
||||
errCh <- err
|
||||
return
|
||||
}
|
||||
}
|
||||
}()
|
||||
|
||||
wg.Add(1)
|
||||
go func() {
|
||||
defer wg.Done()
|
||||
for i := uint64(0); i < 1000; i++ {
|
||||
f.Ancient("test", i%50)
|
||||
f.Ancients()
|
||||
f.Tail()
|
||||
}
|
||||
}()
|
||||
|
||||
wg.Wait()
|
||||
close(errCh)
|
||||
|
||||
for err := range errCh {
|
||||
if err != nil {
|
||||
t.Fatalf("Concurrent write/read operation failed: %v", err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue