diff --git a/e2e/rbd.go b/e2e/rbd.go index 6edbfe57607..d47469a8b7b 100644 --- a/e2e/rbd.go +++ b/e2e/rbd.go @@ -189,12 +189,27 @@ func validateRBDImageCount(f *framework.Framework, count int, pool string) { framework.Failf("failed to list rbd images: %v", err) } if len(imageList) != count { + var imageDetails []string // To collect details for all images + for _, image := range imageList { + imgInfoStr, err := getImageInfo(f, image, pool) + if err != nil { + framework.Logf("Error getting image info: %v", err) + } + imgStatusOutput, err := getImageStatus(f, image, pool) + if err != nil { + framework.Logf("Error getting image status: %v", err) + } + // Collecting image details for printing + imageDetails = append(imageDetails, fmt.Sprintf( + "Pool: %s, Image: %s, Info: %s, Status: %s", pool, image, imgInfoStr, imgStatusOutput)) + } framework.Failf( "backend images not matching kubernetes resource count,image count %d kubernetes resource count %d"+ - "\nbackend image Info:\n %v", + "\nbackend image Info:\n %v\n images information and status %v", len(imageList), count, - imageList) + imageList, + strings.Join(imageDetails, "\n")) } } diff --git a/e2e/rbd_helper.go b/e2e/rbd_helper.go index 34a99ea0947..786660722df 100644 --- a/e2e/rbd_helper.go +++ b/e2e/rbd_helper.go @@ -1093,27 +1093,38 @@ type imageInfo struct { // getImageInfo queries rbd about the given image and returns its metadata, and returns // error if provided image is not found. -func getImageInfo(f *framework.Framework, imageName, poolName string) (imageInfo, error) { +func getImageInfo(f *framework.Framework, imageName, poolName string) (string, error) { // rbd --format=json info [image-spec | snap-spec] - var imgInfo imageInfo - stdOut, stdErr, err := execCommandInToolBoxPod( f, fmt.Sprintf("rbd info %s %s --format json", rbdOptions(poolName), imageName), rookNamespace) if err != nil { - return imgInfo, fmt.Errorf("failed to get rbd info: %w", err) + return stdOut, fmt.Errorf("failed to get rbd info: %w", err) } if stdErr != "" { - return imgInfo, fmt.Errorf("failed to get rbd info: %v", stdErr) + return stdOut, fmt.Errorf("failed to get rbd info: %v", stdErr) } - err = json.Unmarshal([]byte(stdOut), &imgInfo) + + return stdOut, nil +} + +// getImageStatus queries rbd about the given image and returns its metadata, and returns +// error if provided image is not found. +func getImageStatus(f *framework.Framework, imageName, poolName string) (string, error) { + // rbd --format=json status [image-spec | snap-spec] + stdOut, stdErr, err := execCommandInToolBoxPod( + f, + fmt.Sprintf("rbd status %s %s --format json", rbdOptions(poolName), imageName), + rookNamespace) if err != nil { - return imgInfo, fmt.Errorf("unmarshal failed: %w. raw buffer response: %s", - err, stdOut) + return stdOut, fmt.Errorf("error retrieving rbd status: %w", err) + } + if stdErr != "" { + return stdOut, fmt.Errorf("failed to get rbd info: %v", stdErr) } - return imgInfo, nil + return stdOut, nil } // validateStripe validate the stripe count, stripe unit and object size of the @@ -1124,16 +1135,23 @@ func validateStripe(f *framework.Framework, stripeCount, objectSize int, ) error { + var imgInfo imageInfo + imageData, err := getImageInfoFromPVC(pvc.Namespace, pvc.Name, f) if err != nil { return err } - imgInfo, err := getImageInfo(f, imageData.imageName, defaultRBDPool) + imgInfoStr, err := getImageInfo(f, imageData.imageName, defaultRBDPool) if err != nil { return err } + err = json.Unmarshal([]byte(imgInfoStr), &imgInfo) + if err != nil { + return fmt.Errorf("unmarshal failed: %w. raw buffer response: %s", err, imgInfoStr) + } + if imgInfo.ObjectSize != objectSize { return fmt.Errorf("objectSize %d does not match expected %d", imgInfo.ObjectSize, objectSize) }