Files
BackupX/server/internal/storage/localdisk/provider_test.go
2026-03-17 13:29:09 +08:00

53 lines
1.6 KiB
Go

package localdisk
import (
"context"
"io"
"strings"
"testing"
)
func TestLocalDiskProviderCRUD(t *testing.T) {
providerAny, err := (Factory{}).New(context.Background(), map[string]any{"basePath": t.TempDir()})
if err != nil {
t.Fatalf("Factory.New returned error: %v", err)
}
provider := providerAny.(*Provider)
if err := provider.TestConnection(context.Background()); err != nil {
t.Fatalf("TestConnection returned error: %v", err)
}
if err := provider.Upload(context.Background(), "daily/backup.txt", strings.NewReader("hello"), 5, nil); err != nil {
t.Fatalf("Upload returned error: %v", err)
}
reader, err := provider.Download(context.Background(), "daily/backup.txt")
if err != nil {
t.Fatalf("Download returned error: %v", err)
}
defer reader.Close()
content, _ := io.ReadAll(reader)
if string(content) != "hello" {
t.Fatalf("expected downloaded content to match, got %s", string(content))
}
items, err := provider.List(context.Background(), "daily")
if err != nil {
t.Fatalf("List returned error: %v", err)
}
if len(items) != 1 || items[0].Key != "daily/backup.txt" {
t.Fatalf("unexpected list result: %#v", items)
}
if err := provider.Delete(context.Background(), "daily/backup.txt"); err != nil {
t.Fatalf("Delete returned error: %v", err)
}
}
func TestLocalDiskProviderRejectsTraversal(t *testing.T) {
providerAny, err := (Factory{}).New(context.Background(), map[string]any{"basePath": t.TempDir()})
if err != nil {
t.Fatalf("Factory.New returned error: %v", err)
}
provider := providerAny.(*Provider)
if _, err := provider.resolvePath("../escape.txt"); err == nil {
t.Fatalf("expected traversal to be rejected")
}
}