添加本地上传的功能
This commit is contained in:
102
storage/local_test.go
Normal file
102
storage/local_test.go
Normal file
@@ -0,0 +1,102 @@
|
||||
package storage
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"context"
|
||||
"io"
|
||||
"testing"
|
||||
|
||||
"git.toowon.com/jimmy/go-common/config"
|
||||
)
|
||||
|
||||
func TestLocalStorage_UploadGetExistsDelete(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
cfg := &config.LocalStorageConfig{
|
||||
BaseDir: t.TempDir(),
|
||||
PublicURL: "http://localhost:8080/file?key={objectKey}",
|
||||
}
|
||||
s, err := NewLocalStorage(cfg)
|
||||
if err != nil {
|
||||
t.Fatalf("NewLocalStorage error: %v", err)
|
||||
}
|
||||
|
||||
ctx := context.Background()
|
||||
objectKey := "uploads/2026/01/30/hello.txt"
|
||||
body := []byte("hello local storage")
|
||||
|
||||
if err := s.Upload(ctx, objectKey, bytes.NewReader(body), "text/plain"); err != nil {
|
||||
t.Fatalf("Upload error: %v", err)
|
||||
}
|
||||
|
||||
exists, err := s.Exists(ctx, objectKey)
|
||||
if err != nil {
|
||||
t.Fatalf("Exists error: %v", err)
|
||||
}
|
||||
if !exists {
|
||||
t.Fatalf("expected exists=true")
|
||||
}
|
||||
|
||||
rc, err := s.GetObject(ctx, objectKey)
|
||||
if err != nil {
|
||||
t.Fatalf("GetObject error: %v", err)
|
||||
}
|
||||
defer rc.Close()
|
||||
|
||||
got, err := io.ReadAll(rc)
|
||||
if err != nil {
|
||||
t.Fatalf("ReadAll error: %v", err)
|
||||
}
|
||||
if !bytes.Equal(got, body) {
|
||||
t.Fatalf("content mismatch: got=%q want=%q", string(got), string(body))
|
||||
}
|
||||
|
||||
u, err := s.GetURL(objectKey, 0)
|
||||
if err != nil {
|
||||
t.Fatalf("GetURL error: %v", err)
|
||||
}
|
||||
if u == "" {
|
||||
t.Fatalf("expected non-empty url")
|
||||
}
|
||||
|
||||
if err := s.Delete(ctx, objectKey); err != nil {
|
||||
t.Fatalf("Delete error: %v", err)
|
||||
}
|
||||
|
||||
exists, err = s.Exists(ctx, objectKey)
|
||||
if err != nil {
|
||||
t.Fatalf("Exists error: %v", err)
|
||||
}
|
||||
if exists {
|
||||
t.Fatalf("expected exists=false after delete")
|
||||
}
|
||||
}
|
||||
|
||||
func TestNormalizeObjectKey(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
if _, err := normalizeObjectKey(""); err == nil {
|
||||
t.Fatalf("expected error for empty objectKey")
|
||||
}
|
||||
if _, err := normalizeObjectKey(" "); err == nil {
|
||||
t.Fatalf("expected error for blank objectKey")
|
||||
}
|
||||
if _, err := normalizeObjectKey("."); err == nil {
|
||||
t.Fatalf("expected error for '.'")
|
||||
}
|
||||
clean1, err := normalizeObjectKey("a/b/")
|
||||
if err != nil {
|
||||
t.Fatalf("normalizeObjectKey error: %v", err)
|
||||
}
|
||||
if clean1 != "a/b" {
|
||||
t.Fatalf("unexpected clean key: %q", clean1)
|
||||
}
|
||||
|
||||
clean, err := normalizeObjectKey(`\a\..\b\c.txt`)
|
||||
if err != nil {
|
||||
t.Fatalf("normalizeObjectKey error: %v", err)
|
||||
}
|
||||
if clean != "b/c.txt" {
|
||||
t.Fatalf("unexpected clean key: %q", clean)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user