(t *testing.T)
| 1621 | } |
| 1622 | |
| 1623 | func 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")) |
nothing calls this directly
no test coverage detected
searching dependent graphs…