Added pod start and stop

As well as added tests, man pages, and completions.
Also reformatted and refactored a couple of other small things in the other pod commands.

Signed-off-by: haircommander <pehunt@redhat.com>
This commit is contained in:
haircommander
2018-07-19 14:58:48 -04:00
parent ba1871dac0
commit 17f257140e
13 changed files with 663 additions and 36 deletions

View File

@ -20,6 +20,8 @@ var (
podCreateCommand,
podPsCommand,
podRmCommand,
podStartCommand,
podStopCommand,
},
}
)

View File

@ -2,24 +2,24 @@ package main
import (
"fmt"
"os"
"github.com/pkg/errors"
"github.com/projectatomic/libpod/cmd/podman/libpodruntime"
"github.com/projectatomic/libpod/libpod"
"github.com/sirupsen/logrus"
"github.com/urfave/cli"
)
var (
podRmFlags = []cli.Flag{
cli.BoolFlag{
Name: "force, f",
Usage: "Force removal of a running pod by first stopping all containers, then removing all containers in the pod. The default is false",
},
cli.BoolFlag{
Name: "all, a",
Usage: "Remove all pods",
},
cli.BoolFlag{
Name: "force, f",
Usage: "Force removal of a running pod by first stopping all containers, then removing all containers in the pod. The default is false",
},
LatestFlag,
}
podRmDescription = "Remove one or more pods"
@ -38,15 +38,9 @@ var (
// saveCmd saves the image to either docker-archive or oci
func podRmCmd(c *cli.Context) error {
ctx := getContext()
if err := validateFlags(c, rmFlags); err != nil {
if err := checkMutuallyExclusiveFlags(c); err != nil {
return err
}
if c.Bool("latest") && c.Bool("all") {
return errors.Errorf("--all and --latest cannot be used together")
}
runtime, err := libpodruntime.GetRuntime(c)
if err != nil {
return errors.Wrapf(err, "could not get runtime")
@ -54,45 +48,43 @@ func podRmCmd(c *cli.Context) error {
defer runtime.Shutdown(false)
args := c.Args()
if len(args) == 0 && !c.Bool("all") && !c.Bool("latest") {
return errors.Errorf("specify one or more pods to remove")
}
ctx := getContext()
var delPods []*libpod.Pod
var lastError error
if c.IsSet("all") {
if c.Bool("all") {
delPods, err = runtime.GetAllPods()
if err != nil {
return errors.Wrapf(err, "unable to get pod list")
}
} else if c.IsSet("latest") {
}
if c.Bool("latest") {
delPod, err := runtime.GetLatestPod()
if err != nil {
return errors.Wrapf(err, "unable to get latest pod")
}
delPods = append(delPods, delPod)
} else {
for _, i := range args {
pod, err := runtime.LookupPod(i)
if err != nil {
fmt.Fprintln(os.Stderr, err)
if lastError != nil {
fmt.Fprintln(os.Stderr, lastError)
}
lastError = errors.Wrapf(err, "unable to find pods %s", i)
continue
}
delPods = append(delPods, pod)
}
}
force := c.IsSet("force")
for _, i := range args {
pod, err := runtime.LookupPod(i)
if err != nil {
logrus.Errorf("%q", lastError)
if lastError != nil {
logrus.Errorf("%q", lastError)
}
lastError = errors.Wrapf(err, "unable to find pods %s", i)
continue
}
delPods = append(delPods, pod)
}
force := c.Bool("force")
for _, pod := range delPods {
err = runtime.RemovePod(ctx, pod, force, force)
if err != nil {
if lastError != nil {
fmt.Fprintln(os.Stderr, lastError)
logrus.Errorf("%q", lastError)
}
lastError = errors.Wrapf(err, "failed to delete pod %v", pod.ID())
} else {

100
cmd/podman/pod_start.go Normal file
View File

@ -0,0 +1,100 @@
package main
import (
"fmt"
"github.com/pkg/errors"
"github.com/projectatomic/libpod/cmd/podman/libpodruntime"
"github.com/projectatomic/libpod/libpod"
"github.com/sirupsen/logrus"
"github.com/urfave/cli"
)
var (
podStartFlags = []cli.Flag{
cli.BoolFlag{
Name: "all, a",
Usage: "start all running pods",
},
LatestFlag,
}
podStartDescription = `
podman pod start
Starts one or more pods. The pod name or ID can be used.
`
podStartCommand = cli.Command{
Name: "start",
Usage: "Start one or more pods",
Description: podStartDescription,
Flags: podStartFlags,
Action: podStartCmd,
ArgsUsage: "POD-NAME [POD-NAME ...]",
UseShortOptionHandling: true,
}
)
func podStartCmd(c *cli.Context) error {
if err := checkMutuallyExclusiveFlags(c); err != nil {
return err
}
runtime, err := libpodruntime.GetRuntime(c)
if err != nil {
return errors.Wrapf(err, "error creating libpod runtime")
}
defer runtime.Shutdown(false)
args := c.Args()
var pods []*libpod.Pod
var lastError error
if c.Bool("all") {
pods, err = runtime.Pods()
if err != nil {
return errors.Wrapf(err, "unable to get running pods")
}
}
if c.Bool("latest") {
pod, err := runtime.GetLatestPod()
if err != nil {
return errors.Wrapf(err, "unable to get latest pod")
}
pods = append(pods, pod)
}
for _, i := range args {
pod, err := runtime.LookupPod(i)
if err != nil {
if lastError != nil {
logrus.Errorf("%q", lastError)
}
lastError = errors.Wrapf(err, "unable to find pod %s", i)
continue
}
pods = append(pods, pod)
}
ctx := getContext()
for _, pod := range pods {
ctr_errs, err := pod.Start(ctx)
if err != nil {
if lastError != nil {
logrus.Errorf("%q", lastError)
}
lastError = errors.Wrapf(err, "unable to start pod %q", pod.ID())
continue
} else if ctr_errs != nil {
for ctr, err := range ctr_errs {
if lastError != nil {
logrus.Errorf("%q", lastError)
}
lastError = errors.Wrapf(err, "unable to start container %q on pod %q", ctr, pod.ID())
}
continue
}
fmt.Println(pod.ID())
}
return lastError
}

100
cmd/podman/pod_stop.go Normal file
View File

@ -0,0 +1,100 @@
package main
import (
"fmt"
"github.com/pkg/errors"
"github.com/projectatomic/libpod/cmd/podman/libpodruntime"
"github.com/projectatomic/libpod/libpod"
"github.com/sirupsen/logrus"
"github.com/urfave/cli"
)
var (
podStopFlags = []cli.Flag{
cli.BoolFlag{
Name: "all, a",
Usage: "stop all running pods",
},
LatestFlag,
}
podStopDescription = `
podman pod stop
Stops one or more running pods. The pod name or ID can be used.
`
podStopCommand = cli.Command{
Name: "stop",
Usage: "Stop one or more pods",
Description: podStopDescription,
Flags: podStopFlags,
Action: podStopCmd,
ArgsUsage: "POD-NAME [POD-NAME ...]",
}
)
func podStopCmd(c *cli.Context) error {
if err := checkMutuallyExclusiveFlags(c); err != nil {
return err
}
runtime, err := libpodruntime.GetRuntime(c)
if err != nil {
return errors.Wrapf(err, "could not get runtime")
}
defer runtime.Shutdown(false)
args := c.Args()
var pods []*libpod.Pod
var lastError error
if c.Bool("all") {
pods, err = runtime.Pods()
if err != nil {
return errors.Wrapf(err, "unable to get running pods")
}
}
if c.Bool("latest") {
pod, err := runtime.GetLatestPod()
if err != nil {
return errors.Wrapf(err, "unable to get latest pod")
}
pods = append(pods, pod)
}
for _, i := range args {
pod, err := runtime.LookupPod(i)
if err != nil {
if lastError != nil {
logrus.Errorf("%q", lastError)
}
lastError = errors.Wrapf(err, "unable to find pod %s", i)
continue
}
pods = append(pods, pod)
}
for _, pod := range pods {
// set cleanup to true to clean mounts and namespaces
ctr_errs, err := pod.Stop(true)
if err != nil {
if lastError != nil {
logrus.Errorf("%q", lastError)
}
lastError = errors.Wrapf(err, "unable to stop pod %q", pod.ID())
continue
} else if ctr_errs != nil {
for ctr, err := range ctr_errs {
if lastError != nil {
logrus.Errorf("%q", lastError)
}
lastError = errors.Wrapf(err, "unable to stop container %q on pod %q", ctr, pod.ID())
}
continue
}
fmt.Println(pod.ID())
}
return lastError
}

View File

@ -11,6 +11,7 @@ import (
"github.com/pkg/errors"
"github.com/projectatomic/libpod/libpod"
"github.com/sirupsen/logrus"
"github.com/urfave/cli"
"golang.org/x/crypto/ssh/terminal"
"k8s.io/client-go/tools/remotecommand"
)
@ -156,3 +157,20 @@ func (f *RawTtyFormatter) Format(entry *logrus.Entry) ([]byte, error) {
return bytes, err
}
func checkMutuallyExclusiveFlags(c *cli.Context) error {
argLen := len(c.Args())
if (c.Bool("all") || c.Bool("latest")) && argLen > 0 {
return errors.Errorf("no arguments are needed with --all or --latest")
}
if c.Bool("all") && c.Bool("latest") {
return errors.Errorf("--all and --latest cannot be used together")
}
if argLen < 1 && !c.Bool("all") && !c.Bool("latest") {
return errors.Errorf("you must provide at least one pod name or id")
}
if err := validateFlags(c, startFlags); err != nil {
return err
}
return nil
}

View File

@ -32,7 +32,9 @@
| [podman-pod(1)](/docs/podman-pod.1.md) | Simple management tool for groups of containers, called pods ||
| [podman-pod-create(1)](/docs/podman-pod-create.1.md) | Create a new pod ||
| [podman-pod-ps(1)](/docs/podman-pod-ps.1.md) | List the pods on the system ||
| [podman-pod-rm(1)](/docs/podman-pod-rm.1.md) | Remove on or more pods ||
| [podman-pod-rm(1)](/docs/podman-pod-rm.1.md) | Remove one or more pods ||
| [podman-pod-start(1)](/docs/podman-pod-start.1.md) | Start one or more pods ||
| [podman-pod-stop(1)](/docs/podman-pod-stop.1.md) | Stop one or more pods ||
| [podman-port(1)](/docs/podman-port.1.md) | List port mappings for running containers |[![...](/docs/play.png)]()|
| [podman-ps(1)](/docs/podman-ps.1.md) | Prints out information about containers |[![...](/docs/play.png)](https://asciinema.org/a/bbT41kac6CwZ5giESmZLIaTLR)|
| [podman-pull(1)](/docs/podman-pull.1.md) | Pull an image from a registry |[![...](/docs/play.png)](https://asciinema.org/a/lr4zfoynHJOUNu1KaXa1dwG2X)|

View File

@ -2144,6 +2144,49 @@ _podman_pod_rm() {
esac
}
_podman_pod_start() {
local options_with_args="
"
local boolean_options="
all
a
latest
l
"
_complete_ "$options_with_args" "$boolean_options"
case "$cur" in
-*)
COMPREPLY=($(compgen -W "$boolean_options $options_with_args" -- "$cur"))
;;
*)
__podman_complete_pod_names
;;
esac
}
_podman_pod_stop() {
local options_with_args="
"
local boolean_options="
all
a
cleanup
latest
l
"
_complete_ "$options_with_args" "$boolean_options"
case "$cur" in
-*)
COMPREPLY=($(compgen -W "$boolean_options $options_with_args" -- "$cur"))
;;
*)
__podman_complete_pod_names
;;
esac
}
_podman_pod() {
local boolean_options="
--help
@ -2153,6 +2196,8 @@ _podman_pod() {
create
ps
rm
start
stop
"
local aliases="
list

View File

@ -17,7 +17,7 @@ Remove all pods. Can be used in conjunction with \-f as well.
**--latest, -l**
Instead of providing the pod name or ID, use the last created pod.
Instead of providing the pod name or ID, remove the last created pod.
**--force, f**

View File

@ -0,0 +1,38 @@
% podman-pod-start "1"
## NAME
podman\-pod\-start - Start one or more pods
## SYNOPSIS
**podman pod start** [*options*] *pod* ...
## DESCRIPTION
Start containers in one or more pods. You may use pod IDs or names as input. The pod must have a container attached
to be started.
## OPTIONS
**--all, -a**
Starts all pods
**--latest, -l**
Instead of providing the pod name or ID, start the last created pod.
## EXAMPLE
podman pod start mywebserverpod
podman pod start 860a4b23 5421ab4
podman pod start --latest
podman pod start --all
## SEE ALSO
podman-pod(1), podman-pod-stop(1), podman-start(1)
## HISTORY
July 2018, Adapted from podman start man page by Peter Hunt <pehunt@redhat.com>

47
docs/podman-pod-stop.1.md Normal file
View File

@ -0,0 +1,47 @@
% podman-pod-stop "1"
## NAME
podman\-pod\-stop - Stop one or more pods
## SYNOPSIS
**podman pod stop** [*options*] *pod* ...
## DESCRIPTION
Stop containers in one or more pods. You may use pod IDs or names as input.
## OPTIONS
**--all, -a**
Stops all pods
**--latest, -l**
Instead of providing the pod name or ID, stop the last created pod.
## EXAMPLE
podman pod stop mywebserverpod
cc8f0bea67b1a1a11aec1ecd38102a1be4b145577f21fc843c7c83b77fc28907
podman pod stop 490eb 3557fb
490eb241aaf704d4dd2629904410fe4aa31965d9310a735f8755267f4ded1de5
3557fbea6ad61569de0506fe037479bd9896603c31d3069a6677f23833916fab
3557fbea6ad61569de0506fe037479bd9896603c31d3069a6677f23833916fab
podman pod stop --latest
3557fbea6ad61569de0506fe037479bd9896603c31d3069a6677f23833916fab
podman pod stop --all
19456b4cd557eaf9629825113a552681a6013f8c8cad258e36ab825ef536e818
3557fbea6ad61569de0506fe037479bd9896603c31d3069a6677f23833916fab
490eb241aaf704d4dd2629904410fe4aa31965d9310a735f8755267f4ded1de5
70c358daecf71ef9be8f62404f926080ca0133277ef7ce4f6aa2d5af6bb2d3e9
cc8f0bea67b1a1a11aec1ecd38102a1be4b145577f21fc843c7c83b77fc28907
## SEE ALSO
podman-pod(1), podman-pod-start(1), podman-stop(1)
## HISTORY
July 2018, Originally compiled by Peter Hunt <pehunt@redhat.com>

View File

@ -16,6 +16,8 @@ podman pod is a set of subcommands that manage pods, or groups of containers.
| [podman-pod-create(1)](podman-pod-create.1.md) | Create a new pod. |
| [podman-pod-ps(1)](podman-pod-ps.1.md) | Prints out information about pods. |
| [podman-pod-rm(1)](podman-pod-rm.1.md) | Remove one or more pods. |
| [podman-pod-start(1)](podman-pod-start.1.md) | Start one or more pods. |
| [podman-pod-stop(1)](podman-pod-stop.1.md) | Stop one or more pods. |
## HISTORY
July 2018, Originally compiled by Peter Hunt <pehunt@redhat.com>

140
test/e2e/pod_start_test.go Normal file
View File

@ -0,0 +1,140 @@
package integration
import (
"os"
. "github.com/onsi/ginkgo"
. "github.com/onsi/gomega"
)
var _ = Describe("Podman pod start", func() {
var (
tempdir string
err error
podmanTest PodmanTest
)
BeforeEach(func() {
tempdir, err = CreateTempDirInTempDir()
if err != nil {
os.Exit(1)
}
podmanTest = PodmanCreate(tempdir)
podmanTest.RestoreAllArtifacts()
})
AfterEach(func() {
podmanTest.CleanupPod()
})
It("podman pod start bogus pod", func() {
session := podmanTest.Podman([]string{"pod", "start", "123"})
session.WaitWithDefaultTimeout()
Expect(session.ExitCode()).To(Equal(125))
})
It("podman pod start single empty pod", func() {
session := podmanTest.Podman([]string{"pod", "create"})
session.WaitWithDefaultTimeout()
Expect(session.ExitCode()).To(Equal(0))
cid := session.OutputToString()
session = podmanTest.Podman([]string{"pod", "start", cid})
session.WaitWithDefaultTimeout()
Expect(session.ExitCode()).To(Equal(125))
})
It("podman pod start single pod by name", func() {
session := podmanTest.Podman([]string{"pod", "create", "--name", "foobar99"})
session.WaitWithDefaultTimeout()
Expect(session.ExitCode()).To(Equal(0))
session = podmanTest.Podman([]string{"create", "--pod", "foobar99", ALPINE, "ls"})
session.WaitWithDefaultTimeout()
Expect(session.ExitCode()).To(Equal(0))
session = podmanTest.Podman([]string{"pod", "start", "foobar99"})
session.WaitWithDefaultTimeout()
Expect(session.ExitCode()).To(Equal(0))
})
It("podman pod start multiple pods", func() {
session := podmanTest.Podman([]string{"pod", "create", "--name", "foobar99"})
session.WaitWithDefaultTimeout()
cid1 := session.OutputToString()
session = podmanTest.Podman([]string{"create", "--pod", "foobar99", ALPINE, "top"})
session.WaitWithDefaultTimeout()
Expect(session.ExitCode()).To(Equal(0))
session2 := podmanTest.Podman([]string{"pod", "create", "--name", "foobar100"})
session2.WaitWithDefaultTimeout()
cid2 := session2.OutputToString()
session = podmanTest.Podman([]string{"create", "--pod", "foobar100", ALPINE, "top"})
session.WaitWithDefaultTimeout()
Expect(session.ExitCode()).To(Equal(0))
session = podmanTest.Podman([]string{"pod", "start", cid1, cid2})
session.WaitWithDefaultTimeout()
Expect(session.ExitCode()).To(Equal(0))
Expect(podmanTest.NumberOfContainersRunning()).To(Equal(2))
})
It("podman pod start all pods", func() {
session := podmanTest.Podman([]string{"pod", "create", "--name", "foobar99"})
session.WaitWithDefaultTimeout()
session = podmanTest.Podman([]string{"create", "--pod", "foobar99", ALPINE, "top"})
session.WaitWithDefaultTimeout()
Expect(session.ExitCode()).To(Equal(0))
session2 := podmanTest.Podman([]string{"pod", "create", "--name", "foobar100"})
session2.WaitWithDefaultTimeout()
session = podmanTest.Podman([]string{"create", "--pod", "foobar100", ALPINE, "top"})
session.WaitWithDefaultTimeout()
Expect(session.ExitCode()).To(Equal(0))
session = podmanTest.Podman([]string{"pod", "start", "--all"})
session.WaitWithDefaultTimeout()
Expect(session.ExitCode()).To(Equal(0))
Expect(podmanTest.NumberOfContainersRunning()).To(Equal(2))
})
It("podman pod start latest pod", func() {
session := podmanTest.Podman([]string{"pod", "create", "--name", "foobar99"})
session.WaitWithDefaultTimeout()
session = podmanTest.Podman([]string{"create", "--pod", "foobar99", ALPINE, "top"})
session.WaitWithDefaultTimeout()
Expect(session.ExitCode()).To(Equal(0))
session2 := podmanTest.Podman([]string{"pod", "create", "--name", "foobar100"})
session2.WaitWithDefaultTimeout()
session = podmanTest.Podman([]string{"create", "--pod", "foobar100", ALPINE, "top"})
session.WaitWithDefaultTimeout()
Expect(session.ExitCode()).To(Equal(0))
session = podmanTest.Podman([]string{"pod", "start", "--latest"})
session.WaitWithDefaultTimeout()
Expect(session.ExitCode()).To(Equal(0))
Expect(podmanTest.NumberOfContainersRunning()).To(Equal(1))
})
It("podman pod start multiple pods with bogus", func() {
session := podmanTest.Podman([]string{"pod", "create", "--name", "foobar99"})
session.WaitWithDefaultTimeout()
cid1 := session.OutputToString()
session = podmanTest.Podman([]string{"create", "--pod", "foobar99", ALPINE, "top"})
session.WaitWithDefaultTimeout()
Expect(session.ExitCode()).To(Equal(0))
session = podmanTest.Podman([]string{"pod", "start", cid1, "doesnotexist"})
session.WaitWithDefaultTimeout()
Expect(session.ExitCode()).To(Equal(125))
Expect(podmanTest.NumberOfContainersRunning()).To(Equal(1))
})
})

141
test/e2e/pod_stop_test.go Normal file
View File

@ -0,0 +1,141 @@
package integration
import (
"os"
. "github.com/onsi/ginkgo"
. "github.com/onsi/gomega"
)
var _ = Describe("Podman pod stop", func() {
var (
tempdir string
err error
podmanTest PodmanTest
)
BeforeEach(func() {
tempdir, err = CreateTempDirInTempDir()
if err != nil {
os.Exit(1)
}
podmanTest = PodmanCreate(tempdir)
podmanTest.RestoreAllArtifacts()
})
AfterEach(func() {
podmanTest.CleanupPod()
})
It("podman pod stop bogus pod", func() {
session := podmanTest.Podman([]string{"pod", "stop", "123"})
session.WaitWithDefaultTimeout()
Expect(session.ExitCode()).To(Equal(125))
})
It("podman pod stop single empty pod", func() {
session := podmanTest.Podman([]string{"pod", "create"})
session.WaitWithDefaultTimeout()
Expect(session.ExitCode()).To(Equal(0))
cid := session.OutputToString()
session = podmanTest.Podman([]string{"pod", "stop", cid})
session.WaitWithDefaultTimeout()
Expect(session.ExitCode()).To(Equal(0))
})
It("podman pod stop single pod by name", func() {
session := podmanTest.Podman([]string{"pod", "create", "--name", "foobar99"})
session.WaitWithDefaultTimeout()
Expect(session.ExitCode()).To(Equal(0))
session = podmanTest.RunTopContainerInPod("", "foobar99")
session.WaitWithDefaultTimeout()
Expect(session.ExitCode()).To(Equal(0))
session = podmanTest.Podman([]string{"pod", "stop", "foobar99"})
session.WaitWithDefaultTimeout()
Expect(session.ExitCode()).To(Equal(0))
Expect(podmanTest.NumberOfContainersRunning()).To(Equal(0))
})
It("podman pod stop multiple pods", func() {
session := podmanTest.Podman([]string{"pod", "create", "--name", "foobar99"})
session.WaitWithDefaultTimeout()
cid1 := session.OutputToString()
session = podmanTest.RunTopContainerInPod("", "foobar99")
session.WaitWithDefaultTimeout()
Expect(session.ExitCode()).To(Equal(0))
session2 := podmanTest.Podman([]string{"pod", "create", "--name", "foobar100"})
session2.WaitWithDefaultTimeout()
cid2 := session2.OutputToString()
session = podmanTest.RunTopContainerInPod("", "foobar100")
session.WaitWithDefaultTimeout()
Expect(session.ExitCode()).To(Equal(0))
session = podmanTest.Podman([]string{"pod", "stop", cid1, cid2})
session.WaitWithDefaultTimeout()
Expect(session.ExitCode()).To(Equal(0))
Expect(podmanTest.NumberOfContainersRunning()).To(Equal(0))
})
It("podman pod stop all pods", func() {
session := podmanTest.Podman([]string{"pod", "create", "--name", "foobar99"})
session.WaitWithDefaultTimeout()
session = podmanTest.RunTopContainerInPod("", "foobar99")
session.WaitWithDefaultTimeout()
Expect(session.ExitCode()).To(Equal(0))
session2 := podmanTest.Podman([]string{"pod", "create", "--name", "foobar100"})
session2.WaitWithDefaultTimeout()
session = podmanTest.RunTopContainerInPod("", "foobar100")
session.WaitWithDefaultTimeout()
Expect(session.ExitCode()).To(Equal(0))
session = podmanTest.Podman([]string{"pod", "stop", "--all"})
session.WaitWithDefaultTimeout()
Expect(session.ExitCode()).To(Equal(0))
Expect(podmanTest.NumberOfContainersRunning()).To(Equal(0))
})
It("podman pod stop latest pod", func() {
session := podmanTest.Podman([]string{"pod", "create", "--name", "foobar99"})
session.WaitWithDefaultTimeout()
session = podmanTest.RunTopContainerInPod("", "foobar99")
session.WaitWithDefaultTimeout()
Expect(session.ExitCode()).To(Equal(0))
session2 := podmanTest.Podman([]string{"pod", "create", "--name", "foobar100"})
session2.WaitWithDefaultTimeout()
session = podmanTest.RunTopContainerInPod("", "foobar100")
session.WaitWithDefaultTimeout()
Expect(session.ExitCode()).To(Equal(0))
session = podmanTest.Podman([]string{"pod", "stop", "--latest"})
session.WaitWithDefaultTimeout()
Expect(session.ExitCode()).To(Equal(0))
Expect(podmanTest.NumberOfContainersRunning()).To(Equal(1))
})
It("podman pod stop multiple pods with bogus", func() {
session := podmanTest.Podman([]string{"pod", "create", "--name", "foobar99"})
session.WaitWithDefaultTimeout()
cid1 := session.OutputToString()
session = podmanTest.RunTopContainerInPod("", "foobar99")
session.WaitWithDefaultTimeout()
Expect(session.ExitCode()).To(Equal(0))
session = podmanTest.Podman([]string{"pod", "stop", cid1, "doesnotexist"})
session.WaitWithDefaultTimeout()
Expect(session.ExitCode()).To(Equal(125))
Expect(podmanTest.NumberOfContainersRunning()).To(Equal(0))
})
})