test: fix nil pointer dereference and add debugging to pagination stress tests
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user