mirror of
https://github.com/containers/podman.git
synced 2025-12-05 21:32:22 +08:00
Some callers assume when SystemExec returns, the command has completed. Other callers explicitly wait for completion (as required). However, forgetting to do that is an incredibly easy mistake to make. Fix this by adding an explicit parameter to the function. This requires every caller to deliberately state whether or not a completion-check is required. Also address **many** resource naming / cleanup completion-races. Signed-off-by: Chris Evich <cevich@redhat.com>
123 lines
3.5 KiB
Go
123 lines
3.5 KiB
Go
// +build !remoteclient
|
|
|
|
package integration
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
|
|
. "github.com/containers/libpod/test/utils"
|
|
. "github.com/onsi/ginkgo"
|
|
. "github.com/onsi/gomega"
|
|
)
|
|
|
|
var _ = Describe("Podman pod create", func() {
|
|
var (
|
|
tempdir string
|
|
err error
|
|
podmanTest *PodmanTestIntegration
|
|
)
|
|
|
|
BeforeEach(func() {
|
|
tempdir, err = CreateTempDirInTempDir()
|
|
if err != nil {
|
|
os.Exit(1)
|
|
}
|
|
podmanTest = PodmanTestCreate(tempdir)
|
|
podmanTest.RestoreAllArtifacts()
|
|
})
|
|
|
|
AfterEach(func() {
|
|
podmanTest.CleanupPod()
|
|
f := CurrentGinkgoTestDescription()
|
|
timedResult := fmt.Sprintf("Test: %s completed in %f seconds", f.TestText, f.Duration.Seconds())
|
|
GinkgoWriter.Write([]byte(timedResult))
|
|
})
|
|
|
|
It("podman create pod", func() {
|
|
_, ec, podID := podmanTest.CreatePod("")
|
|
Expect(ec).To(Equal(0))
|
|
|
|
check := podmanTest.Podman([]string{"pod", "ps", "-q", "--no-trunc"})
|
|
check.WaitWithDefaultTimeout()
|
|
match, _ := check.GrepString(podID)
|
|
Expect(match).To(BeTrue())
|
|
Expect(len(check.OutputToStringArray())).To(Equal(1))
|
|
})
|
|
|
|
It("podman create pod with name", func() {
|
|
name := "test"
|
|
_, ec, _ := podmanTest.CreatePod(name)
|
|
Expect(ec).To(Equal(0))
|
|
|
|
check := podmanTest.Podman([]string{"pod", "ps", "--no-trunc"})
|
|
check.WaitWithDefaultTimeout()
|
|
match, _ := check.GrepString(name)
|
|
Expect(match).To(BeTrue())
|
|
})
|
|
|
|
It("podman create pod with doubled name", func() {
|
|
name := "test"
|
|
_, ec, _ := podmanTest.CreatePod(name)
|
|
Expect(ec).To(Equal(0))
|
|
|
|
_, ec2, _ := podmanTest.CreatePod(name)
|
|
Expect(ec2).To(Not(Equal(0)))
|
|
|
|
check := podmanTest.Podman([]string{"pod", "ps", "-q"})
|
|
check.WaitWithDefaultTimeout()
|
|
Expect(len(check.OutputToStringArray())).To(Equal(1))
|
|
})
|
|
|
|
It("podman create pod with same name as ctr", func() {
|
|
name := "test"
|
|
session := podmanTest.Podman([]string{"create", "--name", name, ALPINE, "ls"})
|
|
session.WaitWithDefaultTimeout()
|
|
Expect(session.ExitCode()).To(Equal(0))
|
|
|
|
_, ec, _ := podmanTest.CreatePod(name)
|
|
Expect(ec).To(Not(Equal(0)))
|
|
|
|
check := podmanTest.Podman([]string{"pod", "ps", "-q"})
|
|
check.WaitWithDefaultTimeout()
|
|
Expect(len(check.OutputToStringArray())).To(Equal(0))
|
|
})
|
|
|
|
It("podman create pod without network portbindings", func() {
|
|
name := "test"
|
|
session := podmanTest.Podman([]string{"pod", "create", "--name", name})
|
|
session.WaitWithDefaultTimeout()
|
|
Expect(session.ExitCode()).To(Equal(0))
|
|
pod := session.OutputToString()
|
|
|
|
webserver := podmanTest.Podman([]string{"run", "--pod", pod, "-dt", nginx})
|
|
webserver.WaitWithDefaultTimeout()
|
|
Expect(webserver.ExitCode()).To(Equal(0))
|
|
|
|
check := SystemExec("nc", []string{"-z", "localhost", "80"})
|
|
Expect(check.ExitCode()).To(Equal(1))
|
|
})
|
|
|
|
It("podman create pod with network portbindings", func() {
|
|
name := "test"
|
|
session := podmanTest.Podman([]string{"pod", "create", "--name", name, "-p", "80:80"})
|
|
session.WaitWithDefaultTimeout()
|
|
Expect(session.ExitCode()).To(Equal(0))
|
|
pod := session.OutputToString()
|
|
|
|
webserver := podmanTest.Podman([]string{"run", "--pod", pod, "-dt", nginx})
|
|
webserver.WaitWithDefaultTimeout()
|
|
Expect(webserver.ExitCode()).To(Equal(0))
|
|
|
|
check := SystemExec("nc", []string{"-z", "localhost", "80"})
|
|
Expect(check.ExitCode()).To(Equal(0))
|
|
})
|
|
|
|
It("podman create pod with no infra but portbindings should fail", func() {
|
|
name := "test"
|
|
session := podmanTest.Podman([]string{"pod", "create", "--infra=false", "--name", name, "-p", "80:80"})
|
|
session.WaitWithDefaultTimeout()
|
|
Expect(session.ExitCode()).To(Equal(125))
|
|
})
|
|
})
|