diff --git a/handlers/paste_test.go b/handlers/paste_test.go index c4761e7..15cc9c2 100644 --- a/handlers/paste_test.go +++ b/handlers/paste_test.go @@ -10,35 +10,11 @@ import ( "testing" "github.com/gorilla/mux" - "github.com/mtlynch/logpaste/store" + "github.com/mtlynch/logpaste/store/test_sqlite" ) -type mockStore struct { - entries map[string]string -} - -func (ds mockStore) GetEntry(id string) (string, error) { - if contents, ok := ds.entries[id]; ok { - return contents, nil - } - return "", store.EntryNotFoundError{ID: id} -} - -func (ds *mockStore) InsertEntry(id string, contents string) error { - ds.entries[id] = contents - return nil -} - -func (ds *mockStore) Reset() { - ds.entries = make(map[string]string) -} - func TestPasteGet(t *testing.T) { - ds := mockStore{ - entries: map[string]string{ - "12345678": "dummy entry", - }, - } + ds := test_sqlite.New() router := mux.NewRouter() s := defaultServer{ store: &ds, @@ -124,9 +100,7 @@ func TestPastePut(t *testing.T) { }, } { t.Run(tt.description, func(t *testing.T) { - ds := mockStore{ - entries: make(map[string]string), - } + ds := test_sqlite.New() router := mux.NewRouter() s := defaultServer{ store: &ds, @@ -167,15 +141,6 @@ func TestPastePut(t *testing.T) { } func TestPastePost(t *testing.T) { - ds := mockStore{ - entries: make(map[string]string), - } - router := mux.NewRouter() - s := defaultServer{ - store: &ds, - router: router, - } - s.routes() for _, tt := range []struct { description string contentType string @@ -251,7 +216,13 @@ some data in a file }, } { t.Run(tt.description, func(t *testing.T) { - ds.Reset() + ds := test_sqlite.New() + router := mux.NewRouter() + s := defaultServer{ + store: &ds, + router: router, + } + s.routes() req, err := http.NewRequest("POST", "/", strings.NewReader(strings.ReplaceAll(tt.body, "\n", "\r\n"))) diff --git a/handlers/server.go b/handlers/server.go index 56e9532..52a791d 100644 --- a/handlers/server.go +++ b/handlers/server.go @@ -15,7 +15,7 @@ type Server interface { func New(sp SiteProperties, perMinuteLimit int) Server { s := defaultServer{ router: mux.NewRouter(), - store: sqlite.New(), + store: sqlite.New("data/store.db"), siteProps: sp, ipRateLimiter: limit.New(perMinuteLimit), } diff --git a/store/sqlite/sqlite.go b/store/sqlite/sqlite.go index 370e9a1..a0fb685 100644 --- a/store/sqlite/sqlite.go +++ b/store/sqlite/sqlite.go @@ -4,6 +4,7 @@ import ( "database/sql" "log" "os" + "path/filepath" "time" _ "github.com/mattn/go-sqlite3" @@ -15,10 +16,9 @@ type db struct { ctx *sql.DB } -func New() store.Store { - dbDir := "data" - ensureDirExists(dbDir) - ctx, err := sql.Open("sqlite3", dbDir+"/store.db") +func New(path string) store.Store { + ensureDirExists(filepath.Dir(path)) + ctx, err := sql.Open("sqlite3", path) if err != nil { log.Fatalln(err) } diff --git a/store/test_sqlite/db.go b/store/test_sqlite/db.go new file mode 100644 index 0000000..7ca3e74 --- /dev/null +++ b/store/test_sqlite/db.go @@ -0,0 +1,18 @@ +package test_sqlite + +import ( + "fmt" + + "github.com/mtlynch/logpaste/random" + "github.com/mtlynch/logpaste/store" + "github.com/mtlynch/logpaste/store/sqlite" +) + +func New() store.Store { + return sqlite.New(ephemeralDbURI()) +} + +func ephemeralDbURI() string { + name := random.String(10) + return fmt.Sprintf("file:%s?mode=memory&cache=shared", name) +}