---
# System prepended metadata

title: Speed Test
tags: [Design]

---

# Speed Test

## Goals:
- Allows users to specify the S3 bucket, AWS region, and file size for testing.
- Provides the results (elapsed time and speed) in the custom resource’s status field.

## Requirments:
- Define a custom resource S3UploadSpeedTest to represent a test for uploading a file to an S3 bucket.
- The CRD will allow users to specify:
    - S3 bucket name
    - AWS region
    - File size for the test
    - (Optional) AWS profile for authentication
- The status of the CR will be updated with:
    - Elapsed time for the upload.
    - Upload speed (in MB/s).
    - Upload status (Success or Failure).


## Workflow

- User creates the CR and supplies the spec fields
- Controller triggers upload
- A test File is uploaded to S3
- Controller Calculates upload speed
- Status update of CRD reflects the time and speed


## Sample CR

```yaml
apiVersion: oadp.openshift.io/v1
kind: S3UploadSpeedTest
metadata:
  name: test-upload-speed
spec:
  # This is just a sample CR
  # Most likely we will pull in the whole BSL spec here and use whatever we need
  bucketName: "my-test-bucket"
  region: "us-east-1"
  fileSizeMB: 100
status:
  elapsedTime: 5
  uploadSpeed: 20
  uploadStatus: "Success"

```

## Wes's Alternative CR
```yaml=
apiVersion: oadp.openshift.io/v1
kind: S3UploadSpeedTest
metadata:
  name: test-upload-speed
spec:
  # upload folder should be static a reserved name
  backupstoragelocation: default [user provided name]
  fileSize: 100Mib [kb,mib,gib,tb]
status:
  elapsedTime: 5
  transferSpeed: 20[kb,mib,gib,tb]/s
  uploadStatus: "Success"
```

## potential enhancements
 * run on a specified node
 * run on all nodes
 * 