github.com/containers/libpod@v1.9.4-0.20220419124438-4284fd425507/test/e2e/prune_test.go (about)

     1  package integration
     2  
     3  import (
     4  	"os"
     5  
     6  	. "github.com/containers/libpod/test/utils"
     7  	. "github.com/onsi/ginkgo"
     8  	. "github.com/onsi/gomega"
     9  )
    10  
    11  var pruneImage = `
    12  FROM  alpine:latest
    13  LABEL RUN podman --version
    14  RUN apk update
    15  RUN apk add bash`
    16  
    17  var _ = Describe("Podman prune", func() {
    18  	var (
    19  		tempdir    string
    20  		err        error
    21  		podmanTest *PodmanTestIntegration
    22  	)
    23  
    24  	BeforeEach(func() {
    25  		tempdir, err = CreateTempDirInTempDir()
    26  		if err != nil {
    27  			os.Exit(1)
    28  		}
    29  		podmanTest = PodmanTestCreate(tempdir)
    30  		podmanTest.Setup()
    31  		podmanTest.SeedImages()
    32  	})
    33  
    34  	AfterEach(func() {
    35  		podmanTest.Cleanup()
    36  		f := CurrentGinkgoTestDescription()
    37  		processTestResult(f)
    38  
    39  	})
    40  
    41  	It("podman container prune containers", func() {
    42  		top := podmanTest.RunTopContainer("")
    43  		top.WaitWithDefaultTimeout()
    44  		Expect(top.ExitCode()).To(Equal(0))
    45  
    46  		top = podmanTest.RunTopContainer("")
    47  		top.WaitWithDefaultTimeout()
    48  		Expect(top.ExitCode()).To(Equal(0))
    49  		cid := top.OutputToString()
    50  
    51  		stop := podmanTest.Podman([]string{"stop", cid})
    52  		stop.WaitWithDefaultTimeout()
    53  		Expect(stop.ExitCode()).To(Equal(0))
    54  
    55  		prune := podmanTest.Podman([]string{"container", "prune", "-f"})
    56  		prune.WaitWithDefaultTimeout()
    57  		Expect(prune.ExitCode()).To(Equal(0))
    58  
    59  		Expect(podmanTest.NumberOfContainers()).To(Equal(1))
    60  	})
    61  
    62  	It("podman container prune after create containers", func() {
    63  		create := podmanTest.Podman([]string{"create", "--name", "test", BB})
    64  		create.WaitWithDefaultTimeout()
    65  		Expect(create.ExitCode()).To(Equal(0))
    66  
    67  		prune := podmanTest.Podman([]string{"container", "prune", "-f"})
    68  		prune.WaitWithDefaultTimeout()
    69  		Expect(prune.ExitCode()).To(Equal(0))
    70  
    71  		Expect(podmanTest.NumberOfContainers()).To(Equal(0))
    72  	})
    73  
    74  	It("podman container prune after create & init containers", func() {
    75  		create := podmanTest.Podman([]string{"create", "--name", "test", BB})
    76  		create.WaitWithDefaultTimeout()
    77  		Expect(create.ExitCode()).To(Equal(0))
    78  
    79  		init := podmanTest.Podman([]string{"init", "test"})
    80  		init.WaitWithDefaultTimeout()
    81  		Expect(init.ExitCode()).To(Equal(0))
    82  
    83  		prune := podmanTest.Podman([]string{"container", "prune", "-f"})
    84  		prune.WaitWithDefaultTimeout()
    85  		Expect(prune.ExitCode()).To(Equal(0))
    86  
    87  		Expect(podmanTest.NumberOfContainers()).To(Equal(0))
    88  	})
    89  
    90  	It("podman image prune none images", func() {
    91  		SkipIfRemote()
    92  		podmanTest.BuildImage(pruneImage, "alpine_bash:latest", "true")
    93  
    94  		none := podmanTest.Podman([]string{"images", "-a"})
    95  		none.WaitWithDefaultTimeout()
    96  		Expect(none.ExitCode()).To(Equal(0))
    97  		hasNone, _ := none.GrepString("<none>")
    98  		Expect(hasNone).To(BeTrue())
    99  
   100  		prune := podmanTest.Podman([]string{"image", "prune", "-f"})
   101  		prune.WaitWithDefaultTimeout()
   102  		Expect(prune.ExitCode()).To(Equal(0))
   103  
   104  		after := podmanTest.Podman([]string{"images", "-a"})
   105  		after.WaitWithDefaultTimeout()
   106  		Expect(none.ExitCode()).To(Equal(0))
   107  		hasNoneAfter, _ := after.GrepString("<none>")
   108  		Expect(hasNoneAfter).To(BeFalse())
   109  		Expect(len(after.OutputToStringArray()) > 1).To(BeTrue())
   110  	})
   111  
   112  	It("podman image prune unused images", func() {
   113  		podmanTest.RestoreAllArtifacts()
   114  		prune := podmanTest.PodmanNoCache([]string{"image", "prune", "-af"})
   115  		prune.WaitWithDefaultTimeout()
   116  		Expect(prune.ExitCode()).To(Equal(0))
   117  
   118  		images := podmanTest.PodmanNoCache([]string{"images", "-aq"})
   119  		images.WaitWithDefaultTimeout()
   120  		// all images are unused, so they all should be deleted!
   121  		Expect(len(images.OutputToStringArray())).To(Equal(0))
   122  	})
   123  
   124  	It("podman system image prune unused images", func() {
   125  		SkipIfRemote()
   126  		podmanTest.RestoreAllArtifacts()
   127  		podmanTest.BuildImage(pruneImage, "alpine_bash:latest", "true")
   128  		prune := podmanTest.PodmanNoCache([]string{"system", "prune", "-a", "--force"})
   129  		prune.WaitWithDefaultTimeout()
   130  		Expect(prune.ExitCode()).To(Equal(0))
   131  
   132  		images := podmanTest.PodmanNoCache([]string{"images", "-aq"})
   133  		images.WaitWithDefaultTimeout()
   134  		// all images are unused, so they all should be deleted!
   135  		Expect(len(images.OutputToStringArray())).To(Equal(0))
   136  	})
   137  
   138  	It("podman system prune pods", func() {
   139  		session := podmanTest.Podman([]string{"pod", "create"})
   140  		session.WaitWithDefaultTimeout()
   141  		Expect(session.ExitCode()).To(Equal(0))
   142  
   143  		session = podmanTest.Podman([]string{"pod", "create"})
   144  		session.WaitWithDefaultTimeout()
   145  		Expect(session.ExitCode()).To(Equal(0))
   146  
   147  		session = podmanTest.Podman([]string{"pod", "start", "-l"})
   148  		session.WaitWithDefaultTimeout()
   149  		Expect(session.ExitCode()).To(Equal(0))
   150  
   151  		session = podmanTest.Podman([]string{"pod", "stop", "-l"})
   152  		session.WaitWithDefaultTimeout()
   153  		Expect(session.ExitCode()).To(Equal(0))
   154  
   155  		pods := podmanTest.Podman([]string{"pod", "ps"})
   156  		pods.WaitWithDefaultTimeout()
   157  		Expect(pods.ExitCode()).To(Equal(0))
   158  		Expect(len(pods.OutputToStringArray())).To(Equal(3))
   159  
   160  		prune := podmanTest.Podman([]string{"system", "prune", "-f"})
   161  		prune.WaitWithDefaultTimeout()
   162  		Expect(prune.ExitCode()).To(Equal(0))
   163  
   164  		pods = podmanTest.Podman([]string{"pod", "ps"})
   165  		pods.WaitWithDefaultTimeout()
   166  		Expect(pods.ExitCode()).To(Equal(0))
   167  		Expect(len(pods.OutputToStringArray())).To(Equal(2))
   168  	})
   169  })