Initial commit: file_manager package with local and S3 support
This commit is contained in:
214
controller/file_manager/local_test.go
Normal file
214
controller/file_manager/local_test.go
Normal file
@@ -0,0 +1,214 @@
|
||||
package file_manager
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"context"
|
||||
"os"
|
||||
"testing"
|
||||
"time"
|
||||
)
|
||||
|
||||
func TestLocalUploadDownload(t *testing.T) {
|
||||
fm := New(
|
||||
WithDir("/tmp/upkg-test"),
|
||||
WithTimeout(10*time.Minute),
|
||||
WithExpire(24*time.Hour),
|
||||
)
|
||||
defer fm.CloseManager()
|
||||
|
||||
ctx := context.Background()
|
||||
|
||||
content := []byte("hello world from local")
|
||||
size := int64(len(content))
|
||||
reader := bytes.NewReader(content)
|
||||
|
||||
result, err := fm.Create(ctx, "test.txt", size, "")
|
||||
if err != nil {
|
||||
t.Fatalf("Create failed: %v", err)
|
||||
}
|
||||
|
||||
total, written, err := fm.Upload(ctx, result.Code, 0, size, reader)
|
||||
if err != nil {
|
||||
t.Fatalf("Upload failed: %v", err)
|
||||
}
|
||||
if total != size {
|
||||
t.Errorf("expected total %d, got %d", size, total)
|
||||
}
|
||||
if written != size {
|
||||
t.Errorf("expected written %d, got %d", size, written)
|
||||
}
|
||||
|
||||
data, err := fm.Get(ctx, result.Code)
|
||||
if err != nil {
|
||||
t.Fatalf("Get failed: %v", err)
|
||||
}
|
||||
if !bytes.Equal(data, content) {
|
||||
t.Errorf("data mismatch, expected %s, got %s", content, data)
|
||||
}
|
||||
|
||||
info, err := fm.GetInfo(ctx, result.Code)
|
||||
if err != nil {
|
||||
t.Fatalf("GetInfo failed: %v", err)
|
||||
}
|
||||
if info.Filename != "test.txt" {
|
||||
t.Errorf("expected filename test.txt, got %s", info.Filename)
|
||||
}
|
||||
if info.Size != size {
|
||||
t.Errorf("expected size %d, got %d", size, info.Size)
|
||||
}
|
||||
if !info.Complete {
|
||||
t.Error("expected complete to be true")
|
||||
}
|
||||
if info.SHA256 == "" {
|
||||
t.Error("expected sha256 to be set")
|
||||
}
|
||||
|
||||
err = fm.Delete(ctx, result.Code)
|
||||
if err != nil {
|
||||
t.Fatalf("Delete failed: %v", err)
|
||||
}
|
||||
|
||||
_, err = fm.Get(ctx, result.Code)
|
||||
if err == nil {
|
||||
t.Error("expected error after delete")
|
||||
}
|
||||
}
|
||||
|
||||
func TestLocalUploadLargeFile(t *testing.T) {
|
||||
fm := New(
|
||||
WithDir("/tmp/upkg-test-large"),
|
||||
WithTimeout(30*time.Minute),
|
||||
WithExpire(24*time.Hour),
|
||||
)
|
||||
defer fm.CloseManager()
|
||||
|
||||
ctx := context.Background()
|
||||
|
||||
filePath := "../../x-file/VID_20240215_195046.mp4"
|
||||
file, err := os.Open(filePath)
|
||||
if err != nil {
|
||||
t.Fatalf("open file failed: %v", err)
|
||||
}
|
||||
defer file.Close()
|
||||
|
||||
stat, err := file.Stat()
|
||||
if err != nil {
|
||||
t.Fatalf("stat file failed: %v", err)
|
||||
}
|
||||
|
||||
result, err := fm.Create(ctx, "video.mp4", stat.Size(), "")
|
||||
if err != nil {
|
||||
t.Fatalf("Create failed: %v", err)
|
||||
}
|
||||
|
||||
total, written, err := fm.Upload(ctx, result.Code, 0, stat.Size(), file)
|
||||
if err != nil {
|
||||
t.Fatalf("Upload failed: %v", err)
|
||||
}
|
||||
if total != stat.Size() {
|
||||
t.Errorf("expected total %d, got %d", stat.Size(), total)
|
||||
}
|
||||
if written != stat.Size() {
|
||||
t.Errorf("expected written %d, got %d", stat.Size(), written)
|
||||
}
|
||||
|
||||
data, err := fm.Get(ctx, result.Code)
|
||||
if err != nil {
|
||||
t.Fatalf("Get failed: %v", err)
|
||||
}
|
||||
if int64(len(data)) != stat.Size() {
|
||||
t.Errorf("expected size %d, got %d", stat.Size(), len(data))
|
||||
}
|
||||
|
||||
err = fm.Delete(ctx, result.Code)
|
||||
if err != nil {
|
||||
t.Fatalf("Delete failed: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestLocalUploadWithSHA256(t *testing.T) {
|
||||
fm := New(
|
||||
WithDir("/tmp/upkg-test-sha256"),
|
||||
WithTimeout(10*time.Minute),
|
||||
WithExpire(24*time.Hour),
|
||||
)
|
||||
defer fm.CloseManager()
|
||||
|
||||
ctx := context.Background()
|
||||
|
||||
content := []byte("hello world with sha256")
|
||||
size := int64(len(content))
|
||||
reader := bytes.NewReader(content)
|
||||
|
||||
sha256 := "54a1932f09c34bd2c29f4fb3c3abbf6b5f65afcadeabbf13a1c5165782f6b08b"
|
||||
|
||||
result, err := fm.Create(ctx, "test-sha256.txt", size, sha256)
|
||||
if err != nil {
|
||||
t.Fatalf("Create failed: %v", err)
|
||||
}
|
||||
|
||||
_, _, err = fm.Upload(ctx, result.Code, 0, size, reader)
|
||||
if err != nil {
|
||||
t.Fatalf("Upload failed: %v", err)
|
||||
}
|
||||
|
||||
data, err := fm.Get(ctx, result.Code)
|
||||
if err != nil {
|
||||
t.Fatalf("Get failed: %v", err)
|
||||
}
|
||||
if !bytes.Equal(data, content) {
|
||||
t.Errorf("data mismatch")
|
||||
}
|
||||
|
||||
err = fm.Delete(ctx, result.Code)
|
||||
if err != nil {
|
||||
t.Fatalf("Delete failed: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestLocalCloseAndReopen(t *testing.T) {
|
||||
dir := "/tmp/upkg-test-reopen"
|
||||
fm := New(
|
||||
WithDir(dir),
|
||||
WithTimeout(1*time.Minute),
|
||||
WithExpire(24*time.Hour),
|
||||
)
|
||||
|
||||
ctx := context.Background()
|
||||
|
||||
content := []byte("test close and reopen")
|
||||
size := int64(len(content))
|
||||
|
||||
result, err := fm.Create(ctx, "reopen.txt", size, "")
|
||||
if err != nil {
|
||||
t.Fatalf("Create failed: %v", err)
|
||||
}
|
||||
|
||||
reader := bytes.NewReader(content)
|
||||
_, _, err = fm.Upload(ctx, result.Code, 0, size, reader)
|
||||
if err != nil {
|
||||
t.Fatalf("Upload failed: %v", err)
|
||||
}
|
||||
|
||||
fm.CloseManager()
|
||||
|
||||
fm2 := New(
|
||||
WithDir(dir),
|
||||
WithTimeout(1*time.Minute),
|
||||
WithExpire(24*time.Hour),
|
||||
)
|
||||
defer fm2.CloseManager()
|
||||
|
||||
data, err := fm2.Get(ctx, result.Code)
|
||||
if err != nil {
|
||||
t.Fatalf("Get after reopen failed: %v", err)
|
||||
}
|
||||
if !bytes.Equal(data, content) {
|
||||
t.Errorf("data mismatch after reopen")
|
||||
}
|
||||
|
||||
err = fm2.Delete(ctx, result.Code)
|
||||
if err != nil {
|
||||
t.Fatalf("Delete failed: %v", err)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user