Платформа ЦРНП "Мирокод" для разработки проектов
https://git.mirocod.ru
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
195 lines
4.0 KiB
195 lines
4.0 KiB
// Copyright 2019 The Gitea Authors. All rights reserved. |
|
// Use of this source code is governed by a MIT-style |
|
// license that can be found in the LICENSE file. |
|
|
|
package upload |
|
|
|
import ( |
|
"bytes" |
|
"compress/gzip" |
|
"testing" |
|
|
|
"github.com/stretchr/testify/assert" |
|
) |
|
|
|
func TestUpload(t *testing.T) { |
|
testContent := []byte(`This is a plain text file.`) |
|
var b bytes.Buffer |
|
w := gzip.NewWriter(&b) |
|
w.Write(testContent) |
|
w.Close() |
|
|
|
kases := []struct { |
|
data []byte |
|
fileName string |
|
allowedTypes string |
|
err error |
|
}{ |
|
{ |
|
data: testContent, |
|
fileName: "test.txt", |
|
allowedTypes: "", |
|
err: nil, |
|
}, |
|
{ |
|
data: testContent, |
|
fileName: "dir/test.txt", |
|
allowedTypes: "", |
|
err: nil, |
|
}, |
|
{ |
|
data: testContent, |
|
fileName: "../../../test.txt", |
|
allowedTypes: "", |
|
err: nil, |
|
}, |
|
{ |
|
data: testContent, |
|
fileName: "test.txt", |
|
allowedTypes: "", |
|
err: nil, |
|
}, |
|
{ |
|
data: testContent, |
|
fileName: "test.txt", |
|
allowedTypes: ",", |
|
err: nil, |
|
}, |
|
{ |
|
data: testContent, |
|
fileName: "test.txt", |
|
allowedTypes: "|", |
|
err: nil, |
|
}, |
|
{ |
|
data: testContent, |
|
fileName: "test.txt", |
|
allowedTypes: "*/*", |
|
err: nil, |
|
}, |
|
{ |
|
data: testContent, |
|
fileName: "test.txt", |
|
allowedTypes: "*/*,", |
|
err: nil, |
|
}, |
|
{ |
|
data: testContent, |
|
fileName: "test.txt", |
|
allowedTypes: "*/*|", |
|
err: nil, |
|
}, |
|
{ |
|
data: testContent, |
|
fileName: "test.txt", |
|
allowedTypes: "text/plain", |
|
err: nil, |
|
}, |
|
{ |
|
data: testContent, |
|
fileName: "dir/test.txt", |
|
allowedTypes: "text/plain", |
|
err: nil, |
|
}, |
|
{ |
|
data: testContent, |
|
fileName: "/dir.txt/test.js", |
|
allowedTypes: ".js", |
|
err: nil, |
|
}, |
|
{ |
|
data: testContent, |
|
fileName: "test.txt", |
|
allowedTypes: " text/plain ", |
|
err: nil, |
|
}, |
|
{ |
|
data: testContent, |
|
fileName: "test.txt", |
|
allowedTypes: ".txt", |
|
err: nil, |
|
}, |
|
{ |
|
data: testContent, |
|
fileName: "test.txt", |
|
allowedTypes: " .txt,.js", |
|
err: nil, |
|
}, |
|
{ |
|
data: testContent, |
|
fileName: "test.txt", |
|
allowedTypes: " .txt|.js", |
|
err: nil, |
|
}, |
|
{ |
|
data: testContent, |
|
fileName: "../../test.txt", |
|
allowedTypes: " .txt|.js", |
|
err: nil, |
|
}, |
|
{ |
|
data: testContent, |
|
fileName: "test.txt", |
|
allowedTypes: " .txt ,.js ", |
|
err: nil, |
|
}, |
|
{ |
|
data: testContent, |
|
fileName: "test.txt", |
|
allowedTypes: "text/plain, .txt", |
|
err: nil, |
|
}, |
|
{ |
|
data: testContent, |
|
fileName: "test.txt", |
|
allowedTypes: "text/*", |
|
err: nil, |
|
}, |
|
{ |
|
data: testContent, |
|
fileName: "test.txt", |
|
allowedTypes: "text/*,.js", |
|
err: nil, |
|
}, |
|
{ |
|
data: testContent, |
|
fileName: "test.txt", |
|
allowedTypes: "text/**", |
|
err: ErrFileTypeForbidden{"text/plain; charset=utf-8"}, |
|
}, |
|
{ |
|
data: testContent, |
|
fileName: "test.txt", |
|
allowedTypes: "application/x-gzip", |
|
err: ErrFileTypeForbidden{"text/plain; charset=utf-8"}, |
|
}, |
|
{ |
|
data: testContent, |
|
fileName: "test.txt", |
|
allowedTypes: ".zip", |
|
err: ErrFileTypeForbidden{"text/plain; charset=utf-8"}, |
|
}, |
|
{ |
|
data: testContent, |
|
fileName: "test.txt", |
|
allowedTypes: ".zip,.txtx", |
|
err: ErrFileTypeForbidden{"text/plain; charset=utf-8"}, |
|
}, |
|
{ |
|
data: testContent, |
|
fileName: "test.txt", |
|
allowedTypes: ".zip|.txtx", |
|
err: ErrFileTypeForbidden{"text/plain; charset=utf-8"}, |
|
}, |
|
{ |
|
data: b.Bytes(), |
|
fileName: "test.txt", |
|
allowedTypes: "application/x-gzip", |
|
err: nil, |
|
}, |
|
} |
|
|
|
for _, kase := range kases { |
|
assert.Equal(t, kase.err, Verify(kase.data, kase.fileName, kase.allowedTypes)) |
|
} |
|
}
|
|
|