652443
From 0cc0f6f6cd188022c0127f649a03cf5249da31ea Mon Sep 17 00:00:00 2001
652443
From: Debarshi Ray <rishi@fedoraproject.org>
652443
Date: Mon, 5 Dec 2022 22:17:51 +0100
652443
Subject: [PATCH 01/27] cmd/list: Remove redundant initializations
652443
652443
Fallout from 2369da5d31830e5cd3e1a13857a686365875ae61
652443
652443
https://github.com/containers/toolbox/pull/1188
652443
(cherry picked from commit 71f73a4b31c79c14aababca67b0f172fc79948dd)
652443
---
652443
 src/cmd/list.go | 4 ++--
652443
 1 file changed, 2 insertions(+), 2 deletions(-)
652443
652443
diff --git a/src/cmd/list.go b/src/cmd/list.go
652443
index 948bfa68c936..158020f58287 100644
652443
--- a/src/cmd/list.go
652443
+++ b/src/cmd/list.go
652443
@@ -141,7 +141,7 @@ func getContainers() ([]toolboxContainer, error) {
652443
 
652443
 	for _, container := range containers {
652443
 		var c toolboxContainer
652443
-		var isToolboxContainer bool = false
652443
+		var isToolboxContainer bool
652443
 
652443
 		containerJSON, err := json.Marshal(container)
652443
 		if err != nil {
652443
@@ -204,7 +204,7 @@ func getImages() ([]toolboxImage, error) {
652443
 
652443
 	for _, image := range images {
652443
 		var i toolboxImage
652443
-		var isToolboxImage bool = false
652443
+		var isToolboxImage bool
652443
 
652443
 		imageJSON, err := json.Marshal(image)
652443
 		if err != nil {
652443
-- 
652443
2.38.1
652443
652443
652443
From 7e75fc80e881c7bcdcfd7a73b7b74679cde9a922 Mon Sep 17 00:00:00 2001
652443
From: Debarshi Ray <rishi@fedoraproject.org>
652443
Date: Mon, 5 Dec 2022 23:41:00 +0100
652443
Subject: [PATCH 02/27] cmd/list: Simplify code
652443
652443
Fallout from 2369da5d31830e5cd3e1a13857a686365875ae61
652443
652443
https://github.com/containers/toolbox/pull/1189
652443
(cherry picked from commit 67e210378e7b43cc0847cd171209861862f225b0)
652443
---
652443
 src/cmd/list.go | 14 ++------------
652443
 1 file changed, 2 insertions(+), 12 deletions(-)
652443
652443
diff --git a/src/cmd/list.go b/src/cmd/list.go
652443
index 158020f58287..cb42ab1d22e3 100644
652443
--- a/src/cmd/list.go
652443
+++ b/src/cmd/list.go
652443
@@ -141,7 +141,6 @@ func getContainers() ([]toolboxContainer, error) {
652443
 
652443
 	for _, container := range containers {
652443
 		var c toolboxContainer
652443
-		var isToolboxContainer bool
652443
 
652443
 		containerJSON, err := json.Marshal(container)
652443
 		if err != nil {
652443
@@ -157,14 +156,10 @@ func getContainers() ([]toolboxContainer, error) {
652443
 
652443
 		for label := range toolboxLabels {
652443
 			if _, ok := c.Labels[label]; ok {
652443
-				isToolboxContainer = true
652443
+				toolboxContainers = append(toolboxContainers, c)
652443
 				break
652443
 			}
652443
 		}
652443
-
652443
-		if isToolboxContainer {
652443
-			toolboxContainers = append(toolboxContainers, c)
652443
-		}
652443
 	}
652443
 
652443
 	return toolboxContainers, nil
652443
@@ -204,7 +199,6 @@ func getImages() ([]toolboxImage, error) {
652443
 
652443
 	for _, image := range images {
652443
 		var i toolboxImage
652443
-		var isToolboxImage bool
652443
 
652443
 		imageJSON, err := json.Marshal(image)
652443
 		if err != nil {
652443
@@ -220,14 +214,10 @@ func getImages() ([]toolboxImage, error) {
652443
 
652443
 		for label := range toolboxLabels {
652443
 			if _, ok := i.Labels[label]; ok {
652443
-				isToolboxImage = true
652443
+				toolboxImages = append(toolboxImages, i)
652443
 				break
652443
 			}
652443
 		}
652443
-
652443
-		if isToolboxImage {
652443
-			toolboxImages = append(toolboxImages, i)
652443
-		}
652443
 	}
652443
 
652443
 	return toolboxImages, nil
652443
-- 
652443
2.38.1
652443
652443
652443
From aac7c75c51d425ca9af5acd87a9ab3fa600c0481 Mon Sep 17 00:00:00 2001
652443
From: Debarshi Ray <rishi@fedoraproject.org>
652443
Date: Tue, 6 Dec 2022 00:25:23 +0100
652443
Subject: [PATCH 03/27] cmd/list, pkg/podman: Don't unmarshal the 'podman
652443
 images' JSON twice
652443
652443
This builds on top of commit e7722078310a79b0.
652443
652443
Currently, the JSON from 'podman images --format json' gets unmarshalled
652443
into a []map[string]interface{} in podman.GetImages, where the maps in
652443
the slice represent images.  Each map is then marshalled back into JSON
652443
and then again unmarshalled into a toolboxImage type.
652443
652443
This is wasteful.  The toolboxImage type already implements the
652443
json.Unmarshaler interface [1], since commit e7722078310a79b0.  Hence,
652443
the entire JSON from 'podman images --format json' can be directly
652443
unmarshalled into a slice of toolboxImages without involving the
652443
[]map[string]interface{}.
652443
652443
A subsequent commit will move the toolboxImage type into the podman
652443
package to more tightly encapsulate the unmarshalling of the JSON.  So,
652443
as an intermediate step in that direction, the podman.GetImages function
652443
has been temporarily changed to return the entire JSON.
652443
652443
[1] https://pkg.go.dev/encoding/json#Unmarshaler
652443
652443
https://github.com/containers/toolbox/pull/1190
652443
(cherry picked from commit 2486e25601331a9305ed559cb86ed807b4ea0836)
652443
---
652443
 src/cmd/list.go          | 26 +++++++++-----------------
652443
 src/pkg/podman/podman.go | 16 +++++-----------
652443
 2 files changed, 14 insertions(+), 28 deletions(-)
652443
652443
diff --git a/src/cmd/list.go b/src/cmd/list.go
652443
index cb42ab1d22e3..39fed1d5b772 100644
652443
--- a/src/cmd/list.go
652443
+++ b/src/cmd/list.go
652443
@@ -189,32 +189,24 @@ func listHelp(cmd *cobra.Command, args []string) {
652443
 func getImages() ([]toolboxImage, error) {
652443
 	logrus.Debug("Fetching all images")
652443
 	args := []string{"--sort", "repository"}
652443
-	images, err := podman.GetImages(args...)
652443
+	data, err := podman.GetImagesJSON(args...)
652443
 	if err != nil {
652443
 		logrus.Debugf("Fetching all images failed: %s", err)
652443
 		return nil, errors.New("failed to get images")
652443
 	}
652443
 
652443
+	var images []toolboxImage
652443
+	if err := json.Unmarshal(data, &images;; err != nil {
652443
+		logrus.Debugf("Fetching all images failed: %s", err)
652443
+		return nil, errors.New("failed to get images")
652443
+	}
652443
+
652443
 	var toolboxImages []toolboxImage
652443
 
652443
 	for _, image := range images {
652443
-		var i toolboxImage
652443
-
652443
-		imageJSON, err := json.Marshal(image)
652443
-		if err != nil {
652443
-			logrus.Errorf("failed to marshal toolbox image: %v", err)
652443
-			continue
652443
-		}
652443
-
652443
-		err = i.UnmarshalJSON(imageJSON)
652443
-		if err != nil {
652443
-			logrus.Errorf("failed to unmarshal toolbox image: %v", err)
652443
-			continue
652443
-		}
652443
-
652443
 		for label := range toolboxLabels {
652443
-			if _, ok := i.Labels[label]; ok {
652443
-				toolboxImages = append(toolboxImages, i)
652443
+			if _, ok := image.Labels[label]; ok {
652443
+				toolboxImages = append(toolboxImages, image)
652443
 				break
652443
 			}
652443
 		}
652443
diff --git a/src/pkg/podman/podman.go b/src/pkg/podman/podman.go
652443
index 9099df1eaf2a..76eb907ab20a 100644
652443
--- a/src/pkg/podman/podman.go
652443
+++ b/src/pkg/podman/podman.go
652443
@@ -95,14 +95,14 @@ func GetContainers(args ...string) ([]map[string]interface{}, error) {
652443
 	return containers, nil
652443
 }
652443
 
652443
-// GetImages is a wrapper function around `podman images --format json` command.
652443
+// GetImagesJSON is a wrapper function around `podman images --format json` command.
652443
 //
652443
 // Parameter args accepts an array of strings to be passed to the wrapped command (eg. ["-a", "--filter", "123"]).
652443
 //
652443
-// Returned value is a slice of dynamically unmarshalled json, so it needs to be treated properly.
652443
+// Returned value is the JSON representing the images.
652443
 //
652443
 // If a problem happens during execution, first argument is nil and second argument holds the error message.
652443
-func GetImages(args ...string) ([]map[string]interface{}, error) {
652443
+func GetImagesJSON(args ...string) ([]byte, error) {
652443
 	var stdout bytes.Buffer
652443
 
652443
 	logLevelString := LogLevel.String()
652443
@@ -111,14 +111,8 @@ func GetImages(args ...string) ([]map[string]interface{}, error) {
652443
 		return nil, err
652443
 	}
652443
 
652443
-	output := stdout.Bytes()
652443
-	var images []map[string]interface{}
652443
-
652443
-	if err := json.Unmarshal(output, &images;; err != nil {
652443
-		return nil, err
652443
-	}
652443
-
652443
-	return images, nil
652443
+	data := stdout.Bytes()
652443
+	return data, nil
652443
 }
652443
 
652443
 // GetVersion returns version of Podman in a string
652443
-- 
652443
2.38.1
652443
652443
652443
From 8aaabe469af22c9fe29cee1be653b40f019b68b7 Mon Sep 17 00:00:00 2001
652443
From: Debarshi Ray <rishi@fedoraproject.org>
652443
Date: Tue, 6 Dec 2022 13:22:32 +0100
652443
Subject: [PATCH 04/27] cmd/list: Rename a variable for ease of grepping
652443
652443
It's better to avoid single letter variables in general, because they
652443
are so hard to grep for.
652443
652443
This will make the subsequent commit easier to read.
652443
652443
https://github.com/containers/toolbox/pull/1190
652443
(cherry picked from commit e1ead145fc734fc329364b66a2db2bef15bb9721)
652443
---
652443
 src/cmd/list.go | 12 ++++++------
652443
 1 file changed, 6 insertions(+), 6 deletions(-)
652443
652443
diff --git a/src/cmd/list.go b/src/cmd/list.go
652443
index 39fed1d5b772..a839a47dd83c 100644
652443
--- a/src/cmd/list.go
652443
+++ b/src/cmd/list.go
652443
@@ -300,7 +300,7 @@ func listOutput(images []toolboxImage, containers []toolboxContainer) {
652443
 	}
652443
 }
652443
 
652443
-func (i *toolboxImage) UnmarshalJSON(data []byte) error {
652443
+func (image *toolboxImage) UnmarshalJSON(data []byte) error {
652443
 	var raw struct {
652443
 		ID      string
652443
 		Names   []string
652443
@@ -312,19 +312,19 @@ func (i *toolboxImage) UnmarshalJSON(data []byte) error {
652443
 		return err
652443
 	}
652443
 
652443
-	i.ID = raw.ID
652443
-	i.Names = raw.Names
652443
+	image.ID = raw.ID
652443
+	image.Names = raw.Names
652443
 	// Until Podman 2.0.x the field 'Created' held a human-readable string in
652443
 	// format "5 minutes ago". Since Podman 2.1 the field holds an integer with
652443
 	// Unix time. Go interprets numbers in JSON as float64.
652443
 	switch value := raw.Created.(type) {
652443
 	case string:
652443
-		i.Created = value
652443
+		image.Created = value
652443
 	case float64:
652443
-		i.Created = utils.HumanDuration(int64(value))
652443
+		image.Created = utils.HumanDuration(int64(value))
652443
 	}
652443
 
652443
-	i.Labels = raw.Labels
652443
+	image.Labels = raw.Labels
652443
 
652443
 	return nil
652443
 }
652443
-- 
652443
2.38.1
652443
652443
652443
From 9378c81c4641ead00beb2aa6549b6c371e7e71f0 Mon Sep 17 00:00:00 2001
652443
From: Debarshi Ray <rishi@fedoraproject.org>
652443
Date: Tue, 6 Dec 2022 13:24:19 +0100
652443
Subject: [PATCH 05/27] cmd/list: Style fixes
652443
652443
This will make the subsequent commit easier to read.
652443
652443
https://github.com/containers/toolbox/pull/1190
652443
(cherry picked from commit 5baf3162a9b8e6b554e4306ea79373e3a80ac7e4)
652443
---
652443
 src/cmd/list.go | 2 +-
652443
 1 file changed, 1 insertion(+), 1 deletion(-)
652443
652443
diff --git a/src/cmd/list.go b/src/cmd/list.go
652443
index a839a47dd83c..fa28ca935ce8 100644
652443
--- a/src/cmd/list.go
652443
+++ b/src/cmd/list.go
652443
@@ -314,6 +314,7 @@ func (image *toolboxImage) UnmarshalJSON(data []byte) error {
652443
 
652443
 	image.ID = raw.ID
652443
 	image.Names = raw.Names
652443
+
652443
 	// Until Podman 2.0.x the field 'Created' held a human-readable string in
652443
 	// format "5 minutes ago". Since Podman 2.1 the field holds an integer with
652443
 	// Unix time. Go interprets numbers in JSON as float64.
652443
@@ -325,7 +326,6 @@ func (image *toolboxImage) UnmarshalJSON(data []byte) error {
652443
 	}
652443
 
652443
 	image.Labels = raw.Labels
652443
-
652443
 	return nil
652443
 }
652443
 
652443
-- 
652443
2.38.1
652443
652443
652443
From ea33c5f8bd44d1f8304ee3017c15422c70f82934 Mon Sep 17 00:00:00 2001
652443
From: Debarshi Ray <rishi@fedoraproject.org>
652443
Date: Tue, 6 Dec 2022 13:20:42 +0100
652443
Subject: [PATCH 06/27] cmd/list, pkg/podman: Limit access to the raw 'podman
652443
 images' JSON
652443
652443
This builds on top of commit 0465d78fd9034ce9.
652443
652443
The toolboxImage type has been renamed to Image and moved into the
652443
podman package.
652443
652443
There is nothing Toolbx specific about the type - it represents any
652443
image returned by 'podman images'.  The images are only later filtered
652443
for Toolbx images.
652443
652443
Secondly, having the Image type inside the podman package makes it
652443
possible to encapsulate the unmarshalling of the JSON within the package
652443
without exposing the raw JSON to outside consumers.  This is desirable
652443
because the unmarshalling involves tracking changes in the JSON output
652443
by different Podman versions, and it's better to limit such details to
652443
the podman package.
652443
652443
https://github.com/containers/toolbox/pull/1190
652443
(cherry picked from commit 5f324d537ed875cacd27d711e4af37e0847ca32b)
652443
---
652443
 src/cmd/list.go          | 52 ++++------------------------------------
652443
 src/pkg/podman/podman.go | 50 ++++++++++++++++++++++++++++++++++----
652443
 2 files changed, 51 insertions(+), 51 deletions(-)
652443
652443
diff --git a/src/cmd/list.go b/src/cmd/list.go
652443
index fa28ca935ce8..9493a54593af 100644
652443
--- a/src/cmd/list.go
652443
+++ b/src/cmd/list.go
652443
@@ -30,13 +30,6 @@ import (
652443
 	"github.com/spf13/cobra"
652443
 )
652443
 
652443
-type toolboxImage struct {
652443
-	ID      string
652443
-	Names   []string
652443
-	Created string
652443
-	Labels  map[string]string
652443
-}
652443
-
652443
 type toolboxContainer struct {
652443
 	ID      string
652443
 	Names   []string
652443
@@ -106,7 +99,7 @@ func list(cmd *cobra.Command, args []string) error {
652443
 		lsImages = false
652443
 	}
652443
 
652443
-	var images []toolboxImage
652443
+	var images []podman.Image
652443
 	var containers []toolboxContainer
652443
 	var err error
652443
 
652443
@@ -186,22 +179,16 @@ func listHelp(cmd *cobra.Command, args []string) {
652443
 	}
652443
 }
652443
 
652443
-func getImages() ([]toolboxImage, error) {
652443
+func getImages() ([]podman.Image, error) {
652443
 	logrus.Debug("Fetching all images")
652443
 	args := []string{"--sort", "repository"}
652443
-	data, err := podman.GetImagesJSON(args...)
652443
+	images, err := podman.GetImages(args...)
652443
 	if err != nil {
652443
 		logrus.Debugf("Fetching all images failed: %s", err)
652443
 		return nil, errors.New("failed to get images")
652443
 	}
652443
 
652443
-	var images []toolboxImage
652443
-	if err := json.Unmarshal(data, &images;; err != nil {
652443
-		logrus.Debugf("Fetching all images failed: %s", err)
652443
-		return nil, errors.New("failed to get images")
652443
-	}
652443
-
652443
-	var toolboxImages []toolboxImage
652443
+	var toolboxImages []podman.Image
652443
 
652443
 	for _, image := range images {
652443
 		for label := range toolboxLabels {
652443
@@ -215,7 +202,7 @@ func getImages() ([]toolboxImage, error) {
652443
 	return toolboxImages, nil
652443
 }
652443
 
652443
-func listOutput(images []toolboxImage, containers []toolboxContainer) {
652443
+func listOutput(images []podman.Image, containers []toolboxContainer) {
652443
 	if len(images) != 0 {
652443
 		writer := tabwriter.NewWriter(os.Stdout, 0, 0, 2, ' ', 0)
652443
 		fmt.Fprintf(writer, "%s\t%s\t%s\n", "IMAGE ID", "IMAGE NAME", "CREATED")
652443
@@ -300,35 +287,6 @@ func listOutput(images []toolboxImage, containers []toolboxContainer) {
652443
 	}
652443
 }
652443
 
652443
-func (image *toolboxImage) UnmarshalJSON(data []byte) error {
652443
-	var raw struct {
652443
-		ID      string
652443
-		Names   []string
652443
-		Created interface{}
652443
-		Labels  map[string]string
652443
-	}
652443
-
652443
-	if err := json.Unmarshal(data, &raw;; err != nil {
652443
-		return err
652443
-	}
652443
-
652443
-	image.ID = raw.ID
652443
-	image.Names = raw.Names
652443
-
652443
-	// Until Podman 2.0.x the field 'Created' held a human-readable string in
652443
-	// format "5 minutes ago". Since Podman 2.1 the field holds an integer with
652443
-	// Unix time. Go interprets numbers in JSON as float64.
652443
-	switch value := raw.Created.(type) {
652443
-	case string:
652443
-		image.Created = value
652443
-	case float64:
652443
-		image.Created = utils.HumanDuration(int64(value))
652443
-	}
652443
-
652443
-	image.Labels = raw.Labels
652443
-	return nil
652443
-}
652443
-
652443
 func (c *toolboxContainer) UnmarshalJSON(data []byte) error {
652443
 	var raw struct {
652443
 		ID      string
652443
diff --git a/src/pkg/podman/podman.go b/src/pkg/podman/podman.go
652443
index 76eb907ab20a..623116707f36 100644
652443
--- a/src/pkg/podman/podman.go
652443
+++ b/src/pkg/podman/podman.go
652443
@@ -24,9 +24,17 @@ import (
652443
 
652443
 	"github.com/HarryMichal/go-version"
652443
 	"github.com/containers/toolbox/pkg/shell"
652443
+	"github.com/containers/toolbox/pkg/utils"
652443
 	"github.com/sirupsen/logrus"
652443
 )
652443
 
652443
+type Image struct {
652443
+	ID      string
652443
+	Names   []string
652443
+	Created string
652443
+	Labels  map[string]string
652443
+}
652443
+
652443
 var (
652443
 	podmanVersion string
652443
 )
652443
@@ -35,6 +43,35 @@ var (
652443
 	LogLevel = logrus.ErrorLevel
652443
 )
652443
 
652443
+func (image *Image) UnmarshalJSON(data []byte) error {
652443
+	var raw struct {
652443
+		ID      string
652443
+		Names   []string
652443
+		Created interface{}
652443
+		Labels  map[string]string
652443
+	}
652443
+
652443
+	if err := json.Unmarshal(data, &raw;; err != nil {
652443
+		return err
652443
+	}
652443
+
652443
+	image.ID = raw.ID
652443
+	image.Names = raw.Names
652443
+
652443
+	// Until Podman 2.0.x the field 'Created' held a human-readable string in
652443
+	// format "5 minutes ago". Since Podman 2.1 the field holds an integer with
652443
+	// Unix time. Go interprets numbers in JSON as float64.
652443
+	switch value := raw.Created.(type) {
652443
+	case string:
652443
+		image.Created = value
652443
+	case float64:
652443
+		image.Created = utils.HumanDuration(int64(value))
652443
+	}
652443
+
652443
+	image.Labels = raw.Labels
652443
+	return nil
652443
+}
652443
+
652443
 // CheckVersion compares provided version with the version of Podman.
652443
 //
652443
 // Takes in one string parameter that should be in the format that is used for versioning (eg. 1.0.0, 2.5.1-dev).
652443
@@ -95,14 +132,14 @@ func GetContainers(args ...string) ([]map[string]interface{}, error) {
652443
 	return containers, nil
652443
 }
652443
 
652443
-// GetImagesJSON is a wrapper function around `podman images --format json` command.
652443
+// GetImages is a wrapper function around `podman images --format json` command.
652443
 //
652443
 // Parameter args accepts an array of strings to be passed to the wrapped command (eg. ["-a", "--filter", "123"]).
652443
 //
652443
-// Returned value is the JSON representing the images.
652443
+// Returned value is a slice of Images.
652443
 //
652443
 // If a problem happens during execution, first argument is nil and second argument holds the error message.
652443
-func GetImagesJSON(args ...string) ([]byte, error) {
652443
+func GetImages(args ...string) ([]Image, error) {
652443
 	var stdout bytes.Buffer
652443
 
652443
 	logLevelString := LogLevel.String()
652443
@@ -112,7 +149,12 @@ func GetImagesJSON(args ...string) ([]byte, error) {
652443
 	}
652443
 
652443
 	data := stdout.Bytes()
652443
-	return data, nil
652443
+	var images []Image
652443
+	if err := json.Unmarshal(data, &images;; err != nil {
652443
+		return nil, err
652443
+	}
652443
+
652443
+	return images, nil
652443
 }
652443
 
652443
 // GetVersion returns version of Podman in a string
652443
-- 
652443
2.38.1
652443
652443
652443
From 5a2de56ad4d3222eef60cd30b09e18d81e042693 Mon Sep 17 00:00:00 2001
652443
From: Debarshi Ray <rishi@fedoraproject.org>
652443
Date: Thu, 8 Dec 2022 00:22:38 +0100
652443
Subject: [PATCH 07/27] test/system: Remove stray (possibly for debugging)
652443
 'podman images'
652443
652443
This was making it difficult to read the Bats assertions on test
652443
failures, by polluting it with unexpected and irrelevant output from
652443
'podman images'.  For example [1]:
652443
  not ok 39 list: Images with and without names in 12332ms
652443
  # (from function `assert' in file test/system/libs/bats-assert/src/assert.bash, line 46,
652443
  #  in test file test/system/102-list.bats, line 126)
652443
  #   `assert [ ${#stderr_lines[@]} -eq 0 ]' failed
652443
  # REPOSITORY                                 TAG         IMAGE ID      CREATED      SIZE
652443
  # registry.fedoraproject.org/fedora-toolbox  35          862705390e8b  4 weeks ago  332 MB
652443
  # REPOSITORY                                 TAG         IMAGE ID      CREATED       SIZE
652443
  # registry.fedoraproject.org/fedora-toolbox  35          862705390e8b  4 weeks ago   332 MB
652443
  # registry.fedoraproject.org/fedora-toolbox  34          70cbe2ce60ca  7 months ago  354 MB
652443
  #
652443
  # -- assertion failed --
652443
  # expression : [ 1 -eq 0 ]
652443
  # --
652443
  #
652443
652443
Fallout from 7973181136494a4ba147808c9ad51ace9aa4305f
652443
652443
[1] https://github.com/containers/toolbox/pull/1192
652443
652443
https://github.com/containers/toolbox/pull/1193
652443
(cherry picked from commit 7375be82d094204055ff056eba7820eef3f8247f)
652443
---
652443
 test/system/libs/helpers.bash | 2 --
652443
 1 file changed, 2 deletions(-)
652443
652443
diff --git a/test/system/libs/helpers.bash b/test/system/libs/helpers.bash
652443
index d728c0fc5f20..4e396e60f4bf 100644
652443
--- a/test/system/libs/helpers.bash
652443
+++ b/test/system/libs/helpers.bash
652443
@@ -162,8 +162,6 @@ function pull_distro_image() {
652443
     echo "Failed to load image ${image} from cache ${IMAGE_CACHE_DIR}/${image_archive}"
652443
     assert_success
652443
   fi
652443
-
652443
-  $PODMAN images
652443
 }
652443
 
652443
 
652443
-- 
652443
2.38.1
652443
652443
652443
From 57b04bb56b6ddf821fa9b82c6ee21de9c4d60779 Mon Sep 17 00:00:00 2001
652443
From: Debarshi Ray <rishi@fedoraproject.org>
652443
Date: Wed, 7 Dec 2022 13:34:38 +0100
652443
Subject: [PATCH 08/27] test/system: Test the order in 'list' for images and
652443
 containers
652443
652443
https://github.com/containers/toolbox/pull/1192
652443
(backported from commit da1724c8968c7169d3cfb7dc1730af27b6abab7d)
652443
---
652443
 test/system/102-list.bats | 20 ++++++++++----------
652443
 1 file changed, 10 insertions(+), 10 deletions(-)
652443
652443
diff --git a/test/system/102-list.bats b/test/system/102-list.bats
652443
index 1989409b1207..3f99c041f8cc 100644
652443
--- a/test/system/102-list.bats
652443
+++ b/test/system/102-list.bats
652443
@@ -62,26 +62,26 @@ teardown() {
652443
   run $TOOLBOX list --images
652443
 
652443
   assert_success
652443
-  assert_output --partial "$(get_system_id)-toolbox:$(get_system_version)"
652443
-  assert_output --partial "fedora-toolbox:32"
652443
+  assert_line --index 1 --partial "$(get_system_id)-toolbox:$(get_system_version)"
652443
+  assert_line --index 2 --partial "fedora-toolbox:32"
652443
 
652443
   # Check containers
652443
   run $TOOLBOX list --containers
652443
 
652443
   assert_success
652443
-  assert_output --partial "$(get_system_id)-toolbox-$(get_system_version)"
652443
-  assert_output --partial "non-default-one"
652443
-  assert_output --partial "non-default-two"
652443
+  assert_line --index 1 --partial "$(get_system_id)-toolbox-$(get_system_version)"
652443
+  assert_line --index 2 --partial "non-default-one"
652443
+  assert_line --index 3 --partial "non-default-two"
652443
 
652443
   # Check all together
652443
   run $TOOLBOX list
652443
 
652443
   assert_success
652443
-  assert_output --partial "$(get_system_id)-toolbox:$(get_system_version)"
652443
-  assert_output --partial "fedora-toolbox:32"
652443
-  assert_output --partial "$(get_system_id)-toolbox-$(get_system_version)"
652443
-  assert_output --partial "non-default-one"
652443
-  assert_output --partial "non-default-two"
652443
+  assert_line --index 1 --partial "$(get_system_id)-toolbox:$(get_system_version)"
652443
+  assert_line --index 2 --partial "fedora-toolbox:32"
652443
+  assert_line --index 4 --partial "$(get_system_id)-toolbox-$(get_system_version)"
652443
+  assert_line --index 5 --partial "non-default-one"
652443
+  assert_line --index 6 --partial "non-default-two"
652443
 }
652443
 
652443
 @test "list: List an image without a name" {
652443
-- 
652443
2.38.1
652443
652443
652443
From be0e67b673f1ff399289e4f4c0837637979b12d8 Mon Sep 17 00:00:00 2001
652443
From: Debarshi Ray <rishi@fedoraproject.org>
652443
Date: Wed, 7 Dec 2022 15:22:04 +0100
652443
Subject: [PATCH 09/27] test/system: Keep empty lines to prevent missing and
652443
 spurious newlines
652443
652443
The tests are intended for Toolbx, not Podman or other commands.  Hence,
652443
it's only necessary to keep the empty lines for Toolbx invocations.
652443
Being too sensitive about the exact output of other commands can lead to
652443
spurious failures [1].
652443
652443
[1] Commit 259afdf815e718b7
652443
    https://github.com/containers/toolbox/pull/846
652443
652443
https://github.com/containers/toolbox/pull/1192
652443
(backported from commit 0fde202d82a781849169dab8cfb5d2aa0184d970)
652443
---
652443
 test/system/102-list.bats | 22 +++++++++++-----------
652443
 1 file changed, 11 insertions(+), 11 deletions(-)
652443
652443
diff --git a/test/system/102-list.bats b/test/system/102-list.bats
652443
index 3f99c041f8cc..620626739411 100644
652443
--- a/test/system/102-list.bats
652443
+++ b/test/system/102-list.bats
652443
@@ -15,21 +15,21 @@ teardown() {
652443
 
652443
 
652443
 @test "list: Run 'list' with zero containers and zero images (the list should be empty)" {
652443
-  run $TOOLBOX list
652443
+  run --keep-empty-lines $TOOLBOX list
652443
 
652443
   assert_success
652443
   assert_output ""
652443
 }
652443
 
652443
 @test "list: Run 'list -c' with zero containers (the list should be empty)" {
652443
-  run $TOOLBOX list -c
652443
+  run --keep-empty-lines $TOOLBOX list -c
652443
 
652443
   assert_success
652443
   assert_output ""
652443
 }
652443
 
652443
 @test "list: Run 'list -i' with zero images (the list should be empty)" {
652443
-  run $TOOLBOX list -i
652443
+  run --keep-empty-lines $TOOLBOX list -i
652443
 
652443
   assert_success
652443
   assert_output ""
652443
@@ -42,7 +42,7 @@ teardown() {
652443
 
652443
   assert_output --partial "$BUSYBOX_IMAGE"
652443
 
652443
-  run $TOOLBOX list
652443
+  run --keep-empty-lines $TOOLBOX list
652443
 
652443
   assert_success
652443
   assert_output ""
652443
@@ -59,14 +59,14 @@ teardown() {
652443
   create_container non-default-two
652443
 
652443
   # Check images
652443
-  run $TOOLBOX list --images
652443
+  run --keep-empty-lines $TOOLBOX list --images
652443
 
652443
   assert_success
652443
   assert_line --index 1 --partial "$(get_system_id)-toolbox:$(get_system_version)"
652443
   assert_line --index 2 --partial "fedora-toolbox:32"
652443
 
652443
   # Check containers
652443
-  run $TOOLBOX list --containers
652443
+  run --keep-empty-lines $TOOLBOX list --containers
652443
 
652443
   assert_success
652443
   assert_line --index 1 --partial "$(get_system_id)-toolbox-$(get_system_version)"
652443
@@ -74,14 +74,14 @@ teardown() {
652443
   assert_line --index 3 --partial "non-default-two"
652443
 
652443
   # Check all together
652443
-  run $TOOLBOX list
652443
+  run --keep-empty-lines $TOOLBOX list
652443
 
652443
   assert_success
652443
   assert_line --index 1 --partial "$(get_system_id)-toolbox:$(get_system_version)"
652443
   assert_line --index 2 --partial "fedora-toolbox:32"
652443
-  assert_line --index 4 --partial "$(get_system_id)-toolbox-$(get_system_version)"
652443
-  assert_line --index 5 --partial "non-default-one"
652443
-  assert_line --index 6 --partial "non-default-two"
652443
+  assert_line --index 5 --partial "$(get_system_id)-toolbox-$(get_system_version)"
652443
+  assert_line --index 6 --partial "non-default-one"
652443
+  assert_line --index 7 --partial "non-default-two"
652443
 }
652443
 
652443
 @test "list: List an image without a name" {
652443
@@ -95,7 +95,7 @@ teardown() {
652443
     assert_line --index 2 --partial "COMMIT"
652443
     assert_line --index 3 --regexp "^--> [a-z0-9]*$"
652443
 
652443
-    run $TOOLBOX list
652443
+    run --keep-empty-lines $TOOLBOX list
652443
 
652443
     assert_success
652443
     assert_line --index 1 --partial "<none>"
652443
-- 
652443
2.38.1
652443
652443
652443
From 000b678db0f3ba28f2a349cad926d9e19893070c Mon Sep 17 00:00:00 2001
652443
From: Debarshi Ray <rishi@fedoraproject.org>
652443
Date: Wed, 7 Dec 2022 20:01:38 +0100
652443
Subject: [PATCH 10/27] test/system: Fix indentation
652443
652443
https://github.com/containers/toolbox/pull/1192
652443
(cherry picked from commit f0a805af844a5867ea61c2ef899bffe24d7d24b1)
652443
---
652443
 test/system/102-list.bats | 22 +++++++++++-----------
652443
 1 file changed, 11 insertions(+), 11 deletions(-)
652443
652443
diff --git a/test/system/102-list.bats b/test/system/102-list.bats
652443
index 620626739411..946992030183 100644
652443
--- a/test/system/102-list.bats
652443
+++ b/test/system/102-list.bats
652443
@@ -85,20 +85,20 @@ teardown() {
652443
 }
652443
 
652443
 @test "list: List an image without a name" {
652443
-    echo -e "FROM scratch\n\nLABEL com.github.containers.toolbox=\"true\"" > "$BATS_TMPDIR"/Containerfile
652443
+  echo -e "FROM scratch\n\nLABEL com.github.containers.toolbox=\"true\"" > "$BATS_TMPDIR"/Containerfile
652443
 
652443
-    run $PODMAN build "$BATS_TMPDIR"
652443
+  run $PODMAN build "$BATS_TMPDIR"
652443
 
652443
-    assert_success
652443
-    assert_line --index 0 --partial "FROM scratch"
652443
-    assert_line --index 1 --partial "LABEL com.github.containers.toolbox=\"true\""
652443
-    assert_line --index 2 --partial "COMMIT"
652443
-    assert_line --index 3 --regexp "^--> [a-z0-9]*$"
652443
+  assert_success
652443
+  assert_line --index 0 --partial "FROM scratch"
652443
+  assert_line --index 1 --partial "LABEL com.github.containers.toolbox=\"true\""
652443
+  assert_line --index 2 --partial "COMMIT"
652443
+  assert_line --index 3 --regexp "^--> [a-z0-9]*$"
652443
 
652443
-    run --keep-empty-lines $TOOLBOX list
652443
+  run --keep-empty-lines $TOOLBOX list
652443
 
652443
-    assert_success
652443
-    assert_line --index 1 --partial "<none>"
652443
+  assert_success
652443
+  assert_line --index 1 --partial "<none>"
652443
 
652443
-    rm -f "$BATS_TMPDIR"/Containerfile
652443
+  rm -f "$BATS_TMPDIR"/Containerfile
652443
 }
652443
-- 
652443
2.38.1
652443
652443
652443
From 8c17c3454cfab3e35d176c17f0877da0443ed2df Mon Sep 17 00:00:00 2001
652443
From: Debarshi Ray <rishi@fedoraproject.org>
652443
Date: Wed, 7 Dec 2022 19:21:31 +0100
652443
Subject: [PATCH 11/27] test/system: Group the test cases somewhat logically
652443
652443
A subsequent commit will test the order in which images with and without
652443
names are listed.  It's logical for that test to come after the one
652443
about the basic support for images without names.
652443
652443
https://github.com/containers/toolbox/pull/1192
652443
(cherry picked from commit 54f09ae8a6a5034a30b98b3d281e5e46ce279bd3)
652443
---
652443
 test/system/102-list.bats | 38 +++++++++++++++++++-------------------
652443
 1 file changed, 19 insertions(+), 19 deletions(-)
652443
652443
diff --git a/test/system/102-list.bats b/test/system/102-list.bats
652443
index 946992030183..1ffaee486e30 100644
652443
--- a/test/system/102-list.bats
652443
+++ b/test/system/102-list.bats
652443
@@ -48,6 +48,25 @@ teardown() {
652443
   assert_output ""
652443
 }
652443
 
652443
+@test "list: List an image without a name" {
652443
+  echo -e "FROM scratch\n\nLABEL com.github.containers.toolbox=\"true\"" > "$BATS_TMPDIR"/Containerfile
652443
+
652443
+  run $PODMAN build "$BATS_TMPDIR"
652443
+
652443
+  assert_success
652443
+  assert_line --index 0 --partial "FROM scratch"
652443
+  assert_line --index 1 --partial "LABEL com.github.containers.toolbox=\"true\""
652443
+  assert_line --index 2 --partial "COMMIT"
652443
+  assert_line --index 3 --regexp "^--> [a-z0-9]*$"
652443
+
652443
+  run --keep-empty-lines $TOOLBOX list
652443
+
652443
+  assert_success
652443
+  assert_line --index 1 --partial "<none>"
652443
+
652443
+  rm -f "$BATS_TMPDIR"/Containerfile
652443
+}
652443
+
652443
 @test "list: Try to list images and containers (no flag) with 3 containers and 2 images (the list should have 3 images and 2 containers)" {
652443
   # Pull the two images
652443
   pull_default_image
652443
@@ -83,22 +102,3 @@ teardown() {
652443
   assert_line --index 6 --partial "non-default-one"
652443
   assert_line --index 7 --partial "non-default-two"
652443
 }
652443
-
652443
-@test "list: List an image without a name" {
652443
-  echo -e "FROM scratch\n\nLABEL com.github.containers.toolbox=\"true\"" > "$BATS_TMPDIR"/Containerfile
652443
-
652443
-  run $PODMAN build "$BATS_TMPDIR"
652443
-
652443
-  assert_success
652443
-  assert_line --index 0 --partial "FROM scratch"
652443
-  assert_line --index 1 --partial "LABEL com.github.containers.toolbox=\"true\""
652443
-  assert_line --index 2 --partial "COMMIT"
652443
-  assert_line --index 3 --regexp "^--> [a-z0-9]*$"
652443
-
652443
-  run --keep-empty-lines $TOOLBOX list
652443
-
652443
-  assert_success
652443
-  assert_line --index 1 --partial "<none>"
652443
-
652443
-  rm -f "$BATS_TMPDIR"/Containerfile
652443
-}
652443
-- 
652443
2.38.1
652443
652443
652443
From 099a51666994add5f5b11229fe73c8c4b5dc38b5 Mon Sep 17 00:00:00 2001
652443
From: Debarshi Ray <rishi@fedoraproject.org>
652443
Date: Wed, 7 Dec 2022 19:51:15 +0100
652443
Subject: [PATCH 12/27] test/system: Split out the code to build an image
652443
 without a name
652443
652443
This will be used by a subsequent commit to test the order in which
652443
images with and without names are listed.
652443
652443
https://github.com/containers/toolbox/pull/1192
652443
(backported from commit cc60bc68936dcbdca1d08635fdcdf9fb50301358)
652443
---
652443
 test/system/102-list.bats     | 12 +-----------
652443
 test/system/libs/helpers.bash | 15 +++++++++++++++
652443
 2 files changed, 16 insertions(+), 11 deletions(-)
652443
652443
diff --git a/test/system/102-list.bats b/test/system/102-list.bats
652443
index 1ffaee486e30..c2a44162afe3 100644
652443
--- a/test/system/102-list.bats
652443
+++ b/test/system/102-list.bats
652443
@@ -49,22 +49,12 @@ teardown() {
652443
 }
652443
 
652443
 @test "list: List an image without a name" {
652443
-  echo -e "FROM scratch\n\nLABEL com.github.containers.toolbox=\"true\"" > "$BATS_TMPDIR"/Containerfile
652443
-
652443
-  run $PODMAN build "$BATS_TMPDIR"
652443
-
652443
-  assert_success
652443
-  assert_line --index 0 --partial "FROM scratch"
652443
-  assert_line --index 1 --partial "LABEL com.github.containers.toolbox=\"true\""
652443
-  assert_line --index 2 --partial "COMMIT"
652443
-  assert_line --index 3 --regexp "^--> [a-z0-9]*$"
652443
+  build_image_without_name
652443
 
652443
   run --keep-empty-lines $TOOLBOX list
652443
 
652443
   assert_success
652443
   assert_line --index 1 --partial "<none>"
652443
-
652443
-  rm -f "$BATS_TMPDIR"/Containerfile
652443
 }
652443
 
652443
 @test "list: Try to list images and containers (no flag) with 3 containers and 2 images (the list should have 3 images and 2 containers)" {
652443
diff --git a/test/system/libs/helpers.bash b/test/system/libs/helpers.bash
652443
index 4e396e60f4bf..f585699aa3f7 100644
652443
--- a/test/system/libs/helpers.bash
652443
+++ b/test/system/libs/helpers.bash
652443
@@ -119,6 +119,21 @@ function _clean_cached_images() {
652443
 }
652443
 
652443
 
652443
+function build_image_without_name() {
652443
+  echo -e "FROM scratch\n\nLABEL com.github.containers.toolbox=\"true\"" > "$BATS_TMPDIR"/Containerfile
652443
+
652443
+  run $PODMAN build "$BATS_TMPDIR"
652443
+
652443
+  assert_success
652443
+  assert_line --index 0 --partial "FROM scratch"
652443
+  assert_line --index 1 --partial "LABEL com.github.containers.toolbox=\"true\""
652443
+  assert_line --index 2 --partial "COMMIT"
652443
+  assert_line --index 3 --regexp "^--> [a-z0-9]*$"
652443
+
652443
+  rm -f "$BATS_TMPDIR"/Containerfile
652443
+}
652443
+
652443
+
652443
 # Copies an image from local storage to Podman's image store
652443
 # 
652443
 # Call before creating any container. Network failures are not nice.
652443
-- 
652443
2.38.1
652443
652443
652443
From a2ba49f350d2ad543c494bdbf2781c883b2483b3 Mon Sep 17 00:00:00 2001
652443
From: Debarshi Ray <rishi@fedoraproject.org>
652443
Date: Wed, 7 Dec 2022 19:52:50 +0100
652443
Subject: [PATCH 13/27] test/system: Test the order in 'list' for images with &
652443
 without names
652443
652443
Note that 'run --keep-empty-lines' counts the trailing newline on the
652443
last line as a separate line.
652443
652443
Until Bats 1.7.0, 'run --keep-empty-lines' had a bug where even when a
652443
command produced no output, it would report a line count of one [1] due
652443
to a stray line feed character.  This needs to be conditionalized, since
652443
Fedora 35 has Bats 1.5.0.
652443
652443
[1] https://github.com/bats-core/bats-core/issues/573
652443
652443
https://github.com/containers/toolbox/pull/1192
652443
(cherry picked from commit 4d1cc5b39bac89e95f403b8992a26f93eeefaa6e)
652443
---
652443
 test/system/102-list.bats     | 20 ++++++++++++++++++++
652443
 test/system/libs/helpers.bash | 30 ++++++++++++++++++++++++++++++
652443
 2 files changed, 50 insertions(+)
652443
652443
diff --git a/test/system/102-list.bats b/test/system/102-list.bats
652443
index c2a44162afe3..872f3ffde7fe 100644
652443
--- a/test/system/102-list.bats
652443
+++ b/test/system/102-list.bats
652443
@@ -92,3 +92,23 @@ teardown() {
652443
   assert_line --index 6 --partial "non-default-one"
652443
   assert_line --index 7 --partial "non-default-two"
652443
 }
652443
+
652443
+@test "list: Images with and without names" {
652443
+  local default_image
652443
+  default_image="$(get_default_image)"
652443
+
652443
+  pull_default_image
652443
+  pull_distro_image fedora 34
652443
+  build_image_without_name
652443
+
652443
+  run --keep-empty-lines --separate-stderr "$TOOLBOX" list --images
652443
+
652443
+  assert_success
652443
+  assert_line --index 1 --partial "<none>"
652443
+  assert_line --index 2 --partial "$default_image"
652443
+  assert_line --index 3 --partial "fedora-toolbox:34"
652443
+  assert [ ${#lines[@]} -eq 5 ]
652443
+  if check_bats_version 1.7.0; then
652443
+    assert [ ${#stderr_lines[@]} -eq 0 ]
652443
+  fi
652443
+}
652443
diff --git a/test/system/libs/helpers.bash b/test/system/libs/helpers.bash
652443
index f585699aa3f7..4d095043d3ce 100644
652443
--- a/test/system/libs/helpers.bash
652443
+++ b/test/system/libs/helpers.bash
652443
@@ -134,6 +134,36 @@ function build_image_without_name() {
652443
 }
652443
 
652443
 
652443
+function check_bats_version() {
652443
+    local required_version
652443
+    required_version="$1"
652443
+
652443
+    if ! old_version=$(printf "%s\n%s\n" "$BATS_VERSION" "$required_version" | sort --version-sort | head --lines 1); then
652443
+        return 1
652443
+    fi
652443
+
652443
+    if [ "$required_version" = "$old_version" ]; then
652443
+        return 0
652443
+    fi
652443
+
652443
+    return 1
652443
+}
652443
+
652443
+
652443
+function get_default_image() {
652443
+  local distro
652443
+  local image
652443
+  local release
652443
+
652443
+  distro="$(get_system_id)"
652443
+  release="$(get_system_version)"
652443
+  image="${IMAGES[$distro]}:$release"
652443
+
652443
+  echo "$image"
652443
+  return 0
652443
+}
652443
+
652443
+
652443
 # Copies an image from local storage to Podman's image store
652443
 # 
652443
 # Call before creating any container. Network failures are not nice.
652443
-- 
652443
2.38.1
652443
652443
652443
From b16ff0a401b15408a3c696bbd679a12615a09ccd Mon Sep 17 00:00:00 2001
652443
From: Debarshi Ray <rishi@fedoraproject.org>
652443
Date: Wed, 7 Dec 2022 21:02:17 +0100
652443
Subject: [PATCH 14/27] test/system: Ensure that non-error messages go to the
652443
 standard output
652443
652443
https://github.com/containers/toolbox/pull/1192
652443
(cherry picked from commit 89385e12b5e1e931ef40c3f0f0edeb563cf5dd77)
652443
---
652443
 test/system/102-list.bats | 8 ++++----
652443
 1 file changed, 4 insertions(+), 4 deletions(-)
652443
652443
diff --git a/test/system/102-list.bats b/test/system/102-list.bats
652443
index 872f3ffde7fe..51cb5aa349f9 100644
652443
--- a/test/system/102-list.bats
652443
+++ b/test/system/102-list.bats
652443
@@ -51,7 +51,7 @@ teardown() {
652443
 @test "list: List an image without a name" {
652443
   build_image_without_name
652443
 
652443
-  run --keep-empty-lines $TOOLBOX list
652443
+  run --keep-empty-lines --separate-stderr $TOOLBOX list
652443
 
652443
   assert_success
652443
   assert_line --index 1 --partial "<none>"
652443
@@ -68,14 +68,14 @@ teardown() {
652443
   create_container non-default-two
652443
 
652443
   # Check images
652443
-  run --keep-empty-lines $TOOLBOX list --images
652443
+  run --keep-empty-lines --separate-stderr $TOOLBOX list --images
652443
 
652443
   assert_success
652443
   assert_line --index 1 --partial "$(get_system_id)-toolbox:$(get_system_version)"
652443
   assert_line --index 2 --partial "fedora-toolbox:32"
652443
 
652443
   # Check containers
652443
-  run --keep-empty-lines $TOOLBOX list --containers
652443
+  run --keep-empty-lines --separate-stderr $TOOLBOX list --containers
652443
 
652443
   assert_success
652443
   assert_line --index 1 --partial "$(get_system_id)-toolbox-$(get_system_version)"
652443
@@ -83,7 +83,7 @@ teardown() {
652443
   assert_line --index 3 --partial "non-default-two"
652443
 
652443
   # Check all together
652443
-  run --keep-empty-lines $TOOLBOX list
652443
+  run --keep-empty-lines --separate-stderr $TOOLBOX list
652443
 
652443
   assert_success
652443
   assert_line --index 1 --partial "$(get_system_id)-toolbox:$(get_system_version)"
652443
-- 
652443
2.38.1
652443
652443
652443
From c97472cec4f243b6323f349f60b558b0f4f8540f Mon Sep 17 00:00:00 2001
652443
From: Debarshi Ray <rishi@fedoraproject.org>
652443
Date: Wed, 7 Dec 2022 21:16:46 +0100
652443
Subject: [PATCH 15/27] test/system: Check the line count in the standard error
652443
 & output streams
652443
652443
Note that 'run --keep-empty-lines' counts the trailing newline on the
652443
last line as a separate line.
652443
652443
Until Bats 1.7.0, 'run --keep-empty-lines' had a bug where even when a
652443
command produced no output, it would report a line count of one [1] due
652443
to a stray line feed character.  This needs to be conditionalized, since
652443
Fedora 35 has Bats 1.5.0.
652443
652443
[1] https://github.com/bats-core/bats-core/issues/573
652443
652443
https://github.com/containers/toolbox/pull/1192
652443
(backported from commit f17a632f9a4a2859f12fd20dc8a34bf0a6dd2ae5)
652443
---
652443
 test/system/102-list.bats | 16 ++++++++++++++++
652443
 1 file changed, 16 insertions(+)
652443
652443
diff --git a/test/system/102-list.bats b/test/system/102-list.bats
652443
index 51cb5aa349f9..9ed6ed3cf847 100644
652443
--- a/test/system/102-list.bats
652443
+++ b/test/system/102-list.bats
652443
@@ -55,6 +55,10 @@ teardown() {
652443
 
652443
   assert_success
652443
   assert_line --index 1 --partial "<none>"
652443
+  assert [ ${#lines[@]} -eq 3 ]
652443
+  if check_bats_version 1.7.0; then
652443
+    assert [ ${#stderr_lines[@]} -eq 0 ]
652443
+  fi
652443
 }
652443
 
652443
 @test "list: Try to list images and containers (no flag) with 3 containers and 2 images (the list should have 3 images and 2 containers)" {
652443
@@ -73,6 +77,10 @@ teardown() {
652443
   assert_success
652443
   assert_line --index 1 --partial "$(get_system_id)-toolbox:$(get_system_version)"
652443
   assert_line --index 2 --partial "fedora-toolbox:32"
652443
+  assert [ ${#lines[@]} -eq 4 ]
652443
+  if check_bats_version 1.7.0; then
652443
+    assert [ ${#stderr_lines[@]} -eq 0 ]
652443
+  fi
652443
 
652443
   # Check containers
652443
   run --keep-empty-lines --separate-stderr $TOOLBOX list --containers
652443
@@ -81,6 +89,10 @@ teardown() {
652443
   assert_line --index 1 --partial "$(get_system_id)-toolbox-$(get_system_version)"
652443
   assert_line --index 2 --partial "non-default-one"
652443
   assert_line --index 3 --partial "non-default-two"
652443
+  assert [ ${#lines[@]} -eq 5 ]
652443
+  if check_bats_version 1.7.0; then
652443
+    assert [ ${#stderr_lines[@]} -eq 0 ]
652443
+  fi
652443
 
652443
   # Check all together
652443
   run --keep-empty-lines --separate-stderr $TOOLBOX list
652443
@@ -91,6 +103,10 @@ teardown() {
652443
   assert_line --index 5 --partial "$(get_system_id)-toolbox-$(get_system_version)"
652443
   assert_line --index 6 --partial "non-default-one"
652443
   assert_line --index 7 --partial "non-default-two"
652443
+  assert [ ${#lines[@]} -eq 9 ]
652443
+  if check_bats_version 1.7.0; then
652443
+    assert [ ${#stderr_lines[@]} -eq 0 ]
652443
+  fi
652443
 }
652443
 
652443
 @test "list: Images with and without names" {
652443
-- 
652443
2.38.1
652443
652443
652443
From ad4050c5ea6d4ebeb22d5cb9201fd529cebfe2e0 Mon Sep 17 00:00:00 2001
652443
From: Debarshi Ray <rishi@fedoraproject.org>
652443
Date: Mon, 12 Dec 2022 14:54:17 +0100
652443
Subject: [PATCH 16/27] test/system: Use long options, instead of their shorter
652443
 aliases
652443
652443
The long options are easier to grep(1) for in the sources than their
652443
shorter aliases.
652443
652443
https://github.com/containers/toolbox/pull/1197
652443
(backported from commit 5e8446971c65f0c74e08dc8424568b53dc4da21d)
652443
---
652443
 test/system/libs/helpers.bash | 8 ++++----
652443
 1 file changed, 4 insertions(+), 4 deletions(-)
652443
652443
diff --git a/test/system/libs/helpers.bash b/test/system/libs/helpers.bash
652443
index 4d095043d3ce..edc619005de5 100644
652443
--- a/test/system/libs/helpers.bash
652443
+++ b/test/system/libs/helpers.bash
652443
@@ -45,7 +45,7 @@ function _setup_containers_store() {
652443
 
652443
 
652443
 function _clean_temporary_storage() {
652443
-  rm -rf ${TEMP_STORAGE_DIR}
652443
+  rm --force --recursive ${TEMP_STORAGE_DIR}
652443
 }
652443
 
652443
 
652443
@@ -115,7 +115,7 @@ function _pull_and_cache_distro_image() {
652443
 
652443
 # Removes the folder with cached images
652443
 function _clean_cached_images() {
652443
-  rm -rf ${IMAGE_CACHE_DIR}
652443
+  rm --force --recursive ${IMAGE_CACHE_DIR}
652443
 }
652443
 
652443
 
652443
@@ -320,12 +320,12 @@ function stop_container() {
652443
 
652443
 
652443
 function list_images() {
652443
-  $PODMAN images --all --quiet | wc -l
652443
+  $PODMAN images --all --quiet | wc --lines
652443
 }
652443
 
652443
 
652443
 function list_containers() {
652443
-  $PODMAN ps --all --quiet | wc -l
652443
+  $PODMAN ps --all --quiet | wc --lines
652443
 }
652443
 
652443
 
652443
-- 
652443
2.38.1
652443
652443
652443
From 9640c5f40e363558ef880e93f0a2ec69fdfd5a2f Mon Sep 17 00:00:00 2001
652443
From: Debarshi Ray <rishi@fedoraproject.org>
652443
Date: Mon, 12 Dec 2022 15:04:42 +0100
652443
Subject: [PATCH 17/27] test/system: Don't ignore copies when counting images
652443
652443
If an image was copied with:
652443
  $ skopeo copy \
652443
      containers-storage:registry.fedoraproject.org/fedora-toolbox:36 \
652443
      containers-storage:localhost/fedora-toolbox:36
652443
652443
... or:
652443
  $ podman tag \
652443
      registry.fedoraproject.org/fedora-toolbox:36 \
652443
      localhost/fedora-toolbox:36
652443
652443
... then the image ID is only showed once in 'podman images --quiet',
652443
not twice.
652443
652443
A subsequent commit will use this to write tests to ensure that copied
652443
images are correctly handled.
652443
652443
https://github.com/containers/toolbox/issues/1043
652443
(cherry picked from commit 303c7ae99aba118602713af1dd93a0f191a51541)
652443
---
652443
 test/system/libs/helpers.bash | 2 +-
652443
 1 file changed, 1 insertion(+), 1 deletion(-)
652443
652443
diff --git a/test/system/libs/helpers.bash b/test/system/libs/helpers.bash
652443
index edc619005de5..a4e02c1dd0a3 100644
652443
--- a/test/system/libs/helpers.bash
652443
+++ b/test/system/libs/helpers.bash
652443
@@ -320,7 +320,7 @@ function stop_container() {
652443
 
652443
 
652443
 function list_images() {
652443
-  $PODMAN images --all --quiet | wc --lines
652443
+  $PODMAN images --all --format "{{.ID}}" | wc --lines
652443
 }
652443
 
652443
 
652443
-- 
652443
2.38.1
652443
652443
652443
From 2b4106375eb68f5ff56022c9719109fbb2283ad7 Mon Sep 17 00:00:00 2001
652443
From: Debarshi Ray <rishi@fedoraproject.org>
652443
Date: Fri, 9 Dec 2022 09:42:32 +0100
652443
Subject: [PATCH 18/27] test/system: Keep empty lines to prevent missing and
652443
 spurious newlines
652443
652443
https://github.com/containers/toolbox/pull/1195
652443
(cherry picked from commit 26ed682cd1f807c5cf2f1300fdb682dc451a4f3a)
652443
---
652443
 test/system/107-rmi.bats | 6 +++---
652443
 1 file changed, 3 insertions(+), 3 deletions(-)
652443
652443
diff --git a/test/system/107-rmi.bats b/test/system/107-rmi.bats
652443
index 6518c2798844..404c55a2c3f4 100644
652443
--- a/test/system/107-rmi.bats
652443
+++ b/test/system/107-rmi.bats
652443
@@ -20,7 +20,7 @@ teardown() {
652443
 
652443
   pull_default_image
652443
 
652443
-  run $TOOLBOX rmi --all
652443
+  run --keep-empty-lines $TOOLBOX rmi --all
652443
 
652443
   assert_success
652443
   assert_output ""
652443
@@ -38,7 +38,7 @@ teardown() {
652443
   create_container foo
652443
   start_container foo
652443
 
652443
-  run $TOOLBOX rmi --all
652443
+  run --keep-empty-lines $TOOLBOX rmi --all
652443
 
652443
   assert_failure
652443
   assert_output --regexp "Error: image .* has dependent children"
652443
@@ -55,7 +55,7 @@ teardown() {
652443
   create_container foo
652443
   start_container foo
652443
 
652443
-  run $TOOLBOX rmi --all --force
652443
+  run --keep-empty-lines $TOOLBOX rmi --all --force
652443
 
652443
   assert_success
652443
   assert_output ""
652443
-- 
652443
2.38.1
652443
652443
652443
From f5f0445d2dc4d1129a00458c44d52e6f0be3b5c4 Mon Sep 17 00:00:00 2001
652443
From: Debarshi Ray <rishi@fedoraproject.org>
652443
Date: Fri, 9 Dec 2022 10:04:48 +0100
652443
Subject: [PATCH 19/27] test/system: Ensure that error messages go to the
652443
 standard error stream
652443
652443
Currently, there's no way to get assert_line to use the stderr_lines
652443
array [1].  This is worked around by assigning stderr_lines to the
652443
'lines' array.
652443
652443
[1] https://github.com/bats-core/bats-assert/issues/42
652443
652443
https://github.com/containers/toolbox/pull/1195
652443
(cherry picked from commit 210985ecd141f768e549970ed74880bf10f058a3)
652443
---
652443
 test/system/107-rmi.bats | 5 +++--
652443
 1 file changed, 3 insertions(+), 2 deletions(-)
652443
652443
diff --git a/test/system/107-rmi.bats b/test/system/107-rmi.bats
652443
index 404c55a2c3f4..63eafbbf0a9f 100644
652443
--- a/test/system/107-rmi.bats
652443
+++ b/test/system/107-rmi.bats
652443
@@ -38,10 +38,11 @@ teardown() {
652443
   create_container foo
652443
   start_container foo
652443
 
652443
-  run --keep-empty-lines $TOOLBOX rmi --all
652443
+  run --keep-empty-lines --separate-stderr $TOOLBOX rmi --all
652443
 
652443
   assert_failure
652443
-  assert_output --regexp "Error: image .* has dependent children"
652443
+  lines=("${stderr_lines[@]}")
652443
+  assert_line --index 0 --regexp "Error: image .* has dependent children"
652443
 
652443
   new_num_of_images=$(list_images)
652443
 
652443
-- 
652443
2.38.1
652443
652443
652443
From ce527b3593e678e85b48b15449a2062a5f16ec55 Mon Sep 17 00:00:00 2001
652443
From: Debarshi Ray <rishi@fedoraproject.org>
652443
Date: Fri, 9 Dec 2022 10:21:55 +0100
652443
Subject: [PATCH 20/27] test/system: Test 'rmi --all' without any images
652443
652443
https://github.com/containers/toolbox/pull/1195
652443
(cherry picked from commit 8a37c0878087b0d7e1f4efac6d4525d2e9ec4d07)
652443
---
652443
 test/system/107-rmi.bats | 20 ++++++++++++++++++++
652443
 1 file changed, 20 insertions(+)
652443
652443
diff --git a/test/system/107-rmi.bats b/test/system/107-rmi.bats
652443
index 63eafbbf0a9f..dfdefb0e29ee 100644
652443
--- a/test/system/107-rmi.bats
652443
+++ b/test/system/107-rmi.bats
652443
@@ -14,6 +14,26 @@ teardown() {
652443
 }
652443
 
652443
 
652443
+@test "rmi: '--all' without any images" {
652443
+  local num_of_images
652443
+  num_of_images="$(list_images)"
652443
+  assert_equal "$num_of_images" 0
652443
+
652443
+  run --keep-empty-lines --separate-stderr "$TOOLBOX" rmi --all
652443
+
652443
+  assert_success
652443
+  assert_output ""
652443
+  output="$stderr"
652443
+  assert_output ""
652443
+  if check_bats_version 1.7.0; then
652443
+    assert [ ${#lines[@]} -eq 0 ]
652443
+    assert [ ${#stderr_lines[@]} -eq 0 ]
652443
+  fi
652443
+
652443
+  num_of_images="$(list_images)"
652443
+  assert_equal "$num_of_images" 0
652443
+}
652443
+
652443
 @test "rmi: Remove all images with the default image present" {
652443
   num_of_images=$(list_images)
652443
   assert_equal "$num_of_images" 0
652443
-- 
652443
2.38.1
652443
652443
652443
From e81fcd7311bd602765fcfcc554597f4646124339 Mon Sep 17 00:00:00 2001
652443
From: Debarshi Ray <rishi@fedoraproject.org>
652443
Date: Fri, 9 Dec 2022 10:58:18 +0100
652443
Subject: [PATCH 21/27] test/system: Test 'rmi --all' with an image without a
652443
 name
652443
652443
https://github.com/containers/toolbox/pull/1195
652443
(cherry picked from commit e25ab310fab4257dee4db663eef86ac95a3a3ace)
652443
---
652443
 test/system/107-rmi.bats | 25 +++++++++++++++++++++++++
652443
 1 file changed, 25 insertions(+)
652443
652443
diff --git a/test/system/107-rmi.bats b/test/system/107-rmi.bats
652443
index dfdefb0e29ee..10d88b970949 100644
652443
--- a/test/system/107-rmi.bats
652443
+++ b/test/system/107-rmi.bats
652443
@@ -50,6 +50,31 @@ teardown() {
652443
   assert_equal "$new_num_of_images" "$num_of_images"
652443
 }
652443
 
652443
+@test "rmi: '--all' with an image without a name" {
652443
+  local num_of_images
652443
+  num_of_images="$(list_images)"
652443
+  assert_equal "$num_of_images" 0
652443
+
652443
+  build_image_without_name
652443
+
652443
+  num_of_images="$(list_images)"
652443
+  assert_equal "$num_of_images" 1
652443
+
652443
+  run --keep-empty-lines --separate-stderr "$TOOLBOX" rmi --all
652443
+
652443
+  assert_success
652443
+  assert_output ""
652443
+  output="$stderr"
652443
+  assert_output ""
652443
+  if check_bats_version 1.7.0; then
652443
+    assert [ ${#lines[@]} -eq 0 ]
652443
+    assert [ ${#stderr_lines[@]} -eq 0 ]
652443
+  fi
652443
+
652443
+  num_of_images="$(list_images)"
652443
+  assert_equal "$num_of_images" 0
652443
+}
652443
+
652443
 @test "rmi: Try to remove all images with a container present and running" {
652443
   skip "Bug: Fail in 'toolbox rmi' does not return non-zero value"
652443
   num_of_images=$(list_images)
652443
-- 
652443
2.38.1
652443
652443
652443
From d064b51da91a6179e3926c72085e2e2f2e80c47d Mon Sep 17 00:00:00 2001
652443
From: Debarshi Ray <rishi@fedoraproject.org>
652443
Date: Fri, 9 Dec 2022 11:02:28 +0100
652443
Subject: [PATCH 22/27] test/system: Test 'rmi' with an image without a name
652443
652443
https://github.com/containers/toolbox/pull/1195
652443
(cherry picked from commit a0d4c957b34ef6b5569123522a4bd693a6ddee44)
652443
---
652443
 test/system/102-list.bats     |  4 ++--
652443
 test/system/107-rmi.bats      | 27 ++++++++++++++++++++++++++-
652443
 test/system/libs/helpers.bash |  4 ++++
652443
 3 files changed, 32 insertions(+), 3 deletions(-)
652443
652443
diff --git a/test/system/102-list.bats b/test/system/102-list.bats
652443
index 9ed6ed3cf847..a109e0fbf87d 100644
652443
--- a/test/system/102-list.bats
652443
+++ b/test/system/102-list.bats
652443
@@ -49,7 +49,7 @@ teardown() {
652443
 }
652443
 
652443
 @test "list: List an image without a name" {
652443
-  build_image_without_name
652443
+  build_image_without_name >/dev/null
652443
 
652443
   run --keep-empty-lines --separate-stderr $TOOLBOX list
652443
 
652443
@@ -115,7 +115,7 @@ teardown() {
652443
 
652443
   pull_default_image
652443
   pull_distro_image fedora 34
652443
-  build_image_without_name
652443
+  build_image_without_name >/dev/null
652443
 
652443
   run --keep-empty-lines --separate-stderr "$TOOLBOX" list --images
652443
 
652443
diff --git a/test/system/107-rmi.bats b/test/system/107-rmi.bats
652443
index 10d88b970949..00ff09245c4c 100644
652443
--- a/test/system/107-rmi.bats
652443
+++ b/test/system/107-rmi.bats
652443
@@ -55,7 +55,7 @@ teardown() {
652443
   num_of_images="$(list_images)"
652443
   assert_equal "$num_of_images" 0
652443
 
652443
-  build_image_without_name
652443
+  build_image_without_name >/dev/null
652443
 
652443
   num_of_images="$(list_images)"
652443
   assert_equal "$num_of_images" 1
652443
@@ -75,6 +75,31 @@ teardown() {
652443
   assert_equal "$num_of_images" 0
652443
 }
652443
 
652443
+@test "rmi: An image without a name" {
652443
+  local num_of_images
652443
+  num_of_images="$(list_images)"
652443
+  assert_equal "$num_of_images" 0
652443
+
652443
+  image="$(build_image_without_name)"
652443
+
652443
+  num_of_images="$(list_images)"
652443
+  assert_equal "$num_of_images" 1
652443
+
652443
+  run --keep-empty-lines --separate-stderr "$TOOLBOX" rmi "$image"
652443
+
652443
+  assert_success
652443
+  assert_output ""
652443
+  output="$stderr"
652443
+  assert_output ""
652443
+  if check_bats_version 1.7.0; then
652443
+    assert [ ${#lines[@]} -eq 0 ]
652443
+    assert [ ${#stderr_lines[@]} -eq 0 ]
652443
+  fi
652443
+
652443
+  num_of_images="$(list_images)"
652443
+  assert_equal "$num_of_images" 0
652443
+}
652443
+
652443
 @test "rmi: Try to remove all images with a container present and running" {
652443
   skip "Bug: Fail in 'toolbox rmi' does not return non-zero value"
652443
   num_of_images=$(list_images)
652443
diff --git a/test/system/libs/helpers.bash b/test/system/libs/helpers.bash
652443
index a4e02c1dd0a3..36a927cf063f 100644
652443
--- a/test/system/libs/helpers.bash
652443
+++ b/test/system/libs/helpers.bash
652443
@@ -129,8 +129,12 @@ function build_image_without_name() {
652443
   assert_line --index 1 --partial "LABEL com.github.containers.toolbox=\"true\""
652443
   assert_line --index 2 --partial "COMMIT"
652443
   assert_line --index 3 --regexp "^--> [a-z0-9]*$"
652443
+  last=$((${#lines[@]}-1))
652443
+  assert_line --index "$last" --regexp "^[a-f0-9]{64}$"
652443
 
652443
   rm -f "$BATS_TMPDIR"/Containerfile
652443
+
652443
+  echo "${lines[$last]}"
652443
 }
652443
 
652443
 
652443
-- 
652443
2.38.1
652443
652443
652443
From dc3a6b6872ec034f5d52f5d484fd0adbedb1a1b0 Mon Sep 17 00:00:00 2001
652443
From: Martin Krajnak <mkrajnak@redhat.com>
652443
Date: Fri, 9 Dec 2022 13:03:52 +0100
652443
Subject: [PATCH 23/27] test/system: Add a helper to pull the default image and
652443
 copy it
652443
652443
This will be used in subsequent commits to test the handling of such
652443
copied images in 'toolbox list' and 'toolbox rmi'.
652443
652443
https://github.com/containers/toolbox/issues/1043
652443
(cherry picked from commit d5daa7167e89cc98eafe22e94dde5bdcd58de013)
652443
---
652443
 test/system/libs/helpers.bash | 23 +++++++++++++++++++++++
652443
 1 file changed, 23 insertions(+)
652443
652443
diff --git a/test/system/libs/helpers.bash b/test/system/libs/helpers.bash
652443
index 36a927cf063f..548c4c0e745f 100644
652443
--- a/test/system/libs/helpers.bash
652443
+++ b/test/system/libs/helpers.bash
652443
@@ -222,6 +222,29 @@ function pull_default_image() {
652443
 }
652443
 
652443
 
652443
+function pull_default_image_and_copy() {
652443
+  pull_default_image
652443
+
652443
+  local distro
652443
+  local version
652443
+  local image
652443
+
652443
+  distro="$(get_system_id)"
652443
+  version="$(get_system_version)"
652443
+  image="${IMAGES[$distro]}:$version"
652443
+
652443
+  # https://github.com/containers/skopeo/issues/547 for the options for containers-storage
652443
+  run "$SKOPEO" copy \
652443
+      "containers-storage:[overlay@$ROOTLESS_PODMAN_STORE_DIR+$ROOTLESS_PODMAN_STORE_DIR]$image" \
652443
+      "containers-storage:[overlay@$ROOTLESS_PODMAN_STORE_DIR+$ROOTLESS_PODMAN_STORE_DIR]$image-copy"
652443
+
652443
+  if [ "$status" -ne 0 ]; then
652443
+    echo "Failed to copy image $image to $image-copy"
652443
+    assert_success
652443
+  fi
652443
+}
652443
+
652443
+
652443
 # Creates a container with specific name, distro and version
652443
 #
652443
 # Pulling of an image is taken care of by the function
652443
-- 
652443
2.38.1
652443
652443
652443
From a45901f17db0a5cb2dab8fe62a4d74beb7153c41 Mon Sep 17 00:00:00 2001
652443
From: Debarshi Ray <rishi@fedoraproject.org>
652443
Date: Fri, 9 Dec 2022 12:58:58 +0100
652443
Subject: [PATCH 24/27] test/system: Test 'rmi' with an image and its copy
652443
652443
https://github.com/containers/toolbox/issues/1043
652443
(cherry picked from commit bbdf4ddb63fbabd460107ed219386c5df965f0c4)
652443
---
652443
 test/system/107-rmi.bats | 134 +++++++++++++++++++++++++++++++++++++++
652443
 1 file changed, 134 insertions(+)
652443
652443
diff --git a/test/system/107-rmi.bats b/test/system/107-rmi.bats
652443
index 00ff09245c4c..f3c5ef1d8258 100644
652443
--- a/test/system/107-rmi.bats
652443
+++ b/test/system/107-rmi.bats
652443
@@ -100,6 +100,140 @@ teardown() {
652443
   assert_equal "$num_of_images" 0
652443
 }
652443
 
652443
+@test "rmi: An image and its copy by name, separately" {
652443
+  local num_of_images
652443
+  num_of_images="$(list_images)"
652443
+  assert_equal "$num_of_images" 0
652443
+
652443
+  local default_image
652443
+  default_image="$(get_default_image)"
652443
+
652443
+  pull_default_image_and_copy
652443
+
652443
+  num_of_images="$(list_images)"
652443
+  assert_equal "$num_of_images" 2
652443
+
652443
+  run --keep-empty-lines --separate-stderr "$TOOLBOX" rmi "$default_image"
652443
+
652443
+  assert_success
652443
+  assert_output ""
652443
+  output="$stderr"
652443
+  assert_output ""
652443
+  if check_bats_version 1.7.0; then
652443
+    assert [ ${#lines[@]} -eq 0 ]
652443
+    assert [ ${#stderr_lines[@]} -eq 0 ]
652443
+  fi
652443
+
652443
+  run --keep-empty-lines --separate-stderr "$TOOLBOX" rmi "$default_image-copy"
652443
+
652443
+  assert_success
652443
+  assert_output ""
652443
+  output="$stderr"
652443
+  assert_output ""
652443
+  if check_bats_version 1.7.0; then
652443
+    assert [ ${#lines[@]} -eq 0 ]
652443
+    assert [ ${#stderr_lines[@]} -eq 0 ]
652443
+  fi
652443
+
652443
+  num_of_images="$(list_images)"
652443
+  assert_equal "$num_of_images" 0
652443
+}
652443
+
652443
+@test "rmi: An image and its copy by name, separately (reverse order)" {
652443
+  local num_of_images
652443
+  num_of_images="$(list_images)"
652443
+  assert_equal "$num_of_images" 0
652443
+
652443
+  local default_image
652443
+  default_image="$(get_default_image)"
652443
+
652443
+  pull_default_image_and_copy
652443
+
652443
+  num_of_images="$(list_images)"
652443
+  assert_equal "$num_of_images" 2
652443
+
652443
+  run --keep-empty-lines --separate-stderr "$TOOLBOX" rmi "$default_image-copy"
652443
+
652443
+  assert_success
652443
+  assert_output ""
652443
+  output="$stderr"
652443
+  assert_output ""
652443
+  if check_bats_version 1.7.0; then
652443
+    assert [ ${#lines[@]} -eq 0 ]
652443
+    assert [ ${#stderr_lines[@]} -eq 0 ]
652443
+  fi
652443
+
652443
+  run --keep-empty-lines --separate-stderr "$TOOLBOX" rmi "$default_image"
652443
+
652443
+  assert_success
652443
+  assert_output ""
652443
+  output="$stderr"
652443
+  assert_output ""
652443
+  if check_bats_version 1.7.0; then
652443
+    assert [ ${#lines[@]} -eq 0 ]
652443
+    assert [ ${#stderr_lines[@]} -eq 0 ]
652443
+  fi
652443
+
652443
+  num_of_images="$(list_images)"
652443
+  assert_equal "$num_of_images" 0
652443
+}
652443
+
652443
+@test "rmi: An image and its copy by name, together" {
652443
+  local num_of_images
652443
+  num_of_images="$(list_images)"
652443
+  assert_equal "$num_of_images" 0
652443
+
652443
+  local default_image
652443
+  default_image="$(get_default_image)"
652443
+
652443
+  pull_default_image_and_copy
652443
+
652443
+  num_of_images="$(list_images)"
652443
+  assert_equal "$num_of_images" 2
652443
+
652443
+  run --keep-empty-lines --separate-stderr "$TOOLBOX" rmi "$default_image" "$default_image-copy"
652443
+
652443
+  assert_success
652443
+  assert_output ""
652443
+  output="$stderr"
652443
+  assert_output ""
652443
+  if check_bats_version 1.7.0; then
652443
+    assert [ ${#lines[@]} -eq 0 ]
652443
+    assert [ ${#stderr_lines[@]} -eq 0 ]
652443
+  fi
652443
+
652443
+  num_of_images="$(list_images)"
652443
+  assert_equal "$num_of_images" 0
652443
+}
652443
+
652443
+@test "rmi: An image and its copy by name, together (reverse order)" {
652443
+  local num_of_images
652443
+  num_of_images="$(list_images)"
652443
+  assert_equal "$num_of_images" 0
652443
+
652443
+  local default_image
652443
+  default_image="$(get_default_image)"
652443
+
652443
+  pull_default_image_and_copy
652443
+
652443
+  num_of_images="$(list_images)"
652443
+  assert_equal "$num_of_images" 2
652443
+
652443
+  run --keep-empty-lines --separate-stderr "$TOOLBOX" rmi "$default_image-copy" "$default_image"
652443
+
652443
+  assert_success
652443
+  assert_output ""
652443
+  output="$stderr"
652443
+  assert_output ""
652443
+  if check_bats_version 1.7.0; then
652443
+    assert [ ${#lines[@]} -eq 0 ]
652443
+    assert [ ${#stderr_lines[@]} -eq 0 ]
652443
+  fi
652443
+
652443
+  num_of_images="$(list_images)"
652443
+  assert_equal "$num_of_images" 0
652443
+}
652443
+
652443
 @test "rmi: Try to remove all images with a container present and running" {
652443
   skip "Bug: Fail in 'toolbox rmi' does not return non-zero value"
652443
   num_of_images=$(list_images)
652443
-- 
652443
2.38.1
652443
652443
652443
From fcc8267e361b0a288cf77a43d0382121513a9fd9 Mon Sep 17 00:00:00 2001
652443
From: Debarshi Ray <rishi@fedoraproject.org>
652443
Date: Mon, 12 Dec 2022 20:58:25 +0100
652443
Subject: [PATCH 25/27] test/system: Test 'rmi' with an image
652443
652443
https://github.com/containers/toolbox/pull/1195
652443
(cherry picked from commit 51eccd3da52b6bdd0326329048ece85d41b4c064)
652443
---
652443
 test/system/107-rmi.bats | 28 ++++++++++++++++++++++++++++
652443
 1 file changed, 28 insertions(+)
652443
652443
diff --git a/test/system/107-rmi.bats b/test/system/107-rmi.bats
652443
index f3c5ef1d8258..5dc7be7a6add 100644
652443
--- a/test/system/107-rmi.bats
652443
+++ b/test/system/107-rmi.bats
652443
@@ -50,6 +50,34 @@ teardown() {
652443
   assert_equal "$new_num_of_images" "$num_of_images"
652443
 }
652443
 
652443
+@test "rmi: An image by name" {
652443
+  local num_of_images
652443
+  num_of_images="$(list_images)"
652443
+  assert_equal "$num_of_images" 0
652443
+
652443
+  local default_image
652443
+  default_image="$(get_default_image)"
652443
+
652443
+  pull_default_image
652443
+
652443
+  num_of_images="$(list_images)"
652443
+  assert_equal "$num_of_images" 1
652443
+
652443
+  run --keep-empty-lines --separate-stderr "$TOOLBOX" rmi "$default_image"
652443
+
652443
+  assert_success
652443
+  assert_output ""
652443
+  output="$stderr"
652443
+  assert_output ""
652443
+  if check_bats_version 1.7.0; then
652443
+    assert [ ${#lines[@]} -eq 0 ]
652443
+    assert [ ${#stderr_lines[@]} -eq 0 ]
652443
+  fi
652443
+
652443
+  num_of_images="$(list_images)"
652443
+  assert_equal "$num_of_images" 0
652443
+}
652443
+
652443
 @test "rmi: '--all' with an image without a name" {
652443
   local num_of_images
652443
   num_of_images="$(list_images)"
652443
-- 
652443
2.38.1
652443
652443
652443
From 73472311a77bfec06a52783056097dbcafc7a8f5 Mon Sep 17 00:00:00 2001
652443
From: Debarshi Ray <rishi@fedoraproject.org>
652443
Date: Tue, 6 Dec 2022 18:15:15 +0100
652443
Subject: [PATCH 26/27] Unbreak sorting and clearly identify copied images in
652443
 'list'
652443
652443
Currently, if an image was copied with:
652443
  $ skopeo copy \
652443
      containers-storage:registry.fedoraproject.org/fedora-toolbox:36 \
652443
      containers-storage:localhost/fedora-toolbox:36
652443
652443
... or:
652443
  $ podman tag \
652443
      registry.fedoraproject.org/fedora-toolbox:36 \
652443
      localhost/fedora-toolbox:36
652443
652443
... then it would show up twice in 'list' with the same name, and in the
652443
wrong order.
652443
652443
Either as:
652443
  $ toolbox list --images
652443
  IMAGE ID      IMAGE NAME                                      CREATED
652443
  2110dbbc33d2  localhost/fedora-toolbox:36                     1 day...
652443
  e085805ade4a  registry.access.redhat.com/ubi8/toolbox:latest  1 day...
652443
  2110dbbc33d2  localhost/fedora-toolbox:36                     1 day...
652443
  70cbe2ce60ca  registry.fedoraproject.org/fedora-toolbox:34    1 day...
652443
652443
... or as:
652443
  $ toolbox list --images
652443
  IMAGE ID      IMAGE NAME                                      CREATED
652443
  2110dbbc33d2  registry.fedoraproject.org/fedora-toolbox:36    1 day...
652443
  e085805ade4a  registry.access.redhat.com/ubi8/toolbox:latest  1 day...
652443
  2110dbbc33d2  registry.fedoraproject.org/fedora-toolbox:36    1 day...
652443
  70cbe2ce60ca  registry.fedoraproject.org/fedora-toolbox:34    1 day...
652443
652443
The correct output should be similar to 'podman images', and be sorted
652443
in ascending order of the names:
652443
  $ toolbox list --images
652443
  IMAGE ID      IMAGE NAME                                      CREATED
652443
  2110dbbc33d2  localhost/fedora-toolbox:36                     1 day...
652443
  e085805ade4a  registry.access.redhat.com/ubi8/toolbox:latest  1 day...
652443
  70cbe2ce60ca  registry.fedoraproject.org/fedora-toolbox:34    1 day...
652443
  2110dbbc33d2  registry.fedoraproject.org/fedora-toolbox:36    1 day...
652443
652443
The problem is that, in these situations, 'podman images --format json'
652443
returns separate identical JSON collections for each copy of the image,
652443
and all of those copies have multiple names:
652443
  [
652443
    {
652443
      "Id": "2110dbbc33d2",
652443
      ...
652443
      "Names": [
652443
        "localhost/fedora-toolbox:36",
652443
        "registry.fedoraproject.org/fedora-toolbox:36"
652443
      ],
652443
      ...
652443
    },
652443
    {
652443
      "Id": "e085805ade4a",
652443
      ...
652443
      "Names": [
652443
        "registry.access.redhat.com/ubi8/toolbox:latest"
652443
      ],
652443
      ...
652443
    },
652443
    {
652443
      "Id": "2110dbbc33d2",
652443
      ...
652443
      "Names": [
652443
        "localhost/fedora-toolbox:36",
652443
        "registry.fedoraproject.org/fedora-toolbox:36"
652443
      ],
652443
      ...
652443
    }
652443
    {
652443
      "Id": "70cbe2ce60ca",
652443
      ...
652443
      "Names": [
652443
        "registry.fedoraproject.org/fedora-toolbox:34"
652443
      ],
652443
      ...
652443
    },
652443
  ]
652443
652443
The image objects need to be flattened to have only one unique name per
652443
copy, but with the same ID, and then sorted to ensure the right order.
652443
652443
Note that the ordering was already broken since commit 2369da5d31830e5c,
652443
which started using 'podman images --sort repository'.  Podman can sort
652443
by either the image's repository or tag, but not by the unified name,
652443
which is what Toolbx needs.  Therefore, even without copied images,
652443
Toolbx really does need to sort the images itself.
652443
652443
Prior to commit 2369da5d31830e5c, the ordering was correct, but copied
652443
images would only show up once.
652443
652443
Fallout from 2369da5d31830e5cd3e1a13857a686365875ae61
652443
652443
This reverts parts of commit 67e210378e7b43cc0847cd171209861862f225b0.
652443
652443
https://github.com/containers/toolbox/issues/1043
652443
(backported from commit 6aab0a61752dc9a3f0b472b4db5d72c1678ee702)
652443
---
652443
 src/cmd/list.go           | 31 +++++++++++++++++-------
652443
 src/cmd/rmi.go            |  2 +-
652443
 src/pkg/podman/podman.go  | 50 +++++++++++++++++++++++++++++++++++++++
652443
 test/system/102-list.bats | 12 +++++-----
652443
 4 files changed, 80 insertions(+), 15 deletions(-)
652443
652443
diff --git a/src/cmd/list.go b/src/cmd/list.go
652443
index 9493a54593af..134ec7fc472f 100644
652443
--- a/src/cmd/list.go
652443
+++ b/src/cmd/list.go
652443
@@ -21,6 +21,7 @@ import (
652443
 	"errors"
652443
 	"fmt"
652443
 	"os"
652443
+	"sort"
652443
 	"text/tabwriter"
652443
 
652443
 	"github.com/containers/toolbox/pkg/podman"
652443
@@ -104,7 +105,7 @@ func list(cmd *cobra.Command, args []string) error {
652443
 	var err error
652443
 
652443
 	if lsImages {
652443
-		images, err = getImages()
652443
+		images, err = getImages(false)
652443
 		if err != nil {
652443
 			return err
652443
 		}
652443
@@ -179,26 +180,41 @@ func listHelp(cmd *cobra.Command, args []string) {
652443
 	}
652443
 }
652443
 
652443
-func getImages() ([]podman.Image, error) {
652443
+func getImages(fillNameWithID bool) ([]podman.Image, error) {
652443
 	logrus.Debug("Fetching all images")
652443
-	args := []string{"--sort", "repository"}
652443
+	var args []string
652443
 	images, err := podman.GetImages(args...)
652443
 	if err != nil {
652443
 		logrus.Debugf("Fetching all images failed: %s", err)
652443
 		return nil, errors.New("failed to get images")
652443
 	}
652443
 
652443
+	processed := make(map[string]struct{})
652443
 	var toolboxImages []podman.Image
652443
 
652443
 	for _, image := range images {
652443
+		if _, ok := processed[image.ID]; ok {
652443
+			continue
652443
+		}
652443
+
652443
+		processed[image.ID] = struct{}{}
652443
+		var isToolboxImage bool
652443
+
652443
 		for label := range toolboxLabels {
652443
 			if _, ok := image.Labels[label]; ok {
652443
-				toolboxImages = append(toolboxImages, image)
652443
+				isToolboxImage = true
652443
 				break
652443
 			}
652443
 		}
652443
+
652443
+		if isToolboxImage {
652443
+			flattenedImages := image.FlattenNames(fillNameWithID)
652443
+			toolboxImages = append(toolboxImages, flattenedImages...)
652443
+		}
652443
+
652443
 	}
652443
 
652443
+	sort.Sort(podman.ImageSlice(toolboxImages))
652443
 	return toolboxImages, nil
652443
 }
652443
 
652443
@@ -208,14 +224,13 @@ func listOutput(images []podman.Image, containers []toolboxContainer) {
652443
 		fmt.Fprintf(writer, "%s\t%s\t%s\n", "IMAGE ID", "IMAGE NAME", "CREATED")
652443
 
652443
 		for _, image := range images {
652443
-			imageName := "<none>"
652443
-			if len(image.Names) != 0 {
652443
-				imageName = image.Names[0]
652443
+			if len(image.Names) != 1 {
652443
+				panic("cannot list unflattened Image")
652443
 			}
652443
 
652443
 			fmt.Fprintf(writer, "%s\t%s\t%s\n",
652443
 				utils.ShortID(image.ID),
652443
-				imageName,
652443
+				image.Names[0],
652443
 				image.Created)
652443
 		}
652443
 
652443
diff --git a/src/cmd/rmi.go b/src/cmd/rmi.go
652443
index d47a75e2f5c4..4b2e02811281 100644
652443
--- a/src/cmd/rmi.go
652443
+++ b/src/cmd/rmi.go
652443
@@ -69,7 +69,7 @@ func rmi(cmd *cobra.Command, args []string) error {
652443
 	}
652443
 
652443
 	if rmiFlags.deleteAll {
652443
-		toolboxImages, err := getImages()
652443
+		toolboxImages, err := getImages(false)
652443
 		if err != nil {
652443
 			return err
652443
 		}
652443
diff --git a/src/pkg/podman/podman.go b/src/pkg/podman/podman.go
652443
index 623116707f36..153c0b5a0375 100644
652443
--- a/src/pkg/podman/podman.go
652443
+++ b/src/pkg/podman/podman.go
652443
@@ -35,6 +35,8 @@ type Image struct {
652443
 	Labels  map[string]string
652443
 }
652443
 
652443
+type ImageSlice []Image
652443
+
652443
 var (
652443
 	podmanVersion string
652443
 )
652443
@@ -43,6 +45,34 @@ var (
652443
 	LogLevel = logrus.ErrorLevel
652443
 )
652443
 
652443
+func (image *Image) FlattenNames(fillNameWithID bool) []Image {
652443
+	var ret []Image
652443
+
652443
+	if len(image.Names) == 0 {
652443
+		flattenedImage := *image
652443
+
652443
+		if fillNameWithID {
652443
+			shortID := utils.ShortID(image.ID)
652443
+			flattenedImage.Names = []string{shortID}
652443
+		} else {
652443
+			flattenedImage.Names = []string{"<none>"}
652443
+		}
652443
+
652443
+		ret = []Image{flattenedImage}
652443
+		return ret
652443
+	}
652443
+
652443
+	ret = make([]Image, 0, len(image.Names))
652443
+
652443
+	for _, name := range image.Names {
652443
+		flattenedImage := *image
652443
+		flattenedImage.Names = []string{name}
652443
+		ret = append(ret, flattenedImage)
652443
+	}
652443
+
652443
+	return ret
652443
+}
652443
+
652443
 func (image *Image) UnmarshalJSON(data []byte) error {
652443
 	var raw struct {
652443
 		ID      string
652443
@@ -72,6 +102,26 @@ func (image *Image) UnmarshalJSON(data []byte) error {
652443
 	return nil
652443
 }
652443
 
652443
+func (images ImageSlice) Len() int {
652443
+	return len(images)
652443
+}
652443
+
652443
+func (images ImageSlice) Less(i, j int) bool {
652443
+	if len(images[i].Names) != 1 {
652443
+		panic("cannot sort unflattened ImageSlice")
652443
+	}
652443
+
652443
+	if len(images[j].Names) != 1 {
652443
+		panic("cannot sort unflattened ImageSlice")
652443
+	}
652443
+
652443
+	return images[i].Names[0] < images[j].Names[0]
652443
+}
652443
+
652443
+func (images ImageSlice) Swap(i, j int) {
652443
+	images[i], images[j] = images[j], images[i]
652443
+}
652443
+
652443
 // CheckVersion compares provided version with the version of Podman.
652443
 //
652443
 // Takes in one string parameter that should be in the format that is used for versioning (eg. 1.0.0, 2.5.1-dev).
652443
diff --git a/test/system/102-list.bats b/test/system/102-list.bats
652443
index a109e0fbf87d..c706a5e87183 100644
652443
--- a/test/system/102-list.bats
652443
+++ b/test/system/102-list.bats
652443
@@ -75,8 +75,8 @@ teardown() {
652443
   run --keep-empty-lines --separate-stderr $TOOLBOX list --images
652443
 
652443
   assert_success
652443
-  assert_line --index 1 --partial "$(get_system_id)-toolbox:$(get_system_version)"
652443
-  assert_line --index 2 --partial "fedora-toolbox:32"
652443
+  assert_line --index 1 --partial "fedora-toolbox:32"
652443
+  assert_line --index 2 --partial "$(get_system_id)-toolbox:$(get_system_version)"
652443
   assert [ ${#lines[@]} -eq 4 ]
652443
   if check_bats_version 1.7.0; then
652443
     assert [ ${#stderr_lines[@]} -eq 0 ]
652443
@@ -98,8 +98,8 @@ teardown() {
652443
   run --keep-empty-lines --separate-stderr $TOOLBOX list
652443
 
652443
   assert_success
652443
-  assert_line --index 1 --partial "$(get_system_id)-toolbox:$(get_system_version)"
652443
-  assert_line --index 2 --partial "fedora-toolbox:32"
652443
+  assert_line --index 1 --partial "fedora-toolbox:32"
652443
+  assert_line --index 2 --partial "$(get_system_id)-toolbox:$(get_system_version)"
652443
   assert_line --index 5 --partial "$(get_system_id)-toolbox-$(get_system_version)"
652443
   assert_line --index 6 --partial "non-default-one"
652443
   assert_line --index 7 --partial "non-default-two"
652443
@@ -121,8 +121,8 @@ teardown() {
652443
 
652443
   assert_success
652443
   assert_line --index 1 --partial "<none>"
652443
-  assert_line --index 2 --partial "$default_image"
652443
-  assert_line --index 3 --partial "fedora-toolbox:34"
652443
+  assert_line --index 2 --partial "fedora-toolbox:34"
652443
+  assert_line --index 3 --partial "$default_image"
652443
   assert [ ${#lines[@]} -eq 5 ]
652443
   if check_bats_version 1.7.0; then
652443
     assert [ ${#stderr_lines[@]} -eq 0 ]
652443
-- 
652443
2.38.1
652443
652443
652443
From 7fa8b2454b41c05dad8703c5c590c5cc9518dd72 Mon Sep 17 00:00:00 2001
652443
From: Martin Krajnak <mkrajnak@redhat.com>
652443
Date: Wed, 7 Dec 2022 23:12:53 +0100
652443
Subject: [PATCH 27/27] test/system: Ensure that copied images are clearly
652443
 identified
652443
652443
Note that 'run --keep-empty-lines' counts the trailing newline on the
652443
last line as a separate line.
652443
652443
Until Bats 1.7.0, 'run --keep-empty-lines' had a bug where even when a
652443
command produced no output, it would report a line count of one [1] due
652443
to a stray line feed character.  This needs to be conditionalized, since
652443
Fedora 35 has Bats 1.5.0.
652443
652443
[1] https://github.com/bats-core/bats-core/issues/573
652443
652443
https://github.com/containers/toolbox/issues/1043
652443
(cherry picked from commit 05a062f8c91355b119e8eaa4643d4ba9e25534ef)
652443
---
652443
 test/system/102-list.bats | 21 +++++++++++++++++++++
652443
 1 file changed, 21 insertions(+)
652443
652443
diff --git a/test/system/102-list.bats b/test/system/102-list.bats
652443
index c706a5e87183..dd7f1244709a 100644
652443
--- a/test/system/102-list.bats
652443
+++ b/test/system/102-list.bats
652443
@@ -61,6 +61,27 @@ teardown() {
652443
   fi
652443
 }
652443
 
652443
+@test "list: Image and its copy" {
652443
+  local default_image
652443
+  default_image="$(get_default_image)"
652443
+
652443
+  pull_default_image_and_copy
652443
+
652443
+  local num_of_images
652443
+  num_of_images="$(list_images)"
652443
+  assert_equal "$num_of_images" 2
652443
+
652443
+  run --keep-empty-lines --separate-stderr "$TOOLBOX" list
652443
+
652443
+  assert_success
652443
+  assert_line --index 1 --partial "$default_image"
652443
+  assert_line --index 2 --partial "$default_image-copy"
652443
+  assert [ ${#lines[@]} -eq 4 ]
652443
+  if check_bats_version 1.7.0; then
652443
+    assert [ ${#stderr_lines[@]} -eq 0 ]
652443
+  fi
652443
+}
652443
+
652443
 @test "list: Try to list images and containers (no flag) with 3 containers and 2 images (the list should have 3 images and 2 containers)" {
652443
   # Pull the two images
652443
   pull_default_image
652443
-- 
652443
2.38.1
652443