Merge pull request #22346 from edsantiago/exitwitherror-part2

ExitWithError() - continue tightening
This commit is contained in:
openshift-merge-bot[bot]
2024-05-08 17:43:39 +00:00
committed by GitHub
6 changed files with 120 additions and 90 deletions

View File

@ -171,16 +171,10 @@ var _ = Describe("Podman import", func() {
importImage := podmanTest.Podman([]string{"import", "-q", "--signature-policy", "/no/such/file", outfile}) importImage := podmanTest.Podman([]string{"import", "-q", "--signature-policy", "/no/such/file", outfile})
importImage.WaitWithDefaultTimeout() importImage.WaitWithDefaultTimeout()
Expect(importImage).To(ExitWithError()) Expect(importImage).To(ExitWithError(125, "open /no/such/file: no such file or directory"))
result := podmanTest.Podman([]string{"import", "-q", "--signature-policy", "/etc/containers/policy.json", outfile}) result := podmanTest.Podman([]string{"import", "-q", "--signature-policy", "/etc/containers/policy.json", outfile})
result.WaitWithDefaultTimeout() result.WaitWithDefaultTimeout()
if IsRemote() {
Expect(result).To(ExitWithError())
Expect(result.ErrorToString()).To(ContainSubstring("unknown flag"))
result := podmanTest.Podman([]string{"import", "-q", outfile})
result.WaitWithDefaultTimeout()
}
Expect(result).Should(ExitCleanly()) Expect(result).Should(ExitCleanly())
}) })
}) })

View File

