@@ -11,12 +11,14 @@ import (
1111 "fmt"
1212 "html/template"
1313 "io"
14+ "io/fs"
1415 "mime/multipart"
1516 "net"
1617 "net/http"
1718 "net/http/httptest"
1819 "net/url"
1920 "os"
21+ "path/filepath"
2022 "reflect"
2123 "strconv"
2224 "strings"
@@ -155,6 +157,45 @@ func TestSaveUploadedCreateFailed(t *testing.T) {
155157 require .Error (t , c .SaveUploadedFile (f , "/" ))
156158}
157159
160+ func TestSaveUploadedFileWithPermission (t * testing.T ) {
161+ buf := new (bytes.Buffer )
162+ mw := multipart .NewWriter (buf )
163+ w , err := mw .CreateFormFile ("file" , "permission_test" )
164+ require .NoError (t , err )
165+ _ , err = w .Write ([]byte ("permission_test" ))
166+ require .NoError (t , err )
167+ mw .Close ()
168+ c , _ := CreateTestContext (httptest .NewRecorder ())
169+ c .Request , _ = http .NewRequest ("POST" , "/" , buf )
170+ c .Request .Header .Set ("Content-Type" , mw .FormDataContentType ())
171+ f , err := c .FormFile ("file" )
172+ require .NoError (t , err )
173+ assert .Equal (t , "permission_test" , f .Filename )
174+ var mode fs.FileMode = 0o755
175+ require .NoError (t , c .SaveUploadedFile (f , "permission_test" , mode ))
176+ info , err := os .Stat (filepath .Dir ("permission_test" ))
177+ require .NoError (t , err )
178+ assert .Equal (t , info .Mode ().Perm (), mode )
179+ }
180+
181+ func TestSaveUploadedFileWithPermissionFailed (t * testing.T ) {
182+ buf := new (bytes.Buffer )
183+ mw := multipart .NewWriter (buf )
184+ w , err := mw .CreateFormFile ("file" , "permission_test" )
185+ require .NoError (t , err )
186+ _ , err = w .Write ([]byte ("permission_test" ))
187+ require .NoError (t , err )
188+ mw .Close ()
189+ c , _ := CreateTestContext (httptest .NewRecorder ())
190+ c .Request , _ = http .NewRequest ("POST" , "/" , buf )
191+ c .Request .Header .Set ("Content-Type" , mw .FormDataContentType ())
192+ f , err := c .FormFile ("file" )
193+ require .NoError (t , err )
194+ assert .Equal (t , "permission_test" , f .Filename )
195+ var mode fs.FileMode = 0o644
196+ require .Error (t , c .SaveUploadedFile (f , "test/permission_test" , mode ))
197+ }
198+
158199func TestContextReset (t * testing.T ) {
159200 router := New ()
160201 c := router .allocateContext (0 )
0 commit comments