mirror of
https://github.com/skidoodle/safebin.git
synced 2026-04-28 11:17:42 +02:00
+74
-21
@@ -16,13 +16,21 @@ import (
|
||||
|
||||
func setupTestApp(t *testing.T) (*App, string) {
|
||||
storageDir := t.TempDir()
|
||||
os.MkdirAll(filepath.Join(storageDir, TempDirName), 0700)
|
||||
if err := os.MkdirAll(filepath.Join(storageDir, TempDirName), 0700); err != nil {
|
||||
t.Fatalf("Failed to create temp dir: %v", err)
|
||||
}
|
||||
|
||||
webDir := filepath.Join(storageDir, "web")
|
||||
os.MkdirAll(webDir, 0700)
|
||||
if err := os.MkdirAll(webDir, 0700); err != nil {
|
||||
t.Fatalf("Failed to create web dir: %v", err)
|
||||
}
|
||||
|
||||
os.WriteFile(filepath.Join(webDir, "layout.html"), []byte(`{{define "layout"}}{{template "content" .}}{{end}}`), 0600)
|
||||
os.WriteFile(filepath.Join(webDir, "home.html"), []byte(`{{define "content"}}OK{{end}}`), 0600)
|
||||
if err := os.WriteFile(filepath.Join(webDir, "layout.html"), []byte(`{{define "layout"}}{{template "content" .}}{{end}}`), 0600); err != nil {
|
||||
t.Fatalf("Failed to write layout.html: %v", err)
|
||||
}
|
||||
if err := os.WriteFile(filepath.Join(webDir, "home.html"), []byte(`{{define "content"}}OK{{end}}`), 0600); err != nil {
|
||||
t.Fatalf("Failed to write home.html: %v", err)
|
||||
}
|
||||
|
||||
testFS := os.DirFS(webDir)
|
||||
tmpl := ParseTemplates(testFS)
|
||||
@@ -31,7 +39,11 @@ func setupTestApp(t *testing.T) (*App, string) {
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to init db: %v", err)
|
||||
}
|
||||
t.Cleanup(func() { db.Close() })
|
||||
t.Cleanup(func() {
|
||||
if err := db.Close(); err != nil {
|
||||
t.Errorf("Failed to close DB: %v", err)
|
||||
}
|
||||
})
|
||||
|
||||
app := &App{
|
||||
Conf: Config{
|
||||
@@ -58,10 +70,17 @@ func TestIntegration_StandardUploadAndDownload(t *testing.T) {
|
||||
|
||||
body := &bytes.Buffer{}
|
||||
writer := multipart.NewWriter(body)
|
||||
part, _ := writer.CreateFormFile("file", "test.txt")
|
||||
part, err := writer.CreateFormFile("file", "test.txt")
|
||||
if err != nil {
|
||||
t.Fatalf("CreateFormFile failed: %v", err)
|
||||
}
|
||||
content := []byte("Hello Safebin")
|
||||
part.Write(content)
|
||||
writer.Close()
|
||||
if _, err := part.Write(content); err != nil {
|
||||
t.Fatalf("Write part failed: %v", err)
|
||||
}
|
||||
if err := writer.Close(); err != nil {
|
||||
t.Fatalf("Writer close failed: %v", err)
|
||||
}
|
||||
|
||||
req, _ := http.NewRequest("POST", server.URL+"/", body)
|
||||
req.Header.Set("Content-Type", writer.FormDataContentType())
|
||||
@@ -70,7 +89,11 @@ func TestIntegration_StandardUploadAndDownload(t *testing.T) {
|
||||
if err != nil {
|
||||
t.Fatalf("Upload request failed: %v", err)
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
defer func() {
|
||||
if err := resp.Body.Close(); err != nil {
|
||||
t.Errorf("Failed to close response body: %v", err)
|
||||
}
|
||||
}()
|
||||
|
||||
if resp.StatusCode != http.StatusOK {
|
||||
t.Fatalf("Upload failed status: %d", resp.StatusCode)
|
||||
@@ -86,7 +109,11 @@ func TestIntegration_StandardUploadAndDownload(t *testing.T) {
|
||||
if err != nil {
|
||||
t.Fatalf("Download request failed: %v", err)
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
defer func() {
|
||||
if err := resp.Body.Close(); err != nil {
|
||||
t.Errorf("Failed to close download response body: %v", err)
|
||||
}
|
||||
}()
|
||||
|
||||
if resp.StatusCode != http.StatusOK {
|
||||
t.Fatalf("Download failed status: %d", resp.StatusCode)
|
||||
@@ -119,7 +146,11 @@ func TestIntegration_ChunkedUpload(t *testing.T) {
|
||||
}
|
||||
|
||||
resp := postForm(t, finishURL, form)
|
||||
defer resp.Body.Close()
|
||||
defer func() {
|
||||
if err := resp.Body.Close(); err != nil {
|
||||
t.Errorf("Failed to close finish response body: %v", err)
|
||||
}
|
||||
}()
|
||||
|
||||
if resp.StatusCode != http.StatusOK {
|
||||
t.Fatalf("Finish failed: %d", resp.StatusCode)
|
||||
@@ -131,9 +162,14 @@ func TestIntegration_ChunkedUpload(t *testing.T) {
|
||||
slugWithExt := parts[len(parts)-1]
|
||||
|
||||
downloadURL := fmt.Sprintf("%s/%s", server.URL, slugWithExt)
|
||||
dlResp, _ := http.Get(downloadURL)
|
||||
dlResp, err := http.Get(downloadURL)
|
||||
if err != nil {
|
||||
t.Fatalf("Download request failed: %v", err)
|
||||
}
|
||||
dlBytes, _ := io.ReadAll(dlResp.Body)
|
||||
dlResp.Body.Close()
|
||||
if err := dlResp.Body.Close(); err != nil {
|
||||
t.Errorf("Failed to close download response body: %v", err)
|
||||
}
|
||||
|
||||
if !bytes.Equal(content, dlBytes) {
|
||||
t.Errorf("Chunked reassembly failed. Want %s, got %s", content, dlBytes)
|
||||
@@ -143,11 +179,22 @@ func TestIntegration_ChunkedUpload(t *testing.T) {
|
||||
func uploadChunk(t *testing.T, baseURL, uid string, idx int, data []byte) {
|
||||
body := &bytes.Buffer{}
|
||||
writer := multipart.NewWriter(body)
|
||||
writer.WriteField("upload_id", uid)
|
||||
writer.WriteField("index", fmt.Sprintf("%d", idx))
|
||||
part, _ := writer.CreateFormFile("chunk", "blob")
|
||||
part.Write(data)
|
||||
writer.Close()
|
||||
if err := writer.WriteField("upload_id", uid); err != nil {
|
||||
t.Fatalf("WriteField upload_id failed: %v", err)
|
||||
}
|
||||
if err := writer.WriteField("index", fmt.Sprintf("%d", idx)); err != nil {
|
||||
t.Fatalf("WriteField index failed: %v", err)
|
||||
}
|
||||
part, err := writer.CreateFormFile("chunk", "blob")
|
||||
if err != nil {
|
||||
t.Fatalf("CreateFormFile failed: %v", err)
|
||||
}
|
||||
if _, err := part.Write(data); err != nil {
|
||||
t.Fatalf("Write part failed: %v", err)
|
||||
}
|
||||
if err := writer.Close(); err != nil {
|
||||
t.Fatalf("Writer close failed: %v", err)
|
||||
}
|
||||
|
||||
req, _ := http.NewRequest("POST", baseURL+"/upload/chunk", body)
|
||||
req.Header.Set("Content-Type", writer.FormDataContentType())
|
||||
@@ -155,16 +202,22 @@ func uploadChunk(t *testing.T, baseURL, uid string, idx int, data []byte) {
|
||||
if err != nil || resp.StatusCode != http.StatusOK {
|
||||
t.Fatalf("Chunk %d upload failed: %v", idx, err)
|
||||
}
|
||||
resp.Body.Close()
|
||||
if err := resp.Body.Close(); err != nil {
|
||||
t.Errorf("Failed to close chunk response body: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
func postForm(t *testing.T, url string, fields map[string]string) *http.Response {
|
||||
body := &bytes.Buffer{}
|
||||
writer := multipart.NewWriter(body)
|
||||
for k, v := range fields {
|
||||
writer.WriteField(k, v)
|
||||
if err := writer.WriteField(k, v); err != nil {
|
||||
t.Fatalf("WriteField %s failed: %v", k, err)
|
||||
}
|
||||
}
|
||||
if err := writer.Close(); err != nil {
|
||||
t.Fatalf("Writer close failed: %v", err)
|
||||
}
|
||||
writer.Close()
|
||||
|
||||
req, _ := http.NewRequest("POST", url, body)
|
||||
req.Header.Set("Content-Type", writer.FormDataContentType())
|
||||
|
||||
Reference in New Issue
Block a user