package file_manager import ( "bytes" "context" "os" "testing" "time" ) func TestS3UploadDownload(t *testing.T) { fm := New( WithS3( "http://localhost:9000", "INsEaUOyLx5PXiqLHv0v", "xsie9sil2jFtyi0UlnXv7zFafHYk0rWAeROSEYg7", "test", "us-east-1", ), WithS3PathStyle(true), WithTimeout(10*time.Minute), WithExpire(24*time.Hour), ) defer fm.CloseManager() ctx := context.Background() content := []byte("hello world from s3") 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 TestS3UploadLargeFile(t *testing.T) { fm := New( WithS3( "http://localhost:9000", "INsEaUOyLx5PXiqLHv0v", "xsie9sil2jFtyi0UlnXv7zFafHYk0rWAeROSEYg7", "test", "us-east-1", ), WithS3PathStyle(true), 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) } }