]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
add explicit checksum matrix 63326/head
authorMatt Benjamin <mbenjamin@redhat.com>
Tue, 3 Jun 2025 16:54:38 +0000 (12:54 -0400)
committerMatt Benjamin <mbenjamin@redhat.com>
Fri, 13 Jun 2025 17:36:54 +0000 (13:36 -0400)
Signed-off-by: Matt Benjamin <mbenjamin@redhat.com>
qa/workunits/rgw/gcksum/gcksum.go
qa/workunits/rgw/gcksum/gcksum_test.go

index 2e9655616be53f4fdb87dc9ea0d618af3a18951c..b856eb671fcb4247c68abe42bdcda7c3dfddcef9 100644 (file)
@@ -45,16 +45,153 @@ func main() {
   wg.Wait()
 
        // Tests
-  putObject(ctx, s3Client, bucketName);
+  var err error
+  err = putObject(ctx, s3Client, bucketName);
+  if (err != nil) {
+    fmt.Printf("Failed: %v\n", err)
+               os.Exit(1)
+  }
+
+  fmt.Println()
   fmt.Println()
   fmt.Println()
+
+  err = putObjectCksum(ctx, s3Client, bucketName, types.ChecksumAlgorithmCrc32);
+  if (err != nil) {
+    fmt.Printf("Failed: %v\n", err)
+               os.Exit(1)
+  }
+  fmt.Println()
+       fmt.Println()
+       fmt.Println()
+
+  err = putObjectCksum(ctx, s3Client, bucketName, types.ChecksumAlgorithmCrc32c);
+  if (err != nil) {
+    fmt.Printf("Failed: %v\n", err)
+               os.Exit(1)
+  }
   fmt.Println()
+       fmt.Println()
+       fmt.Println()
 
-  demonstrateChunkedUpload(ctx, s3Client, bucketName)
+  err = putObjectCksum(ctx, s3Client, bucketName, types.ChecksumAlgorithmSha1);
+  if (err != nil) {
+    fmt.Printf("Failed: %v\n", err)
+               os.Exit(1)
+  }
+  fmt.Println()
        fmt.Println()
        fmt.Println()
+
+  err = putObjectCksum(ctx, s3Client, bucketName, types.ChecksumAlgorithmSha256);
+  if (err != nil) {
+    fmt.Printf("Failed: %v\n", err)
+               os.Exit(1)
+  }
+  fmt.Println()
+       fmt.Println()
+       fmt.Println()
+
+  err = putObjectCksum(ctx, s3Client, bucketName, types.ChecksumAlgorithmCrc64nvme);
+  if (err != nil) {
+    fmt.Printf("Failed: %v\n", err)
+               os.Exit(1)
+  }
+  fmt.Println()
+       fmt.Println()
+       fmt.Println()
+
+  err = demonstrateChunkedUpload2(ctx, s3Client, bucketName, types.ChecksumAlgorithmCrc32)
+  if (err != nil) {
+    fmt.Printf("Failed: %v\n", err)
+               os.Exit(1)
+  }
+  fmt.Println()
+       fmt.Println()
+       fmt.Println()
+
+  err = demonstrateChunkedUpload2(ctx, s3Client, bucketName, types.ChecksumAlgorithmCrc32c)
+  if (err != nil) {
+    fmt.Printf("Failed: %v\n", err)
+               os.Exit(1)
+  }
+  fmt.Println()
+       fmt.Println()
+       fmt.Println()
+
+  err = demonstrateChunkedUpload2(ctx, s3Client, bucketName, types.ChecksumAlgorithmSha1)
+  if (err != nil) {
+    fmt.Printf("Failed: %v\n", err)
+               os.Exit(1)
+  }
+  fmt.Println()
+       fmt.Println()
+       fmt.Println()
+
+  err = demonstrateChunkedUpload2(ctx, s3Client, bucketName, types.ChecksumAlgorithmSha256)
+  if (err != nil) {
+    fmt.Printf("Failed: %v\n", err)
+               os.Exit(1)
+  }
+  fmt.Println()
+       fmt.Println()
+       fmt.Println()
+
+  err = demonstrateChunkedUpload2(ctx, s3Client, bucketName,
+    types.ChecksumAlgorithmCrc64nvme)
+  if (err != nil) {
+    fmt.Printf("Failed: %v\n", err)
+               os.Exit(1)
+  }
+  fmt.Println()
+       fmt.Println()
+       fmt.Println()
+
+  err = demonstrateFixedLengthUpload2(ctx, s3Client, bucketName, types.ChecksumAlgorithmCrc32)
+  if (err != nil) {
+    fmt.Printf("Failed: %v\n", err)
+               os.Exit(1)
+  }
+  fmt.Println()
+       fmt.Println()
+       fmt.Println()
+
+  err = demonstrateFixedLengthUpload2(ctx, s3Client, bucketName, types.ChecksumAlgorithmCrc32c)
+  if (err != nil) {
+    fmt.Printf("Failed: %v\n", err)
+               os.Exit(1)
+  }
+  fmt.Println()
+       fmt.Println()
+       fmt.Println()
+
+  err = demonstrateFixedLengthUpload2(ctx, s3Client, bucketName, types.ChecksumAlgorithmSha1)
+  if (err != nil) {
+    fmt.Printf("Failed: %v\n", err)
+               os.Exit(1)
+  }
+  fmt.Println()
+       fmt.Println()
+       fmt.Println()
+
+  err = demonstrateFixedLengthUpload2(ctx, s3Client, bucketName, types.ChecksumAlgorithmSha256)
+  if (err != nil) {
+    fmt.Printf("Failed: %v\n", err)
+               os.Exit(1)
+  }
+  fmt.Println()
+       fmt.Println()
+       fmt.Println()
+
+  err = demonstrateFixedLengthUpload2(ctx, s3Client, bucketName,
+    types.ChecksumAlgorithmCrc64nvme)
+  if (err != nil) {
+    fmt.Printf("Failed: %v\n", err)
+               os.Exit(1)
+  }
+  fmt.Println()
+       fmt.Println()
        fmt.Println()
-       demonstrateFixedLengthUpload(ctx, s3Client, bucketName)
 }
 
 func setupS3Client(ctx context.Context) *s3.Client {
@@ -125,8 +262,23 @@ func putObject(ctx context.Context, client *s3.Client,
   return err
 }
 
-func demonstrateChunkedUpload(ctx context.Context, s3Client *s3.Client,
-  bucketName string) error {
+func putObjectCksum(ctx context.Context, client *s3.Client,
+  bucketName string, ckAlgo types.ChecksumAlgorithm) error {
+
+  key := fmt.Sprintf("obj_for_%s", ckAlgo)
+  body := fmt.Sprintf("body for %s/%s", bucketName, key)
+       poinput := &s3.PutObjectInput{
+               Body:   strings.NewReader(body),
+               Bucket: aws.String(bucketName),
+               Key:    aws.String(key),
+    ChecksumAlgorithm: ckAlgo,
+       }
+       _, err := client.PutObject(context.TODO(), poinput)
+  return err
+}
+
+func demonstrateChunkedUpload2(ctx context.Context, s3Client *s3.Client,
+  bucketName string, ckAlgo types.ChecksumAlgorithm) error {
        // Create an IO pipe. The total amount of data read isn't known to the
        // reader (S3 PutObject), so the PutObject call will use a chunked upload.
        pipeReader, pipeWriter := io.Pipe()
@@ -145,6 +297,7 @@ func demonstrateChunkedUpload(ctx context.Context, s3Client *s3.Client,
                Bucket: &bucketName,
                Key:    &key,
                Body:   pipeReader,
+    ChecksumAlgorithm: ckAlgo,
        })
 
        fmt.Printf("Uploaded chunked data to S3 bucket %s with key %s\n", bucketName, key)
@@ -152,8 +305,8 @@ func demonstrateChunkedUpload(ctx context.Context, s3Client *s3.Client,
   return err
 }
 
-func demonstrateFixedLengthUpload(ctx context.Context, s3Client *s3.Client,
-  bucketName string) error {
+func demonstrateFixedLengthUpload2(ctx context.Context, s3Client *s3.Client,
+  bucketName string, ckAlgo types.ChecksumAlgorithm) error {
        // Create a fixed-length byte slice to upload
        dataToUpload := []byte("This is some example fixed-length data to upload to S3.")
        key := "fixed-length-upload-example"
@@ -167,6 +320,7 @@ func demonstrateFixedLengthUpload(ctx context.Context, s3Client *s3.Client,
                Bucket: &bucketName,
                Key:    &key,
                Body:   readerSeeker,
+    ChecksumAlgorithm: ckAlgo,
        })
 
        fmt.Printf("Uploaded fixed-length data to S3 bucket %s with key %s\n", bucketName, key)
index 7c80f98db4b29d709e3c91b5f683ea007e2fb416..88deaa5d44eb0b8adc1180746cf1fc70f31c1ccb 100644 (file)
@@ -5,6 +5,7 @@ import (
   "testing"
   "fmt"
   "context"
+  "github.com/aws/aws-sdk-go-v2/service/s3/types"
 )
 
 /* tests */
@@ -16,15 +17,100 @@ func TestPut1(t *testing.T) {
   }
 }
 
-func TestChunkedUpload(t *testing.T) {
-  err := demonstrateChunkedUpload(ctx, s3Client, bucketName)
+func TestPutCksums(t *testing.T) {
+  var err error
+  err = putObjectCksum(ctx, s3Client, bucketName,
+    types.ChecksumAlgorithmCrc32)
+  if (err != nil) {
+    t.Errorf("Failed: %v", err)
+  }
+
+  err = putObjectCksum(ctx, s3Client, bucketName,
+    types.ChecksumAlgorithmCrc32c)
+  if (err != nil) {
+    t.Errorf("Failed: %v", err)
+  }
+
+  err = putObjectCksum(ctx, s3Client, bucketName,
+    types.ChecksumAlgorithmSha1)
+  if (err != nil) {
+    t.Errorf("Failed: %v", err)
+  }
+
+  err = putObjectCksum(ctx, s3Client, bucketName,
+    types.ChecksumAlgorithmSha256)
+  if (err != nil) {
+    t.Errorf("Failed: %v", err)
+  }
+
+  err = putObjectCksum(ctx, s3Client, bucketName,
+    types.ChecksumAlgorithmCrc64nvme)
   if (err != nil) {
     t.Errorf("Failed: %v", err)
   }
 }
 
-func TestFixedLengthUpload(t *testing.T) {
-  err := demonstrateFixedLengthUpload(ctx, s3Client, bucketName)
+func TestChunkedUploadCrc32(t *testing.T) {
+  var err error
+  err = demonstrateChunkedUpload2(ctx, s3Client, bucketName,
+    types.ChecksumAlgorithmCrc32)
+  if (err != nil) {
+    t.Errorf("Failed: %v", err)
+  }
+
+  err = demonstrateChunkedUpload2(ctx, s3Client, bucketName,
+    types.ChecksumAlgorithmCrc32c)
+  if (err != nil) {
+    t.Errorf("Failed: %v", err)
+  }
+
+  err = demonstrateChunkedUpload2(ctx, s3Client, bucketName,
+    types.ChecksumAlgorithmSha1)
+  if (err != nil) {
+    t.Errorf("Failed: %v", err)
+  }
+
+  err = demonstrateChunkedUpload2(ctx, s3Client, bucketName,
+    types.ChecksumAlgorithmSha256)
+  if (err != nil) {
+    t.Errorf("Failed: %v", err)
+  }
+
+  err = demonstrateChunkedUpload2(ctx, s3Client, bucketName,
+    types.ChecksumAlgorithmCrc64nvme)
+  if (err != nil) {
+    t.Errorf("Failed: %v", err)
+  }
+}
+
+func TestFixedLengthUploadCrc32(t *testing.T) {
+  var err error
+  err = demonstrateFixedLengthUpload2(ctx, s3Client, bucketName,
+    types.ChecksumAlgorithmCrc32)
+  if (err != nil) {
+    t.Errorf("Failed: %v", err)
+  }
+
+  err = demonstrateFixedLengthUpload2(ctx, s3Client, bucketName,
+    types.ChecksumAlgorithmCrc32c)
+  if (err != nil) {
+    t.Errorf("Failed: %v", err)
+  }
+
+  err = demonstrateFixedLengthUpload2(ctx, s3Client, bucketName,
+    types.ChecksumAlgorithmSha1)
+  if (err != nil) {
+    t.Errorf("Failed: %v", err)
+  }
+
+  err = demonstrateFixedLengthUpload2(ctx, s3Client, bucketName,
+    types.ChecksumAlgorithmSha256)
+  if (err != nil) {
+    t.Errorf("Failed: %v", err)
+  }
+
+  err = demonstrateFixedLengthUpload2(ctx, s3Client, bucketName,
+    types.ChecksumAlgorithmCrc64nvme)
   if (err != nil) {
     t.Errorf("Failed: %v", err)
   }