MCPcopy
hub / github.com/etcd-io/bbolt / TestTx_Check_ReadOnly

Function TestTx_Check_ReadOnly

tx_test.go:22–70  ·  view source on GitHub ↗

TestTx_Check_ReadOnly tests consistency checking on a ReadOnly database.

(t *testing.T)

Source from the content-addressed store, hash-verified

20
21// TestTx_Check_ReadOnly tests consistency checking on a ReadOnly database.
22func TestTx_Check_ReadOnly(t *testing.T) {
23 db := btesting.MustCreateDB(t)
24 if err := db.Update(func(tx *bolt.Tx) error {
25 b, err := tx.CreateBucket([]byte("widgets"))
26 if err != nil {
27 t.Fatal(err)
28 }
29 if err := b.Put([]byte("foo"), []byte("bar")); err != nil {
30 t.Fatal(err)
31 }
32 return nil
33 }); err != nil {
34 t.Fatal(err)
35 }
36 if err := db.Close(); err != nil {
37 t.Fatal(err)
38 }
39
40 readOnlyDB, err := bolt.Open(db.Path(), 0600, &bolt.Options{ReadOnly: true})
41 if err != nil {
42 t.Fatal(err)
43 }
44 defer readOnlyDB.Close()
45
46 tx, err := readOnlyDB.Begin(false)
47 if err != nil {
48 t.Fatal(err)
49 }
50 // ReadOnly DB will load freelist on Check call.
51 numChecks := 2
52 errc := make(chan error, numChecks)
53 check := func() {
54 errc <- <-tx.Check()
55 }
56 // Ensure the freelist is not reloaded and does not race.
57 for i := 0; i < numChecks; i++ {
58 go check()
59 }
60 for i := 0; i < numChecks; i++ {
61 if err := <-errc; err != nil {
62 t.Fatal(err)
63 }
64 }
65 // Close the view transaction
66 err = tx.Rollback()
67 if err != nil {
68 t.Fatal(err)
69 }
70}
71
72// Ensure that committing a closed transaction returns an error.
73func TestTx_Commit_ErrTxClosed(t *testing.T) {

Callers

nothing calls this directly

Calls 10

MustCreateDBFunction · 0.92
UpdateMethod · 0.80
BeginMethod · 0.80
CheckMethod · 0.80
FatalMethod · 0.65
RollbackMethod · 0.65
CreateBucketMethod · 0.45
PutMethod · 0.45
CloseMethod · 0.45
PathMethod · 0.45

Tested by

no test coverage detected