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
49 lines
1.3 KiB
Go
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)
|
|
}
|