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

     1  package integration
     2  
     3  import (
     4  	"fmt"
     5  	"os"
     6  	"path/filepath"
     7  	"strings"
     8  
     9  	. "github.com/containers/libpod/test/utils"
    10  	. "github.com/onsi/ginkgo"
    11  	. "github.com/onsi/gomega"
    12  )
    13  
    14  var _ = Describe("Podman pod rm", func() {
    15  	var (
    16  		tempdir    string
    17  		err        error
    18  		podmanTest *PodmanTestIntegration
    19  	)
    20  
    21  	BeforeEach(func() {
    22  		tempdir, err = CreateTempDirInTempDir()
    23  		if err != nil {
    24  			os.Exit(1)
    25  		}
    26  		podmanTest = PodmanTestCreate(tempdir)
    27  		podmanTest.Setup()
    28  		podmanTest.SeedImages()
    29  	})
    30  
    31  	AfterEach(func() {
    32  		podmanTest.CleanupPod()
    33  		f := CurrentGinkgoTestDescription()
    34  		processTestResult(f)
    35  
    36  	})
    37  
    38  	It("podman pod rm empty pod", func() {
    39  		_, ec, podid := podmanTest.CreatePod("")
    40  		Expect(ec).To(Equal(0))
    41  
    42  		result := podmanTest.Podman([]string{"pod", "rm", podid})
    43  		result.WaitWithDefaultTimeout()
    44  		Expect(result.ExitCode()).To(Equal(0))
    45  
    46  		// Also check that we don't leak cgroups
    47  		err := filepath.Walk("/sys/fs/cgroup", func(path string, info os.FileInfo, err error) error {
    48  			if err != nil {
    49  				return err
    50  			}
    51  			if !info.IsDir() {
    52  				Expect(err).To(BeNil())
    53  			}
    54  			if strings.Contains(info.Name(), podid) {
    55  				return fmt.Errorf("leaking cgroup path %s", path)
    56  			}
    57  			return nil
    58  		})
    59  		Expect(err).To(BeNil())
    60  	})
    61  
    62  	It("podman pod rm latest pod", func() {
    63  		_, ec, podid := podmanTest.CreatePod("")
    64  		Expect(ec).To(Equal(0))
    65  
    66  		_, ec2, podid2 := podmanTest.CreatePod("")
    67  		Expect(ec2).To(Equal(0))
    68  
    69  		result := podmanTest.Podman([]string{"pod", "rm", "--latest"})
    70  		result.WaitWithDefaultTimeout()
    71  		Expect(result.ExitCode()).To(Equal(0))
    72  
    73  		result = podmanTest.Podman([]string{"pod", "ps", "-q", "--no-trunc"})
    74  		result.WaitWithDefaultTimeout()
    75  		Expect(result.ExitCode()).To(Equal(0))
    76  		Expect(result.OutputToString()).To(ContainSubstring(podid))
    77  		Expect(result.OutputToString()).To(Not(ContainSubstring(podid2)))
    78  	})
    79  
    80  	It("podman pod rm removes a pod with a container", func() {
    81  		_, ec, podid := podmanTest.CreatePod("")
    82  		Expect(ec).To(Equal(0))
    83  
    84  		_, ec2, _ := podmanTest.RunLsContainerInPod("", podid)
    85  		Expect(ec2).To(Equal(0))
    86  
    87  		result := podmanTest.Podman([]string{"pod", "rm", podid})
    88  		result.WaitWithDefaultTimeout()
    89  		Expect(result.ExitCode()).To(Equal(0))
    90  
    91  		result = podmanTest.Podman([]string{"ps", "-qa"})
    92  		result.WaitWithDefaultTimeout()
    93  		Expect(len(result.OutputToStringArray())).To(Equal(0))
    94  	})
    95  
    96  	It("podman pod rm -f does remove a running container", func() {
    97  		_, ec, podid := podmanTest.CreatePod("")
    98  		Expect(ec).To(Equal(0))
    99  
   100  		session := podmanTest.RunTopContainerInPod("", podid)
   101  		session.WaitWithDefaultTimeout()
   102  		Expect(session.ExitCode()).To(Equal(0))
   103  
   104  		result := podmanTest.Podman([]string{"pod", "rm", "-f", podid})
   105  		result.WaitWithDefaultTimeout()
   106  		Expect(result.ExitCode()).To(Equal(0))
   107  
   108  		result = podmanTest.Podman([]string{"ps", "-q"})
   109  		result.WaitWithDefaultTimeout()
   110  		Expect(result.OutputToString()).To(BeEmpty())
   111  	})
   112  
   113  	It("podman pod rm -a doesn't remove a running container", func() {
   114  		fmt.Printf("To start, there are %d pods\n", podmanTest.NumberOfPods())
   115  		_, ec, podid1 := podmanTest.CreatePod("")
   116  		Expect(ec).To(Equal(0))
   117  
   118  		_, ec, _ = podmanTest.CreatePod("")
   119  		Expect(ec).To(Equal(0))
   120  		fmt.Printf("Started %d pods\n", podmanTest.NumberOfPods())
   121  
   122  		session := podmanTest.RunTopContainerInPod("", podid1)
   123  		session.WaitWithDefaultTimeout()
   124  		Expect(session.ExitCode()).To(Equal(0))
   125  		podmanTest.WaitForContainer()
   126  		Expect(podmanTest.NumberOfContainersRunning()).To(Equal(1))
   127  		fmt.Printf("Started container running in one pod")
   128  
   129  		num_pods := podmanTest.NumberOfPods()
   130  		Expect(num_pods).To(Equal(2))
   131  		ps := podmanTest.Podman([]string{"pod", "ps"})
   132  		ps.WaitWithDefaultTimeout()
   133  		fmt.Printf("Current %d pod(s):\n%s\n", num_pods, ps.OutputToString())
   134  
   135  		fmt.Printf("Removing all empty pods\n")
   136  		result := podmanTest.Podman([]string{"pod", "rm", "-a"})
   137  		result.WaitWithDefaultTimeout()
   138  		Expect(result).To(ExitWithError())
   139  		foundExpectedError, _ := result.ErrorGrepString("cannot be removed")
   140  		Expect(foundExpectedError).To(Equal(true))
   141  
   142  		num_pods = podmanTest.NumberOfPods()
   143  		ps = podmanTest.Podman([]string{"pod", "ps"})
   144  		ps.WaitWithDefaultTimeout()
   145  		fmt.Printf("Final %d pod(s):\n%s\n", num_pods, ps.OutputToString())
   146  		Expect(num_pods).To(Equal(1))
   147  		// Confirm top container still running inside remaining pod
   148  		Expect(podmanTest.NumberOfContainersRunning()).To(Equal(1))
   149  	})
   150  
   151  	It("podman pod rm -fa removes everything", func() {
   152  		_, ec, podid1 := podmanTest.CreatePod("")
   153  		Expect(ec).To(Equal(0))
   154  
   155  		_, ec, podid2 := podmanTest.CreatePod("")
   156  		Expect(ec).To(Equal(0))
   157  
   158  		_, ec, _ = podmanTest.CreatePod("")
   159  		Expect(ec).To(Equal(0))
   160  
   161  		session := podmanTest.RunTopContainerInPod("", podid1)
   162  		session.WaitWithDefaultTimeout()
   163  		Expect(session.ExitCode()).To(Equal(0))
   164  
   165  		session = podmanTest.Podman([]string{"create", "-d", "--pod", podid1, ALPINE, "ls"})
   166  		session.WaitWithDefaultTimeout()
   167  		Expect(session.ExitCode()).To(Equal(0))
   168  
   169  		_, ec, _ = podmanTest.RunLsContainerInPod("", podid2)
   170  		Expect(ec).To(Equal(0))
   171  
   172  		session = podmanTest.RunTopContainerInPod("", podid2)
   173  		session.WaitWithDefaultTimeout()
   174  		Expect(session.ExitCode()).To(Equal(0))
   175  
   176  		result := podmanTest.Podman([]string{"pod", "rm", "-fa"})
   177  		result.WaitWithDefaultTimeout()
   178  		Expect(result.ExitCode()).To(Equal(0))
   179  
   180  		result = podmanTest.Podman([]string{"ps", "-q"})
   181  		result.WaitWithDefaultTimeout()
   182  		Expect(result.OutputToString()).To(BeEmpty())
   183  
   184  		// one pod should have been deleted
   185  		result = podmanTest.Podman([]string{"pod", "ps", "-q"})
   186  		result.WaitWithDefaultTimeout()
   187  		Expect(result.OutputToString()).To(BeEmpty())
   188  	})
   189  
   190  	It("podman rm bogus pod", func() {
   191  		session := podmanTest.Podman([]string{"pod", "rm", "bogus"})
   192  		session.WaitWithDefaultTimeout()
   193  		// TODO: `podman rm` returns 1 for a bogus container. Should the RC be consistent?
   194  		Expect(session.ExitCode()).To(Equal(125))
   195  	})
   196  
   197  	It("podman rm bogus pod and a running pod", func() {
   198  		_, ec, podid1 := podmanTest.CreatePod("")
   199  		Expect(ec).To(Equal(0))
   200  
   201  		session := podmanTest.RunTopContainerInPod("test1", podid1)
   202  		session.WaitWithDefaultTimeout()
   203  		Expect(session.ExitCode()).To(Equal(0))
   204  
   205  		session = podmanTest.Podman([]string{"pod", "rm", "bogus", "test1"})
   206  		session.WaitWithDefaultTimeout()
   207  		Expect(session.ExitCode()).To(Equal(125))
   208  
   209  		session = podmanTest.Podman([]string{"pod", "rm", "test1", "bogus"})
   210  		session.WaitWithDefaultTimeout()
   211  		Expect(session.ExitCode()).To(Equal(125))
   212  	})
   213  
   214  	It("podman rm --ignore bogus pod and a running pod", func() {
   215  		SkipIfRemote()
   216  
   217  		_, ec, podid1 := podmanTest.CreatePod("")
   218  		Expect(ec).To(Equal(0))
   219  
   220  		session := podmanTest.RunTopContainerInPod("test1", podid1)
   221  		session.WaitWithDefaultTimeout()
   222  		Expect(session.ExitCode()).To(Equal(0))
   223  
   224  		session = podmanTest.Podman([]string{"pod", "rm", "--force", "--ignore", "bogus", "test1"})
   225  		session.WaitWithDefaultTimeout()
   226  		Expect(session.ExitCode()).To(Equal(0))
   227  
   228  		session = podmanTest.Podman([]string{"pod", "rm", "--ignore", "test1", "bogus"})
   229  		session.WaitWithDefaultTimeout()
   230  		Expect(session.ExitCode()).To(Equal(0))
   231  	})
   232  })