mirror of
https://github.com/containers/podman.git
synced 2025-10-25 02:04:43 +08:00
As we were not updating the pod ID bucket, removing a pod with containers still in it (including the infra container, which will always suffer from this) will not properly update the name registry to remove the name of any renamed containers. This patch ensures that does not happen - all containers will be fully removed, even if renamed. Fixes #11750 Signed-off-by: Matthew Heon <matthew.heon@pm.me>
140 lines
4.3 KiB
Go
140 lines
4.3 KiB
Go
package integration
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
|
|
. "github.com/containers/podman/v3/test/utils"
|
|
. "github.com/onsi/ginkgo"
|
|
. "github.com/onsi/gomega"
|
|
. "github.com/onsi/gomega/gexec"
|
|
)
|
|
|
|
var _ = Describe("podman rename", func() {
|
|
var (
|
|
tempdir string
|
|
err error
|
|
podmanTest *PodmanTestIntegration
|
|
)
|
|
|
|
BeforeEach(func() {
|
|
tempdir, err = CreateTempDirInTempDir()
|
|
if err != nil {
|
|
os.Exit(1)
|
|
}
|
|
podmanTest = PodmanTestCreate(tempdir)
|
|
podmanTest.Setup()
|
|
podmanTest.SeedImages()
|
|
})
|
|
|
|
AfterEach(func() {
|
|
podmanTest.Cleanup()
|
|
f := CurrentGinkgoTestDescription()
|
|
processTestResult(f)
|
|
|
|
})
|
|
|
|
It("podman rename on non-existent container", func() {
|
|
session := podmanTest.Podman([]string{"rename", "doesNotExist", "aNewName"})
|
|
session.WaitWithDefaultTimeout()
|
|
Expect(session).To(ExitWithError())
|
|
})
|
|
|
|
It("Podman rename on existing container with bad name", func() {
|
|
ctrName := "testCtr"
|
|
ctr := podmanTest.Podman([]string{"create", "--name", ctrName, ALPINE, "top"})
|
|
ctr.WaitWithDefaultTimeout()
|
|
Expect(ctr).Should(Exit(0))
|
|
|
|
newName := "invalid<>:char"
|
|
rename := podmanTest.Podman([]string{"rename", ctrName, newName})
|
|
rename.WaitWithDefaultTimeout()
|
|
Expect(rename).To(ExitWithError())
|
|
|
|
ps := podmanTest.Podman([]string{"ps", "-aq", "--filter", fmt.Sprintf("name=%s", ctrName), "--format", "{{ .Names }}"})
|
|
ps.WaitWithDefaultTimeout()
|
|
Expect(ps).Should(Exit(0))
|
|
Expect(ps.OutputToString()).To(ContainSubstring(ctrName))
|
|
})
|
|
|
|
It("Successfully rename a created container", func() {
|
|
ctrName := "testCtr"
|
|
ctr := podmanTest.Podman([]string{"create", "--name", ctrName, ALPINE, "top"})
|
|
ctr.WaitWithDefaultTimeout()
|
|
Expect(ctr).Should(Exit(0))
|
|
|
|
newName := "aNewName"
|
|
rename := podmanTest.Podman([]string{"rename", ctrName, newName})
|
|
rename.WaitWithDefaultTimeout()
|
|
Expect(rename).Should(Exit(0))
|
|
|
|
ps := podmanTest.Podman([]string{"ps", "-aq", "--filter", fmt.Sprintf("name=%s", newName), "--format", "{{ .Names }}"})
|
|
ps.WaitWithDefaultTimeout()
|
|
Expect(ps).Should(Exit(0))
|
|
Expect(ps.OutputToString()).To(ContainSubstring(newName))
|
|
})
|
|
|
|
It("Successfully rename a running container", func() {
|
|
ctrName := "testCtr"
|
|
ctr := podmanTest.Podman([]string{"run", "-d", "--name", ctrName, ALPINE, "top"})
|
|
ctr.WaitWithDefaultTimeout()
|
|
Expect(ctr).Should(Exit(0))
|
|
|
|
newName := "aNewName"
|
|
rename := podmanTest.Podman([]string{"rename", ctrName, newName})
|
|
rename.WaitWithDefaultTimeout()
|
|
Expect(rename).Should(Exit(0))
|
|
|
|
ps := podmanTest.Podman([]string{"ps", "-aq", "--filter", fmt.Sprintf("name=%s", newName), "--format", "{{ .Names }}"})
|
|
ps.WaitWithDefaultTimeout()
|
|
Expect(ps).Should(Exit(0))
|
|
Expect(ps.OutputToString()).To(ContainSubstring(newName))
|
|
})
|
|
|
|
It("Rename a running container with exec sessions", func() {
|
|
ctrName := "testCtr"
|
|
ctr := podmanTest.Podman([]string{"run", "-d", "--name", ctrName, ALPINE, "top"})
|
|
ctr.WaitWithDefaultTimeout()
|
|
Expect(ctr).Should(Exit(0))
|
|
|
|
exec := podmanTest.Podman([]string{"exec", "-d", ctrName, "top"})
|
|
exec.WaitWithDefaultTimeout()
|
|
Expect(exec).Should(Exit(0))
|
|
|
|
newName := "aNewName"
|
|
rename := podmanTest.Podman([]string{"rename", ctrName, newName})
|
|
rename.WaitWithDefaultTimeout()
|
|
Expect(rename).Should(Exit(0))
|
|
|
|
ps := podmanTest.Podman([]string{"ps", "-aq", "--filter", fmt.Sprintf("name=%s", newName), "--format", "{{ .Names }}"})
|
|
ps.WaitWithDefaultTimeout()
|
|
Expect(ps).Should(Exit(0))
|
|
Expect(ps.OutputToString()).To(ContainSubstring(newName))
|
|
})
|
|
|
|
It("Rename a container that is part of a pod", func() {
|
|
podName := "testPod"
|
|
infraName := "infra1"
|
|
pod := podmanTest.Podman([]string{"pod", "create", "--name", podName, "--infra-name", infraName})
|
|
pod.WaitWithDefaultTimeout()
|
|
Expect(pod).Should(Exit(0))
|
|
|
|
infraName2 := "infra2"
|
|
rename := podmanTest.Podman([]string{"rename", infraName, infraName2})
|
|
rename.WaitWithDefaultTimeout()
|
|
Expect(rename).Should(Exit(0))
|
|
|
|
remove := podmanTest.Podman([]string{"pod", "rm", "-f", podName})
|
|
remove.WaitWithDefaultTimeout()
|
|
Expect(remove).Should(Exit(0))
|
|
|
|
create := podmanTest.Podman([]string{"create", "--name", infraName2, ALPINE, "top"})
|
|
create.WaitWithDefaultTimeout()
|
|
Expect(create).Should(Exit(0))
|
|
|
|
create2 := podmanTest.Podman([]string{"create", "--name", infraName, ALPINE, "top"})
|
|
create2.WaitWithDefaultTimeout()
|
|
Expect(create2).Should(Exit(0))
|
|
})
|
|
})
|