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  }