From d1754bdd4f299c8d92671493add4a69ef7850e1d Mon Sep 17 00:00:00 2001
From: Toshiki Sonoda <sonoda.toshiki@fujitsu.com>
Date: Fri, 8 Jul 2022 08:33:20 +0900
Subject: [PATCH] Refactored networkPrune function

Refactored the networkPrune function to improve readability.

This commit changes the `networkPrune` function to
use the `PrintNetworkPruneResults` function.

[NO NEW TESTS NEEDED]

Signed-off-by: Toshiki Sonoda <sonoda.toshiki@fujitsu.com>
---
 cmd/podman/networks/prune.go       | 15 ++-------------
 cmd/podman/utils/utils.go          |  8 ++++----
 pkg/domain/entities/network.go     |  3 +--
 pkg/domain/entities/system.go      |  2 +-
 pkg/domain/infra/abi/system.go     | 29 +++++++++++++----------------
 pkg/domain/infra/tunnel/network.go |  2 +-
 test/e2e/prune_test.go             |  5 +++--
 7 files changed, 25 insertions(+), 39 deletions(-)

diff --git a/cmd/podman/networks/prune.go b/cmd/podman/networks/prune.go
index fa621ebace..ee5389aa75 100644
--- a/cmd/podman/networks/prune.go
+++ b/cmd/podman/networks/prune.go
@@ -52,10 +52,7 @@ func init() {
 }
 
 func networkPrune(cmd *cobra.Command, _ []string) error {
-	var (
-		errs utils.OutputErrors
-		err  error
-	)
+	var err error
 	if !force {
 		reader := bufio.NewReader(os.Stdin)
 		fmt.Println("WARNING! This will remove all networks not used by at least one container.")
@@ -77,13 +74,5 @@ func networkPrune(cmd *cobra.Command, _ []string) error {
 		setExitCode(err)
 		return err
 	}
-	for _, r := range responses {
-		if r.Error == nil {
-			fmt.Println(r.Name)
-		} else {
-			setExitCode(r.Error)
-			errs = append(errs, r.Error)
-		}
-	}
-	return errs.PrintErrors()
+	return utils.PrintNetworkPruneResults(responses, false)
 }
diff --git a/cmd/podman/utils/utils.go b/cmd/podman/utils/utils.go
index 2ae1233880..a265faf512 100644
--- a/cmd/podman/utils/utils.go
+++ b/cmd/podman/utils/utils.go
@@ -85,16 +85,16 @@ func PrintImagePruneResults(imagePruneReports []*reports.PruneReport, heading bo
 	return nil
 }
 
-func PrintNetworkPruneResults(networkPruneReport []*reports.PruneReport, heading bool) error {
+func PrintNetworkPruneResults(networkPruneReport []*entities.NetworkPruneReport, heading bool) error {
 	var errs OutputErrors
 	if heading && len(networkPruneReport) > 0 {
 		fmt.Println("Deleted Networks")
 	}
 	for _, r := range networkPruneReport {
-		if r.Err == nil {
-			fmt.Println(r.Id)
+		if r.Error == nil {
+			fmt.Println(r.Name)
 		} else {
-			errs = append(errs, r.Err)
+			errs = append(errs, r.Error)
 		}
 	}
 	return errs.PrintErrors()
diff --git a/pkg/domain/entities/network.go b/pkg/domain/entities/network.go
index d375c2e205..9e59953c67 100644
--- a/pkg/domain/entities/network.go
+++ b/pkg/domain/entities/network.go
@@ -81,8 +81,7 @@ type NetworkPruneReport struct {
 	Error error
 }
 
-// NetworkPruneOptions describes options for pruning
-// unused cni networks
+// NetworkPruneOptions describes options for pruning unused networks
 type NetworkPruneOptions struct {
 	Filters map[string][]string
 }
diff --git a/pkg/domain/entities/system.go b/pkg/domain/entities/system.go
index 331d2bcdc7..8dd0a61beb 100644
--- a/pkg/domain/entities/system.go
+++ b/pkg/domain/entities/system.go
@@ -28,7 +28,7 @@ type SystemPruneReport struct {
 	PodPruneReport        []*PodPruneReport
 	ContainerPruneReports []*reports.PruneReport
 	ImagePruneReports     []*reports.PruneReport
-	NetworkPruneReports   []*reports.PruneReport
+	NetworkPruneReports   []*NetworkPruneReport
 	VolumePruneReports    []*reports.PruneReport
 	ReclaimedSpace        uint64
 }
diff --git a/pkg/domain/infra/abi/system.go b/pkg/domain/infra/abi/system.go
index 96690afef9..0faae01c8c 100644
--- a/pkg/domain/infra/abi/system.go
+++ b/pkg/domain/infra/abi/system.go
@@ -157,15 +157,15 @@ func (ic *ContainerEngine) SystemPrune(ctx context.Context, options entities.Sys
 
 		// TODO: Figure out cleaner way to handle all of the different PruneOptions
 		// Remove all unused pods.
-		podPruneReport, err := ic.prunePodHelper(ctx)
+		podPruneReports, err := ic.prunePodHelper(ctx)
 		if err != nil {
 			return nil, err
 		}
-		if len(podPruneReport) > 0 {
+		if len(podPruneReports) > 0 {
 			found = true
 		}
 
-		systemPruneReport.PodPruneReport = append(systemPruneReport.PodPruneReport, podPruneReport...)
+		systemPruneReport.PodPruneReport = append(systemPruneReport.PodPruneReport, podPruneReports...)
 
 		// Remove all unused containers.
 		containerPruneOptions := entities.ContainerPruneOptions{}
@@ -201,38 +201,35 @@ func (ic *ContainerEngine) SystemPrune(ctx context.Context, options entities.Sys
 		networkPruneOptions := entities.NetworkPruneOptions{}
 		networkPruneOptions.Filters = options.Filters
 
-		networkPruneReport, err := ic.NetworkPrune(ctx, networkPruneOptions)
+		networkPruneReports, err := ic.NetworkPrune(ctx, networkPruneOptions)
 		if err != nil {
 			return nil, err
 		}
-		if len(networkPruneReport) > 0 {
+		if len(networkPruneReports) > 0 {
 			found = true
 		}
-		for _, net := range networkPruneReport {
-			systemPruneReport.NetworkPruneReports = append(systemPruneReport.NetworkPruneReports, &reports.PruneReport{
-				Id:   net.Name,
-				Err:  net.Error,
-				Size: 0,
-			})
-		}
+
+		// Networks reclaimedSpace are always '0'.
+		systemPruneReport.NetworkPruneReports = append(systemPruneReport.NetworkPruneReports, networkPruneReports...)
 
 		// Remove unused volume data.
 		if options.Volume {
 			volumePruneOptions := entities.VolumePruneOptions{}
 			volumePruneOptions.Filters = (url.Values)(options.Filters)
 
-			volumePruneReport, err := ic.VolumePrune(ctx, volumePruneOptions)
+			volumePruneReports, err := ic.VolumePrune(ctx, volumePruneOptions)
 			if err != nil {
 				return nil, err
 			}
-			if len(volumePruneReport) > 0 {
+			if len(volumePruneReports) > 0 {
 				found = true
 			}
 
-			reclaimedSpace += reports.PruneReportsSize(volumePruneReport)
-			systemPruneReport.VolumePruneReports = append(systemPruneReport.VolumePruneReports, volumePruneReport...)
+			reclaimedSpace += reports.PruneReportsSize(volumePruneReports)
+			systemPruneReport.VolumePruneReports = append(systemPruneReport.VolumePruneReports, volumePruneReports...)
 		}
 	}
+
 	systemPruneReport.ReclaimedSpace = reclaimedSpace
 	return systemPruneReport, nil
 }
diff --git a/pkg/domain/infra/tunnel/network.go b/pkg/domain/infra/tunnel/network.go
index 415999a964..56c32443cc 100644
--- a/pkg/domain/infra/tunnel/network.go
+++ b/pkg/domain/infra/tunnel/network.go
@@ -95,7 +95,7 @@ func (ic *ContainerEngine) NetworkExists(ctx context.Context, networkname string
 	}, nil
 }
 
-// Network prune removes unused cni networks
+// Network prune removes unused networks
 func (ic *ContainerEngine) NetworkPrune(ctx context.Context, options entities.NetworkPruneOptions) ([]*entities.NetworkPruneReport, error) {
 	opts := new(network.PruneOptions).WithFilters(options.Filters)
 	return network.Prune(ic.ClientCtx, opts)
diff --git a/test/e2e/prune_test.go b/test/e2e/prune_test.go
index 119c8d41e6..89cc65540b 100644
--- a/test/e2e/prune_test.go
+++ b/test/e2e/prune_test.go
@@ -259,11 +259,12 @@ var _ = Describe("Podman prune", func() {
 	})
 
 	It("podman system prune networks", func() {
-		// About netavark network backend test.
+		// Create new network.
 		session := podmanTest.Podman([]string{"network", "create", "test"})
 		session.WaitWithDefaultTimeout()
 		Expect(session).Should(Exit(0))
 
+		// Remove all unused networks.
 		session = podmanTest.Podman([]string{"system", "prune", "-f"})
 		session.WaitWithDefaultTimeout()
 		Expect(session).Should(Exit(0))
@@ -274,7 +275,7 @@ var _ = Describe("Podman prune", func() {
 		Expect(session).Should(Exit(0))
 		Expect(session.OutputToStringArray()).To(HaveLen(1))
 
-		// Remove all unused networks.
+		// Unused networks removed.
 		session = podmanTest.Podman([]string{"network", "ls", "-q", "--filter", "name=^test$"})
 		session.WaitWithDefaultTimeout()
 		Expect(session).Should(Exit(0))