From aa0280d00440c66588f8b2e61dca3f62519c0429 Mon Sep 17 00:00:00 2001 From: Marius Date: Tue, 20 Aug 2019 16:16:05 +0200 Subject: [PATCH] core: Remove deprecated DataStore option --- pkg/handler/composer.go | 29 ------------- pkg/handler/composer.mgo | 17 -------- pkg/handler/concat_test.go | 52 ++++++++++++------------ pkg/handler/config.go | 10 +---- pkg/handler/config_test.go | 20 +++------ pkg/handler/cors_test.go | 12 +++--- pkg/handler/get_test.go | 20 ++++----- pkg/handler/head_test.go | 16 ++++---- pkg/handler/options_test.go | 8 ++-- pkg/handler/patch_test.go | 66 +++++++++++++++--------------- pkg/handler/post_test.go | 76 +++++++++++++++++------------------ pkg/handler/subtest_test.go | 13 +++++- pkg/handler/terminate_test.go | 12 +++--- 13 files changed, 149 insertions(+), 202 deletions(-) diff --git a/pkg/handler/composer.go b/pkg/handler/composer.go index ff27086..4051287 100644 --- a/pkg/handler/composer.go +++ b/pkg/handler/composer.go @@ -25,35 +25,6 @@ func NewStoreComposer() *StoreComposer { return &StoreComposer{} } -// newStoreComposerFromDataStore creates a new store composer and attempts to -// extract the extensions for the provided store. This is intended to be used -// for transitioning from data stores to composers. -func newStoreComposerFromDataStore(store DataStore) *StoreComposer { - composer := NewStoreComposer() - composer.UseCore(store) - - if mod, ok := store.(TerminaterDataStore); ok { - composer.UseTerminater(mod) - } - if mod, ok := store.(FinisherDataStore); ok { - composer.UseFinisher(mod) - } - if mod, ok := store.(LockerDataStore); ok { - composer.UseLocker(mod) - } - if mod, ok := store.(GetReaderDataStore); ok { - composer.UseGetReader(mod) - } - if mod, ok := store.(ConcaterDataStore); ok { - composer.UseConcater(mod) - } - if mod, ok := store.(LengthDeferrerDataStore); ok { - composer.UseLengthDeferrer(mod) - } - - return composer -} - // Capabilities returns a string representing the provided extensions in a // human-readable format meant for debugging. func (store *StoreComposer) Capabilities() string { diff --git a/pkg/handler/composer.mgo b/pkg/handler/composer.mgo index 21fcac6..f4fc3ef 100644 --- a/pkg/handler/composer.mgo +++ b/pkg/handler/composer.mgo @@ -39,23 +39,6 @@ func NewStoreComposer() *StoreComposer { return &StoreComposer{} } -// newStoreComposerFromDataStore creates a new store composer and attempts to -// extract the extensions for the provided store. This is intended to be used -// for transitioning from data stores to composers. -func newStoreComposerFromDataStore(store DataStore) *StoreComposer { - composer := NewStoreComposer() - composer.UseCore(store) - - USE_FROM(Terminater) - USE_FROM(Finisher) - USE_FROM(Locker) - USE_FROM(GetReader) - USE_FROM(Concater) - USE_FROM(LengthDeferrer) - - return composer -} - // Capabilities returns a string representing the provided extensions in a // human-readable format meant for debugging. func (store *StoreComposer) Capabilities() string { diff --git a/pkg/handler/concat_test.go b/pkg/handler/concat_test.go index d6745d6..799f7d2 100644 --- a/pkg/handler/concat_test.go +++ b/pkg/handler/concat_test.go @@ -12,8 +12,8 @@ import ( ) func TestConcat(t *testing.T) { - SubTest(t, "ExtensionDiscovery", func(t *testing.T, store *MockFullDataStore) { - composer := NewStoreComposer() + SubTest(t, "ExtensionDiscovery", func(t *testing.T, store *MockFullDataStore, composer *StoreComposer) { + composer = NewStoreComposer() composer.UseCore(store) composer.UseConcater(store) @@ -30,8 +30,8 @@ func TestConcat(t *testing.T) { }).Run(handler, t) }) - SubTest(t, "Partial", func(t *testing.T, store *MockFullDataStore) { - SubTest(t, "Create", func(t *testing.T, store *MockFullDataStore) { + SubTest(t, "Partial", func(t *testing.T, store *MockFullDataStore, composer *StoreComposer) { + SubTest(t, "Create", func(t *testing.T, store *MockFullDataStore, composer *StoreComposer) { store.EXPECT().NewUpload(FileInfo{ Size: 300, IsPartial: true, @@ -41,8 +41,8 @@ func TestConcat(t *testing.T) { }).Return("foo", nil) handler, _ := NewHandler(Config{ - BasePath: "files", - DataStore: store, + BasePath: "files", + StoreComposer: composer, }) (&httpTest{ @@ -56,14 +56,14 @@ func TestConcat(t *testing.T) { }).Run(handler, t) }) - SubTest(t, "Status", func(t *testing.T, store *MockFullDataStore) { + SubTest(t, "Status", func(t *testing.T, store *MockFullDataStore, composer *StoreComposer) { store.EXPECT().GetInfo("foo").Return(FileInfo{ IsPartial: true, }, nil) handler, _ := NewHandler(Config{ - BasePath: "files", - DataStore: store, + BasePath: "files", + StoreComposer: composer, }) (&httpTest{ @@ -80,8 +80,8 @@ func TestConcat(t *testing.T) { }) }) - SubTest(t, "Final", func(t *testing.T, store *MockFullDataStore) { - SubTest(t, "Create", func(t *testing.T, store *MockFullDataStore) { + SubTest(t, "Final", func(t *testing.T, store *MockFullDataStore, composer *StoreComposer) { + SubTest(t, "Create", func(t *testing.T, store *MockFullDataStore, composer *StoreComposer) { a := assert.New(t) gomock.InOrder( @@ -107,7 +107,7 @@ func TestConcat(t *testing.T) { handler, _ := NewHandler(Config{ BasePath: "files", - DataStore: store, + StoreComposer: composer, NotifyCompleteUploads: true, }) @@ -135,7 +135,7 @@ func TestConcat(t *testing.T) { a.Equal([]string{"a", "b"}, info.PartialUploads) }) - SubTest(t, "Status", func(t *testing.T, store *MockFullDataStore) { + SubTest(t, "Status", func(t *testing.T, store *MockFullDataStore, composer *StoreComposer) { store.EXPECT().GetInfo("foo").Return(FileInfo{ IsFinal: true, PartialUploads: []string{"a", "b"}, @@ -144,8 +144,8 @@ func TestConcat(t *testing.T) { }, nil) handler, _ := NewHandler(Config{ - BasePath: "files", - DataStore: store, + BasePath: "files", + StoreComposer: composer, }) (&httpTest{ @@ -163,7 +163,7 @@ func TestConcat(t *testing.T) { }).Run(handler, t) }) - SubTest(t, "CreateWithUnfinishedFail", func(t *testing.T, store *MockFullDataStore) { + SubTest(t, "CreateWithUnfinishedFail", func(t *testing.T, store *MockFullDataStore, composer *StoreComposer) { // This upload is still unfinished (mismatching offset and size) and // will therefore cause the POST request to fail. store.EXPECT().GetInfo("c").Return(FileInfo{ @@ -173,8 +173,8 @@ func TestConcat(t *testing.T) { }, nil) handler, _ := NewHandler(Config{ - BasePath: "files", - DataStore: store, + BasePath: "files", + StoreComposer: composer, }) (&httpTest{ @@ -187,16 +187,16 @@ func TestConcat(t *testing.T) { }).Run(handler, t) }) - SubTest(t, "CreateExceedingMaxSizeFail", func(t *testing.T, store *MockFullDataStore) { + SubTest(t, "CreateExceedingMaxSizeFail", func(t *testing.T, store *MockFullDataStore, composer *StoreComposer) { store.EXPECT().GetInfo("huge").Return(FileInfo{ Size: 1000, Offset: 1000, }, nil) handler, _ := NewHandler(Config{ - MaxSize: 100, - BasePath: "files", - DataStore: store, + MaxSize: 100, + BasePath: "files", + StoreComposer: composer, }) (&httpTest{ @@ -209,7 +209,7 @@ func TestConcat(t *testing.T) { }).Run(handler, t) }) - SubTest(t, "UploadToFinalFail", func(t *testing.T, store *MockFullDataStore) { + SubTest(t, "UploadToFinalFail", func(t *testing.T, store *MockFullDataStore, composer *StoreComposer) { store.EXPECT().GetInfo("foo").Return(FileInfo{ Size: 10, Offset: 0, @@ -217,7 +217,7 @@ func TestConcat(t *testing.T) { }, nil) handler, _ := NewHandler(Config{ - DataStore: store, + StoreComposer: composer, }) (&httpTest{ @@ -233,9 +233,9 @@ func TestConcat(t *testing.T) { }).Run(handler, t) }) - SubTest(t, "InvalidConcatHeaderFail", func(t *testing.T, store *MockFullDataStore) { + SubTest(t, "InvalidConcatHeaderFail", func(t *testing.T, store *MockFullDataStore, composer *StoreComposer) { handler, _ := NewHandler(Config{ - DataStore: store, + StoreComposer: composer, }) (&httpTest{ diff --git a/pkg/handler/config.go b/pkg/handler/config.go index d427809..6ba440f 100644 --- a/pkg/handler/config.go +++ b/pkg/handler/config.go @@ -9,13 +9,10 @@ import ( // Config provides a way to configure the Handler depending on your needs. type Config struct { - // DataStore implementation used to store and retrieve the single uploads. - // The usage of this field is deprecated and should be avoided in favor of - // StoreComposer. - DataStore DataStore // StoreComposer points to the store composer from which the core data store // and optional dependencies should be taken. May only be nil if DataStore is // set. + // TODO: Remove pointer? StoreComposer *StoreComposer // MaxSize defines how many bytes may be stored in one single upload. If its // value is is 0 or smaller no limit will be enforced. @@ -69,10 +66,7 @@ func (config *Config) validate() error { config.isAbs = uri.IsAbs() if config.StoreComposer == nil { - config.StoreComposer = newStoreComposerFromDataStore(config.DataStore) - config.DataStore = nil - } else if config.DataStore != nil { - return errors.New("tusd: either StoreComposer or DataStore may be set in Config, but not both") + return errors.New("tusd: StoreComposer must no be nil") } if config.StoreComposer.Core == nil { diff --git a/pkg/handler/config_test.go b/pkg/handler/config_test.go index c23a8b8..b741ca5 100644 --- a/pkg/handler/config_test.go +++ b/pkg/handler/config_test.go @@ -23,9 +23,12 @@ func (store zeroStore) GetInfo(id string) (FileInfo, error) { func TestConfig(t *testing.T) { a := assert.New(t) + composer := NewStoreComposer() + composer.UseCore(zeroStore{}) + config := Config{ - DataStore: zeroStore{}, - BasePath: "files", + StoreComposer: composer, + BasePath: "files", } a.Nil(config.validate()) @@ -43,16 +46,3 @@ func TestConfigEmptyCore(t *testing.T) { a.Error(config.validate()) } - -func TestConfigStoreAndComposer(t *testing.T) { - a := assert.New(t) - composer := NewStoreComposer() - composer.UseCore(zeroStore{}) - - config := Config{ - StoreComposer: composer, - DataStore: zeroStore{}, - } - - a.Error(config.validate()) -} diff --git a/pkg/handler/cors_test.go b/pkg/handler/cors_test.go index 913c1e4..5536a2b 100644 --- a/pkg/handler/cors_test.go +++ b/pkg/handler/cors_test.go @@ -9,9 +9,9 @@ import ( ) func TestCORS(t *testing.T) { - SubTest(t, "Preflight", func(t *testing.T, store *MockFullDataStore) { + SubTest(t, "Preflight", func(t *testing.T, store *MockFullDataStore, composer *StoreComposer) { handler, _ := NewHandler(Config{ - DataStore: store, + StoreComposer: composer, }) (&httpTest{ @@ -29,9 +29,9 @@ func TestCORS(t *testing.T) { }).Run(handler, t) }) - SubTest(t, "Request", func(t *testing.T, store *MockFullDataStore) { + SubTest(t, "Request", func(t *testing.T, store *MockFullDataStore, composer *StoreComposer) { handler, _ := NewHandler(Config{ - DataStore: store, + StoreComposer: composer, }) (&httpTest{ @@ -48,9 +48,9 @@ func TestCORS(t *testing.T) { }).Run(handler, t) }) - SubTest(t, "AppendHeaders", func(t *testing.T, store *MockFullDataStore) { + SubTest(t, "AppendHeaders", func(t *testing.T, store *MockFullDataStore, composer *StoreComposer) { handler, _ := NewHandler(Config{ - DataStore: store, + StoreComposer: composer, }) req, _ := http.NewRequest("OPTIONS", "", nil) diff --git a/pkg/handler/get_test.go b/pkg/handler/get_test.go index dd8926c..e3dac73 100644 --- a/pkg/handler/get_test.go +++ b/pkg/handler/get_test.go @@ -20,7 +20,7 @@ func (reader *closingStringReader) Close() error { } func TestGet(t *testing.T) { - SubTest(t, "Download", func(t *testing.T, store *MockFullDataStore) { + SubTest(t, "Download", func(t *testing.T, store *MockFullDataStore, composer *StoreComposer) { reader := &closingStringReader{ Reader: strings.NewReader("hello"), } @@ -43,7 +43,7 @@ func TestGet(t *testing.T) { locker.EXPECT().UnlockUpload("yes"), ) - composer := NewStoreComposer() + composer = NewStoreComposer() composer.UseCore(store) composer.UseGetReader(store) composer.UseLocker(locker) @@ -69,13 +69,13 @@ func TestGet(t *testing.T) { } }) - SubTest(t, "EmptyDownload", func(t *testing.T, store *MockFullDataStore) { + SubTest(t, "EmptyDownload", func(t *testing.T, store *MockFullDataStore, composer *StoreComposer) { store.EXPECT().GetInfo("yes").Return(FileInfo{ Offset: 0, }, nil) handler, _ := NewHandler(Config{ - DataStore: store, + StoreComposer: composer, }) (&httpTest{ @@ -90,8 +90,8 @@ func TestGet(t *testing.T) { }).Run(handler, t) }) - SubTest(t, "NotProvided", func(t *testing.T, store *MockFullDataStore) { - composer := NewStoreComposer() + SubTest(t, "NotProvided", func(t *testing.T, store *MockFullDataStore, composer *StoreComposer) { + composer = NewStoreComposer() composer.UseCore(store) handler, _ := NewUnroutedHandler(Config{ @@ -105,7 +105,7 @@ func TestGet(t *testing.T) { }).Run(http.HandlerFunc(handler.GetFile), t) }) - SubTest(t, "InvalidFileType", func(t *testing.T, store *MockFullDataStore) { + SubTest(t, "InvalidFileType", func(t *testing.T, store *MockFullDataStore, composer *StoreComposer) { store.EXPECT().GetInfo("yes").Return(FileInfo{ Offset: 0, MetaData: map[string]string{ @@ -114,7 +114,7 @@ func TestGet(t *testing.T) { }, nil) handler, _ := NewHandler(Config{ - DataStore: store, + StoreComposer: composer, }) (&httpTest{ @@ -130,7 +130,7 @@ func TestGet(t *testing.T) { }).Run(handler, t) }) - SubTest(t, "NotWhitelistedFileType", func(t *testing.T, store *MockFullDataStore) { + SubTest(t, "NotWhitelistedFileType", func(t *testing.T, store *MockFullDataStore, composer *StoreComposer) { store.EXPECT().GetInfo("yes").Return(FileInfo{ Offset: 0, MetaData: map[string]string{ @@ -140,7 +140,7 @@ func TestGet(t *testing.T) { }, nil) handler, _ := NewHandler(Config{ - DataStore: store, + StoreComposer: composer, }) (&httpTest{ diff --git a/pkg/handler/head_test.go b/pkg/handler/head_test.go index 8c19348..73cc836 100644 --- a/pkg/handler/head_test.go +++ b/pkg/handler/head_test.go @@ -10,7 +10,7 @@ import ( ) func TestHead(t *testing.T) { - SubTest(t, "Status", func(t *testing.T, store *MockFullDataStore) { + SubTest(t, "Status", func(t *testing.T, store *MockFullDataStore, composer *StoreComposer) { ctrl := gomock.NewController(t) defer ctrl.Finish() locker := NewMockLocker(ctrl) @@ -28,7 +28,7 @@ func TestHead(t *testing.T) { locker.EXPECT().UnlockUpload("yes"), ) - composer := NewStoreComposer() + composer = NewStoreComposer() composer.UseCore(store) composer.UseLocker(locker) @@ -58,11 +58,11 @@ func TestHead(t *testing.T) { } }) - SubTest(t, "UploadNotFoundFail", func(t *testing.T, store *MockFullDataStore) { + SubTest(t, "UploadNotFoundFail", func(t *testing.T, store *MockFullDataStore, composer *StoreComposer) { store.EXPECT().GetInfo("no").Return(FileInfo{}, os.ErrNotExist) handler, _ := NewHandler(Config{ - DataStore: store, + StoreComposer: composer, }) res := (&httpTest{ @@ -82,14 +82,14 @@ func TestHead(t *testing.T) { } }) - SubTest(t, "DeferLengthHeader", func(t *testing.T, store *MockFullDataStore) { + SubTest(t, "DeferLengthHeader", func(t *testing.T, store *MockFullDataStore, composer *StoreComposer) { store.EXPECT().GetInfo("yes").Return(FileInfo{ SizeIsDeferred: true, Size: 0, }, nil) handler, _ := NewHandler(Config{ - DataStore: store, + StoreComposer: composer, }) (&httpTest{ @@ -105,7 +105,7 @@ func TestHead(t *testing.T) { }).Run(handler, t) }) - SubTest(t, "NoDeferLengthHeader", func(t *testing.T, store *MockFullDataStore) { + SubTest(t, "NoDeferLengthHeader", func(t *testing.T, store *MockFullDataStore, composer *StoreComposer) { gomock.InOrder( store.EXPECT().GetInfo("yes").Return(FileInfo{ SizeIsDeferred: false, @@ -114,7 +114,7 @@ func TestHead(t *testing.T) { ) handler, _ := NewHandler(Config{ - DataStore: store, + StoreComposer: composer, }) (&httpTest{ diff --git a/pkg/handler/options_test.go b/pkg/handler/options_test.go index 325afa2..b641b5f 100644 --- a/pkg/handler/options_test.go +++ b/pkg/handler/options_test.go @@ -8,8 +8,8 @@ import ( ) func TestOptions(t *testing.T) { - SubTest(t, "Discovery", func(t *testing.T, store *MockFullDataStore) { - composer := NewStoreComposer() + SubTest(t, "Discovery", func(t *testing.T, store *MockFullDataStore, composer *StoreComposer) { + composer = NewStoreComposer() composer.UseCore(store) handler, _ := NewHandler(Config{ @@ -29,9 +29,9 @@ func TestOptions(t *testing.T) { }).Run(handler, t) }) - SubTest(t, "InvalidVersion", func(t *testing.T, store *MockFullDataStore) { + SubTest(t, "InvalidVersion", func(t *testing.T, store *MockFullDataStore, composer *StoreComposer) { handler, _ := NewHandler(Config{ - DataStore: store, + StoreComposer: composer, }) (&httpTest{ diff --git a/pkg/handler/patch_test.go b/pkg/handler/patch_test.go index 96b32cc..9ed9283 100644 --- a/pkg/handler/patch_test.go +++ b/pkg/handler/patch_test.go @@ -16,7 +16,7 @@ import ( ) func TestPatch(t *testing.T) { - SubTest(t, "UploadChunk", func(t *testing.T, store *MockFullDataStore) { + SubTest(t, "UploadChunk", func(t *testing.T, store *MockFullDataStore, composer *StoreComposer) { gomock.InOrder( store.EXPECT().GetInfo("yes").Return(FileInfo{ ID: "yes", @@ -28,7 +28,7 @@ func TestPatch(t *testing.T) { ) handler, _ := NewHandler(Config{ - DataStore: store, + StoreComposer: composer, NotifyCompleteUploads: true, }) @@ -57,7 +57,7 @@ func TestPatch(t *testing.T) { a.Equal(int64(10), info.Offset) }) - SubTest(t, "MethodOverriding", func(t *testing.T, store *MockFullDataStore) { + SubTest(t, "MethodOverriding", func(t *testing.T, store *MockFullDataStore, composer *StoreComposer) { gomock.InOrder( store.EXPECT().GetInfo("yes").Return(FileInfo{ ID: "yes", @@ -68,7 +68,7 @@ func TestPatch(t *testing.T) { ) handler, _ := NewHandler(Config{ - DataStore: store, + StoreComposer: composer, }) (&httpTest{ @@ -88,14 +88,14 @@ func TestPatch(t *testing.T) { }).Run(handler, t) }) - SubTest(t, "UploadChunkToFinished", func(t *testing.T, store *MockFullDataStore) { + SubTest(t, "UploadChunkToFinished", func(t *testing.T, store *MockFullDataStore, composer *StoreComposer) { store.EXPECT().GetInfo("yes").Return(FileInfo{ Offset: 20, Size: 20, }, nil) handler, _ := NewHandler(Config{ - DataStore: store, + StoreComposer: composer, }) (&httpTest{ @@ -114,11 +114,11 @@ func TestPatch(t *testing.T) { }).Run(handler, t) }) - SubTest(t, "UploadNotFoundFail", func(t *testing.T, store *MockFullDataStore) { + SubTest(t, "UploadNotFoundFail", func(t *testing.T, store *MockFullDataStore, composer *StoreComposer) { store.EXPECT().GetInfo("no").Return(FileInfo{}, os.ErrNotExist) handler, _ := NewHandler(Config{ - DataStore: store, + StoreComposer: composer, }) (&httpTest{ @@ -133,13 +133,13 @@ func TestPatch(t *testing.T) { }).Run(handler, t) }) - SubTest(t, "MissmatchingOffsetFail", func(t *testing.T, store *MockFullDataStore) { + SubTest(t, "MissmatchingOffsetFail", func(t *testing.T, store *MockFullDataStore, composer *StoreComposer) { store.EXPECT().GetInfo("yes").Return(FileInfo{ Offset: 5, }, nil) handler, _ := NewHandler(Config{ - DataStore: store, + StoreComposer: composer, }) (&httpTest{ @@ -154,14 +154,14 @@ func TestPatch(t *testing.T) { }).Run(handler, t) }) - SubTest(t, "ExceedingMaxSizeFail", func(t *testing.T, store *MockFullDataStore) { + SubTest(t, "ExceedingMaxSizeFail", func(t *testing.T, store *MockFullDataStore, composer *StoreComposer) { store.EXPECT().GetInfo("yes").Return(FileInfo{ Offset: 5, Size: 10, }, nil) handler, _ := NewHandler(Config{ - DataStore: store, + StoreComposer: composer, }) (&httpTest{ @@ -177,9 +177,9 @@ func TestPatch(t *testing.T) { }).Run(handler, t) }) - SubTest(t, "InvalidContentTypeFail", func(t *testing.T, store *MockFullDataStore) { + SubTest(t, "InvalidContentTypeFail", func(t *testing.T, store *MockFullDataStore, composer *StoreComposer) { handler, _ := NewHandler(Config{ - DataStore: store, + StoreComposer: composer, }) (&httpTest{ @@ -195,9 +195,9 @@ func TestPatch(t *testing.T) { }).Run(handler, t) }) - SubTest(t, "InvalidOffsetFail", func(t *testing.T, store *MockFullDataStore) { + SubTest(t, "InvalidOffsetFail", func(t *testing.T, store *MockFullDataStore, composer *StoreComposer) { handler, _ := NewHandler(Config{ - DataStore: store, + StoreComposer: composer, }) (&httpTest{ @@ -213,7 +213,7 @@ func TestPatch(t *testing.T) { }).Run(handler, t) }) - SubTest(t, "OverflowWithoutLength", func(t *testing.T, store *MockFullDataStore) { + SubTest(t, "OverflowWithoutLength", func(t *testing.T, store *MockFullDataStore, composer *StoreComposer) { // In this test we attempt to upload more than 15 bytes to an upload // which has only space for 15 bytes (offset of 5 and size of 20). // The request does not contain the Content-Length header and the handler @@ -232,7 +232,7 @@ func TestPatch(t *testing.T) { ) handler, _ := NewHandler(Config{ - DataStore: store, + StoreComposer: composer, }) // Wrap the string.Reader in a NopCloser to hide its type. else @@ -257,7 +257,7 @@ func TestPatch(t *testing.T) { }).Run(handler, t) }) - SubTest(t, "DeclareLengthOnFinalChunk", func(t *testing.T, store *MockFullDataStore) { + SubTest(t, "DeclareLengthOnFinalChunk", func(t *testing.T, store *MockFullDataStore, composer *StoreComposer) { gomock.InOrder( store.EXPECT().GetInfo("yes").Return(FileInfo{ ID: "yes", @@ -271,8 +271,8 @@ func TestPatch(t *testing.T) { ) handler, _ := NewHandler(Config{ - DataStore: store, - MaxSize: 20, + StoreComposer: composer, + MaxSize: 20, }) body := strings.NewReader("hellothisismore") @@ -294,7 +294,7 @@ func TestPatch(t *testing.T) { }).Run(handler, t) }) - SubTest(t, "DeclareLengthAfterFinalChunk", func(t *testing.T, store *MockFullDataStore) { + SubTest(t, "DeclareLengthAfterFinalChunk", func(t *testing.T, store *MockFullDataStore, composer *StoreComposer) { gomock.InOrder( store.EXPECT().GetInfo("yes").Return(FileInfo{ ID: "yes", @@ -307,8 +307,8 @@ func TestPatch(t *testing.T) { ) handler, _ := NewHandler(Config{ - DataStore: store, - MaxSize: 20, + StoreComposer: composer, + MaxSize: 20, }) (&httpTest{ @@ -326,7 +326,7 @@ func TestPatch(t *testing.T) { }).Run(handler, t) }) - SubTest(t, "DeclareLengthOnNonFinalChunk", func(t *testing.T, store *MockFullDataStore) { + SubTest(t, "DeclareLengthOnNonFinalChunk", func(t *testing.T, store *MockFullDataStore, composer *StoreComposer) { gomock.InOrder( store.EXPECT().GetInfo("yes").Return(FileInfo{ ID: "yes", @@ -347,8 +347,8 @@ func TestPatch(t *testing.T) { ) handler, _ := NewHandler(Config{ - DataStore: store, - MaxSize: 20, + StoreComposer: composer, + MaxSize: 20, }) (&httpTest{ @@ -383,7 +383,7 @@ func TestPatch(t *testing.T) { }).Run(handler, t) }) - SubTest(t, "Locker", func(t *testing.T, store *MockFullDataStore) { + SubTest(t, "Locker", func(t *testing.T, store *MockFullDataStore, composer *StoreComposer) { ctrl := gomock.NewController(t) defer ctrl.Finish() locker := NewMockLocker(ctrl) @@ -398,7 +398,7 @@ func TestPatch(t *testing.T) { locker.EXPECT().UnlockUpload("yes").Return(nil), ) - composer := NewStoreComposer() + composer = NewStoreComposer() composer.UseCore(store) composer.UseLocker(locker) @@ -419,7 +419,7 @@ func TestPatch(t *testing.T) { }).Run(handler, t) }) - SubTest(t, "NotifyUploadProgress", func(t *testing.T, store *MockFullDataStore) { + SubTest(t, "NotifyUploadProgress", func(t *testing.T, store *MockFullDataStore, composer *StoreComposer) { gomock.InOrder( store.EXPECT().GetInfo("yes").Return(FileInfo{ ID: "yes", @@ -430,7 +430,7 @@ func TestPatch(t *testing.T) { ) handler, _ := NewHandler(Config{ - DataStore: store, + StoreComposer: composer, NotifyUploadProgress: true, }) @@ -486,7 +486,7 @@ func TestPatch(t *testing.T) { a.False(more) }) - SubTest(t, "StopUpload", func(t *testing.T, store *MockFullDataStore) { + SubTest(t, "StopUpload", func(t *testing.T, store *MockFullDataStore, composer *StoreComposer) { gomock.InOrder( store.EXPECT().GetInfo("yes").Return(FileInfo{ ID: "yes", @@ -498,7 +498,7 @@ func TestPatch(t *testing.T) { ) handler, _ := NewHandler(Config{ - DataStore: store, + StoreComposer: composer, NotifyUploadProgress: true, }) diff --git a/pkg/handler/post_test.go b/pkg/handler/post_test.go index 0705f25..1b3992a 100644 --- a/pkg/handler/post_test.go +++ b/pkg/handler/post_test.go @@ -13,7 +13,7 @@ import ( ) func TestPost(t *testing.T) { - SubTest(t, "Create", func(t *testing.T, store *MockFullDataStore) { + SubTest(t, "Create", func(t *testing.T, store *MockFullDataStore, composer *StoreComposer) { store.EXPECT().NewUpload(FileInfo{ Size: 300, MetaData: map[string]string{ @@ -23,7 +23,7 @@ func TestPost(t *testing.T) { }).Return("foo", nil) handler, _ := NewHandler(Config{ - DataStore: store, + StoreComposer: composer, BasePath: "https://buy.art/files/", NotifyCreatedUploads: true, }) @@ -52,7 +52,7 @@ func TestPost(t *testing.T) { a.Equal(int64(300), info.Size) }) - SubTest(t, "CreateEmptyUpload", func(t *testing.T, store *MockFullDataStore) { + SubTest(t, "CreateEmptyUpload", func(t *testing.T, store *MockFullDataStore, composer *StoreComposer) { store.EXPECT().NewUpload(FileInfo{ Size: 0, MetaData: map[string]string{}, @@ -61,7 +61,7 @@ func TestPost(t *testing.T) { store.EXPECT().FinishUpload("foo").Return(nil) handler, _ := NewHandler(Config{ - DataStore: store, + StoreComposer: composer, BasePath: "https://buy.art/files/", NotifyCompleteUploads: true, }) @@ -88,11 +88,11 @@ func TestPost(t *testing.T) { a.Equal(int64(0), info.Offset) }) - SubTest(t, "CreateExceedingMaxSizeFail", func(t *testing.T, store *MockFullDataStore) { + SubTest(t, "CreateExceedingMaxSizeFail", func(t *testing.T, store *MockFullDataStore, composer *StoreComposer) { handler, _ := NewHandler(Config{ - MaxSize: 400, - DataStore: store, - BasePath: "/files/", + MaxSize: 400, + StoreComposer: composer, + BasePath: "/files/", }) (&httpTest{ @@ -107,9 +107,9 @@ func TestPost(t *testing.T) { }).Run(handler, t) }) - SubTest(t, "InvalidUploadLengthFail", func(t *testing.T, store *MockFullDataStore) { + SubTest(t, "InvalidUploadLengthFail", func(t *testing.T, store *MockFullDataStore, composer *StoreComposer) { handler, _ := NewHandler(Config{ - DataStore: store, + StoreComposer: composer, }) (&httpTest{ @@ -123,9 +123,9 @@ func TestPost(t *testing.T) { }).Run(handler, t) }) - SubTest(t, "UploadLengthAndUploadDeferLengthFail", func(t *testing.T, store *MockFullDataStore) { + SubTest(t, "UploadLengthAndUploadDeferLengthFail", func(t *testing.T, store *MockFullDataStore, composer *StoreComposer) { handler, _ := NewHandler(Config{ - DataStore: store, + StoreComposer: composer, }) (&httpTest{ @@ -140,9 +140,9 @@ func TestPost(t *testing.T) { }).Run(handler, t) }) - SubTest(t, "NeitherUploadLengthNorUploadDeferLengthFail", func(t *testing.T, store *MockFullDataStore) { + SubTest(t, "NeitherUploadLengthNorUploadDeferLengthFail", func(t *testing.T, store *MockFullDataStore, composer *StoreComposer) { handler, _ := NewHandler(Config{ - DataStore: store, + StoreComposer: composer, }) (&httpTest{ @@ -155,9 +155,9 @@ func TestPost(t *testing.T) { }).Run(handler, t) }) - SubTest(t, "InvalidUploadDeferLengthFail", func(t *testing.T, store *MockFullDataStore) { + SubTest(t, "InvalidUploadDeferLengthFail", func(t *testing.T, store *MockFullDataStore, composer *StoreComposer) { handler, _ := NewHandler(Config{ - DataStore: store, + StoreComposer: composer, }) (&httpTest{ @@ -171,16 +171,16 @@ func TestPost(t *testing.T) { }).Run(handler, t) }) - SubTest(t, "ForwardHeaders", func(t *testing.T, store *MockFullDataStore) { - SubTest(t, "IgnoreXForwarded", func(t *testing.T, store *MockFullDataStore) { + SubTest(t, "ForwardHeaders", func(t *testing.T, store *MockFullDataStore, composer *StoreComposer) { + SubTest(t, "IgnoreXForwarded", func(t *testing.T, store *MockFullDataStore, composer *StoreComposer) { store.EXPECT().NewUpload(FileInfo{ Size: 300, MetaData: map[string]string{}, }).Return("foo", nil) handler, _ := NewHandler(Config{ - DataStore: store, - BasePath: "/files/", + StoreComposer: composer, + BasePath: "/files/", }) (&httpTest{ @@ -198,14 +198,14 @@ func TestPost(t *testing.T) { }).Run(handler, t) }) - SubTest(t, "RespectXForwarded", func(t *testing.T, store *MockFullDataStore) { + SubTest(t, "RespectXForwarded", func(t *testing.T, store *MockFullDataStore, composer *StoreComposer) { store.EXPECT().NewUpload(FileInfo{ Size: 300, MetaData: map[string]string{}, }).Return("foo", nil) handler, _ := NewHandler(Config{ - DataStore: store, + StoreComposer: composer, BasePath: "/files/", RespectForwardedHeaders: true, }) @@ -225,14 +225,14 @@ func TestPost(t *testing.T) { }).Run(handler, t) }) - SubTest(t, "RespectForwarded", func(t *testing.T, store *MockFullDataStore) { + SubTest(t, "RespectForwarded", func(t *testing.T, store *MockFullDataStore, composer *StoreComposer) { store.EXPECT().NewUpload(FileInfo{ Size: 300, MetaData: map[string]string{}, }).Return("foo", nil) handler, _ := NewHandler(Config{ - DataStore: store, + StoreComposer: composer, BasePath: "/files/", RespectForwardedHeaders: true, }) @@ -253,14 +253,14 @@ func TestPost(t *testing.T) { }).Run(handler, t) }) - SubTest(t, "FilterForwardedProtocol", func(t *testing.T, store *MockFullDataStore) { + SubTest(t, "FilterForwardedProtocol", func(t *testing.T, store *MockFullDataStore, composer *StoreComposer) { store.EXPECT().NewUpload(FileInfo{ Size: 300, MetaData: map[string]string{}, }).Return("foo", nil) handler, _ := NewHandler(Config{ - DataStore: store, + StoreComposer: composer, BasePath: "/files/", RespectForwardedHeaders: true, }) @@ -281,8 +281,8 @@ func TestPost(t *testing.T) { }) }) - SubTest(t, "WithUpload", func(t *testing.T, store *MockFullDataStore) { - SubTest(t, "Create", func(t *testing.T, store *MockFullDataStore) { + SubTest(t, "WithUpload", func(t *testing.T, store *MockFullDataStore, composer *StoreComposer) { + SubTest(t, "Create", func(t *testing.T, store *MockFullDataStore, composer *StoreComposer) { ctrl := gomock.NewController(t) defer ctrl.Finish() locker := NewMockLocker(ctrl) @@ -300,7 +300,7 @@ func TestPost(t *testing.T) { locker.EXPECT().UnlockUpload("foo"), ) - composer := NewStoreComposer() + composer = NewStoreComposer() composer.UseCore(store) composer.UseLocker(locker) @@ -326,15 +326,15 @@ func TestPost(t *testing.T) { }).Run(handler, t) }) - SubTest(t, "CreateExceedingUploadSize", func(t *testing.T, store *MockFullDataStore) { + SubTest(t, "CreateExceedingUploadSize", func(t *testing.T, store *MockFullDataStore, composer *StoreComposer) { store.EXPECT().NewUpload(FileInfo{ Size: 300, MetaData: map[string]string{}, }).Return("foo", nil) handler, _ := NewHandler(Config{ - DataStore: store, - BasePath: "/files/", + StoreComposer: composer, + BasePath: "/files/", }) (&httpTest{ @@ -349,15 +349,15 @@ func TestPost(t *testing.T) { }).Run(handler, t) }) - SubTest(t, "IncorrectContentType", func(t *testing.T, store *MockFullDataStore) { + SubTest(t, "IncorrectContentType", func(t *testing.T, store *MockFullDataStore, composer *StoreComposer) { store.EXPECT().NewUpload(FileInfo{ Size: 300, MetaData: map[string]string{}, }).Return("foo", nil) handler, _ := NewHandler(Config{ - DataStore: store, - BasePath: "/files/", + StoreComposer: composer, + BasePath: "/files/", }) (&httpTest{ @@ -377,10 +377,10 @@ func TestPost(t *testing.T) { }).Run(handler, t) }) - SubTest(t, "UploadToFinalUpload", func(t *testing.T, store *MockFullDataStore) { + SubTest(t, "UploadToFinalUpload", func(t *testing.T, store *MockFullDataStore, composer *StoreComposer) { handler, _ := NewHandler(Config{ - DataStore: store, - BasePath: "/files/", + StoreComposer: composer, + BasePath: "/files/", }) (&httpTest{ diff --git a/pkg/handler/subtest_test.go b/pkg/handler/subtest_test.go index 0147f64..3422217 100644 --- a/pkg/handler/subtest_test.go +++ b/pkg/handler/subtest_test.go @@ -3,10 +3,12 @@ package handler_test import ( "testing" + "github.com/tus/tusd/pkg/handler" + "github.com/golang/mock/gomock" ) -func SubTest(t *testing.T, name string, runTest func(*testing.T, *MockFullDataStore)) { +func SubTest(t *testing.T, name string, runTest func(*testing.T, *MockFullDataStore, *handler.StoreComposer)) { t.Run(name, func(subT *testing.T) { //subT.Parallel() @@ -14,7 +16,14 @@ func SubTest(t *testing.T, name string, runTest func(*testing.T, *MockFullDataSt defer ctrl.Finish() store := NewMockFullDataStore(ctrl) + composer := handler.NewStoreComposer() + composer.UseCore(store) + composer.UseTerminater(store) + composer.UseFinisher(store) + composer.UseGetReader(store) + composer.UseConcater(store) + composer.UseLengthDeferrer(store) - runTest(subT, store) + runTest(subT, store, composer) }) } diff --git a/pkg/handler/terminate_test.go b/pkg/handler/terminate_test.go index d74c7a7..b035d9f 100644 --- a/pkg/handler/terminate_test.go +++ b/pkg/handler/terminate_test.go @@ -11,8 +11,8 @@ import ( ) func TestTerminate(t *testing.T) { - SubTest(t, "ExtensionDiscovery", func(t *testing.T, store *MockFullDataStore) { - composer := NewStoreComposer() + SubTest(t, "ExtensionDiscovery", func(t *testing.T, store *MockFullDataStore, composer *StoreComposer) { + composer = NewStoreComposer() composer.UseCore(store) composer.UseTerminater(store) @@ -29,7 +29,7 @@ func TestTerminate(t *testing.T) { }).Run(handler, t) }) - SubTest(t, "Termination", func(t *testing.T, store *MockFullDataStore) { + SubTest(t, "Termination", func(t *testing.T, store *MockFullDataStore, composer *StoreComposer) { ctrl := gomock.NewController(t) defer ctrl.Finish() locker := NewMockLocker(ctrl) @@ -44,7 +44,7 @@ func TestTerminate(t *testing.T) { locker.EXPECT().UnlockUpload("foo"), ) - composer := NewStoreComposer() + composer = NewStoreComposer() composer.UseCore(store) composer.UseTerminater(store) composer.UseLocker(locker) @@ -73,8 +73,8 @@ func TestTerminate(t *testing.T) { a.Equal(int64(10), info.Size) }) - SubTest(t, "NotProvided", func(t *testing.T, store *MockFullDataStore) { - composer := NewStoreComposer() + SubTest(t, "NotProvided", func(t *testing.T, store *MockFullDataStore, composer *StoreComposer) { + composer = NewStoreComposer() composer.UseCore(store) handler, _ := NewUnroutedHandler(Config{