mirror of
https://github.com/etcd-io/bbolt.git
synced 2025-05-31 11:42:30 +00:00
test: add test cases to similate mlock failure
Signed-off-by: Benjamin Wang <wachao@vmware.com>
This commit is contained in:
parent
c00862aa7c
commit
d8ac759d4f
@ -1,6 +1,8 @@
|
|||||||
package failpoint
|
package failpoint
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
|
"go.etcd.io/bbolt/internal/btesting"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
@ -46,3 +48,49 @@ func TestFailpoint_UnmapFail_DbClose(t *testing.T) {
|
|||||||
err = db.Close()
|
err = db.Close()
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestFailpoint_mLockFail(t *testing.T) {
|
||||||
|
err := gofail.Enable("mlockError", `return("mlock somehow failed")`)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
f := filepath.Join(t.TempDir(), "db")
|
||||||
|
_, err = bolt.Open(f, 0666, &bolt.Options{Mlock: true})
|
||||||
|
require.Error(t, err)
|
||||||
|
require.ErrorContains(t, err, "mlock somehow failed")
|
||||||
|
|
||||||
|
// It should work after disabling the failpoint.
|
||||||
|
err = gofail.Disable("mlockError")
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
_, err = bolt.Open(f, 0666, &bolt.Options{Mlock: true})
|
||||||
|
require.NoError(t, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestFailpoint_mLockFail_When_remap(t *testing.T) {
|
||||||
|
db := btesting.MustCreateDB(t)
|
||||||
|
db.Mlock = true
|
||||||
|
|
||||||
|
err := gofail.Enable("mlockError", `return("mlock somehow failed in allocate")`)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
err = db.Fill([]byte("data"), 1, 10000,
|
||||||
|
func(tx int, k int) []byte { return []byte(fmt.Sprintf("%04d", k)) },
|
||||||
|
func(tx int, k int) []byte { return make([]byte, 100) },
|
||||||
|
)
|
||||||
|
|
||||||
|
require.Error(t, err)
|
||||||
|
require.ErrorContains(t, err, "mlock somehow failed in allocate")
|
||||||
|
|
||||||
|
// It should work after disabling the failpoint.
|
||||||
|
err = gofail.Disable("mlockError")
|
||||||
|
require.NoError(t, err)
|
||||||
|
db.MustClose()
|
||||||
|
db.MustReopen()
|
||||||
|
|
||||||
|
err = db.Fill([]byte("data"), 1, 10000,
|
||||||
|
func(tx int, k int) []byte { return []byte(fmt.Sprintf("%04d", k)) },
|
||||||
|
func(tx int, k int) []byte { return make([]byte, 100) },
|
||||||
|
)
|
||||||
|
|
||||||
|
require.NoError(t, err)
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user