mirror of
https://github.com/containers/podman.git
synced 2025-12-03 19:59:39 +08:00
Just like the other inspect commands `podman pod inspect p1 p2` should return the json for both. To correctly implement this we follow the container inspect logic, this allows use to reuse the global inspect command. Note: To not break the existing single pod output format for podman pod inspect I added a pod-legacy inspect type. This is only used to make sure we will print the pod as single json and not an array like for the other commands. We cannot use the pod type since podman inspect --type pod did return an array and we should not break that as well. Fixes #15674 Signed-off-by: Paul Holzinger <pholzing@redhat.com>
139 lines
4.3 KiB
Go
139 lines
4.3 KiB
Go
package integration
|
|
|
|
import (
|
|
"encoding/json"
|
|
"os"
|
|
|
|
"github.com/containers/podman/v4/libpod/define"
|
|
. "github.com/containers/podman/v4/test/utils"
|
|
. "github.com/onsi/ginkgo"
|
|
. "github.com/onsi/gomega"
|
|
. "github.com/onsi/gomega/gexec"
|
|
)
|
|
|
|
var _ = Describe("Podman pod inspect", func() {
|
|
var (
|
|
tempdir string
|
|
err error
|
|
podmanTest *PodmanTestIntegration
|
|
)
|
|
|
|
BeforeEach(func() {
|
|
tempdir, err = CreateTempDirInTempDir()
|
|
if err != nil {
|
|
os.Exit(1)
|
|
}
|
|
podmanTest = PodmanTestCreate(tempdir)
|
|
podmanTest.Setup()
|
|
})
|
|
|
|
AfterEach(func() {
|
|
podmanTest.Cleanup()
|
|
f := CurrentGinkgoTestDescription()
|
|
processTestResult(f)
|
|
|
|
})
|
|
|
|
It("podman inspect bogus pod", func() {
|
|
session := podmanTest.Podman([]string{"pod", "inspect", "foobar"})
|
|
session.WaitWithDefaultTimeout()
|
|
Expect(session).Should(ExitWithError())
|
|
})
|
|
|
|
It("podman inspect a pod", func() {
|
|
_, ec, podid := podmanTest.CreatePod(nil)
|
|
Expect(ec).To(Equal(0))
|
|
|
|
session := podmanTest.RunTopContainerInPod("", podid)
|
|
session.WaitWithDefaultTimeout()
|
|
Expect(session).Should(Exit(0))
|
|
|
|
session = podmanTest.RunTopContainerInPod("", podid)
|
|
session.WaitWithDefaultTimeout()
|
|
Expect(session).Should(Exit(0))
|
|
|
|
inspect := podmanTest.Podman([]string{"pod", "inspect", podid})
|
|
inspect.WaitWithDefaultTimeout()
|
|
Expect(inspect).Should(Exit(0))
|
|
Expect(inspect.OutputToString()).To(BeValidJSON())
|
|
podData := inspect.InspectPodToJSON()
|
|
Expect(podData).To(HaveField("ID", podid))
|
|
})
|
|
|
|
It("podman pod inspect (CreateCommand)", func() {
|
|
podName := "myTestPod"
|
|
createCommand := []string{"pod", "create", "--name", podName, "--hostname", "rudolph", "--share", "net"}
|
|
|
|
// Create the pod.
|
|
session := podmanTest.Podman(createCommand)
|
|
session.WaitWithDefaultTimeout()
|
|
Expect(session).Should(Exit(0))
|
|
|
|
// Inspect the pod and make sure that the create command is
|
|
// exactly how we created the pod.
|
|
inspect := podmanTest.Podman([]string{"pod", "inspect", podName})
|
|
inspect.WaitWithDefaultTimeout()
|
|
Expect(inspect).Should(Exit(0))
|
|
Expect(inspect.OutputToString()).To(BeValidJSON())
|
|
podData := inspect.InspectPodToJSON()
|
|
// Let's get the last len(createCommand) items in the command.
|
|
inspectCreateCommand := podData.CreateCommand
|
|
index := len(inspectCreateCommand) - len(createCommand)
|
|
Expect(inspectCreateCommand[index:]).To(Equal(createCommand))
|
|
})
|
|
|
|
It("podman pod inspect outputs port bindings", func() {
|
|
podName := "testPod"
|
|
create := podmanTest.Podman([]string{"pod", "create", "--name", podName, "-p", "8383:80"})
|
|
create.WaitWithDefaultTimeout()
|
|
Expect(create).Should(Exit(0))
|
|
|
|
inspectOut := podmanTest.Podman([]string{"pod", "inspect", podName})
|
|
inspectOut.WaitWithDefaultTimeout()
|
|
Expect(inspectOut).Should(Exit(0))
|
|
|
|
inspectJSON := new(define.InspectPodData)
|
|
err := json.Unmarshal(inspectOut.Out.Contents(), inspectJSON)
|
|
Expect(err).To(BeNil())
|
|
Expect(inspectJSON.InfraConfig).To(Not(BeNil()))
|
|
Expect(inspectJSON.InfraConfig.PortBindings["80/tcp"]).To(HaveLen(1))
|
|
Expect(inspectJSON.InfraConfig.PortBindings["80/tcp"][0]).To(HaveField("HostPort", "8383"))
|
|
})
|
|
|
|
It("podman pod inspect outputs show correct MAC", func() {
|
|
SkipIfRootless("--mac-address is not supported in rootless mode without network")
|
|
podName := "testPod"
|
|
macAddr := "42:43:44:00:00:01"
|
|
create := podmanTest.Podman([]string{"pod", "create", "--name", podName, "--mac-address", macAddr})
|
|
create.WaitWithDefaultTimeout()
|
|
Expect(create).Should(Exit(0))
|
|
|
|
create = podmanTest.Podman([]string{"run", "-d", "--pod", podName, ALPINE, "top"})
|
|
create.WaitWithDefaultTimeout()
|
|
Expect(create).Should(Exit(0))
|
|
|
|
inspectOut := podmanTest.Podman([]string{"pod", "inspect", podName})
|
|
inspectOut.WaitWithDefaultTimeout()
|
|
Expect(inspectOut).Should(Exit(0))
|
|
|
|
Expect(inspectOut.OutputToString()).To(ContainSubstring(macAddr))
|
|
})
|
|
|
|
It("podman inspect two pods", func() {
|
|
_, ec, podid1 := podmanTest.CreatePod(nil)
|
|
Expect(ec).To(Equal(0))
|
|
|
|
_, ec, podid2 := podmanTest.CreatePod(nil)
|
|
Expect(ec).To(Equal(0))
|
|
|
|
inspect := podmanTest.Podman([]string{"pod", "inspect", podid1, podid2})
|
|
inspect.WaitWithDefaultTimeout()
|
|
Expect(inspect).Should(Exit(0))
|
|
Expect(inspect.OutputToString()).To(BeValidJSON())
|
|
podData := inspect.InspectPodArrToJSON()
|
|
Expect(podData).To(HaveLen(2))
|
|
Expect(podData[0]).To(HaveField("ID", podid1))
|
|
Expect(podData[1]).To(HaveField("ID", podid2))
|
|
})
|
|
})
|