MCPcopy
hub / github.com/dgraph-io/badger / TestReadOnly

Function TestReadOnly

db_test.go:1623–1691  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

1621}
1622
1623func TestReadOnly(t *testing.T) {
1624 dir, err := ioutil.TempDir("", "badger-test")
1625 require.NoError(t, err)
1626 defer removeDir(dir)
1627 opts := getTestOptions(dir)
1628
1629 // Create the DB
1630 db, err := Open(opts)
1631 require.NoError(t, err)
1632 for i := 0; i < 10000; i++ {
1633 txnSet(t, db, []byte(fmt.Sprintf("key%d", i)), []byte(fmt.Sprintf("value%d", i)), 0x00)
1634 }
1635
1636 // Attempt a read-only open while it's open read-write.
1637 opts.ReadOnly = true
1638 _, err = Open(opts)
1639 require.Error(t, err)
1640 if err == ErrWindowsNotSupported {
1641 require.NoError(t, db.Close())
1642 return
1643 }
1644 require.Contains(t, err.Error(), "Another process is using this Badger database")
1645 db.Close()
1646
1647 // Open one read-only
1648 opts.ReadOnly = true
1649 kv1, err := Open(opts)
1650 require.NoError(t, err)
1651 defer kv1.Close()
1652
1653 // Open another read-only
1654 kv2, err := Open(opts)
1655 require.NoError(t, err)
1656 defer kv2.Close()
1657
1658 // Attempt a read-write open while it's open for read-only
1659 opts.ReadOnly = false
1660 _, err = Open(opts)
1661 require.Error(t, err)
1662 require.Contains(t, err.Error(), "Another process is using this Badger database")
1663
1664 // Get a thing from the DB
1665 txn1 := kv1.NewTransaction(true)
1666 v1, err := txn1.Get([]byte("key1"))
1667 require.NoError(t, err)
1668 b1, err := v1.ValueCopy(nil)
1669 require.NoError(t, err)
1670 require.Equal(t, b1, []byte("value1"))
1671 err = txn1.Commit()
1672 require.NoError(t, err)
1673
1674 // Get a thing from the DB via the other connection
1675 txn2 := kv2.NewTransaction(true)
1676 v2, err := txn2.Get([]byte("key2000"))
1677 require.NoError(t, err)
1678 b2, err := v2.ValueCopy(nil)
1679 require.NoError(t, err)
1680 require.Equal(t, b2, []byte("value2000"))

Callers

nothing calls this directly

Calls 12

removeDirFunction · 0.85
getTestOptionsFunction · 0.85
OpenFunction · 0.85
txnSetFunction · 0.85
NewEntryFunction · 0.85
NewTransactionMethod · 0.80
CommitMethod · 0.80
CloseMethod · 0.65
ErrorMethod · 0.45
GetMethod · 0.45
ValueCopyMethod · 0.45
SetEntryMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…