mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-07-19 11:20:45 +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 (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"os"
|
"os"
|
||||||
|
"sync"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/ethereum/go-ethereum/ethdb"
|
"github.com/ethereum/go-ethereum/ethdb"
|
||||||
|
|
@ -105,3 +106,50 @@ func TestFreezerCleanup(t *testing.T) {
|
||||||
t.Fatal("Failed to cleanup leftover directory")
|
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