diff --git a/db_whitebox_test.go b/db_whitebox_test.go new file mode 100644 index 0000000..6769023 --- /dev/null +++ b/db_whitebox_test.go @@ -0,0 +1,68 @@ +package bbolt + +import ( + "path/filepath" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func TestOpenWithPreLoadFreelist(t *testing.T) { + testCases := []struct { + name string + readonly bool + preLoadFreePage bool + expectedFreePagesLoaded bool + }{ + { + name: "write mode always load free pages", + readonly: false, + preLoadFreePage: false, + expectedFreePagesLoaded: true, + }, + { + name: "readonly mode load free pages when flag set", + readonly: true, + preLoadFreePage: true, + expectedFreePagesLoaded: true, + }, + { + name: "readonly mode doesn't load free pages when flag not set", + readonly: true, + preLoadFreePage: false, + expectedFreePagesLoaded: false, + }, + } + + fileName, err := prepareData(t) + require.NoError(t, err) + + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + db, err := Open(fileName, 0666, &Options{ + ReadOnly: tc.readonly, + PreLoadFreelist: tc.preLoadFreePage, + }) + require.NoError(t, err) + + assert.Equal(t, tc.expectedFreePagesLoaded, db.freelist != nil) + + assert.NoError(t, db.Close()) + }) + } +} + +func prepareData(t *testing.T) (string, error) { + fileName := filepath.Join(t.TempDir(), "db") + db, err := Open(fileName, 0666, nil) + if err != nil { + return "", err + } + if err := db.Close(); err != nil { + return "", err + } + + return fileName, nil + +}