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

This commit is contained in:
chrislu
2025-12-15 23:16:01 -08:00
parent 8236df1368
commit f517bc39fc

View File

@@ -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
}