package uploadpolicy import "testing" func TestValidateFileName(t *testing.T) { tests := []struct { name string value string wantErr bool }{ {name: "known extension", value: "photo.PNG"}, {name: "document", value: "report.pdf"}, {name: "empty", value: "", wantErr: true}, {name: "unknown extension", value: "payload.exe", wantErr: true}, {name: "path", value: "../photo.png", wantErr: true}, {name: "backslash path", value: `dir\photo.png`, wantErr: true}, {name: "surrounding whitespace", value: "photo.png ", wantErr: true}, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { if err := ValidateFileName(tt.value); (err != nil) != tt.wantErr { t.Fatalf("ValidateFileName(%q) error = %v, wantErr %v", tt.value, err, tt.wantErr) } }) } } func TestCanServeInline(t *testing.T) { for _, filename := range []string{"photo.png", "track.MP3", "movie.webm"} { if !CanServeInline(filename) { t.Errorf("CanServeInline(%q) = false", filename) } } for _, filename := range []string{"report.pdf", "archive.zip", "payload.exe", "../photo.png"} { if CanServeInline(filename) { t.Errorf("CanServeInline(%q) = true", filename) } } } func TestMIMEByExtension(t *testing.T) { tests := map[string]string{ ".JSON": "application/json", ".mp3": "audio/mpeg", ".csv": "text/csv", ".exe": "", } for ext, want := range tests { if got := MIMEByExtension(ext); got != want { t.Errorf("MIMEByExtension(%q) = %q, want %q", ext, got, want) } } }