code.gitea.io/gitea@v1.19.3/modules/upload/upload_test.go (about) 1 // Copyright 2019 The Gitea Authors. All rights reserved. 2 // SPDX-License-Identifier: MIT 3 4 package upload 5 6 import ( 7 "bytes" 8 "compress/gzip" 9 "testing" 10 11 "github.com/stretchr/testify/assert" 12 ) 13 14 func TestUpload(t *testing.T) { 15 testContent := []byte(`This is a plain text file.`) 16 var b bytes.Buffer 17 w := gzip.NewWriter(&b) 18 w.Write(testContent) 19 w.Close() 20 21 kases := []struct { 22 data []byte 23 fileName string 24 allowedTypes string 25 err error 26 }{ 27 { 28 data: testContent, 29 fileName: "test.txt", 30 allowedTypes: "", 31 err: nil, 32 }, 33 { 34 data: testContent, 35 fileName: "dir/test.txt", 36 allowedTypes: "", 37 err: nil, 38 }, 39 { 40 data: testContent, 41 fileName: "../../../test.txt", 42 allowedTypes: "", 43 err: nil, 44 }, 45 { 46 data: testContent, 47 fileName: "test.txt", 48 allowedTypes: "", 49 err: nil, 50 }, 51 { 52 data: testContent, 53 fileName: "test.txt", 54 allowedTypes: ",", 55 err: nil, 56 }, 57 { 58 data: testContent, 59 fileName: "test.txt", 60 allowedTypes: "|", 61 err: nil, 62 }, 63 { 64 data: testContent, 65 fileName: "test.txt", 66 allowedTypes: "*/*", 67 err: nil, 68 }, 69 { 70 data: testContent, 71 fileName: "test.txt", 72 allowedTypes: "*/*,", 73 err: nil, 74 }, 75 { 76 data: testContent, 77 fileName: "test.txt", 78 allowedTypes: "*/*|", 79 err: nil, 80 }, 81 { 82 data: testContent, 83 fileName: "test.txt", 84 allowedTypes: "text/plain", 85 err: nil, 86 }, 87 { 88 data: testContent, 89 fileName: "dir/test.txt", 90 allowedTypes: "text/plain", 91 err: nil, 92 }, 93 { 94 data: testContent, 95 fileName: "/dir.txt/test.js", 96 allowedTypes: ".js", 97 err: nil, 98 }, 99 { 100 data: testContent, 101 fileName: "test.txt", 102 allowedTypes: " text/plain ", 103 err: nil, 104 }, 105 { 106 data: testContent, 107 fileName: "test.txt", 108 allowedTypes: ".txt", 109 err: nil, 110 }, 111 { 112 data: testContent, 113 fileName: "test.txt", 114 allowedTypes: " .txt,.js", 115 err: nil, 116 }, 117 { 118 data: testContent, 119 fileName: "test.txt", 120 allowedTypes: " .txt|.js", 121 err: nil, 122 }, 123 { 124 data: testContent, 125 fileName: "../../test.txt", 126 allowedTypes: " .txt|.js", 127 err: nil, 128 }, 129 { 130 data: testContent, 131 fileName: "test.txt", 132 allowedTypes: " .txt ,.js ", 133 err: nil, 134 }, 135 { 136 data: testContent, 137 fileName: "test.txt", 138 allowedTypes: "text/plain, .txt", 139 err: nil, 140 }, 141 { 142 data: testContent, 143 fileName: "test.txt", 144 allowedTypes: "text/*", 145 err: nil, 146 }, 147 { 148 data: testContent, 149 fileName: "test.txt", 150 allowedTypes: "text/*,.js", 151 err: nil, 152 }, 153 { 154 data: testContent, 155 fileName: "test.txt", 156 allowedTypes: "text/**", 157 err: ErrFileTypeForbidden{"text/plain; charset=utf-8"}, 158 }, 159 { 160 data: testContent, 161 fileName: "test.txt", 162 allowedTypes: "application/x-gzip", 163 err: ErrFileTypeForbidden{"text/plain; charset=utf-8"}, 164 }, 165 { 166 data: testContent, 167 fileName: "test.txt", 168 allowedTypes: ".zip", 169 err: ErrFileTypeForbidden{"text/plain; charset=utf-8"}, 170 }, 171 { 172 data: testContent, 173 fileName: "test.txt", 174 allowedTypes: ".zip,.txtx", 175 err: ErrFileTypeForbidden{"text/plain; charset=utf-8"}, 176 }, 177 { 178 data: testContent, 179 fileName: "test.txt", 180 allowedTypes: ".zip|.txtx", 181 err: ErrFileTypeForbidden{"text/plain; charset=utf-8"}, 182 }, 183 { 184 data: b.Bytes(), 185 fileName: "test.txt", 186 allowedTypes: "application/x-gzip", 187 err: nil, 188 }, 189 } 190 191 for _, kase := range kases { 192 assert.Equal(t, kase.err, Verify(kase.data, kase.fileName, kase.allowedTypes)) 193 } 194 }