From 09768639477f1b56f7f67b54cf1e195c7ca56330 Mon Sep 17 00:00:00 2001 From: Adam Jensen Date: Sun, 13 May 2018 09:53:35 -0400 Subject: [PATCH] Add DeclareLength tests for PATCH requests --- patch_test.go | 123 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 123 insertions(+) diff --git a/patch_test.go b/patch_test.go index c62d4b1..9fa2fab 100644 --- a/patch_test.go +++ b/patch_test.go @@ -257,6 +257,129 @@ func TestPatch(t *testing.T) { }).Run(handler, t) }) + SubTest(t, "DeclareLengthOnFinalChunk", func(t *testing.T, store *MockFullDataStore) { + gomock.InOrder( + store.EXPECT().GetInfo("yes").Return(FileInfo{ + ID: "yes", + Offset: 5, + Size: 0, + SizeIsDeferred: true, + }, nil), + store.EXPECT().DeclareLength("yes", int64(20)), + store.EXPECT().WriteChunk("yes", int64(5), NewReaderMatcher("hellothisismore")).Return(int64(15), nil), + store.EXPECT().FinishUpload("yes"), + ) + + handler, _ := NewHandler(Config{ + DataStore: store, + }) + + body := strings.NewReader("hellothisismore") + + (&httpTest{ + Method: "PATCH", + URL: "yes", + ReqHeader: map[string]string{ + "Tus-Resumable": "1.0.0", + "Content-Type": "application/offset+octet-stream", + "Upload-Offset": "5", + "Upload-Length": "20", + }, + ReqBody: body, + Code: http.StatusNoContent, + ResHeader: map[string]string{ + "Upload-Offset": "20", + }, + }).Run(handler, t) + }) + + SubTest(t, "DeclareLengthAfterFinalChunk", func(t *testing.T, store *MockFullDataStore) { + gomock.InOrder( + store.EXPECT().GetInfo("yes").Return(FileInfo{ + ID: "yes", + Offset: 20, + Size: 0, + SizeIsDeferred: true, + }, nil), + store.EXPECT().DeclareLength("yes", int64(20)), + store.EXPECT().FinishUpload("yes"), + ) + + handler, _ := NewHandler(Config{ + DataStore: store, + }) + + (&httpTest{ + Method: "PATCH", + URL: "yes", + ReqHeader: map[string]string{ + "Tus-Resumable": "1.0.0", + "Content-Type": "application/offset+octet-stream", + "Upload-Offset": "20", + "Upload-Length": "20", + }, + ReqBody: nil, + Code: http.StatusNoContent, + ResHeader: map[string]string{}, + }).Run(handler, t) + }) + + SubTest(t, "DeclareLengthOnNonFinalChunk", func(t *testing.T, store *MockFullDataStore) { + gomock.InOrder( + store.EXPECT().GetInfo("yes").Return(FileInfo{ + ID: "yes", + Offset: 5, + Size: 0, + SizeIsDeferred: true, + }, nil), + store.EXPECT().DeclareLength("yes", int64(20)), + store.EXPECT().WriteChunk("yes", int64(5), NewReaderMatcher("hello")).Return(int64(5), nil), + store.EXPECT().GetInfo("yes").Return(FileInfo{ + ID: "yes", + Offset: 10, + Size: 20, + SizeIsDeferred: false, + }, nil), + store.EXPECT().WriteChunk("yes", int64(10), NewReaderMatcher("thisismore")).Return(int64(10), nil), + store.EXPECT().FinishUpload("yes"), + ) + + handler, _ := NewHandler(Config{ + DataStore: store, + }) + + (&httpTest{ + Method: "PATCH", + URL: "yes", + ReqHeader: map[string]string{ + "Tus-Resumable": "1.0.0", + "Content-Type": "application/offset+octet-stream", + "Upload-Offset": "5", + "Upload-Length": "20", + }, + ReqBody: strings.NewReader("hello"), + Code: http.StatusNoContent, + ResHeader: map[string]string{ + "Upload-Offset": "10", + }, + }).Run(handler, t) + + (&httpTest{ + Method: "PATCH", + URL: "yes", + ReqHeader: map[string]string{ + "Tus-Resumable": "1.0.0", + "Content-Type": "application/offset+octet-stream", + "Upload-Offset": "10", + }, + ReqBody: strings.NewReader("thisismore"), + Code: http.StatusNoContent, + ResHeader: map[string]string{ + "Upload-Offset": "20", + }, + }).Run(handler, t) + }) + SubTest(t, "Locker", func(t *testing.T, store *MockFullDataStore) { ctrl := gomock.NewController(t) defer ctrl.Finish()