leveldb_test.go 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. package ezleveldb
  2. import (
  3. "fmt"
  4. "testing"
  5. "github.com/annybs/ezdb"
  6. )
  7. func TestLevelDB(t *testing.T) {
  8. type Student struct {
  9. Name string `json:"name"`
  10. Age int `json:"age"`
  11. }
  12. path := ".leveldb/test_json"
  13. marshaler := ezdb.JSON(func() *Student {
  14. return &Student{}
  15. })
  16. collection := ezdb.LevelDB(path, marshaler, nil)
  17. cmp := func(expected, actual *Student) error {
  18. if expected == nil && actual != nil {
  19. return fmt.Errorf("expected no student (got %v)", actual)
  20. } else if expected != nil && actual == nil {
  21. return fmt.Errorf("expected student %v (got nil)", expected)
  22. }
  23. if actual.Name != expected.Name {
  24. return fmt.Errorf("student has wrong name (expected '%s', got '%s')", expected.Name, actual.Name)
  25. } else if actual.Age != expected.Age {
  26. return fmt.Errorf("student has wrong age (expected '%d', got '%d')", expected.Age, actual.Age)
  27. }
  28. return nil
  29. }
  30. tester := &ezdb.CollectionTester[*Student]{
  31. C: collection,
  32. Cmp: cmp,
  33. Data: map[string]*Student{
  34. "annie": {Name: "Annie", Age: 32},
  35. "ben": {Name: "Ben", Age: 50},
  36. "clive": {Name: "Clive", Age: 21},
  37. },
  38. }
  39. named := func(name string, do func() error) func() {
  40. return func() {
  41. if err := do(); err != nil {
  42. t.Errorf("failed test %q: %v", name, err)
  43. } else {
  44. t.Logf("passed test %q", name)
  45. }
  46. }
  47. }
  48. destroy := func() error {
  49. return collection.Destroy()
  50. }
  51. sequence := []func(){
  52. named("init 1", tester.Init),
  53. named("has", tester.Has),
  54. named("get", tester.Get),
  55. named("getAll 1", tester.GetAll),
  56. named("deleteOne 1", tester.DeleteOne),
  57. named("deleteOne 2", tester.DeleteOne),
  58. named("init 2", tester.Init),
  59. named("close 1", tester.Close),
  60. named("open", tester.Open),
  61. named("getAll 2", tester.GetAll),
  62. named("iterCount", tester.IterCount),
  63. named("iterSortKeys", tester.IterSortKeys),
  64. named("deleteAll", tester.DeleteAll),
  65. named("close", tester.Close),
  66. named("destroy", destroy),
  67. }
  68. for _, do := range sequence {
  69. do()
  70. }
  71. }