From f517bc39fcfe45e4765ca51571770a3bccf2701c Mon Sep 17 00:00:00 2001 From: chrislu Date: Mon, 15 Dec 2025 23:16:01 -0800 Subject: [PATCH] test: fix nil pointer dereference and add debugging to pagination stress tests --- .../s3_versioning_pagination_stress_test.go | 29 +++++++++++++++---- 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/test/s3/versioning/s3_versioning_pagination_stress_test.go b/test/s3/versioning/s3_versioning_pagination_stress_test.go index 0c00558a8..b8132adfc 100644 --- a/test/s3/versioning/s3_versioning_pagination_stress_test.go +++ b/test/s3/versioning/s3_versioning_pagination_stress_test.go @@ -62,10 +62,22 @@ func TestVersioningPaginationOver1000Versions(t *testing.T) { createDuration := time.Since(startTime) t.Logf("Created %d versions in %v", numVersions, createDuration) + t.Logf("Version IDs collected: %d", len(versionIds)) + + // Quick sanity check - list versions to see what we have + quickResp, err := client.ListObjectVersions(context.TODO(), &s3.ListObjectVersionsInput{ + Bucket: aws.String(bucketName), + Prefix: aws.String(objectKey), + }) + require.NoError(t, err) + t.Logf("Quick check: got %d versions, %d delete markers, truncated=%v", + len(quickResp.Versions), len(quickResp.DeleteMarkers), + quickResp.IsTruncated != nil && *quickResp.IsTruncated) // Test 1: List all versions without pagination limit t.Run("ListAllVersionsNoPagination", func(t *testing.T) { allVersions := listAllVersions(t, client, bucketName, objectKey) + t.Logf("Got %d versions total", len(allVersions)) assert.Len(t, allVersions, numVersions, "Should have all %d versions", numVersions) // Verify all version IDs are unique @@ -106,7 +118,7 @@ func TestVersioningPaginationOver1000Versions(t *testing.T) { allVersions = append(allVersions, resp.Versions...) - if !*resp.IsTruncated { + if resp.IsTruncated == nil || !*resp.IsTruncated { break } keyMarker = resp.NextKeyMarker @@ -137,9 +149,9 @@ func TestVersioningPaginationOver1000Versions(t *testing.T) { pageCount++ allVersions = append(allVersions, resp.Versions...) - t.Logf("Page %d: got %d versions, truncated=%v", pageCount, len(resp.Versions), *resp.IsTruncated) + t.Logf("Page %d: got %d versions, truncated=%v", pageCount, len(resp.Versions), resp.IsTruncated != nil && *resp.IsTruncated) - if !*resp.IsTruncated { + if resp.IsTruncated == nil || !*resp.IsTruncated { break } keyMarker = resp.NextKeyMarker @@ -234,9 +246,9 @@ func TestVersioningPaginationMultipleObjectsManyVersions(t *testing.T) { pageCount++ allVersions = append(allVersions, resp.Versions...) - t.Logf("Page %d: got %d versions", pageCount, len(resp.Versions)) + t.Logf("Page %d: got %d versions, truncated=%v", pageCount, len(resp.Versions), resp.IsTruncated != nil && *resp.IsTruncated) - if !*resp.IsTruncated { + if resp.IsTruncated == nil || !*resp.IsTruncated { break } keyMarker = resp.NextKeyMarker @@ -273,6 +285,7 @@ func TestVersioningPaginationMultipleObjectsManyVersions(t *testing.T) { func listAllVersions(t *testing.T, client *s3.Client, bucketName, objectKey string) []types.ObjectVersion { var allVersions []types.ObjectVersion var keyMarker, versionIdMarker *string + pageCount := 0 for { resp, err := client.ListObjectVersions(context.TODO(), &s3.ListObjectVersionsInput{ @@ -282,16 +295,20 @@ func listAllVersions(t *testing.T, client *s3.Client, bucketName, objectKey stri VersionIdMarker: versionIdMarker, }) require.NoError(t, err) + pageCount++ + t.Logf("Page %d: got %d versions, truncated=%v", pageCount, len(resp.Versions), resp.IsTruncated != nil && *resp.IsTruncated) allVersions = append(allVersions, resp.Versions...) - if !*resp.IsTruncated { + // Check if truncated (handle nil pointer) + if resp.IsTruncated == nil || !*resp.IsTruncated { break } keyMarker = resp.NextKeyMarker versionIdMarker = resp.NextVersionIdMarker } + t.Logf("Total: %d versions in %d pages", len(allVersions), pageCount) return allVersions }