blob: 972ebdcf776c9116fb9833493291308b4ab9afe4 [file] [log] [blame]
// Copyright 2016 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package app
import (
"fmt"
"io"
"io/ioutil"
"mime/multipart"
"net/http"
"net/http/httptest"
"testing"
_ "github.com/mattn/go-sqlite3"
"golang.org/x/perf/storage/db"
"golang.org/x/perf/storage/fs"
)
func TestUpload(t *testing.T) {
db, err := db.OpenSQL("sqlite3", ":memory:")
if err != nil {
t.Fatalf("open database: %v", err)
}
defer db.Close()
fs := fs.NewMemFS()
app := &App{DB: db, FS: fs}
srv := httptest.NewServer(http.HandlerFunc(app.upload))
defer srv.Close()
pr, pw := io.Pipe()
mpw := multipart.NewWriter(pw)
go func() {
defer pw.Close()
defer mpw.Close()
// Write the parts here
w, err := mpw.CreateFormFile("file", "1.txt")
if err != nil {
t.Errorf("CreateFormFile: %v", err)
}
fmt.Fprintf(w, "key: value\nBenchmarkOne 5 ns/op\n")
}()
resp, err := http.Post(srv.URL, mpw.FormDataContentType(), pr)
if err != nil {
t.Fatalf("post /upload: %v", err)
}
defer resp.Body.Close()
if resp.StatusCode != 200 {
t.Errorf("post /upload: %v", resp.Status)
}
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
t.Errorf("reading /upload response: %v", err)
}
t.Logf("/upload response:\n%s", body)
if len(fs.Files()) != 1 {
t.Errorf("/upload wrote %d files, want 1", len(fs.Files()))
}
}