backup_s3_store_test.go 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. //go:build unit
  2. package repository
  3. import (
  4. "context"
  5. "io"
  6. "net/http"
  7. "net/http/httptest"
  8. "os"
  9. "testing"
  10. "github.com/stretchr/testify/require"
  11. )
  12. func TestS3BackupStore_UploadFile(t *testing.T) {
  13. var received []byte
  14. var receivedLength int64
  15. server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
  16. require.Equal(t, http.MethodPut, r.Method)
  17. receivedLength = r.ContentLength
  18. var err error
  19. received, err = io.ReadAll(r.Body)
  20. require.NoError(t, err)
  21. w.WriteHeader(http.StatusOK)
  22. }))
  23. defer server.Close()
  24. client, err := newS3Client(context.Background(), s3ClientParams{
  25. Endpoint: server.URL,
  26. Region: "auto",
  27. AccessKeyID: "test-ak",
  28. SecretAccessKey: "test-sk",
  29. ForcePathStyle: true,
  30. })
  31. require.NoError(t, err)
  32. content := []byte("streamed backup payload")
  33. filePath := t.TempDir() + "/part.gz"
  34. require.NoError(t, os.WriteFile(filePath, content, 0o600))
  35. store := &S3BackupStore{client: client, bucket: "backup-bucket"}
  36. size, err := store.UploadFile(context.Background(), "backup/part-1", filePath, "application/octet-stream")
  37. require.NoError(t, err)
  38. require.Equal(t, int64(len(content)), size)
  39. require.Equal(t, int64(len(content)), receivedLength)
  40. require.Equal(t, content, received)
  41. }