Browse Source

test: fix nil pointer dereference and add debugging to pagination stress tests

pull/7786/head
chrislu 4 days ago
parent
commit
f517bc39fc
  1. 29
      test/s3/versioning/s3_versioning_pagination_stress_test.go

29
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
}
Loading…
Cancel
Save