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

     1  package integration
     2  
     3  import (
     4  	"fmt"
     5  	"os"
     6  
     7  	. "github.com/containers/libpod/test/utils"
     8  	. "github.com/onsi/ginkgo"
     9  	. "github.com/onsi/gomega"
    10  )
    11  
    12  var _ = Describe("Podman rmi", func() {
    13  	var (
    14  		tempdir    string
    15  		err        error
    16  		podmanTest *PodmanTestIntegration
    17  	)
    18  
    19  	BeforeEach(func() {
    20  		tempdir, err = CreateTempDirInTempDir()
    21  		if err != nil {
    22  			os.Exit(1)
    23  		}
    24  		podmanTest = PodmanTestCreate(tempdir)
    25  		podmanTest.Setup()
    26  		podmanTest.RestoreAllArtifacts()
    27  	})
    28  
    29  	AfterEach(func() {
    30  		podmanTest.Cleanup()
    31  		f := CurrentGinkgoTestDescription()
    32  		processTestResult(f)
    33  
    34  	})
    35  
    36  	It("podman rmi bogus image", func() {
    37  		session := podmanTest.Podman([]string{"rmi", "debian:6.0.10"})
    38  		session.WaitWithDefaultTimeout()
    39  		Expect(session.ExitCode()).To(Equal(1))
    40  
    41  	})
    42  
    43  	It("podman rmi with fq name", func() {
    44  		session := podmanTest.PodmanNoCache([]string{"rmi", ALPINE})
    45  		session.WaitWithDefaultTimeout()
    46  		Expect(session.ExitCode()).To(Equal(0))
    47  
    48  	})
    49  
    50  	It("podman rmi with short name", func() {
    51  		session := podmanTest.PodmanNoCache([]string{"rmi", "alpine"})
    52  		session.WaitWithDefaultTimeout()
    53  		Expect(session.ExitCode()).To(Equal(0))
    54  
    55  	})
    56  
    57  	It("podman rmi all images", func() {
    58  		podmanTest.RestoreArtifact(nginx)
    59  		session := podmanTest.PodmanNoCache([]string{"rmi", "-a"})
    60  		session.WaitWithDefaultTimeout()
    61  		images := podmanTest.PodmanNoCache([]string{"images"})
    62  		images.WaitWithDefaultTimeout()
    63  		fmt.Println(images.OutputToStringArray())
    64  		Expect(session.ExitCode()).To(Equal(0))
    65  
    66  	})
    67  
    68  	It("podman rmi all images forcibly with short options", func() {
    69  		podmanTest.RestoreArtifact(nginx)
    70  		session := podmanTest.PodmanNoCache([]string{"rmi", "-fa"})
    71  		session.WaitWithDefaultTimeout()
    72  		Expect(session.ExitCode()).To(Equal(0))
    73  
    74  	})
    75  
    76  	It("podman rmi tagged image", func() {
    77  		setup := podmanTest.PodmanNoCache([]string{"images", "-q", ALPINE})
    78  		setup.WaitWithDefaultTimeout()
    79  		Expect(setup.ExitCode()).To(Equal(0))
    80  
    81  		session := podmanTest.PodmanNoCache([]string{"tag", "alpine", "foo:bar", "foo"})
    82  		session.WaitWithDefaultTimeout()
    83  		Expect(session.ExitCode()).To(Equal(0))
    84  
    85  		result := podmanTest.PodmanNoCache([]string{"images", "-q", "foo"})
    86  		result.WaitWithDefaultTimeout()
    87  		Expect(result.ExitCode()).To(Equal(0))
    88  
    89  		Expect(result.LineInOutputContains(setup.OutputToString())).To(BeTrue())
    90  	})
    91  
    92  	It("podman rmi image with tags by ID cannot be done without force", func() {
    93  		setup := podmanTest.PodmanNoCache([]string{"images", "-q", ALPINE})
    94  		setup.WaitWithDefaultTimeout()
    95  		Expect(setup.ExitCode()).To(Equal(0))
    96  		alpineId := setup.OutputToString()
    97  
    98  		session := podmanTest.PodmanNoCache([]string{"tag", "alpine", "foo:bar", "foo"})
    99  		session.WaitWithDefaultTimeout()
   100  		Expect(session.ExitCode()).To(Equal(0))
   101  
   102  		// Trying without --force should fail
   103  		result := podmanTest.PodmanNoCache([]string{"rmi", alpineId})
   104  		result.WaitWithDefaultTimeout()
   105  		Expect(result).To(ExitWithError())
   106  
   107  		// With --force it should work
   108  		resultForce := podmanTest.PodmanNoCache([]string{"rmi", "-f", alpineId})
   109  		resultForce.WaitWithDefaultTimeout()
   110  		Expect(resultForce.ExitCode()).To(Equal(0))
   111  	})
   112  
   113  	It("podman rmi image that is a parent of another image", func() {
   114  		SkipIfRemote()
   115  		session := podmanTest.PodmanNoCache([]string{"rmi", "-fa"})
   116  		session.WaitWithDefaultTimeout()
   117  		Expect(session.ExitCode()).To(Equal(0))
   118  
   119  		session = podmanTest.PodmanNoCache([]string{"run", "--name", "c_test", ALPINE, "true"})
   120  		session.WaitWithDefaultTimeout()
   121  		Expect(session.ExitCode()).To(Equal(0))
   122  
   123  		session = podmanTest.PodmanNoCache([]string{"commit", "-q", "c_test", "test"})
   124  		session.WaitWithDefaultTimeout()
   125  		Expect(session.ExitCode()).To(Equal(0))
   126  
   127  		session = podmanTest.PodmanNoCache([]string{"rm", "c_test"})
   128  		session.WaitWithDefaultTimeout()
   129  		Expect(session.ExitCode()).To(Equal(0))
   130  
   131  		session = podmanTest.PodmanNoCache([]string{"rmi", ALPINE})
   132  		session.WaitWithDefaultTimeout()
   133  		Expect(session.ExitCode()).To(Equal(0))
   134  
   135  		session = podmanTest.PodmanNoCache([]string{"images", "-q"})
   136  		session.WaitWithDefaultTimeout()
   137  		Expect(session.ExitCode()).To(Equal(0))
   138  		Expect(len(session.OutputToStringArray())).To(Equal(1))
   139  
   140  		session = podmanTest.PodmanNoCache([]string{"images", "-q", "-a"})
   141  		session.WaitWithDefaultTimeout()
   142  		Expect(session.ExitCode()).To(Equal(0))
   143  		Expect(len(session.OutputToStringArray())).To(Equal(2))
   144  		untaggedImg := session.OutputToStringArray()[1]
   145  
   146  		session = podmanTest.PodmanNoCache([]string{"rmi", "-f", untaggedImg})
   147  		session.WaitWithDefaultTimeout()
   148  		Expect(session.ExitCode()).To(Equal(2))
   149  	})
   150  
   151  	It("podman rmi image that is created from another named imaged", func() {
   152  		SkipIfRemote()
   153  		session := podmanTest.PodmanNoCache([]string{"rmi", "-fa"})
   154  		session.WaitWithDefaultTimeout()
   155  		Expect(session.ExitCode()).To(Equal(0))
   156  
   157  		session = podmanTest.PodmanNoCache([]string{"create", "--name", "c_test1", ALPINE, "true"})
   158  		session.WaitWithDefaultTimeout()
   159  		Expect(session.ExitCode()).To(Equal(0))
   160  
   161  		session = podmanTest.PodmanNoCache([]string{"commit", "-q", "c_test1", "test1"})
   162  		session.WaitWithDefaultTimeout()
   163  		Expect(session.ExitCode()).To(Equal(0))
   164  
   165  		session = podmanTest.PodmanNoCache([]string{"create", "--name", "c_test2", "test1", "true"})
   166  		session.WaitWithDefaultTimeout()
   167  		Expect(session.ExitCode()).To(Equal(0))
   168  
   169  		session = podmanTest.PodmanNoCache([]string{"commit", "-q", "c_test2", "test2"})
   170  		session.WaitWithDefaultTimeout()
   171  		Expect(session.ExitCode()).To(Equal(0))
   172  
   173  		session = podmanTest.PodmanNoCache([]string{"rm", "-a"})
   174  		session.WaitWithDefaultTimeout()
   175  		Expect(session.ExitCode()).To(Equal(0))
   176  
   177  		session = podmanTest.PodmanNoCache([]string{"rmi", "test2"})
   178  		session.WaitWithDefaultTimeout()
   179  		Expect(session.ExitCode()).To(Equal(0))
   180  
   181  		session = podmanTest.PodmanNoCache([]string{"images", "-q"})
   182  		session.WaitWithDefaultTimeout()
   183  		Expect(session.ExitCode()).To(Equal(0))
   184  		Expect(len(session.OutputToStringArray())).To(Equal(2))
   185  	})
   186  
   187  	It("podman rmi with cached images", func() {
   188  		SkipIfRemote()
   189  		session := podmanTest.PodmanNoCache([]string{"rmi", "-fa"})
   190  		session.WaitWithDefaultTimeout()
   191  		Expect(session.ExitCode()).To(Equal(0))
   192  
   193  		dockerfile := `FROM docker.io/library/alpine:latest
   194  		RUN mkdir hello
   195  		RUN touch test.txt
   196  		ENV foo=bar
   197  		`
   198  		podmanTest.BuildImage(dockerfile, "test", "true")
   199  
   200  		dockerfile = `FROM docker.io/library/alpine:latest
   201  		RUN mkdir hello
   202  		RUN touch test.txt
   203  		RUN mkdir blah
   204  		ENV foo=bar
   205  		`
   206  		podmanTest.BuildImage(dockerfile, "test2", "true")
   207  
   208  		session = podmanTest.PodmanNoCache([]string{"images", "-q", "-a"})
   209  		session.WaitWithDefaultTimeout()
   210  		Expect(session.ExitCode()).To(Equal(0))
   211  		numOfImages := len(session.OutputToStringArray())
   212  
   213  		session = podmanTest.PodmanNoCache([]string{"rmi", "test2"})
   214  		session.WaitWithDefaultTimeout()
   215  		Expect(session.ExitCode()).To(Equal(0))
   216  
   217  		session = podmanTest.PodmanNoCache([]string{"images", "-q", "-a"})
   218  		session.WaitWithDefaultTimeout()
   219  		Expect(session.ExitCode()).To(Equal(0))
   220  		Expect(numOfImages - len(session.OutputToStringArray())).To(Equal(2))
   221  
   222  		session = podmanTest.PodmanNoCache([]string{"rmi", "test"})
   223  		session.WaitWithDefaultTimeout()
   224  		Expect(session.ExitCode()).To(Equal(0))
   225  
   226  		session = podmanTest.PodmanNoCache([]string{"images", "-q", "-a"})
   227  		session.WaitWithDefaultTimeout()
   228  		Expect(session.ExitCode()).To(Equal(0))
   229  		Expect(len(session.OutputToStringArray())).To(Equal(1))
   230  
   231  		podmanTest.BuildImage(dockerfile, "test3", "true")
   232  
   233  		session = podmanTest.PodmanNoCache([]string{"rmi", ALPINE})
   234  		session.WaitWithDefaultTimeout()
   235  		Expect(session.ExitCode()).To(Equal(0))
   236  
   237  		session = podmanTest.PodmanNoCache([]string{"rmi", "test3"})
   238  		session.WaitWithDefaultTimeout()
   239  		Expect(session.ExitCode()).To(Equal(0))
   240  
   241  		session = podmanTest.PodmanNoCache([]string{"images", "-q", "-a"})
   242  		session.WaitWithDefaultTimeout()
   243  		Expect(session.ExitCode()).To(Equal(0))
   244  		Expect(len(session.OutputToString())).To(Equal(0))
   245  	})
   246  
   247  	It("podman rmi -a with no images should be exit 0", func() {
   248  		session := podmanTest.PodmanNoCache([]string{"rmi", "-fa"})
   249  		session.WaitWithDefaultTimeout()
   250  		Expect(session.ExitCode()).To(Equal(0))
   251  
   252  		session2 := podmanTest.PodmanNoCache([]string{"rmi", "-fa"})
   253  		session2.WaitWithDefaultTimeout()
   254  		Expect(session2.ExitCode()).To(Equal(0))
   255  	})
   256  
   257  	It("podman rmi -a with parent|child images", func() {
   258  		SkipIfRemote()
   259  		dockerfile := `FROM docker.io/library/alpine:latest AS base
   260  RUN touch /1
   261  ENV LOCAL=/1
   262  RUN find $LOCAL
   263  FROM base
   264  RUN find $LOCAL
   265  
   266  `
   267  		podmanTest.BuildImage(dockerfile, "test", "true")
   268  		session := podmanTest.PodmanNoCache([]string{"rmi", "-a"})
   269  		session.WaitWithDefaultTimeout()
   270  		fmt.Println(session.OutputToString())
   271  		Expect(session.ExitCode()).To(Equal(0))
   272  
   273  		images := podmanTest.PodmanNoCache([]string{"images", "-aq"})
   274  		images.WaitWithDefaultTimeout()
   275  		Expect(images.ExitCode()).To(Equal(0))
   276  		Expect(len(images.OutputToStringArray())).To(Equal(0))
   277  	})
   278  
   279  	// Don't rerun all tests; just assume that if we get that diagnostic,
   280  	// we're getting rmi
   281  	It("podman image rm is the same as rmi", func() {
   282  		session := podmanTest.PodmanNoCache([]string{"image", "rm"})
   283  		session.WaitWithDefaultTimeout()
   284  		Expect(session.ExitCode()).To(Equal(125))
   285  		match, _ := session.ErrorGrepString("image name or ID must be specified")
   286  		Expect(match).To(BeTrue())
   287  	})
   288  })