podman

Форк
0
/
diff_test.go 
169 строк · 5.9 Кб
1
package integration
2

3
import (
4
	"fmt"
5
	"sort"
6

7
	. "github.com/containers/podman/v5/test/utils"
8
	"github.com/containers/storage/pkg/stringid"
9
	. "github.com/onsi/ginkgo/v2"
10
	. "github.com/onsi/gomega"
11
	. "github.com/onsi/gomega/gexec"
12
)
13

14
var _ = Describe("Podman diff", func() {
15

16
	It("podman diff of image", func() {
17
		session := podmanTest.Podman([]string{"diff", ALPINE})
18
		session.WaitWithDefaultTimeout()
19
		Expect(session).Should(ExitCleanly())
20
		Expect(session.OutputToStringArray()).ToNot(BeEmpty())
21
	})
22

23
	It("podman diff bogus image", func() {
24
		session := podmanTest.Podman([]string{"diff", "1234"})
25
		session.WaitWithDefaultTimeout()
26
		Expect(session).Should(Exit(125))
27
	})
28

29
	It("podman diff image with json output", func() {
30
		session := podmanTest.Podman([]string{"diff", "--format=json", ALPINE})
31
		session.WaitWithDefaultTimeout()
32
		Expect(session).Should(ExitCleanly())
33
		Expect(session.OutputToString()).To(BeValidJSON())
34
	})
35

36
	It("podman diff container and committed image", func() {
37
		session := podmanTest.Podman([]string{"run", "--name=diff-test", ALPINE, "touch", "/tmp/diff-test"})
38
		session.WaitWithDefaultTimeout()
39
		Expect(session).Should(ExitCleanly())
40
		session = podmanTest.Podman([]string{"diff", "diff-test"})
41
		session.WaitWithDefaultTimeout()
42
		containerDiff := session.OutputToStringArray()
43
		sort.Strings(containerDiff)
44
		Expect(session.OutputToString()).To(ContainSubstring("C /tmp"))
45
		Expect(session.OutputToString()).To(ContainSubstring("A /tmp/diff-test"))
46
		session = podmanTest.Podman([]string{"commit", "-q", "diff-test", "diff-test-img"})
47
		session.WaitWithDefaultTimeout()
48
		Expect(session).Should(ExitCleanly())
49
		session = podmanTest.Podman([]string{"diff", "diff-test-img"})
50
		session.WaitWithDefaultTimeout()
51
		imageDiff := session.OutputToStringArray()
52
		sort.Strings(imageDiff)
53
		Expect(imageDiff).To(Equal(containerDiff))
54
	})
55

56
	It("podman diff latest container", func() {
57
		session := podmanTest.Podman([]string{"run", "--name", "diff-test", ALPINE, "touch", "/tmp/diff-test"})
58
		session.WaitWithDefaultTimeout()
59
		Expect(session).Should(ExitCleanly())
60
		if !IsRemote() {
61
			session = podmanTest.Podman([]string{"diff", "-l"})
62
		} else {
63
			session = podmanTest.Podman([]string{"diff", "diff-test"})
64
		}
65
		session.WaitWithDefaultTimeout()
66
		containerDiff := session.OutputToStringArray()
67
		sort.Strings(containerDiff)
68
		Expect(session.OutputToString()).To(ContainSubstring("C /tmp"))
69
		Expect(session.OutputToString()).To(ContainSubstring("A /tmp/diff-test"))
70
		Expect(session).Should(ExitCleanly())
71
	})
72

73
	It("podman image diff", func() {
74
		file1 := "/" + stringid.GenerateRandomID()
75
		file2 := "/" + stringid.GenerateRandomID()
76
		file3 := "/" + stringid.GenerateRandomID()
77

78
		// Create container image with the files
79
		containerfile := fmt.Sprintf(`
80
FROM  %s
81
RUN touch %s
82
RUN touch %s
83
RUN touch %s`, ALPINE, file1, file2, file3)
84

85
		image := "podman-diff-test"
86
		podmanTest.BuildImage(containerfile, image, "true")
87

88
		// build a second image which used as base to compare against
89
		// using ALPINE does not work in CI, most likely due the extra vfs.imagestore
90
		containerfile = fmt.Sprintf(`
91
FROM  %s
92
RUN echo test
93
`, ALPINE)
94
		baseImage := "base-image"
95
		podmanTest.BuildImage(containerfile, baseImage, "true")
96

97
		session := podmanTest.Podman([]string{"image", "diff", image})
98
		session.WaitWithDefaultTimeout()
99
		Expect(session).Should(ExitCleanly())
100
		Expect(session.OutputToStringArray()).To(HaveLen(1))
101
		Expect(session.OutputToString()).To(Equal("A " + file3))
102

103
		session = podmanTest.Podman([]string{"image", "diff", image, baseImage})
104
		session.WaitWithDefaultTimeout()
105
		Expect(session).Should(ExitCleanly())
106
		Expect(session.OutputToStringArray()).To(HaveLen(4))
107
		Expect(session.OutputToString()).To(ContainSubstring("A " + file1))
108
		Expect(session.OutputToString()).To(ContainSubstring("A " + file2))
109
		Expect(session.OutputToString()).To(ContainSubstring("A " + file3))
110
	})
111

112
	It("podman image diff of single image", func() {
113
		session := podmanTest.Podman([]string{"image", "diff", BB})
114
		session.WaitWithDefaultTimeout()
115
		Expect(session).Should(ExitCleanly())
116
		Expect(session.OutputToStringArray()).ToNot(BeEmpty())
117
	})
118

119
	It("podman image diff bogus image", func() {
120
		session := podmanTest.Podman([]string{"image", "diff", "1234", ALPINE})
121
		session.WaitWithDefaultTimeout()
122
		Expect(session).Should(Exit(125))
123
	})
124

125
	It("podman image diff of the same image", func() {
126
		session := podmanTest.Podman([]string{"image", "diff", ALPINE, ALPINE})
127
		session.WaitWithDefaultTimeout()
128
		Expect(session).Should(ExitCleanly())
129
		Expect(session.OutputToStringArray()).To(BeEmpty())
130
	})
131

132
	It("podman diff container and image with same name", func() {
133
		imagefile := "/" + stringid.GenerateRandomID()
134
		confile := "/" + stringid.GenerateRandomID()
135

136
		// Create container image with the files
137
		containerfile := fmt.Sprintf(`
138
FROM  %s
139
RUN touch %s`, ALPINE, imagefile)
140

141
		name := "podman-diff-test"
142
		podmanTest.BuildImage(containerfile, name, "false")
143

144
		session := podmanTest.Podman([]string{"run", "--name", name, ALPINE, "touch", confile})
145
		session.WaitWithDefaultTimeout()
146
		Expect(session).Should(ExitCleanly())
147

148
		// podman diff prefers image over container when they have the same name
149
		session = podmanTest.Podman([]string{"diff", name})
150
		session.WaitWithDefaultTimeout()
151
		Expect(session).Should(ExitCleanly())
152
		Expect(session.OutputToStringArray()).To(HaveLen(2))
153
		Expect(session.OutputToString()).To(ContainSubstring(imagefile))
154

155
		session = podmanTest.Podman([]string{"image", "diff", name})
156
		session.WaitWithDefaultTimeout()
157
		Expect(session).Should(ExitCleanly())
158
		Expect(session.OutputToStringArray()).To(HaveLen(2))
159
		Expect(session.OutputToString()).To(ContainSubstring(imagefile))
160

161
		// container diff has to show the container
162
		session = podmanTest.Podman([]string{"container", "diff", name})
163
		session.WaitWithDefaultTimeout()
164
		Expect(session).Should(ExitCleanly())
165
		Expect(session.OutputToStringArray()).To(HaveLen(2))
166
		Expect(session.OutputToString()).To(ContainSubstring(confile))
167
	})
168

169
})
170

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.