summaryrefslogtreecommitdiff
path: root/test/e2e/play_kube_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'test/e2e/play_kube_test.go')
-rw-r--r--test/e2e/play_kube_test.go137
1 files changed, 136 insertions, 1 deletions
diff --git a/test/e2e/play_kube_test.go b/test/e2e/play_kube_test.go
index 053e27126..1379cb35d 100644
--- a/test/e2e/play_kube_test.go
+++ b/test/e2e/play_kube_test.go
@@ -94,6 +94,15 @@ spec:
{{ end }}
{{ end }}
{{ end }}
+{{ with .Volumes }}
+ volumes:
+ {{ range . }}
+ - name: {{ .Name }}
+ hostPath:
+ path: {{ .Path }}
+ type: {{ .Type }}
+ {{ end }}
+{{ end }}
status: {}
`
@@ -186,6 +195,7 @@ var (
defaultCtrArg = []string{"-d", "1.5"}
defaultCtrImage = ALPINE
defaultPodName = "testPod"
+ defaultVolName = "testVol"
defaultDeploymentName = "testDeployment"
seccompPwdEPERM = []byte(`{"defaultAction":"SCMP_ACT_ALLOW","syscalls":[{"name":"getcwd","action":"SCMP_ACT_ERRNO"}]}`)
)
@@ -240,6 +250,7 @@ type Pod struct {
Name string
Hostname string
Ctrs []*Ctr
+ Volumes []*Volume
Annotations map[string]string
}
@@ -247,7 +258,7 @@ type Pod struct {
// and the configured options
// if no containers are added, it will add the default container
func getPod(options ...podOption) *Pod {
- p := Pod{defaultPodName, "", make([]*Ctr, 0), make(map[string]string)}
+ p := Pod{defaultPodName, "", make([]*Ctr, 0), make([]*Volume, 0), make(map[string]string)}
for _, option := range options {
option(&p)
}
@@ -277,6 +288,12 @@ func withAnnotation(k, v string) podOption {
}
}
+func withVolume(v *Volume) podOption {
+ return func(pod *Pod) {
+ pod.Volumes = append(pod.Volumes, v)
+ }
+}
+
// Deployment describes the options a kube yaml can be configured at deployment level
type Deployment struct {
Name string
@@ -412,6 +429,22 @@ func getCtrNameInPod(pod *Pod) string {
return fmt.Sprintf("%s-%s", pod.Name, defaultCtrName)
}
+type Volume struct {
+ Name string
+ Path string
+ Type string
+}
+
+// getVolume takes a type and a location for a volume
+// giving it a default name of volName
+func getVolume(vType, vPath string) *Volume {
+ return &Volume{
+ Name: defaultVolName,
+ Path: vPath,
+ Type: vType,
+ }
+}
+
var _ = Describe("Podman generate kube", func() {
var (
tempdir string
@@ -853,4 +886,106 @@ spec:
Expect(inspect.ExitCode()).To(Equal(0))
Expect(inspect.OutputToString()).To(Equal("5000/tcp -> 127.0.0.100:5000"))
})
+
+ It("podman play kube test with non-existent empty HostPath type volume", func() {
+ hostPathLocation := filepath.Join(tempdir, "file")
+
+ pod := getPod(withVolume(getVolume(`""`, hostPathLocation)))
+ err := generatePodKubeYaml(pod, kubeYaml)
+ Expect(err).To(BeNil())
+
+ kube := podmanTest.Podman([]string{"play", "kube", kubeYaml})
+ kube.WaitWithDefaultTimeout()
+ Expect(kube.ExitCode()).NotTo(Equal(0))
+ })
+
+ It("podman play kube test with empty HostPath type volume", func() {
+ hostPathLocation := filepath.Join(tempdir, "file")
+ f, err := os.Create(hostPathLocation)
+ Expect(err).To(BeNil())
+ f.Close()
+
+ pod := getPod(withVolume(getVolume(`""`, hostPathLocation)))
+ err = generatePodKubeYaml(pod, kubeYaml)
+ Expect(err).To(BeNil())
+
+ kube := podmanTest.Podman([]string{"play", "kube", kubeYaml})
+ kube.WaitWithDefaultTimeout()
+ Expect(kube.ExitCode()).To(Equal(0))
+ })
+
+ It("podman play kube test with non-existent File HostPath type volume", func() {
+ hostPathLocation := filepath.Join(tempdir, "file")
+
+ pod := getPod(withVolume(getVolume("File", hostPathLocation)))
+ err := generatePodKubeYaml(pod, kubeYaml)
+ Expect(err).To(BeNil())
+
+ kube := podmanTest.Podman([]string{"play", "kube", kubeYaml})
+ kube.WaitWithDefaultTimeout()
+ Expect(kube.ExitCode()).NotTo(Equal(0))
+ })
+
+ It("podman play kube test with File HostPath type volume", func() {
+ hostPathLocation := filepath.Join(tempdir, "file")
+ f, err := os.Create(hostPathLocation)
+ Expect(err).To(BeNil())
+ f.Close()
+
+ pod := getPod(withVolume(getVolume("File", hostPathLocation)))
+ err = generatePodKubeYaml(pod, kubeYaml)
+ Expect(err).To(BeNil())
+
+ kube := podmanTest.Podman([]string{"play", "kube", kubeYaml})
+ kube.WaitWithDefaultTimeout()
+ Expect(kube.ExitCode()).To(Equal(0))
+ })
+
+ It("podman play kube test with FileOrCreate HostPath type volume", func() {
+ hostPathLocation := filepath.Join(tempdir, "file")
+
+ pod := getPod(withVolume(getVolume("FileOrCreate", hostPathLocation)))
+ err := generatePodKubeYaml(pod, kubeYaml)
+ Expect(err).To(BeNil())
+
+ kube := podmanTest.Podman([]string{"play", "kube", kubeYaml})
+ kube.WaitWithDefaultTimeout()
+ Expect(kube.ExitCode()).To(Equal(0))
+
+ // the file should have been created
+ _, err = os.Stat(hostPathLocation)
+ Expect(err).To(BeNil())
+ })
+
+ It("podman play kube test with DirectoryOrCreate HostPath type volume", func() {
+ hostPathLocation := filepath.Join(tempdir, "file")
+
+ pod := getPod(withVolume(getVolume("DirectoryOrCreate", hostPathLocation)))
+ err := generatePodKubeYaml(pod, kubeYaml)
+ Expect(err).To(BeNil())
+
+ kube := podmanTest.Podman([]string{"play", "kube", kubeYaml})
+ kube.WaitWithDefaultTimeout()
+ Expect(kube.ExitCode()).To(Equal(0))
+
+ // the file should have been created
+ st, err := os.Stat(hostPathLocation)
+ Expect(err).To(BeNil())
+ Expect(st.Mode().IsDir()).To(Equal(true))
+ })
+
+ It("podman play kube test with Socket HostPath type volume should fail if not socket", func() {
+ hostPathLocation := filepath.Join(tempdir, "file")
+ f, err := os.Create(hostPathLocation)
+ Expect(err).To(BeNil())
+ f.Close()
+
+ pod := getPod(withVolume(getVolume("Socket", hostPathLocation)))
+ err = generatePodKubeYaml(pod, kubeYaml)
+ Expect(err).To(BeNil())
+
+ kube := podmanTest.Podman([]string{"play", "kube", kubeYaml})
+ kube.WaitWithDefaultTimeout()
+ Expect(kube.ExitCode()).NotTo(Equal(0))
+ })
})