summaryrefslogtreecommitdiff
path: root/testrig
diff options
context:
space:
mode:
Diffstat (limited to 'testrig')
-rw-r--r--testrig/federator.go4
-rw-r--r--testrig/mediahandler.go4
-rw-r--r--testrig/processor.go4
-rw-r--r--testrig/storage.go110
4 files changed, 104 insertions, 18 deletions
diff --git a/testrig/federator.go b/testrig/federator.go
index 3c43a7442..df57032ba 100644
--- a/testrig/federator.go
+++ b/testrig/federator.go
@@ -19,13 +19,13 @@
package testrig
import (
- "github.com/superseriousbusiness/gotosocial/internal/blob"
+ "git.iim.gay/grufwub/go-store/kv"
"github.com/superseriousbusiness/gotosocial/internal/db"
"github.com/superseriousbusiness/gotosocial/internal/federation"
"github.com/superseriousbusiness/gotosocial/internal/transport"
)
// NewTestFederator returns a federator with the given database and (mock!!) transport controller.
-func NewTestFederator(db db.DB, tc transport.Controller, storage blob.Storage) federation.Federator {
+func NewTestFederator(db db.DB, tc transport.Controller, storage *kv.KVStore) federation.Federator {
return federation.NewFederator(db, NewTestFederatingDB(db), tc, NewTestConfig(), NewTestLog(), NewTestTypeConverter(db), NewTestMediaHandler(db, storage))
}
diff --git a/testrig/mediahandler.go b/testrig/mediahandler.go
index 0872eefd0..3cf6f539a 100644
--- a/testrig/mediahandler.go
+++ b/testrig/mediahandler.go
@@ -19,13 +19,13 @@
package testrig
import (
- "github.com/superseriousbusiness/gotosocial/internal/blob"
+ "git.iim.gay/grufwub/go-store/kv"
"github.com/superseriousbusiness/gotosocial/internal/db"
"github.com/superseriousbusiness/gotosocial/internal/media"
)
// NewTestMediaHandler returns a media handler with the default test config, the default test logger,
// and the given db and storage.
-func NewTestMediaHandler(db db.DB, storage blob.Storage) media.Handler {
+func NewTestMediaHandler(db db.DB, storage *kv.KVStore) media.Handler {
return media.New(NewTestConfig(), db, storage, NewTestLog())
}
diff --git a/testrig/processor.go b/testrig/processor.go
index 6f9a2a4de..597edf339 100644
--- a/testrig/processor.go
+++ b/testrig/processor.go
@@ -19,13 +19,13 @@
package testrig
import (
- "github.com/superseriousbusiness/gotosocial/internal/blob"
+ "git.iim.gay/grufwub/go-store/kv"
"github.com/superseriousbusiness/gotosocial/internal/db"
"github.com/superseriousbusiness/gotosocial/internal/federation"
"github.com/superseriousbusiness/gotosocial/internal/processing"
)
// NewTestProcessor returns a Processor suitable for testing purposes
-func NewTestProcessor(db db.DB, storage blob.Storage, federator federation.Federator) processing.Processor {
+func NewTestProcessor(db db.DB, storage *kv.KVStore, federator federation.Federator) processing.Processor {
return processing.NewProcessor(NewTestConfig(), NewTestTypeConverter(db), federator, NewTestOauthServer(db), NewTestMediaHandler(db, storage), storage, NewTestTimelineManager(db), db, NewTestLog())
}
diff --git a/testrig/storage.go b/testrig/storage.go
index a8f351ce8..5fdb0242e 100644
--- a/testrig/storage.go
+++ b/testrig/storage.go
@@ -19,23 +19,28 @@
package testrig
import (
+ "bytes"
+ "errors"
"fmt"
+ "io"
"os"
- "github.com/superseriousbusiness/gotosocial/internal/blob"
+ "git.iim.gay/grufwub/go-store/kv"
+ "git.iim.gay/grufwub/go-store/storage"
+ "git.iim.gay/grufwub/go-store/util"
)
// NewTestStorage returns a new in memory storage with the default test config
-func NewTestStorage() blob.Storage {
- s, err := blob.NewInMem(NewTestConfig(), NewTestLog())
+func NewTestStorage() *kv.KVStore {
+ storage, err := kv.OpenStorage(&inMemStorage{storage: map[string][]byte{}, overwrite: false})
if err != nil {
panic(err)
}
- return s
+ return storage
}
// StandardStorageSetup populates the storage with standard test entries from the given directory.
-func StandardStorageSetup(s blob.Storage, relativePath string) {
+func StandardStorageSetup(s *kv.KVStore, relativePath string) {
storedA := newTestStoredAttachments()
a := NewTestAttachments()
for k, paths := range storedA {
@@ -51,14 +56,14 @@ func StandardStorageSetup(s blob.Storage, relativePath string) {
if err != nil {
panic(err)
}
- if err := s.StoreFileAt(pathOriginal, bOriginal); err != nil {
+ if err := s.Put(pathOriginal, bOriginal); err != nil {
panic(err)
}
bSmall, err := os.ReadFile(fmt.Sprintf("%s/%s", relativePath, filenameSmall))
if err != nil {
panic(err)
}
- if err := s.StoreFileAt(pathSmall, bSmall); err != nil {
+ if err := s.Put(pathSmall, bSmall); err != nil {
panic(err)
}
}
@@ -78,28 +83,109 @@ func StandardStorageSetup(s blob.Storage, relativePath string) {
if err != nil {
panic(err)
}
- if err := s.StoreFileAt(pathOriginal, bOriginal); err != nil {
+ if err := s.Put(pathOriginal, bOriginal); err != nil {
panic(err)
}
bStatic, err := os.ReadFile(fmt.Sprintf("%s/%s", relativePath, filenameStatic))
if err != nil {
panic(err)
}
- if err := s.StoreFileAt(pathStatic, bStatic); err != nil {
+ if err := s.Put(pathStatic, bStatic); err != nil {
panic(err)
}
}
}
// StandardStorageTeardown deletes everything in storage so that it's clean for the next test
-func StandardStorageTeardown(s blob.Storage) {
- keys, err := s.ListKeys()
+func StandardStorageTeardown(s *kv.KVStore) {
+ iter, err := s.Iterator(nil)
if err != nil {
panic(err)
}
+ keys := []string{}
+ for iter.Next() {
+ keys = append(keys, iter.Key())
+ }
+ iter.Release()
for _, k := range keys {
- if err := s.RemoveFileAt(k); err != nil {
+ if err := s.Delete(k); err != nil {
panic(err)
}
}
}
+
+type inMemStorage struct {
+ storage map[string][]byte
+ overwrite bool
+}
+
+func (s *inMemStorage) Clean() error {
+ return nil
+}
+
+func (s *inMemStorage) ReadBytes(key string) ([]byte, error) {
+ b, ok := s.storage[key]
+ if !ok {
+ return nil, errors.New("key not found")
+ }
+ return b, nil
+}
+
+func (s *inMemStorage) ReadStream(key string) (io.ReadCloser, error) {
+ b, err := s.ReadBytes(key)
+ if err != nil {
+ return nil, err
+ }
+ return util.NopReadCloser(bytes.NewReader(b)), nil
+}
+
+func (s *inMemStorage) WriteBytes(key string, value []byte) error {
+ if _, ok := s.storage[key]; ok && !s.overwrite {
+ return errors.New("key already in storage")
+ }
+ s.storage[key] = copyBytes(value)
+ return nil
+}
+
+func (s *inMemStorage) WriteStream(key string, r io.Reader) error {
+ b, err := io.ReadAll(r)
+ if err != nil {
+ return err
+ }
+ return s.WriteBytes(key, b)
+}
+
+func (s *inMemStorage) Stat(key string) (bool, error) {
+ _, ok := s.storage[key]
+ return ok, nil
+}
+
+func (s *inMemStorage) Remove(key string) error {
+ if _, ok := s.storage[key]; !ok {
+ return errors.New("key not found")
+ }
+ delete(s.storage, key)
+ return nil
+}
+
+func (s *inMemStorage) WalkKeys(opts *storage.WalkKeysOptions) error {
+ if opts == nil || opts.WalkFn == nil {
+ return errors.New("invalid walkfn")
+ }
+ for key := range s.storage {
+ opts.WalkFn(entry(key))
+ }
+ return nil
+}
+
+type entry string
+
+func (e entry) Key() string {
+ return string(e)
+}
+
+func copyBytes(b []byte) []byte {
+ p := make([]byte, len(b))
+ copy(p, b)
+ return p
+}