Files
podman/test/e2e/pod_clone_test.go
Ed Santiago eeb210bc56 e2e: remove "-it" from podman run & exec
...at least as many as possible. "run/exec -it" make no sense
in a CI environment; I believe the vast majority of these are
the result of fingers typing on autopilot, then copy/pasting
cascades from those. This PR gets rid of as many -it/-ti as
possible. Some are still needed for testing purposes.

Y'all have no idea how much I hate #10927 (the "no logs from conmon"
flake). This does not fix the underlying problem, nor does it even
eliminate the flake (The "exec terminal doesn't hang" test needs
to keep the -ti flag, and that's one of the most popular flakers).
But this at least reduces the scope of the problem. It also removes
a ton of nasty orange "input device is not a TTY" warnings from logs.

Signed-off-by: Ed Santiago <santiago@redhat.com>
2023-04-26 09:21:02 -06:00

195 lines
6.4 KiB
Go

package integration
import (
"os"
. "github.com/containers/podman/v4/test/utils"
. "github.com/onsi/ginkgo"
. "github.com/onsi/gomega"
. "github.com/onsi/gomega/gexec"
)
var _ = Describe("Podman pod clone", func() {
var (
tempdir string
err error
podmanTest *PodmanTestIntegration
hostname, _ = os.Hostname()
)
BeforeEach(func() {
SkipIfRemote("podman pod clone is not supported in remote")
tempdir, err = CreateTempDirInTempDir()
if err != nil {
os.Exit(1)
}
podmanTest = PodmanTestCreate(tempdir)
podmanTest.Setup()
})
AfterEach(func() {
podmanTest.Cleanup()
f := CurrentGinkgoTestDescription()
processTestResult(f)
})
It("podman pod clone basic test", func() {
create := podmanTest.Podman([]string{"pod", "create", "--name", "1"})
create.WaitWithDefaultTimeout()
Expect(create).To(Exit(0))
run := podmanTest.Podman([]string{"run", "--pod", "1", "-dt", ALPINE})
run.WaitWithDefaultTimeout()
Expect(run).To(Exit(0))
clone := podmanTest.Podman([]string{"pod", "clone", create.OutputToString()})
clone.WaitWithDefaultTimeout()
Expect(clone).To(Exit(0))
podInspect := podmanTest.Podman([]string{"pod", "inspect", clone.OutputToString()})
podInspect.WaitWithDefaultTimeout()
Expect(podInspect).To(Exit(0))
data := podInspect.InspectPodToJSON()
Expect(data.Name).To(ContainSubstring("-clone"))
podStart := podmanTest.Podman([]string{"pod", "start", clone.OutputToString()})
podStart.WaitWithDefaultTimeout()
Expect(podStart).To(Exit(0))
podInspect = podmanTest.Podman([]string{"pod", "inspect", clone.OutputToString()})
podInspect.WaitWithDefaultTimeout()
Expect(podInspect).To(Exit(0))
data = podInspect.InspectPodToJSON()
Expect(data.Containers[1].State).To(ContainSubstring("running")) // make sure non infra ctr is running
})
It("podman pod clone renaming test", func() {
create := podmanTest.Podman([]string{"pod", "create", "--name", "1"})
create.WaitWithDefaultTimeout()
Expect(create).To(Exit(0))
clone := podmanTest.Podman([]string{"pod", "clone", "--name", "2", create.OutputToString()})
clone.WaitWithDefaultTimeout()
Expect(clone).To(Exit(0))
podInspect := podmanTest.Podman([]string{"pod", "inspect", clone.OutputToString()})
podInspect.WaitWithDefaultTimeout()
Expect(podInspect).To(Exit(0))
data := podInspect.InspectPodToJSON()
Expect(data.Name).To(ContainSubstring("2"))
podStart := podmanTest.Podman([]string{"pod", "start", clone.OutputToString()})
podStart.WaitWithDefaultTimeout()
Expect(podStart).To(Exit(0))
})
It("podman pod clone start test", func() {
create := podmanTest.Podman([]string{"pod", "create", "--name", "1"})
create.WaitWithDefaultTimeout()
Expect(create).To(Exit(0))
clone := podmanTest.Podman([]string{"pod", "clone", "--start", create.OutputToString()})
clone.WaitWithDefaultTimeout()
Expect(clone).To(Exit(0))
podInspect := podmanTest.Podman([]string{"pod", "inspect", clone.OutputToString()})
podInspect.WaitWithDefaultTimeout()
Expect(podInspect).To(Exit(0))
data := podInspect.InspectPodToJSON()
Expect(data.State).To(ContainSubstring("Running"))
})
It("podman pod clone destroy test", func() {
create := podmanTest.Podman([]string{"pod", "create", "--name", "1"})
create.WaitWithDefaultTimeout()
Expect(create).To(Exit(0))
clone := podmanTest.Podman([]string{"pod", "clone", "--destroy", create.OutputToString()})
clone.WaitWithDefaultTimeout()
Expect(clone).To(Exit(0))
podInspect := podmanTest.Podman([]string{"pod", "inspect", create.OutputToString()})
podInspect.WaitWithDefaultTimeout()
Expect(podInspect).ToNot(Exit(0))
})
It("podman pod clone infra option test", func() {
// proof of concept that all currently tested infra options work since
volName := "testVol"
volCreate := podmanTest.Podman([]string{"volume", "create", volName})
volCreate.WaitWithDefaultTimeout()
Expect(volCreate).Should(Exit(0))
podName := "testPod"
podCreate := podmanTest.Podman([]string{"pod", "create", "--name", podName})
podCreate.WaitWithDefaultTimeout()
Expect(podCreate).Should(Exit(0))
podClone := podmanTest.Podman([]string{"pod", "clone", "--volume", volName + ":/tmp1", podName})
podClone.WaitWithDefaultTimeout()
Expect(podClone).Should(Exit(0))
podInspect := podmanTest.Podman([]string{"pod", "inspect", "testPod-clone"})
podInspect.WaitWithDefaultTimeout()
Expect(podInspect).Should(Exit(0))
data := podInspect.InspectPodToJSON()
Expect(data.Mounts[0]).To(HaveField("Name", volName))
})
It("podman pod clone --shm-size", func() {
podCreate := podmanTest.Podman([]string{"pod", "create"})
podCreate.WaitWithDefaultTimeout()
Expect(podCreate).Should(Exit(0))
podClone := podmanTest.Podman([]string{"pod", "clone", "--shm-size", "10mb", podCreate.OutputToString()})
podClone.WaitWithDefaultTimeout()
Expect(podClone).Should(Exit(0))
run := podmanTest.Podman([]string{"run", "--pod", podClone.OutputToString(), ALPINE, "mount"})
run.WaitWithDefaultTimeout()
Expect(run).Should(Exit(0))
t, strings := run.GrepString("shm on /dev/shm type tmpfs")
Expect(t).To(BeTrue())
Expect(strings[0]).Should(ContainSubstring("size=10240k"))
})
It("podman pod clone --uts test", func() {
SkipIfRemote("hostname for the custom NS test is not as expected on the remote client")
session := podmanTest.Podman([]string{"pod", "create"})
session.WaitWithDefaultTimeout()
Expect(session).Should(Exit(0))
session = podmanTest.Podman([]string{"pod", "clone", "--uts", "host", session.OutputToString()})
session.WaitWithDefaultTimeout()
Expect(session).Should(Exit(0))
session = podmanTest.Podman([]string{"run", "--pod", session.OutputToString(), ALPINE, "printenv", "HOSTNAME"})
session.WaitWithDefaultTimeout()
Expect(session).Should(Exit(0))
Expect(session.OutputToString()).To(ContainSubstring(hostname))
podName := "utsPod"
ns := "ns:/proc/self/ns/"
session = podmanTest.Podman([]string{"pod", "create"})
session.WaitWithDefaultTimeout()
Expect(session).Should(Exit(0))
// just share uts with a custom path
podCreate := podmanTest.Podman([]string{"pod", "clone", "--uts", ns, "--name", podName, session.OutputToString()})
podCreate.WaitWithDefaultTimeout()
Expect(podCreate).Should(Exit(0))
podInspect := podmanTest.Podman([]string{"pod", "inspect", podName})
podInspect.WaitWithDefaultTimeout()
Expect(podInspect).Should(Exit(0))
podJSON := podInspect.InspectPodToJSON()
Expect(podJSON.InfraConfig).To(HaveField("UtsNS", ns))
})
})