diff --git a/internal/badger.go b/internal/badger.go index e98d108..e694f4c 100644 --- a/internal/badger.go +++ b/internal/badger.go @@ -12,27 +12,34 @@ import ( const defaultBaseDir = "./data/badger" -type BadgerOpts func(*BadgerStore) +type Storer interface { + Close() error + Delete(context.Context, string) error + Get(context.Context, string) ([]byte, error) + Put(context.Context, string, []byte, time.Duration) error +} + +type BadgerOpts func(*badgerStore) func WithBaseDir(baseDir string) BadgerOpts { - return func(b *BadgerStore) { + return func(b *badgerStore) { b.baseDir = baseDir } } func WithSubDir(subDir string) BadgerOpts { - return func(b *BadgerStore) { + return func(b *badgerStore) { b.subDir = subDir } } -type BadgerStore struct { +type badgerStore struct { baseDir string subDir string db *badger.DB } -func (b *BadgerStore) Put(ctx context.Context, key string, val []byte, ttl time.Duration) error { +func (b *badgerStore) Put(ctx context.Context, key string, val []byte, ttl time.Duration) error { done := make(chan error, 1) go func() { @@ -51,7 +58,7 @@ func (b *BadgerStore) Put(ctx context.Context, key string, val []byte, ttl time. } } -func (b *BadgerStore) Get(ctx context.Context, key string) ([]byte, error) { +func (b *badgerStore) Get(ctx context.Context, key string) ([]byte, error) { done := make(chan struct { val []byte err error @@ -81,7 +88,7 @@ func (b *BadgerStore) Get(ctx context.Context, key string) ([]byte, error) { } } -func (b *BadgerStore) Delete(ctx context.Context, key string) error { +func (b *badgerStore) Delete(ctx context.Context, key string) error { done := make(chan error, 1) go func() { @@ -99,11 +106,11 @@ func (b *BadgerStore) Delete(ctx context.Context, key string) error { } } -func (b *BadgerStore) Close() error { +func (b *badgerStore) Close() error { return b.db.Close() } -func (b *BadgerStore) dir() string { +func (b *badgerStore) dir() string { if b.baseDir == "" { b.baseDir = defaultBaseDir } @@ -115,8 +122,8 @@ func (b *BadgerStore) dir() string { return filepath.Join(b.baseDir, b.subDir) } -func NewBadgerStore(opts ...BadgerOpts) (*BadgerStore, error) { - s := &BadgerStore{} +func NewBadgerStore(opts ...BadgerOpts) (*badgerStore, error) { + s := &badgerStore{} for _, opt := range opts { opt(s) diff --git a/internal/badger_test.go b/internal/badger_test.go index ae6bae6..132c2ea 100644 --- a/internal/badger_test.go +++ b/internal/badger_test.go @@ -8,7 +8,7 @@ import ( "time" ) -func newTestStore(t *testing.T) *BadgerStore { +func newTestStore(t *testing.T) *badgerStore { t.Helper() dir := filepath.Join(os.TempDir(), "badger_test", time.Now().Format("20060102150405")) @@ -40,11 +40,11 @@ func runSubtests(t *testing.T, subs []subtest) { func TestBadgerStore(t *testing.T) { tests := []struct { name string - test func(t *testing.T, store *BadgerStore) + test func(t *testing.T, store *badgerStore) }{ { name: "Put/Get/Delete roundtrip", - test: func(t *testing.T, store *BadgerStore) { + test: func(t *testing.T, store *badgerStore) { ctx := context.Background() key := "foo" val := []byte("bar") @@ -92,7 +92,7 @@ func TestBadgerStore(t *testing.T) { }, { name: "PutWithTTL expires", - test: func(t *testing.T, store *BadgerStore) { + test: func(t *testing.T, store *badgerStore) { ctx := context.Background() key := "ttl" val := []byte("value") @@ -117,7 +117,7 @@ func TestBadgerStore(t *testing.T) { }, { name: "ContextCancellation affects operations", - test: func(t *testing.T, store *BadgerStore) { + test: func(t *testing.T, store *badgerStore) { ctx, cancel := context.WithCancel(context.Background()) cancel() @@ -162,17 +162,17 @@ func TestBadgerStore(t *testing.T) { func TestDirFunction(t *testing.T) { tests := []struct { name string - store *BadgerStore + store *badgerStore want string }{ { name: "default directory", - store: &BadgerStore{}, + store: &badgerStore{}, want: defaultBaseDir, }, { name: "with base and sub dir", - store: &BadgerStore{baseDir: "/tmp", subDir: "foo"}, + store: &badgerStore{baseDir: "/tmp", subDir: "foo"}, want: filepath.Join("/tmp", "foo"), }, } diff --git a/internal/route_cache.go b/internal/route_cache.go index 2e421e4..cf31f87 100644 --- a/internal/route_cache.go +++ b/internal/route_cache.go @@ -9,9 +9,15 @@ import ( const suff = "route_cache" +type RouteCacher interface { + Store(string, string) error + GetPath(string) (string, error) + All() (map[string]string, error) +} + type routeCache struct { rs map[string]string - s *BadgerStore + s Storer } var ( @@ -20,13 +26,16 @@ var ( c *routeCache ) -func NewRouteCache() (*routeCache, error) { +func NewRouteCache(store Storer) (*routeCache, error) { rcOnce.Do(func() { - store, err := NewBadgerStore(WithSubDir("route_cache")) - if err != nil { - log.Printf("failed to create badger store for route cache: %v", err) - c = nil - return + if store == nil { + st, err := NewBadgerStore(WithSubDir("route_cache")) + if err != nil { + log.Println(err) + return + } + + store = st } c = &routeCache{ @@ -53,7 +62,6 @@ func (r *routeCache) All() (map[string]string, error) { } func (r *routeCache) Store(name string, path string) error { - // TODO: implement return nil } diff --git a/internal/route_cache_test.go b/internal/route_cache_test.go new file mode 100644 index 0000000..5bf0569 --- /dev/null +++ b/internal/route_cache_test.go @@ -0,0 +1 @@ +package internal diff --git a/route_cache.go b/route_cache.go deleted file mode 100644 index 7d94d00..0000000 --- a/route_cache.go +++ /dev/null @@ -1,8 +0,0 @@ -// Package joist implements the main Joist framework. -package joist - -type RouteCacher interface { - Store(string, string) error - GetPath(string) (string, error) - All() (map[string]string, error) -}