@ -1,10 +1,11 @@
package integration package integration
import ( import (
"fmt"
. "github.com/containers/podman/v5/test/utils" . "github.com/containers/podman/v5/test/utils"
. "github.com/onsi/ginkgo/v2" . "github.com/onsi/ginkgo/v2"
. "github.com/onsi/gomega" . "github.com/onsi/gomega"
. "github.com/onsi/gomega/gexec"
"github.com/opencontainers/selinux/go-selinux" "github.com/opencontainers/selinux/go-selinux"
) )
@ -22,7 +23,7 @@ var _ = Describe("Podman inspect", func() {
It("podman inspect bogus container", func() { It("podman inspect bogus container", func() {
session := podmanTest.Podman([]string{"inspect", "foobar4321"}) session := podmanTest.Podman([]string{"inspect", "foobar4321"})
session.WaitWithDefaultTimeout() session.WaitWithDefaultTimeout()
Expect(session).To(ExitWithError()) Expect(session).To(ExitWithError(125, `no such object: "foobar4321"`))
}) })
It("podman inspect filter should work if result contains tab", func() { It("podman inspect filter should work if result contains tab", func() {
@ -128,7 +129,7 @@ var _ = Describe("Podman inspect", func() {
SkipIfRemote("--latest flag n/a") SkipIfRemote("--latest flag n/a")
result := podmanTest.Podman([]string{"inspect", "-l", "1234foobar"}) result := podmanTest.Podman([]string{"inspect", "-l", "1234foobar"})
result.WaitWithDefaultTimeout() result.WaitWithDefaultTimeout()
Expect(result).Should(Exit(125)) Expect(result).Should(ExitWithError(125, "--latest and arguments cannot be used together"))
}) })
It("podman inspect with mount filters", func() { It("podman inspect with mount filters", func() {
@ -173,7 +174,7 @@ var _ = Describe("Podman inspect", func() {
session := podmanTest.Podman([]string{"inspect", "--latest"}) session := podmanTest.Podman([]string{"inspect", "--latest"})
session.WaitWithDefaultTimeout() session.WaitWithDefaultTimeout()
Expect(session).To(ExitWithError()) Expect(session).To(ExitWithError(125, "no containers to inspect: no such container"))
}) })
It("podman [image,container] inspect on image", func() { It("podman [image,container] inspect on image", func() {
@ -185,7 +186,11 @@ var _ = Describe("Podman inspect", func() {
ctrInspect := podmanTest.Podman([]string{"container", "inspect", ALPINE}) ctrInspect := podmanTest.Podman([]string{"container", "inspect", ALPINE})
ctrInspect.WaitWithDefaultTimeout() ctrInspect.WaitWithDefaultTimeout()
Expect(ctrInspect).To(ExitWithError()) if IsRemote() {
Expect(ctrInspect).To(ExitWithError(125, fmt.Sprintf("no such container %q", ALPINE)))
} else {
Expect(ctrInspect).To(ExitWithError(125, fmt.Sprintf("no such container %s", ALPINE)))
}
imageInspect := podmanTest.Podman([]string{"image", "inspect", ALPINE}) imageInspect := podmanTest.Podman([]string{"image", "inspect", ALPINE})
imageInspect.WaitWithDefaultTimeout() imageInspect.WaitWithDefaultTimeout()
@ -197,7 +202,7 @@ var _ = Describe("Podman inspect", func() {
}) })
It("podman [image, container] inspect on container", func() { It("podman [image, container] inspect on container", func() {
ctrName := "testCtr" ctrName := "testctr"
create := podmanTest.Podman([]string{"create", "--name", ctrName, ALPINE, "sh"}) create := podmanTest.Podman([]string{"create", "--name", ctrName, ALPINE, "sh"})
create.WaitWithDefaultTimeout() create.WaitWithDefaultTimeout()
Expect(create).Should(ExitCleanly()) Expect(create).Should(ExitCleanly())
@ -216,7 +221,7 @@ var _ = Describe("Podman inspect", func() {
imageInspect := podmanTest.Podman([]string{"image", "inspect", ctrName}) imageInspect := podmanTest.Podman([]string{"image", "inspect", ctrName})
imageInspect.WaitWithDefaultTimeout() imageInspect.WaitWithDefaultTimeout()
Expect(imageInspect).To(ExitWithError()) Expect(imageInspect).To(ExitWithError(125, fmt.Sprintf("%s: image not known", ctrName)))
Expect(baseJSON[0]).To(HaveField("ID", ctrJSON[0].ID)) Expect(baseJSON[0]).To(HaveField("ID", ctrJSON[0].ID))
}) })
@ -224,7 +229,7 @@ var _ = Describe("Podman inspect", func() {
It("podman inspect always produces a valid array", func() { It("podman inspect always produces a valid array", func() {
baseInspect := podmanTest.Podman([]string{"inspect", "doesNotExist"}) baseInspect := podmanTest.Podman([]string{"inspect", "doesNotExist"})
baseInspect.WaitWithDefaultTimeout() baseInspect.WaitWithDefaultTimeout()
Expect(baseInspect).To(ExitWithError()) Expect(baseInspect).To(ExitWithError(125, `no such object: "doesNotExist"`))
emptyJSON := baseInspect.InspectContainerToJSON() emptyJSON := baseInspect.InspectContainerToJSON()
Expect(emptyJSON).To(BeEmpty()) Expect(emptyJSON).To(BeEmpty())
}) })
@ -237,7 +242,7 @@ var _ = Describe("Podman inspect", func() {
baseInspect := podmanTest.Podman([]string{"inspect", ctrName, "doesNotExist"}) baseInspect := podmanTest.Podman([]string{"inspect", ctrName, "doesNotExist"})
baseInspect.WaitWithDefaultTimeout() baseInspect.WaitWithDefaultTimeout()
Expect(baseInspect).To(ExitWithError()) Expect(baseInspect).To(ExitWithError(125, `no such object: "doesNotExist"`))
baseJSON := baseInspect.InspectContainerToJSON() baseJSON := baseInspect.InspectContainerToJSON()
Expect(baseJSON).To(HaveLen(1)) Expect(baseJSON).To(HaveLen(1))
Expect(baseJSON[0]).To(HaveField("Name", ctrName)) Expect(baseJSON[0]).To(HaveField("Name", ctrName))
@ -383,6 +388,7 @@ var _ = Describe("Podman inspect", func() {
Expect(session).Should(ExitCleanly()) Expect(session).Should(ExitCleanly())
Expect(session.OutputToString()).To(Equal(volName)) Expect(session.OutputToString()).To(Equal(volName))
}) })
It("podman inspect --type container on a pod should fail", func() { It("podman inspect --type container on a pod should fail", func() {
podName := "testpod" podName := "testpod"
create := podmanTest.Podman([]string{"pod", "create", "--name", podName}) create := podmanTest.Podman([]string{"pod", "create", "--name", podName})
@ -391,7 +397,11 @@ var _ = Describe("Podman inspect", func() {
inspect := podmanTest.Podman([]string{"inspect", "--type", "container", podName}) inspect := podmanTest.Podman([]string{"inspect", "--type", "container", podName})
inspect.WaitWithDefaultTimeout() inspect.WaitWithDefaultTimeout()
Expect(inspect).To(ExitWithError()) if IsRemote() {
Expect(inspect).To(ExitWithError(125, fmt.Sprintf("no such container %q", podName)))
} else {
Expect(inspect).To(ExitWithError(125, fmt.Sprintf("no such container %s", podName)))
}
}) })
It("podman inspect --type network on a container should fail", func() { It("podman inspect --type network on a container should fail", func() {
@ -402,7 +412,7 @@ var _ = Describe("Podman inspect", func() {
inspect := podmanTest.Podman([]string{"inspect", "--type", "network", ctrName}) inspect := podmanTest.Podman([]string{"inspect", "--type", "network", ctrName})
inspect.WaitWithDefaultTimeout() inspect.WaitWithDefaultTimeout()
Expect(inspect).To(ExitWithError()) Expect(inspect).To(ExitWithError(125, " network not found"))
}) })
It("podman inspect --type pod on a container should fail", func() { It("podman inspect --type pod on a container should fail", func() {
@ -413,7 +423,7 @@ var _ = Describe("Podman inspect", func() {
inspect := podmanTest.Podman([]string{"inspect", "--type", "pod", ctrName}) inspect := podmanTest.Podman([]string{"inspect", "--type", "pod", ctrName})
inspect.WaitWithDefaultTimeout() inspect.WaitWithDefaultTimeout()
Expect(inspect).To(ExitWithError()) Expect(inspect).To(ExitWithError(125, "no such pod "))
}) })
It("podman inspect --type volume on a container should fail", func() { It("podman inspect --type volume on a container should fail", func() {
@ -424,7 +434,7 @@ var _ = Describe("Podman inspect", func() {
inspect := podmanTest.Podman([]string{"inspect", "--type", "volume", ctrName}) inspect := podmanTest.Podman([]string{"inspect", "--type", "volume", ctrName})
inspect.WaitWithDefaultTimeout() inspect.WaitWithDefaultTimeout()
Expect(inspect).To(ExitWithError()) Expect(inspect).To(ExitWithError(125, "no such volume "))
}) })
// Fixes https://github.com/containers/podman/issues/8444 // Fixes https://github.com/containers/podman/issues/8444
@ -573,13 +583,15 @@ var _ = Describe("Podman inspect", func() {
Expect(session).Should(ExitCleanly()) Expect(session).Should(ExitCleanly())
Expect(session.OutputToString()).To(BeEmpty()) Expect(session.OutputToString()).To(BeEmpty())
commandNotFound := "OCI runtime attempted to invoke a command that was not found"
session = podmanTest.Podman([]string{"start", cid}) session = podmanTest.Podman([]string{"start", cid})
session.WaitWithDefaultTimeout() session.WaitWithDefaultTimeout()
Expect(session).Should(Exit(125)) Expect(session).Should(ExitWithError(125, commandNotFound))
session = podmanTest.Podman([]string{"container", "inspect", cid, "-f", "'{{ .State.Error }}"}) session = podmanTest.Podman([]string{"container", "inspect", cid, "-f", "'{{ .State.Error }}"})
session.WaitWithDefaultTimeout() session.WaitWithDefaultTimeout()
Expect(session).Should(ExitCleanly()) Expect(session).Should(ExitCleanly())
Expect(session.OutputToString()).ToNot(BeEmpty()) Expect(session.OutputToString()).To(ContainSubstring(commandNotFound))
}) })
}) })

View File

@ -2,6 +2,7 @@ package integration
import ( import (
"encoding/json" "encoding/json"
"fmt"
"os" "os"
"path/filepath" "path/filepath"
"strings" "strings"
@ -83,13 +84,12 @@ var _ = Describe("Podman manifest", func() {
session = podmanTest.Podman([]string{"manifest", "create", "foo"}) session = podmanTest.Podman([]string{"manifest", "create", "foo"})
session.WaitWithDefaultTimeout() session.WaitWithDefaultTimeout()
Expect(session).To(ExitWithError()) Expect(session).To(ExitWithError(125, `image name "localhost/foo:latest" is already associated with image `))
session = podmanTest.Podman([]string{"manifest", "push", "--all", "foo"}) session = podmanTest.Podman([]string{"manifest", "push", "--all", "foo"})
session.WaitWithDefaultTimeout() session.WaitWithDefaultTimeout()
Expect(session).To(ExitWithError()) // Push should actually fail since it's not valid registry
// Push should actually fail since its not valid registry Expect(session).To(ExitWithError(125, "requested access to the resource is denied"))
Expect(session.ErrorToString()).To(ContainSubstring("requested access to the resource is denied"))
Expect(session.OutputToString()).To(Not(ContainSubstring("accepts 2 arg(s), received 1"))) Expect(session.OutputToString()).To(Not(ContainSubstring("accepts 2 arg(s), received 1")))
session = podmanTest.Podman([]string{"manifest", "create", amend, "foo"}) session = podmanTest.Podman([]string{"manifest", "create", amend, "foo"})
@ -341,8 +341,8 @@ add_compression = ["zstd"]`), 0o644)
Expect(session).Should(ExitCleanly()) Expect(session).Should(ExitCleanly())
session = podmanTest.Podman([]string{"manifest", "add", "--annotation", "hoge", "foo", imageList}) session = podmanTest.Podman([]string{"manifest", "add", "--annotation", "hoge", "foo", imageList})
session.WaitWithDefaultTimeout() session.WaitWithDefaultTimeout()
Expect(session).Should(Exit(125)) Expect(session).Should(ExitWithError(125, "no value given for annotation"))
Expect(session.ErrorToString()).To(ContainSubstring("no value given for annotation"))
session = podmanTest.Podman([]string{"manifest", "add", "--annotation", "hoge=fuga", "--annotation", "key=val,withcomma", "foo", imageList}) session = podmanTest.Podman([]string{"manifest", "add", "--annotation", "hoge=fuga", "--annotation", "key=val,withcomma", "foo", imageList})
session.WaitWithDefaultTimeout() session.WaitWithDefaultTimeout()
Expect(session).Should(ExitCleanly()) Expect(session).Should(ExitCleanly())
@ -421,9 +421,18 @@ add_compression = ["zstd"]`), 0o644)
session = podmanTest.Podman([]string{"manifest", "add", "foo", imageList}) session = podmanTest.Podman([]string{"manifest", "add", "foo", imageList})
session.WaitWithDefaultTimeout() session.WaitWithDefaultTimeout()
Expect(session).Should(ExitCleanly()) Expect(session).Should(ExitCleanly())
session = podmanTest.Podman([]string{"manifest", "remove", "foo", "sha256:0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"}) bogusID := "sha256:0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"
session = podmanTest.Podman([]string{"manifest", "remove", "foo", bogusID})
session.WaitWithDefaultTimeout() session.WaitWithDefaultTimeout()
Expect(session).To(ExitWithError())
// FIXME-someday: figure out why message differs in podman-remote
expectMessage := "removing from manifest list foo: "
if IsRemote() {
expectMessage += "removing from manifest foo"
} else {
expectMessage += fmt.Sprintf(`no instance matching digest %q found in manifest list: file does not exist`, bogusID)
}
Expect(session).To(ExitWithError(125, expectMessage))
session = podmanTest.Podman([]string{"manifest", "rm", "foo"}) session = podmanTest.Podman([]string{"manifest", "rm", "foo"})
session.WaitWithDefaultTimeout() session.WaitWithDefaultTimeout()
@ -493,9 +502,7 @@ RUN touch /file
tmpDir := filepath.Join(podmanTest.TempDir, "wrong-compression") tmpDir := filepath.Join(podmanTest.TempDir, "wrong-compression")
session = podmanTest.Podman([]string{"manifest", "push", "--compression-format", "gzip", "--compression-level", "50", "foo", "oci:" + tmpDir}) session = podmanTest.Podman([]string{"manifest", "push", "--compression-format", "gzip", "--compression-level", "50", "foo", "oci:" + tmpDir})
session.WaitWithDefaultTimeout() session.WaitWithDefaultTimeout()
Expect(session).Should(Exit(125)) Expect(session).Should(ExitWithError(125, "invalid compression level"))
output := session.ErrorToString()
Expect(output).To(ContainSubstring("invalid compression level"))
dest := filepath.Join(podmanTest.TempDir, "pushed") dest := filepath.Join(podmanTest.TempDir, "pushed")
err := os.MkdirAll(dest, os.ModePerm) err := os.MkdirAll(dest, os.ModePerm)
@ -564,7 +571,7 @@ RUN touch /file
push := podmanTest.Podman([]string{"manifest", "push", "--all", "--tls-verify=false", "--remove-signatures", "foo", "localhost:7000/bogus"}) push := podmanTest.Podman([]string{"manifest", "push", "--all", "--tls-verify=false", "--remove-signatures", "foo", "localhost:7000/bogus"})
push.WaitWithDefaultTimeout() push.WaitWithDefaultTimeout()
Expect(push).Should(Exit(125)) Expect(push).Should(ExitWithError(125, "Failed, retrying in 1s ... (1/3)"))
Expect(push.ErrorToString()).To(MatchRegexp("Copying blob.*Failed, retrying in 1s \\.\\.\\. \\(1/3\\).*Copying blob.*Failed, retrying in 2s")) Expect(push.ErrorToString()).To(MatchRegexp("Copying blob.*Failed, retrying in 1s \\.\\.\\. \\(1/3\\).*Copying blob.*Failed, retrying in 2s"))
}) })
@ -614,8 +621,7 @@ RUN touch /file
push = podmanTest.Podman([]string{"manifest", "push", "--compression-format=gzip", "--compression-level=2", "--tls-verify=false", "--creds=podmantest:wrongpasswd", "foo", "localhost:" + registry.Port + "/credstest"}) push = podmanTest.Podman([]string{"manifest", "push", "--compression-format=gzip", "--compression-level=2", "--tls-verify=false", "--creds=podmantest:wrongpasswd", "foo", "localhost:" + registry.Port + "/credstest"})
push.WaitWithDefaultTimeout() push.WaitWithDefaultTimeout()
Expect(push).To(ExitWithError()) Expect(push).To(ExitWithError(125, ": authentication required"))
Expect(push.ErrorToString()).To(ContainSubstring(": authentication required"))
// push --rm after pull image (#15033) // push --rm after pull image (#15033)
push = podmanTest.Podman([]string{"manifest", "push", "-q", "--rm", "--tls-verify=false", "--creds=" + registry.User + ":" + registry.Password, "foo", "localhost:" + registry.Port + "/rmtest"}) push = podmanTest.Podman([]string{"manifest", "push", "-q", "--rm", "--tls-verify=false", "--creds=" + registry.User + ":" + registry.Password, "foo", "localhost:" + registry.Port + "/rmtest"})
@ -631,8 +637,7 @@ RUN touch /file
It("push with error", func() { It("push with error", func() {
session := podmanTest.Podman([]string{"manifest", "push", "badsrcvalue", "baddestvalue"}) session := podmanTest.Podman([]string{"manifest", "push", "badsrcvalue", "baddestvalue"})
session.WaitWithDefaultTimeout() session.WaitWithDefaultTimeout()
Expect(session).Should(ExitWithError()) Expect(session).Should(ExitWithError(125, "retrieving local image from image name badsrcvalue: badsrcvalue: image not known"))
Expect(session.ErrorToString()).To(ContainSubstring("retrieving local image from image name badsrcvalue: badsrcvalue: image not known"))
}) })
It("push --rm to local directory", func() { It("push --rm to local directory", func() {
@ -654,8 +659,8 @@ RUN touch /file
Expect(session).Should(ExitCleanly()) Expect(session).Should(ExitCleanly())
session = podmanTest.Podman([]string{"manifest", "push", "-p", "foo", "dir:" + dest}) session = podmanTest.Podman([]string{"manifest", "push", "-p", "foo", "dir:" + dest})
session.WaitWithDefaultTimeout() session.WaitWithDefaultTimeout()
Expect(session).Should(Exit(125)) Expect(session).Should(ExitWithError(125, "retrieving local image from image name foo: foo: image not known"))
Expect(session.ErrorToString()).To(ContainSubstring("retrieving local image from image name foo: foo: image not known"))
session = podmanTest.Podman([]string{"images", "-q", "foo"}) session = podmanTest.Podman([]string{"images", "-q", "foo"})
session.WaitWithDefaultTimeout() session.WaitWithDefaultTimeout()
Expect(session).Should(ExitCleanly()) Expect(session).Should(ExitCleanly())
@ -682,9 +687,9 @@ RUN touch /file
session = podmanTest.Podman([]string{"manifest", "rm", "foo", "bar"}) session = podmanTest.Podman([]string{"manifest", "rm", "foo", "bar"})
session.WaitWithDefaultTimeout() session.WaitWithDefaultTimeout()
Expect(session).Should(ExitWithError()) Expect(session).Should(ExitWithError(1, " 2 errors occurred:"))
Expect(session.ErrorToString()).To(ContainSubstring("foo: image not known")) Expect(session.ErrorToString()).To(ContainSubstring("* foo: image not known"))
Expect(session.ErrorToString()).To(ContainSubstring("bar: image not known")) Expect(session.ErrorToString()).To(ContainSubstring("* bar: image not known"))
}) })
It("exists", func() { It("exists", func() {
@ -732,8 +737,7 @@ RUN touch /file
// manifest rm should fail with `image is not a manifest list` // manifest rm should fail with `image is not a manifest list`
session := podmanTest.Podman([]string{"manifest", "rm", ALPINE}) session := podmanTest.Podman([]string{"manifest", "rm", ALPINE})
session.WaitWithDefaultTimeout() session.WaitWithDefaultTimeout()
Expect(session).Should(Exit(125)) Expect(session).Should(ExitWithError(125, "image is not a manifest list"))
Expect(session.ErrorToString()).To(ContainSubstring("image is not a manifest list"))
manifestName := "testmanifest:sometag" manifestName := "testmanifest:sometag"
session = podmanTest.Podman([]string{"manifest", "create", manifestName}) session = podmanTest.Podman([]string{"manifest", "create", manifestName})

View File

@ -1,11 +1,12 @@
package integration package integration
import ( import (
"fmt"
. "github.com/containers/podman/v5/test/utils" . "github.com/containers/podman/v5/test/utils"
"github.com/containers/storage/pkg/stringid" "github.com/containers/storage/pkg/stringid"
. "github.com/onsi/ginkgo/v2" . "github.com/onsi/ginkgo/v2"
. "github.com/onsi/gomega" . "github.com/onsi/gomega"
. "github.com/onsi/gomega/gexec"
"github.com/onsi/gomega/types" "github.com/onsi/gomega/types"
) )
@ -14,7 +15,7 @@ var _ = Describe("Podman network connect and disconnect", func() {
It("bad network name in disconnect should result in error", func() { It("bad network name in disconnect should result in error", func() {
dis := podmanTest.Podman([]string{"network", "disconnect", "foobar", "test"}) dis := podmanTest.Podman([]string{"network", "disconnect", "foobar", "test"})
dis.WaitWithDefaultTimeout() dis.WaitWithDefaultTimeout()
Expect(dis).Should(ExitWithError()) Expect(dis).Should(ExitWithError(125, `no container with name or ID "test" found: no such container`))
}) })
It("bad container name in network disconnect should result in error", func() { It("bad container name in network disconnect should result in error", func() {
@ -26,7 +27,7 @@ var _ = Describe("Podman network connect and disconnect", func() {
dis := podmanTest.Podman([]string{"network", "disconnect", netName, "foobar"}) dis := podmanTest.Podman([]string{"network", "disconnect", netName, "foobar"})
dis.WaitWithDefaultTimeout() dis.WaitWithDefaultTimeout()
Expect(dis).Should(ExitWithError()) Expect(dis).Should(ExitWithError(125, `no container with name or ID "foobar" found: no such container`))
}) })
It("network disconnect with net mode slirp4netns should result in error", func() { It("network disconnect with net mode slirp4netns should result in error", func() {
@ -43,8 +44,7 @@ var _ = Describe("Podman network connect and disconnect", func() {
con := podmanTest.Podman([]string{"network", "disconnect", netName, "test"}) con := podmanTest.Podman([]string{"network", "disconnect", netName, "test"})
con.WaitWithDefaultTimeout() con.WaitWithDefaultTimeout()
Expect(con).Should(ExitWithError()) Expect(con).Should(ExitWithError(125, `"slirp4netns" is not supported: invalid network mode`))
Expect(con.ErrorToString()).To(ContainSubstring(`"slirp4netns" is not supported: invalid network mode`))
}) })
It("podman network disconnect", func() { It("podman network disconnect", func() {
@ -85,7 +85,7 @@ var _ = Describe("Podman network connect and disconnect", func() {
exec = podmanTest.Podman([]string{"exec", "test", "ip", "addr", "show", "eth0"}) exec = podmanTest.Podman([]string{"exec", "test", "ip", "addr", "show", "eth0"})
exec.WaitWithDefaultTimeout() exec.WaitWithDefaultTimeout()
Expect(exec).Should(ExitWithError()) Expect(exec).Should(ExitWithError(1, "ip: can't find device 'eth0'"))
exec3 := podmanTest.Podman([]string{"exec", "test", "cat", "/etc/resolv.conf"}) exec3 := podmanTest.Podman([]string{"exec", "test", "cat", "/etc/resolv.conf"})
exec3.WaitWithDefaultTimeout() exec3.WaitWithDefaultTimeout()
@ -99,9 +99,13 @@ var _ = Describe("Podman network connect and disconnect", func() {
}) })
It("bad network name in connect should result in error", func() { It("bad network name in connect should result in error", func() {
dis := podmanTest.Podman([]string{"network", "connect", "foobar", "test"}) session := podmanTest.Podman([]string{"create", "--name", "testContainer", "--network", "bridge", ALPINE})
session.WaitWithDefaultTimeout()
Expect(session).Should(ExitCleanly())
dis := podmanTest.Podman([]string{"network", "connect", "nonexistent-network", "testContainer"})
dis.WaitWithDefaultTimeout() dis.WaitWithDefaultTimeout()
Expect(dis).Should(ExitWithError()) Expect(dis).Should(ExitWithError(125, "unable to find network with name or ID nonexistent-network: network not found"))
}) })
It("bad container name in network connect should result in error", func() { It("bad container name in network connect should result in error", func() {
@ -113,7 +117,7 @@ var _ = Describe("Podman network connect and disconnect", func() {
dis := podmanTest.Podman([]string{"network", "connect", netName, "foobar"}) dis := podmanTest.Podman([]string{"network", "connect", netName, "foobar"})
dis.WaitWithDefaultTimeout() dis.WaitWithDefaultTimeout()
Expect(dis).Should(ExitWithError()) Expect(dis).Should(ExitWithError(125, `no container with name or ID "foobar" found: no such container`))
}) })
It("network connect with net mode slirp4netns should result in error", func() { It("network connect with net mode slirp4netns should result in error", func() {
@ -130,8 +134,7 @@ var _ = Describe("Podman network connect and disconnect", func() {
con := podmanTest.Podman([]string{"network", "connect", netName, "test"}) con := podmanTest.Podman([]string{"network", "connect", netName, "test"})
con.WaitWithDefaultTimeout() con.WaitWithDefaultTimeout()
Expect(con).Should(ExitWithError()) Expect(con).Should(ExitWithError(125, `"slirp4netns" is not supported: invalid network mode`))
Expect(con.ErrorToString()).To(ContainSubstring(`"slirp4netns" is not supported: invalid network mode`))
}) })
It("podman connect on a container that already is connected to the network should error after init", func() { It("podman connect on a container that already is connected to the network should error after init", func() {
@ -162,7 +165,11 @@ var _ = Describe("Podman network connect and disconnect", func() {
con2 := podmanTest.Podman([]string{"network", "connect", netName, "test"}) con2 := podmanTest.Podman([]string{"network", "connect", netName, "test"})
con2.WaitWithDefaultTimeout() con2.WaitWithDefaultTimeout()
Expect(con2).Should(ExitWithError()) if podmanTest.DatabaseBackend == "boltdb" {
Expect(con2).Should(ExitWithError(125, fmt.Sprintf("container %s is already connected to network %q: network is already connected", cid, netName)))
} else {
Expect(con2).Should(ExitWithError(125, fmt.Sprintf("container %s is already connected to network %s: network is already connected", cid, netName)))
}
}) })
It("podman network connect", func() { It("podman network connect", func() {
@ -359,11 +366,12 @@ var _ = Describe("Podman network connect and disconnect", func() {
exec := podmanTest.Podman([]string{"exec", "test", "ip", "addr", "show", "eth0"}) exec := podmanTest.Podman([]string{"exec", "test", "ip", "addr", "show", "eth0"})
exec.WaitWithDefaultTimeout() exec.WaitWithDefaultTimeout()
// because the network interface order is not guaranteed to be the same we have to check both eth0 and eth1 // because the network interface order is not guaranteed to be the same, we have to check both eth0 and eth1.
// if eth0 did not exists eth1 has to exists // if eth0 did not exist, eth1 has to exist.
var exitMatcher types.GomegaMatcher = ExitWithError() var exitMatcher types.GomegaMatcher = ExitWithError(1, "ip: can't find device 'eth1'")
if exec.ExitCode() > 0 { if exec.ExitCode() > 0 {
exitMatcher = Exit(0) Expect(exec).To(ExitWithError(1, "ip: can't find device 'eth0'"))
exitMatcher = ExitCleanly()
} }
exec = podmanTest.Podman([]string{"exec", "test", "ip", "addr", "show", "eth1"}) exec = podmanTest.Podman([]string{"exec", "test", "ip", "addr", "show", "eth1"})
@ -402,6 +410,6 @@ var _ = Describe("Podman network connect and disconnect", func() {
exec = podmanTest.Podman([]string{"exec", "test", "ip", "addr", "show", "eth0"}) exec = podmanTest.Podman([]string{"exec", "test", "ip", "addr", "show", "eth0"})
exec.WaitWithDefaultTimeout() exec.WaitWithDefaultTimeout()
Expect(exec).Should(ExitWithError()) Expect(exec).Should(ExitWithError(1, "ip: can't find device 'eth0'"))
}) })
}) })

View File

@ -2,6 +2,7 @@ package integration
import ( import (
"encoding/json" "encoding/json"
"fmt"
"net" "net"
"github.com/containers/common/libnetwork/types" "github.com/containers/common/libnetwork/types"
@ -395,7 +396,7 @@ var _ = Describe("Podman network create", func() {
It("podman network create with invalid subnet", func() { It("podman network create with invalid subnet", func() {
nc := podmanTest.Podman([]string{"network", "create", "--subnet", "10.11.12.0/17000", stringid.GenerateRandomID()}) nc := podmanTest.Podman([]string{"network", "create", "--subnet", "10.11.12.0/17000", stringid.GenerateRandomID()})
nc.WaitWithDefaultTimeout() nc.WaitWithDefaultTimeout()
Expect(nc).To(ExitWithError()) Expect(nc).To(ExitWithError(125, "invalid CIDR address: 10.11.12.0/17000"))
}) })
It("podman network create with ipv4 subnet and ipv6 flag", func() { It("podman network create with ipv4 subnet and ipv6 flag", func() {
@ -426,16 +427,25 @@ var _ = Describe("Podman network create", func() {
Expect(nc.OutputToString()).To(ContainSubstring(`.0/24`)) Expect(nc.OutputToString()).To(ContainSubstring(`.0/24`))
}) })
It("podman network create with invalid IP", func() { It("podman network create with invalid IP arguments", func() {
nc := podmanTest.Podman([]string{"network", "create", "--subnet", "10.11.0/17000", stringid.GenerateRandomID()}) nc := podmanTest.Podman([]string{"network", "create", "--subnet", "10.11.12.0/24", "--ip-range", "10.11.12.345-10.11.12.999"})
nc.WaitWithDefaultTimeout() nc.WaitWithDefaultTimeout()
Expect(nc).To(ExitWithError()) Expect(nc).To(ExitWithError(125, `range start ip "10.11.12.345" is not a ip address`))
nc = podmanTest.Podman([]string{"network", "create", "--subnet", "10.11.12.0/24", "--ip-range", "10.11.12.3-10.11.12.999"})
nc.WaitWithDefaultTimeout()
Expect(nc).To(ExitWithError(125, `range end ip "10.11.12.999" is not a ip address`))
nc = podmanTest.Podman([]string{"network", "create", "--gateway", "10.11.12.256"})
nc.WaitWithDefaultTimeout()
Expect(nc).To(ExitWithError(125, `invalid argument "10.11.12.256" for "--gateway" flag: invalid string being converted to IP address: 10.11.12.256`))
}) })
It("podman network create with invalid gateway for subnet", func() { It("podman network create with invalid gateway for subnet", func() {
nc := podmanTest.Podman([]string{"network", "create", "--subnet", "10.11.12.0/24", "--gateway", "192.168.1.1", stringid.GenerateRandomID()}) nc := podmanTest.Podman([]string{"network", "create", "--subnet", "10.11.12.0/24", "--gateway", "192.168.1.1", stringid.GenerateRandomID()})
nc.WaitWithDefaultTimeout() nc.WaitWithDefaultTimeout()
Expect(nc).To(ExitWithError()) Expect(nc).To(ExitWithError(125, "gateway 192.168.1.1 not in subnet 10.11.12.0/24"))
}) })
It("podman network create two networks with same name should fail", func() { It("podman network create two networks with same name should fail", func() {
@ -447,7 +457,7 @@ var _ = Describe("Podman network create", func() {
ncFail := podmanTest.Podman([]string{"network", "create", netName}) ncFail := podmanTest.Podman([]string{"network", "create", netName})
ncFail.WaitWithDefaultTimeout() ncFail.WaitWithDefaultTimeout()
Expect(ncFail).To(ExitWithError()) Expect(ncFail).To(ExitWithError(125, fmt.Sprintf("network name %s already used: network already exists", netName)))
}) })
It("podman network create two networks with same subnet should fail", func() { It("podman network create two networks with same subnet should fail", func() {
@ -461,7 +471,7 @@ var _ = Describe("Podman network create", func() {
ncFail := podmanTest.Podman([]string{"network", "create", "--subnet", "10.11.13.0/24", netName2}) ncFail := podmanTest.Podman([]string{"network", "create", "--subnet", "10.11.13.0/24", netName2})
ncFail.WaitWithDefaultTimeout() ncFail.WaitWithDefaultTimeout()
defer podmanTest.removeNetwork(netName2) defer podmanTest.removeNetwork(netName2)
Expect(ncFail).To(ExitWithError()) Expect(ncFail).To(ExitWithError(125, "subnet 10.11.13.0/24 is already used on the host or by another config"))
}) })
It("podman network create two IPv6 networks with same subnet should fail", func() { It("podman network create two IPv6 networks with same subnet should fail", func() {
@ -475,13 +485,13 @@ var _ = Describe("Podman network create", func() {
ncFail := podmanTest.Podman([]string{"network", "create", "--subnet", "fd00:4:4:4:4::/64", "--ipv6", netName2}) ncFail := podmanTest.Podman([]string{"network", "create", "--subnet", "fd00:4:4:4:4::/64", "--ipv6", netName2})
ncFail.WaitWithDefaultTimeout() ncFail.WaitWithDefaultTimeout()
defer podmanTest.removeNetwork(netName2) defer podmanTest.removeNetwork(netName2)
Expect(ncFail).To(ExitWithError()) Expect(ncFail).To(ExitWithError(125, "subnet fd00:4:4:4::/64 is already used on the host or by another config"))
}) })
It("podman network create with invalid network name", func() { It("podman network create with invalid network name", func() {
nc := podmanTest.Podman([]string{"network", "create", "foo "}) nc := podmanTest.Podman([]string{"network", "create", "2bad!"})
nc.WaitWithDefaultTimeout() nc.WaitWithDefaultTimeout()
Expect(nc).To(ExitWithError()) Expect(nc).To(ExitWithError(125, "network name 2bad! invalid: names must match [a-zA-Z0-9][a-zA-Z0-9_.-]*: invalid argument"))
}) })
It("podman network create with mtu option", func() { It("podman network create with mtu option", func() {
@ -515,7 +525,7 @@ var _ = Describe("Podman network create", func() {
nc := podmanTest.Podman([]string{"network", "create", "--opt", "foo=bar", net}) nc := podmanTest.Podman([]string{"network", "create", "--opt", "foo=bar", net})
nc.WaitWithDefaultTimeout() nc.WaitWithDefaultTimeout()
defer podmanTest.removeNetwork(net) defer podmanTest.removeNetwork(net)
Expect(nc).To(ExitWithError()) Expect(nc).To(ExitWithError(125, "unsupported bridge network option foo"))
}) })
It("podman CNI network create with internal should not have dnsname", func() { It("podman CNI network create with internal should not have dnsname", func() {
@ -559,8 +569,7 @@ var _ = Describe("Podman network create", func() {
for _, name := range []string{"none", "host", "bridge", "private", "slirp4netns", "pasta", "container", "ns", "default"} { for _, name := range []string{"none", "host", "bridge", "private", "slirp4netns", "pasta", "container", "ns", "default"} {
nc := podmanTest.Podman([]string{"network", "create", name}) nc := podmanTest.Podman([]string{"network", "create", name})
nc.WaitWithDefaultTimeout() nc.WaitWithDefaultTimeout()
Expect(nc).To(Exit(125)) Expect(nc).To(ExitWithError(125, fmt.Sprintf("cannot create network with name %q because it conflicts with a valid network mode", name)))
Expect(nc.ErrorToString()).To(ContainSubstring("cannot create network with name %q because it conflicts with a valid network mode", name))
} }
}) })
@ -632,15 +641,13 @@ var _ = Describe("Podman network create", func() {
gw2 := "fd52:2a5a:747e:3acf::10" gw2 := "fd52:2a5a:747e:3acf::10"
nc := podmanTest.Podman([]string{"network", "create", "--subnet", subnet1, "--gateway", gw1, "--gateway", gw2, name}) nc := podmanTest.Podman([]string{"network", "create", "--subnet", subnet1, "--gateway", gw1, "--gateway", gw2, name})
nc.WaitWithDefaultTimeout() nc.WaitWithDefaultTimeout()
Expect(nc).To(Exit(125)) Expect(nc).To(ExitWithError(125, "cannot set more gateways than subnets"))
Expect(nc.ErrorToString()).To(Equal("Error: cannot set more gateways than subnets"))
range1 := "10.10.3.0/26" range1 := "10.10.3.0/26"
range2 := "10.10.3.0/28" range2 := "10.10.3.0/28"
nc = podmanTest.Podman([]string{"network", "create", "--subnet", subnet1, "--ip-range", range1, "--ip-range", range2, name}) nc = podmanTest.Podman([]string{"network", "create", "--subnet", subnet1, "--ip-range", range1, "--ip-range", range2, name})
nc.WaitWithDefaultTimeout() nc.WaitWithDefaultTimeout()
Expect(nc).To(Exit(125)) Expect(nc).To(ExitWithError(125, "cannot set more ranges than subnets"))
Expect(nc.ErrorToString()).To(Equal("Error: cannot set more ranges than subnets"))
}) })
It("podman network create same name - fail", func() { It("podman network create same name - fail", func() {
@ -654,7 +661,7 @@ var _ = Describe("Podman network create", func() {
nc = podmanTest.Podman(networkCreateCommand) nc = podmanTest.Podman(networkCreateCommand)
nc.WaitWithDefaultTimeout() nc.WaitWithDefaultTimeout()
Expect(nc).To(Exit(125)) Expect(nc).To(ExitWithError(125, fmt.Sprintf("network name %s already used: network already exists", name)))
}) })
It("podman network create same name - succeed with ignore", func() { It("podman network create same name - succeed with ignore", func() {

View File

@ -118,8 +118,7 @@ var _ = Describe("Podman network", func() {
session = podmanTest.Podman([]string{"network", "ls", "--filter", "namr=ab"}) session = podmanTest.Podman([]string{"network", "ls", "--filter", "namr=ab"})
session.WaitWithDefaultTimeout() session.WaitWithDefaultTimeout()
Expect(session).To(ExitWithError()) Expect(session).To(ExitWithError(125, `invalid filter "namr"`))
Expect(session.ErrorToString()).To(ContainSubstring(`invalid filter "namr"`))
}) })
It("podman network list --filter failure", func() { It("podman network list --filter failure", func() {
@ -148,8 +147,7 @@ var _ = Describe("Podman network", func() {
session = podmanTest.Podman([]string{"network", "ls", "--filter", "dangling=foo"}) session = podmanTest.Podman([]string{"network", "ls", "--filter", "dangling=foo"})
session.WaitWithDefaultTimeout() session.WaitWithDefaultTimeout()
Expect(session).To(ExitWithError()) Expect(session).To(ExitWithError(125, `invalid dangling filter value "foo"`))
Expect(session.ErrorToString()).To(ContainSubstring(`invalid dangling filter value "foo"`))
}) })
It("podman network ID test", func() { It("podman network ID test", func() {
@ -192,8 +190,13 @@ var _ = Describe("Podman network", func() {
session = podmanTest.Podman([]string{"network", "inspect", netID[1:]}) session = podmanTest.Podman([]string{"network", "inspect", netID[1:]})
session.WaitWithDefaultTimeout() session.WaitWithDefaultTimeout()
Expect(session).Should(ExitWithError()) expectMessage := fmt.Sprintf("network %s: ", netID[1:])
Expect(session.ErrorToString()).To(ContainSubstring("network not found")) // FIXME-someday: figure out why this part does not show up in remote
if !IsRemote() {
expectMessage += fmt.Sprintf("unable to find network with name or ID %s: ", netID[1:])
}
expectMessage += "network not found"
Expect(session).Should(ExitWithError(125, expectMessage))
session = podmanTest.Podman([]string{"network", "rm", netID}) session = podmanTest.Podman([]string{"network", "rm", netID})
session.WaitWithDefaultTimeout() session.WaitWithDefaultTimeout()
@ -204,7 +207,7 @@ var _ = Describe("Podman network", func() {
It(fmt.Sprintf("podman network %s no args", rm), func() { It(fmt.Sprintf("podman network %s no args", rm), func() {
session := podmanTest.Podman([]string{"network", rm}) session := podmanTest.Podman([]string{"network", rm})
session.WaitWithDefaultTimeout() session.WaitWithDefaultTimeout()
Expect(session).Should(ExitWithError()) Expect(session).Should(ExitWithError(125, "requires at least 1 arg(s), only received 0"))
}) })
@ -234,7 +237,7 @@ var _ = Describe("Podman network", func() {
It("podman network inspect no args", func() { It("podman network inspect no args", func() {
session := podmanTest.Podman([]string{"network", "inspect"}) session := podmanTest.Podman([]string{"network", "inspect"})
session.WaitWithDefaultTimeout() session.WaitWithDefaultTimeout()
Expect(session).Should(ExitWithError()) Expect(session).Should(ExitWithError(125, "requires at least 1 arg(s), only received 0"))
}) })
It("podman network inspect", func() { It("podman network inspect", func() {
@ -395,7 +398,7 @@ var _ = Describe("Podman network", func() {
It("podman network remove bogus", func() { It("podman network remove bogus", func() {
session := podmanTest.Podman([]string{"network", "rm", "bogus"}) session := podmanTest.Podman([]string{"network", "rm", "bogus"})
session.WaitWithDefaultTimeout() session.WaitWithDefaultTimeout()
Expect(session).Should(Exit(1)) Expect(session).Should(ExitWithError(1, "unable to find network with name or ID bogus: network not found"))
}) })
It("podman network remove --force with pod", func() { It("podman network remove --force with pod", func() {
@ -416,7 +419,7 @@ var _ = Describe("Podman network", func() {
session = podmanTest.Podman([]string{"network", "rm", netName}) session = podmanTest.Podman([]string{"network", "rm", netName})
session.WaitWithDefaultTimeout() session.WaitWithDefaultTimeout()
Expect(session).Should(Exit(2)) Expect(session).Should(ExitWithError(2, fmt.Sprintf(`"%s" has associated containers with it. Use -f to forcibly delete containers and pods: network is being used`, netName)))
session = podmanTest.Podman([]string{"network", "rm", "-t", "0", "--force", netName}) session = podmanTest.Podman([]string{"network", "rm", "-t", "0", "--force", netName})
session.WaitWithDefaultTimeout() session.WaitWithDefaultTimeout()
@ -426,6 +429,7 @@ var _ = Describe("Podman network", func() {
session = podmanTest.Podman([]string{"pod", "exists", podID}) session = podmanTest.Podman([]string{"pod", "exists", podID})
session.WaitWithDefaultTimeout() session.WaitWithDefaultTimeout()
Expect(session).Should(Exit(1)) Expect(session).Should(Exit(1))
Expect(session.ErrorToString()).To(Equal(""))
// check if net is deleted // check if net is deleted
session = podmanTest.Podman([]string{"network", "ls"}) session = podmanTest.Podman([]string{"network", "ls"})
@ -614,6 +618,7 @@ var _ = Describe("Podman network", func() {
session = podmanTest.Podman([]string{"network", "exists", stringid.GenerateRandomID()}) session = podmanTest.Podman([]string{"network", "exists", stringid.GenerateRandomID()})
session.WaitWithDefaultTimeout() session.WaitWithDefaultTimeout()
Expect(session).Should(Exit(1)) Expect(session).Should(Exit(1))
Expect(session.ErrorToString()).To(Equal(""))
}) })
It("podman network create macvlan with network info and options", func() { It("podman network create macvlan with network info and options", func() {