diff options
Diffstat (limited to 'testrig')
-rw-r--r-- | testrig/federator.go | 4 | ||||
-rw-r--r-- | testrig/mediahandler.go | 4 | ||||
-rw-r--r-- | testrig/processor.go | 4 | ||||
-rw-r--r-- | testrig/storage.go | 110 |
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 +} |