Add tests for restore runtime verification
On container restore ensures that the same container runtime is used as during checkpointing and it also ensures that the user does not select a different runtime. Signed-off-by: Adrian Reber <areber@redhat.com>
This commit is contained in:
parent
c76caba367
commit
ced0ffbe8f
|
@ -1377,4 +1377,177 @@ var _ = Describe("Podman checkpoint", func() {
|
||||||
Expect(result).Should(Exit(0))
|
Expect(result).Should(Exit(0))
|
||||||
Expect(podmanTest.NumberOfContainersRunning()).To(Equal(0))
|
Expect(podmanTest.NumberOfContainersRunning()).To(Equal(0))
|
||||||
})
|
})
|
||||||
|
|
||||||
|
It("podman checkpoint container with export and verify runtime", func() {
|
||||||
|
SkipIfRemote("podman-remote does not support --runtime flag")
|
||||||
|
localRunString := getRunString([]string{
|
||||||
|
"--rm",
|
||||||
|
ALPINE,
|
||||||
|
"top",
|
||||||
|
})
|
||||||
|
session := podmanTest.Podman(localRunString)
|
||||||
|
session.WaitWithDefaultTimeout()
|
||||||
|
Expect(session).Should(Exit(0))
|
||||||
|
Expect(podmanTest.NumberOfContainersRunning()).To(Equal(1))
|
||||||
|
cid := session.OutputToString()
|
||||||
|
|
||||||
|
session = podmanTest.Podman([]string{
|
||||||
|
"inspect",
|
||||||
|
"--format",
|
||||||
|
"{{.OCIRuntime}}",
|
||||||
|
cid,
|
||||||
|
})
|
||||||
|
session.WaitWithDefaultTimeout()
|
||||||
|
Expect(session).Should(Exit(0))
|
||||||
|
runtime := session.OutputToString()
|
||||||
|
|
||||||
|
fileName := "/tmp/checkpoint-" + cid + ".tar.gz"
|
||||||
|
|
||||||
|
result := podmanTest.Podman([]string{
|
||||||
|
"container",
|
||||||
|
"checkpoint",
|
||||||
|
cid, "-e",
|
||||||
|
fileName,
|
||||||
|
})
|
||||||
|
result.WaitWithDefaultTimeout()
|
||||||
|
|
||||||
|
// As the container has been started with '--rm' it will be completely
|
||||||
|
// cleaned up after checkpointing.
|
||||||
|
Expect(result).Should(Exit(0))
|
||||||
|
Expect(podmanTest.NumberOfContainersRunning()).To(Equal(0))
|
||||||
|
Expect(podmanTest.NumberOfContainers()).To(Equal(0))
|
||||||
|
|
||||||
|
result = podmanTest.Podman([]string{
|
||||||
|
"container",
|
||||||
|
"restore",
|
||||||
|
"-i",
|
||||||
|
fileName,
|
||||||
|
})
|
||||||
|
result.WaitWithDefaultTimeout()
|
||||||
|
Expect(result).Should(Exit(0))
|
||||||
|
Expect(podmanTest.NumberOfContainersRunning()).To(Equal(1))
|
||||||
|
Expect(podmanTest.GetContainerStatus()).To(ContainSubstring("Up"))
|
||||||
|
|
||||||
|
// The restored container should have the same runtime as the original container
|
||||||
|
result = podmanTest.Podman([]string{
|
||||||
|
"inspect",
|
||||||
|
"--format",
|
||||||
|
"{{.OCIRuntime}}",
|
||||||
|
cid,
|
||||||
|
})
|
||||||
|
result.WaitWithDefaultTimeout()
|
||||||
|
Expect(result).Should(Exit(0))
|
||||||
|
Expect(session.OutputToString()).To(Equal(runtime))
|
||||||
|
|
||||||
|
// Remove exported checkpoint
|
||||||
|
os.Remove(fileName)
|
||||||
|
})
|
||||||
|
|
||||||
|
It("podman checkpoint container with export and try to change the runtime", func() {
|
||||||
|
SkipIfRemote("podman-remote does not support --runtime flag")
|
||||||
|
// This test will only run if runc and crun both exist
|
||||||
|
if !strings.Contains(podmanTest.OCIRuntime, "crun") {
|
||||||
|
Skip("Test requires crun and runc")
|
||||||
|
}
|
||||||
|
cmd := exec.Command("runc")
|
||||||
|
if err := cmd.Start(); err != nil {
|
||||||
|
Skip("Test requires crun and runc")
|
||||||
|
}
|
||||||
|
if err := cmd.Wait(); err != nil {
|
||||||
|
Skip("Test requires crun and runc")
|
||||||
|
}
|
||||||
|
localRunString := getRunString([]string{
|
||||||
|
"--rm",
|
||||||
|
ALPINE,
|
||||||
|
"top",
|
||||||
|
})
|
||||||
|
// Let's start a container with runc and try to restore it with crun (expected to fail)
|
||||||
|
localRunString = append(
|
||||||
|
[]string{
|
||||||
|
"--runtime",
|
||||||
|
"runc",
|
||||||
|
},
|
||||||
|
localRunString...,
|
||||||
|
)
|
||||||
|
session := podmanTest.Podman(localRunString)
|
||||||
|
session.WaitWithDefaultTimeout()
|
||||||
|
Expect(session).Should(Exit(0))
|
||||||
|
Expect(podmanTest.NumberOfContainersRunning()).To(Equal(1))
|
||||||
|
cid := session.OutputToString()
|
||||||
|
|
||||||
|
session = podmanTest.Podman([]string{
|
||||||
|
"inspect",
|
||||||
|
"--format",
|
||||||
|
"{{.OCIRuntime}}",
|
||||||
|
cid,
|
||||||
|
})
|
||||||
|
session.WaitWithDefaultTimeout()
|
||||||
|
Expect(session).Should(Exit(0))
|
||||||
|
runtime := session.OutputToString()
|
||||||
|
|
||||||
|
fileName := "/tmp/checkpoint-" + cid + ".tar.gz"
|
||||||
|
|
||||||
|
result := podmanTest.Podman([]string{
|
||||||
|
"container",
|
||||||
|
"checkpoint",
|
||||||
|
cid, "-e",
|
||||||
|
fileName,
|
||||||
|
})
|
||||||
|
result.WaitWithDefaultTimeout()
|
||||||
|
|
||||||
|
// As the container has been started with '--rm' it will be completely
|
||||||
|
// cleaned up after checkpointing.
|
||||||
|
Expect(result).Should(Exit(0))
|
||||||
|
Expect(podmanTest.NumberOfContainersRunning()).To(Equal(0))
|
||||||
|
Expect(podmanTest.NumberOfContainers()).To(Equal(0))
|
||||||
|
|
||||||
|
// This should fail as the container was checkpointed with runc
|
||||||
|
result = podmanTest.Podman([]string{
|
||||||
|
"--runtime",
|
||||||
|
"crun",
|
||||||
|
"container",
|
||||||
|
"restore",
|
||||||
|
"-i",
|
||||||
|
fileName,
|
||||||
|
})
|
||||||
|
result.WaitWithDefaultTimeout()
|
||||||
|
|
||||||
|
Expect(result).Should(Exit(125))
|
||||||
|
Expect(result.ErrorToString()).To(
|
||||||
|
ContainSubstring("and cannot be restored with runtime"),
|
||||||
|
)
|
||||||
|
|
||||||
|
result = podmanTest.Podman([]string{
|
||||||
|
"--runtime",
|
||||||
|
"runc",
|
||||||
|
"container",
|
||||||
|
"restore",
|
||||||
|
"-i",
|
||||||
|
fileName,
|
||||||
|
})
|
||||||
|
result.WaitWithDefaultTimeout()
|
||||||
|
Expect(result).Should(Exit(0))
|
||||||
|
|
||||||
|
result = podmanTest.Podman([]string{
|
||||||
|
"inspect",
|
||||||
|
"--format",
|
||||||
|
"{{.OCIRuntime}}",
|
||||||
|
cid,
|
||||||
|
})
|
||||||
|
result.WaitWithDefaultTimeout()
|
||||||
|
Expect(result).Should(Exit(0))
|
||||||
|
Expect(result.OutputToString()).To(Equal(runtime))
|
||||||
|
|
||||||
|
result = podmanTest.Podman([]string{
|
||||||
|
"--runtime",
|
||||||
|
"runc",
|
||||||
|
"rm",
|
||||||
|
"-fa",
|
||||||
|
})
|
||||||
|
result.WaitWithDefaultTimeout()
|
||||||
|
Expect(result).Should(Exit(0))
|
||||||
|
Expect(podmanTest.NumberOfContainersRunning()).To(Equal(0))
|
||||||
|
// Remove exported checkpoint
|
||||||
|
os.Remove(fileName)
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|
Loading…
Reference in New Issue