summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/e2e/diff_test.go112
1 files changed, 104 insertions, 8 deletions
diff --git a/test/e2e/diff_test.go b/test/e2e/diff_test.go
index 4370a2127..cf955772b 100644
--- a/test/e2e/diff_test.go
+++ b/test/e2e/diff_test.go
@@ -1,10 +1,12 @@
package integration
import (
+ "fmt"
"os"
"sort"
. "github.com/containers/podman/v3/test/utils"
+ "github.com/containers/storage/pkg/stringid"
. "github.com/onsi/ginkgo"
. "github.com/onsi/gomega"
)
@@ -40,13 +42,6 @@ var _ = Describe("Podman diff", func() {
Expect(len(session.OutputToStringArray())).To(BeNumerically(">", 0))
})
- It("podman container diff of image", func() {
- session := podmanTest.Podman([]string{"container", "diff", ALPINE})
- session.WaitWithDefaultTimeout()
- Expect(session.ExitCode()).To(Equal(0))
- Expect(len(session.OutputToStringArray())).To(BeNumerically(">", 0))
- })
-
It("podman diff bogus image", func() {
session := podmanTest.Podman([]string{"diff", "1234"})
session.WaitWithDefaultTimeout()
@@ -84,7 +79,11 @@ var _ = Describe("Podman diff", func() {
session := podmanTest.Podman([]string{"run", "--name", "diff-test", ALPINE, "touch", "/tmp/diff-test"})
session.WaitWithDefaultTimeout()
Expect(session.ExitCode()).To(Equal(0))
- session = podmanTest.Podman([]string{"diff", "diff-test"})
+ if !IsRemote() {
+ session = podmanTest.Podman([]string{"diff", "-l"})
+ } else {
+ session = podmanTest.Podman([]string{"diff", "diff-test"})
+ }
session.WaitWithDefaultTimeout()
containerDiff := session.OutputToStringArray()
sort.Strings(containerDiff)
@@ -92,4 +91,101 @@ var _ = Describe("Podman diff", func() {
Expect(session.LineInOutputContains("A /tmp/diff-test")).To(BeTrue())
Expect(session.ExitCode()).To(Equal(0))
})
+
+ It("podman image diff", func() {
+ file1 := "/" + stringid.GenerateNonCryptoID()
+ file2 := "/" + stringid.GenerateNonCryptoID()
+ file3 := "/" + stringid.GenerateNonCryptoID()
+
+ // Create container image with the files
+ containerfile := fmt.Sprintf(`
+FROM %s
+RUN touch %s
+RUN touch %s
+RUN touch %s`, ALPINE, file1, file2, file3)
+
+ image := "podman-diff-test"
+ podmanTest.BuildImage(containerfile, image, "true")
+
+ // build a second image which used as base to compare against
+ // using ALPINE does not work in CI, most likely due the extra vfs.imagestore
+ containerfile = fmt.Sprintf(`
+FROM %s
+RUN echo test
+`, ALPINE)
+ baseImage := "base-image"
+ podmanTest.BuildImage(containerfile, baseImage, "true")
+
+ session := podmanTest.Podman([]string{"image", "diff", image})
+ session.WaitWithDefaultTimeout()
+ Expect(session.ExitCode()).To(Equal(0))
+ Expect(len(session.OutputToStringArray())).To(BeNumerically("==", 1))
+ Expect(session.OutputToString()).To(Equal("A " + file3))
+
+ session = podmanTest.Podman([]string{"image", "diff", image, baseImage})
+ session.WaitWithDefaultTimeout()
+ Expect(session.ExitCode()).To(Equal(0))
+ Expect(len(session.OutputToStringArray())).To(BeNumerically("==", 4))
+ Expect(session.LineInOutputContains("A " + file1)).To(BeTrue())
+ Expect(session.LineInOutputContains("A " + file2)).To(BeTrue())
+ Expect(session.LineInOutputContains("A " + file3)).To(BeTrue())
+ })
+
+ It("podman image diff of single image", func() {
+ session := podmanTest.Podman([]string{"image", "diff", BB})
+ session.WaitWithDefaultTimeout()
+ Expect(session.ExitCode()).To(Equal(0))
+ Expect(len(session.OutputToStringArray())).To(BeNumerically(">", 0))
+ })
+
+ It("podman image diff bogus image", func() {
+ session := podmanTest.Podman([]string{"image", "diff", "1234", ALPINE})
+ session.WaitWithDefaultTimeout()
+ Expect(session.ExitCode()).To(Equal(125))
+ })
+
+ It("podman image diff of the same image", func() {
+ session := podmanTest.Podman([]string{"image", "diff", ALPINE, ALPINE})
+ session.WaitWithDefaultTimeout()
+ Expect(session.ExitCode()).To(Equal(0))
+ Expect(len(session.OutputToStringArray())).To(BeNumerically("==", 0))
+ })
+
+ It("podman diff container and image with same name", func() {
+ imagefile := "/" + stringid.GenerateNonCryptoID()
+ confile := "/" + stringid.GenerateNonCryptoID()
+
+ // Create container image with the files
+ containerfile := fmt.Sprintf(`
+FROM %s
+RUN touch %s`, ALPINE, imagefile)
+
+ name := "podman-diff-test"
+ podmanTest.BuildImage(containerfile, name, "false")
+
+ session := podmanTest.Podman([]string{"run", "--name", name, ALPINE, "touch", confile})
+ session.WaitWithDefaultTimeout()
+ Expect(session.ExitCode()).To(Equal(0))
+
+ // podman diff prefers image over container when they have the same name
+ session = podmanTest.Podman([]string{"diff", name})
+ session.WaitWithDefaultTimeout()
+ Expect(session.ExitCode()).To(Equal(0))
+ Expect(len(session.OutputToStringArray())).To(BeNumerically("==", 2))
+ Expect(session.OutputToString()).To(ContainSubstring(imagefile))
+
+ session = podmanTest.Podman([]string{"image", "diff", name})
+ session.WaitWithDefaultTimeout()
+ Expect(session.ExitCode()).To(Equal(0))
+ Expect(len(session.OutputToStringArray())).To(BeNumerically("==", 2))
+ Expect(session.OutputToString()).To(ContainSubstring(imagefile))
+
+ // container diff has to show the container
+ session = podmanTest.Podman([]string{"container", "diff", name})
+ session.WaitWithDefaultTimeout()
+ Expect(session.ExitCode()).To(Equal(0))
+ Expect(len(session.OutputToStringArray())).To(BeNumerically("==", 2))
+ Expect(session.OutputToString()).To(ContainSubstring(confile))
+ })
+
})