@@ -54,9 +54,14 @@ func TestTerminate(t *testing.T) {
54
54
composer .UseTerminater (store )
55
55
composer .UseLocker (locker )
56
56
57
+ preTerminateCalled := false
57
58
handler , _ := NewHandler (Config {
58
59
StoreComposer : composer ,
59
60
NotifyTerminatedUploads : true ,
61
+ PreUploadTerminateCallback : func (hook HookEvent ) (HTTPResponse , error ) {
62
+ preTerminateCalled = true
63
+ return HTTPResponse {}, nil
64
+ },
60
65
})
61
66
62
67
c := make (chan HookEvent , 1 )
@@ -81,6 +86,69 @@ func TestTerminate(t *testing.T) {
81
86
req := event .HTTPRequest
82
87
a .Equal ("DELETE" , req .Method )
83
88
a .Equal ("foo" , req .URI )
89
+
90
+ a .True (preTerminateCalled )
91
+ })
92
+
93
+ SubTest (t , "RejectTermination" , func (t * testing.T , store * MockFullDataStore , _ * StoreComposer ) {
94
+ ctrl := gomock .NewController (t )
95
+ defer ctrl .Finish ()
96
+ locker := NewMockFullLocker (ctrl )
97
+ lock := NewMockFullLock (ctrl )
98
+ upload := NewMockFullUpload (ctrl )
99
+
100
+ gomock .InOrder (
101
+ locker .EXPECT ().NewLock ("foo" ).Return (lock , nil ),
102
+ lock .EXPECT ().Lock (gomock .Any (), gomock .Any ()).Return (nil ),
103
+ store .EXPECT ().GetUpload (gomock .Any (), "foo" ).Return (upload , nil ),
104
+ upload .EXPECT ().GetInfo (gomock .Any ()).Return (FileInfo {
105
+ ID : "foo" ,
106
+ Size : 10 ,
107
+ }, nil ),
108
+ lock .EXPECT ().Unlock ().Return (nil ),
109
+ )
110
+
111
+ composer := NewStoreComposer ()
112
+ composer .UseCore (store )
113
+ composer .UseTerminater (store )
114
+ composer .UseLocker (locker )
115
+
116
+ a := assert .New (t )
117
+
118
+ handler , _ := NewHandler (Config {
119
+ StoreComposer : composer ,
120
+ NotifyTerminatedUploads : true ,
121
+ PreUploadTerminateCallback : func (hook HookEvent ) (HTTPResponse , error ) {
122
+ a .Equal ("foo" , hook .Upload .ID )
123
+ a .Equal (int64 (10 ), hook .Upload .Size )
124
+
125
+ req := hook .HTTPRequest
126
+ a .Equal ("DELETE" , req .Method )
127
+ a .Equal ("foo" , req .URI )
128
+
129
+ return HTTPResponse {}, ErrUploadTerminationRejected
130
+ },
131
+ })
132
+
133
+ c := make (chan HookEvent , 1 )
134
+ handler .TerminatedUploads = c
135
+
136
+ (& httpTest {
137
+ Method : "DELETE" ,
138
+ URL : "foo" ,
139
+ ReqHeader : map [string ]string {
140
+ "Tus-Resumable" : "1.0.0" ,
141
+ },
142
+ Code : http .StatusBadRequest ,
143
+ ResBody : "ERR_UPLOAD_TERMINATION_REJECTED: upload termination has been rejected by server\n " ,
144
+ }).Run (handler , t )
145
+
146
+ select {
147
+ case <- c :
148
+ a .Fail ("Expected termination to be rejected" )
149
+ default :
150
+ // Expected no event
151
+ }
84
152
})
85
153
86
154
SubTest (t , "NotProvided" , func (t * testing.T , store * MockFullDataStore , _ * StoreComposer ) {
0 commit comments