Files
sub2api/backend/internal/repository/backup_s3_store_test.go
T
李建琦 6d655c9903
Release / update-version (push) Has been cancelled
Release / build-frontend (push) Has been cancelled
Release / release (push) Has been cancelled
Release / sync-version-file (push) Has been cancelled
CI / shell (push) Canceled after 0s
CI / test (push) Canceled after 0s
CI / frontend (push) Canceled after 0s
CI / golangci-lint (push) Canceled after 0s
Security Scan / backend-security (push) Canceled after 0s
Security Scan / frontend-security (push) Canceled after 0s
Sub2API v1.0 - AI API 网关(二开初始版本,基于上游 Wei-Shaw/sub2api)
2026-08-21 18:30:13 +08:00

49 lines
1.3 KiB
Go

//go:build unit
package repository
import (
"context"
"io"
"net/http"
"net/http/httptest"
"os"
"testing"
"github.com/stretchr/testify/require"
)
func TestS3BackupStore_UploadFile(t *testing.T) {
var received []byte
var receivedLength int64
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
require.Equal(t, http.MethodPut, r.Method)
receivedLength = r.ContentLength
var err error
received, err = io.ReadAll(r.Body)
require.NoError(t, err)
w.WriteHeader(http.StatusOK)
}))
defer server.Close()
client, err := newS3Client(context.Background(), s3ClientParams{
Endpoint: server.URL,
Region: "auto",
AccessKeyID: "test-ak",
SecretAccessKey: "test-sk",
ForcePathStyle: true,
})
require.NoError(t, err)
content := []byte("streamed backup payload")
filePath := t.TempDir() + "/part.gz"
require.NoError(t, os.WriteFile(filePath, content, 0o600))
store := &S3BackupStore{client: client, bucket: "backup-bucket"}
size, err := store.UploadFile(context.Background(), "backup/part-1", filePath, "application/octet-stream")
require.NoError(t, err)
require.Equal(t, int64(len(content)), size)
require.Equal(t, int64(len(content)), receivedLength)
require.Equal(t, content, received)
}