podman

Форк
0
/
container_create_volume_test.go 
103 строки · 3.2 Кб
1
package integration
2

3
import (
4
	"fmt"
5
	"os"
6
	"path/filepath"
7

8
	. "github.com/containers/podman/v5/test/utils"
9
	. "github.com/onsi/ginkgo/v2"
10
	. "github.com/onsi/gomega"
11
)
12

13
func buildDataVolumeImage(pTest *PodmanTestIntegration, image, data, dest string) {
14
	// Create a dummy file for data volume
15
	dummyFile := filepath.Join(pTest.TempDir, data)
16
	err := os.WriteFile(dummyFile, []byte(data), 0644)
17
	Expect(err).ToNot(HaveOccurred())
18

19
	// Create a data volume container image but no CMD binary in it
20
	containerFile := fmt.Sprintf(`FROM scratch
21
CMD doesnotexist.sh
22
ADD %s %s/
23
VOLUME %s/`, data, dest, dest)
24
	pTest.BuildImage(containerFile, image, "false")
25
}
26

27
func createContainersConfFile(pTest *PodmanTestIntegration) {
28
	configPath := filepath.Join(pTest.TempDir, "containers.conf")
29
	containersConf := []byte("[containers]\nprepare_volume_on_create = true\n")
30
	err := os.WriteFile(configPath, containersConf, os.ModePerm)
31
	Expect(err).ToNot(HaveOccurred())
32

33
	// Set custom containers.conf file
34
	os.Setenv("CONTAINERS_CONF", configPath)
35
	if IsRemote() {
36
		pTest.RestartRemoteService()
37
	}
38
}
39

40
func checkDataVolumeContainer(pTest *PodmanTestIntegration, image, cont, dest, data string) {
41
	create := pTest.Podman([]string{"create", "--name", cont, image})
42
	create.WaitWithDefaultTimeout()
43
	Expect(create).Should(ExitCleanly())
44

45
	inspect := pTest.InspectContainer(cont)
46
	Expect(inspect).To(HaveLen(1))
47
	Expect(inspect[0].Mounts).To(HaveLen(1))
48
	Expect(inspect[0].Mounts[0]).To(HaveField("Destination", dest))
49

50
	mntName, mntSource := inspect[0].Mounts[0].Name, inspect[0].Mounts[0].Source
51

52
	volList := pTest.Podman([]string{"volume", "list", "--quiet"})
53
	volList.WaitWithDefaultTimeout()
54
	Expect(volList).Should(ExitCleanly())
55
	Expect(volList.OutputToStringArray()).To(HaveLen(1))
56
	Expect(volList.OutputToStringArray()[0]).To(Equal(mntName))
57

58
	// Check the mount source directory
59
	files, err := os.ReadDir(mntSource)
60
	Expect(err).ToNot(HaveOccurred())
61

62
	if data == "" {
63
		Expect(files).To(BeEmpty())
64
	} else {
65
		Expect(files).To(HaveLen(1))
66
		Expect(files[0].Name()).To(Equal(data))
67
	}
68
}
69

70
var _ = Describe("Podman create data volume", func() {
71

72
	It("podman create with volume data copy turned off", func() {
73
		imgName, volData, volDest := "dataimg", "dummy", "/test"
74

75
		buildDataVolumeImage(podmanTest, imgName, volData, volDest)
76

77
		// Create a container with the default containers.conf and
78
		// check that the volume is not copied from the image.
79
		checkDataVolumeContainer(podmanTest, imgName, "ctr-nocopy", volDest, "")
80
	})
81

82
	It("podman create with volume data copy turned on", func() {
83
		imgName, volData, volDest := "dataimg", "dummy", "/test"
84

85
		buildDataVolumeImage(podmanTest, imgName, volData, volDest)
86

87
		// Create a container with the custom containers.conf and
88
		// check that the volume is copied from the image.
89
		createContainersConfFile(podmanTest)
90

91
		checkDataVolumeContainer(podmanTest, imgName, "ctr-copy", volDest, volData)
92
	})
93

94
	It("podman run with volume data copy turned on", func() {
95
		// Create a container with the custom containers.conf and
96
		// check that the container is run successfully
97
		createContainersConfFile(podmanTest)
98

99
		session := podmanTest.Podman([]string{"run", "--rm", ALPINE, "echo"})
100
		session.WaitWithDefaultTimeout()
101
		Expect(session).Should(ExitCleanly())
102
	})
103
})
104

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

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

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

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