diff --git a/cmd/bbolt/main.go b/cmd/bbolt/main.go index 0dba9de..26a1313 100644 --- a/cmd/bbolt/main.go +++ b/cmd/bbolt/main.go @@ -202,7 +202,7 @@ func (cmd *CheckCommand) Run(args ...string) error { } // Open database. - db, err := bolt.Open(path, 0666, nil) + db, err := bolt.Open(path, 0666, &bolt.Options{ReadOnly: true}) if err != nil { return err } @@ -279,7 +279,7 @@ func (cmd *InfoCommand) Run(args ...string) error { } // Open the database. - db, err := bolt.Open(path, 0666, nil) + db, err := bolt.Open(path, 0666, &bolt.Options{ReadOnly: true}) if err != nil { return err } @@ -651,7 +651,7 @@ func (cmd *PagesCommand) Run(args ...string) error { } // Open database. - db, err := bolt.Open(path, 0666, nil) + db, err := bolt.Open(path, 0666, &bolt.Options{ReadOnly: true}) if err != nil { return err } @@ -745,7 +745,7 @@ func (cmd *StatsCommand) Run(args ...string) error { } // Open database. - db, err := bolt.Open(path, 0666, nil) + db, err := bolt.Open(path, 0666, &bolt.Options{ReadOnly: true}) if err != nil { return err } @@ -880,7 +880,7 @@ func (cmd *BucketsCommand) Run(args ...string) error { } // Open database. - db, err := bolt.Open(path, 0666, nil) + db, err := bolt.Open(path, 0666, &bolt.Options{ReadOnly: true}) if err != nil { return err } @@ -945,7 +945,7 @@ func (cmd *KeysCommand) Run(args ...string) error { } // Open database. - db, err := bolt.Open(path, 0666, nil) + db, err := bolt.Open(path, 0666, &bolt.Options{ReadOnly: true}) if err != nil { return err } @@ -1040,7 +1040,7 @@ func (cmd *GetCommand) Run(args ...string) error { } // Open database. - db, err := bolt.Open(path, 0666, nil) + db, err := bolt.Open(path, 0666, &bolt.Options{ReadOnly: true}) if err != nil { return err } diff --git a/cmd/bbolt/main_test.go b/cmd/bbolt/main_test.go index 4ea1a12..f656980 100644 --- a/cmd/bbolt/main_test.go +++ b/cmd/bbolt/main_test.go @@ -11,6 +11,7 @@ import ( "strconv" "testing" + "github.com/stretchr/testify/require" bolt "go.etcd.io/bbolt" main "go.etcd.io/bbolt/cmd/bbolt" ) @@ -21,6 +22,8 @@ func TestInfoCommand_Run(t *testing.T) { db.DB.Close() defer db.Close() + defer requireDBNoChange(t, dbData(t, db.Path), db.Path) + // Run the info command. m := NewMain() if err := m.Run("info", db.Path); err != nil { @@ -39,6 +42,8 @@ func TestStatsCommand_Run_EmptyDatabase(t *testing.T) { defer db.Close() db.DB.Close() + defer requireDBNoChange(t, dbData(t, db.Path), db.Path) + // Generate expected result. exp := "Aggregate statistics for 0 buckets\n\n" + "Page count statistics\n" + @@ -116,6 +121,8 @@ func TestStatsCommand_Run(t *testing.T) { } db.DB.Close() + defer requireDBNoChange(t, dbData(t, db.Path), db.Path) + // Generate expected result. exp := "Aggregate statistics for 3 buckets\n\n" + "Page count statistics\n" + @@ -163,6 +170,8 @@ func TestBucketsCommand_Run(t *testing.T) { } db.DB.Close() + defer requireDBNoChange(t, dbData(t, db.Path), db.Path) + expected := "bar\nbaz\nfoo\n" // Run the command. @@ -198,6 +207,8 @@ func TestKeysCommand_Run(t *testing.T) { } db.DB.Close() + defer requireDBNoChange(t, dbData(t, db.Path), db.Path) + expected := "foo-0\nfoo-1\nfoo-2\n" // Run the command. @@ -234,6 +245,8 @@ func TestGetCommand_Run(t *testing.T) { } db.DB.Close() + defer requireDBNoChange(t, dbData(t, db.Path), db.Path) + expected := "val-foo-1\n" // Run the command. @@ -420,7 +433,7 @@ func fillBucket(b *bolt.Bucket, prefix []byte) error { } func chkdb(path string) ([]byte, error) { - db, err := bolt.Open(path, 0666, nil) + db, err := bolt.Open(path, 0666, &bolt.Options{ReadOnly: true}) if err != nil { return nil, err } @@ -453,3 +466,17 @@ func walkBucket(parent *bolt.Bucket, k []byte, v []byte, w io.Writer) error { return walkBucket(parent, k, v, w) }) } + +func dbData(t *testing.T, filePath string) []byte { + data, err := os.ReadFile(filePath) + require.NoError(t, err) + return data +} + +func requireDBNoChange(t *testing.T, oldData []byte, filePath string) { + newData, err := os.ReadFile(filePath) + require.NoError(t, err) + + noChange := bytes.Equal(oldData, newData) + require.True(t, noChange) +}