db_test.go 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. // Copyright (c) Tailscale Inc & AUTHORS
  2. // SPDX-License-Identifier: BSD-3-Clause
  3. package jsondb
  4. import (
  5. "log"
  6. "os"
  7. "path/filepath"
  8. "testing"
  9. "github.com/google/go-cmp/cmp"
  10. )
  11. func TestDB(t *testing.T) {
  12. dir, err := os.MkdirTemp("", "db-test")
  13. if err != nil {
  14. t.Fatal(err)
  15. }
  16. defer os.RemoveAll(dir)
  17. path := filepath.Join(dir, "db.json")
  18. db, err := Open[testDB](path)
  19. if err != nil {
  20. t.Fatalf("creating empty DB: %v", err)
  21. }
  22. if diff := cmp.Diff(db.Data, &testDB{}, cmp.AllowUnexported(testDB{})); diff != "" {
  23. t.Fatalf("unexpected empty DB content (-got+want):\n%s", diff)
  24. }
  25. db.Data.MyString = "test"
  26. db.Data.unexported = "don't keep"
  27. db.Data.AnInt = 42
  28. if err := db.Save(); err != nil {
  29. t.Fatalf("saving database: %v", err)
  30. }
  31. db2, err := Open[testDB](path)
  32. if err != nil {
  33. log.Fatalf("opening DB again: %v", err)
  34. }
  35. want := &testDB{
  36. MyString: "test",
  37. AnInt: 42,
  38. }
  39. if diff := cmp.Diff(db2.Data, want, cmp.AllowUnexported(testDB{})); diff != "" {
  40. t.Fatalf("unexpected saved DB content (-got+want):\n%s", diff)
  41. }
  42. }
  43. type testDB struct {
  44. MyString string
  45. unexported string
  46. AnInt int64
  47. }