You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

85 lines
2.0 KiB

7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
  1. package db
  2. import (
  3. "fmt"
  4. "os"
  5. "path"
  6. "testing"
  7. "github.com/stretchr/testify/assert"
  8. "github.com/stretchr/testify/require"
  9. cmn "github.com/tendermint/tmlibs/common"
  10. )
  11. func cleanupDBDir(dir, name string) {
  12. os.RemoveAll(path.Join(dir, name) + ".db")
  13. }
  14. func testBackendGetSetDelete(t *testing.T, backend string) {
  15. // Default
  16. dir, dirname := cmn.Tempdir(fmt.Sprintf("test_backend_%s_", backend))
  17. defer dir.Close()
  18. db := NewDB("testdb", backend, dirname)
  19. key := []byte("abc")
  20. require.Nil(t, db.Get(key))
  21. // Set empty ("")
  22. db.Set(key, []byte(""))
  23. require.NotNil(t, db.Get(key))
  24. require.Empty(t, db.Get(key))
  25. // Set empty (nil)
  26. db.Set(key, nil)
  27. require.NotNil(t, db.Get(key))
  28. require.Empty(t, db.Get(key))
  29. // Delete
  30. db.Delete(key)
  31. require.Nil(t, db.Get(key))
  32. }
  33. func TestBackendsGetSetDelete(t *testing.T) {
  34. for dbType, _ := range backends {
  35. testBackendGetSetDelete(t, dbType)
  36. }
  37. }
  38. func assertPanics(t *testing.T, dbType, name string, fn func()) {
  39. defer func() {
  40. r := recover()
  41. assert.NotNil(t, r, cmn.Fmt("expecting %s.%s to panic", dbType, name))
  42. }()
  43. fn()
  44. }
  45. func TestBackendsNilKeys(t *testing.T) {
  46. // test all backends
  47. for dbType, creator := range backends {
  48. name := cmn.Fmt("test_%x", cmn.RandStr(12))
  49. db, err := creator(name, "")
  50. defer cleanupDBDir("", name)
  51. assert.Nil(t, err)
  52. assertPanics(t, dbType, "get", func() { db.Get(nil) })
  53. assertPanics(t, dbType, "has", func() { db.Has(nil) })
  54. assertPanics(t, dbType, "set", func() { db.Set(nil, []byte("abc")) })
  55. assertPanics(t, dbType, "setsync", func() { db.SetSync(nil, []byte("abc")) })
  56. assertPanics(t, dbType, "delete", func() { db.Delete(nil) })
  57. assertPanics(t, dbType, "deletesync", func() { db.DeleteSync(nil) })
  58. db.Close()
  59. }
  60. }
  61. func TestGoLevelDBBackendStr(t *testing.T) {
  62. name := cmn.Fmt("test_%x", cmn.RandStr(12))
  63. db := NewDB(name, LevelDBBackendStr, "")
  64. defer cleanupDBDir("", name)
  65. if _, ok := backends[CLevelDBBackendStr]; !ok {
  66. _, ok := db.(*GoLevelDB)
  67. assert.True(t, ok)
  68. }
  69. }