Merge pull request #33684 from dnephin/update-service-ps-tests
Update service ps to be an API test Upstream-commit: 15b8d0420b57776028875dbf89fc6d9dbb0666e2 Component: engine
This commit is contained in:
@@ -33,6 +33,7 @@ import (
|
||||
)
|
||||
|
||||
type testingT interface {
|
||||
require.TestingT
|
||||
logT
|
||||
Fatalf(string, ...interface{})
|
||||
}
|
||||
@@ -329,9 +330,7 @@ func (d *Daemon) StartWithLogFile(out *os.File, providedArgs ...string) error {
|
||||
// then save the busybox image from the main daemon and load it into this Daemon instance.
|
||||
func (d *Daemon) StartWithBusybox(t testingT, arg ...string) {
|
||||
d.Start(t, arg...)
|
||||
if err := d.LoadBusybox(); err != nil {
|
||||
t.Fatalf("Error loading busybox image to current daemon: %s\n%v", d.id, err)
|
||||
}
|
||||
d.LoadBusybox(t)
|
||||
}
|
||||
|
||||
// Kill will send a SIGKILL to the daemon
|
||||
@@ -493,27 +492,24 @@ func (d *Daemon) handleUserns() {
|
||||
}
|
||||
}
|
||||
|
||||
// LoadBusybox will load the stored busybox into a newly started daemon
|
||||
func (d *Daemon) LoadBusybox() error {
|
||||
bb := filepath.Join(d.Folder, "busybox.tar")
|
||||
if _, err := os.Stat(bb); err != nil {
|
||||
if !os.IsNotExist(err) {
|
||||
return errors.Errorf("unexpected error on busybox.tar stat: %v", err)
|
||||
}
|
||||
// saving busybox image from main daemon
|
||||
if out, err := exec.Command(d.dockerBinary, "save", "--output", bb, "busybox:latest").CombinedOutput(); err != nil {
|
||||
imagesOut, _ := exec.Command(d.dockerBinary, "images", "--format", "{{ .Repository }}:{{ .Tag }}").CombinedOutput()
|
||||
return errors.Errorf("could not save busybox image: %s\n%s", string(out), strings.TrimSpace(string(imagesOut)))
|
||||
}
|
||||
}
|
||||
// loading busybox image to this daemon
|
||||
if out, err := d.Cmd("load", "--input", bb); err != nil {
|
||||
return errors.Errorf("could not load busybox image: %s", out)
|
||||
}
|
||||
if err := os.Remove(bb); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
// LoadBusybox image into the daemon
|
||||
func (d *Daemon) LoadBusybox(t testingT) {
|
||||
clientHost, err := client.NewEnvClient()
|
||||
require.NoError(t, err, "failed to create client")
|
||||
defer clientHost.Close()
|
||||
|
||||
ctx := context.Background()
|
||||
reader, err := clientHost.ImageSave(ctx, []string{"busybox:latest"})
|
||||
require.NoError(t, err, "failed to download busybox")
|
||||
defer reader.Close()
|
||||
|
||||
client, err := d.NewClient()
|
||||
require.NoError(t, err, "failed to create client")
|
||||
defer client.Close()
|
||||
|
||||
resp, err := client.ImageLoad(ctx, reader, true)
|
||||
require.NoError(t, err, "failed to load busybox")
|
||||
defer resp.Body.Close()
|
||||
}
|
||||
|
||||
func (d *Daemon) queryRootDir() (string, error) {
|
||||
|
||||
@@ -69,9 +69,7 @@ func (s *DockerSwarmSuite) TestAPISwarmServicesCreate(c *check.C) {
|
||||
c.Assert(err, checker.IsNil)
|
||||
defer cli.Close()
|
||||
|
||||
options := types.ServiceInspectOptions{
|
||||
InsertDefaults: true,
|
||||
}
|
||||
options := types.ServiceInspectOptions{InsertDefaults: true}
|
||||
|
||||
// insertDefaults inserts UpdateConfig when service is fetched by ID
|
||||
resp, _, err := cli.ServiceInspectWithRaw(context.Background(), id, options)
|
||||
|
||||
@@ -53,7 +53,7 @@ func (s *DockerAuthzV2Suite) TestAuthZPluginAllowNonVolumeRequest(c *check.C) {
|
||||
// start the daemon with the plugin and load busybox, --net=none build fails otherwise
|
||||
// because it needs to pull busybox
|
||||
s.d.Restart(c, "--authorization-plugin="+authzPluginNameWithTag)
|
||||
c.Assert(s.d.LoadBusybox(), check.IsNil)
|
||||
s.d.LoadBusybox(c)
|
||||
|
||||
// defer disabling the plugin
|
||||
defer func() {
|
||||
@@ -83,7 +83,7 @@ func (s *DockerAuthzV2Suite) TestAuthZPluginDisable(c *check.C) {
|
||||
// start the daemon with the plugin and load busybox, --net=none build fails otherwise
|
||||
// because it needs to pull busybox
|
||||
s.d.Restart(c, "--authorization-plugin="+authzPluginNameWithTag)
|
||||
c.Assert(s.d.LoadBusybox(), check.IsNil)
|
||||
s.d.LoadBusybox(c)
|
||||
|
||||
// defer removing the plugin
|
||||
defer func() {
|
||||
|
||||
@@ -209,7 +209,7 @@ func (s *DockerAuthzSuite) TestAuthZPluginAllowRequest(c *check.C) {
|
||||
s.d.Start(c, "--authorization-plugin="+testAuthZPlugin)
|
||||
s.ctrl.reqRes.Allow = true
|
||||
s.ctrl.resRes.Allow = true
|
||||
c.Assert(s.d.LoadBusybox(), check.IsNil)
|
||||
s.d.LoadBusybox(c)
|
||||
|
||||
// Ensure command successful
|
||||
out, err := s.d.Cmd("run", "-d", "busybox", "top")
|
||||
@@ -322,7 +322,7 @@ func (s *DockerAuthzSuite) TestAuthZPluginAllowEventStream(c *check.C) {
|
||||
s.d.Start(c, "--authorization-plugin="+testAuthZPlugin)
|
||||
s.ctrl.reqRes.Allow = true
|
||||
s.ctrl.resRes.Allow = true
|
||||
c.Assert(s.d.LoadBusybox(), check.IsNil)
|
||||
s.d.LoadBusybox(c)
|
||||
|
||||
startTime := strconv.FormatInt(daemonTime(c).Unix(), 10)
|
||||
// Add another command to to enable event pipelining
|
||||
@@ -418,7 +418,7 @@ func (s *DockerAuthzSuite) TestAuthZPluginEnsureLoadImportWorking(c *check.C) {
|
||||
s.d.Start(c, "--authorization-plugin="+testAuthZPlugin, "--authorization-plugin="+testAuthZPlugin)
|
||||
s.ctrl.reqRes.Allow = true
|
||||
s.ctrl.resRes.Allow = true
|
||||
c.Assert(s.d.LoadBusybox(), check.IsNil)
|
||||
s.d.LoadBusybox(c)
|
||||
|
||||
tmp, err := ioutil.TempDir("", "test-authz-load-import")
|
||||
c.Assert(err, check.IsNil)
|
||||
@@ -445,7 +445,7 @@ func (s *DockerAuthzSuite) TestAuthZPluginHeader(c *check.C) {
|
||||
s.d.Start(c, "--debug", "--authorization-plugin="+testAuthZPlugin)
|
||||
s.ctrl.reqRes.Allow = true
|
||||
s.ctrl.resRes.Allow = true
|
||||
c.Assert(s.d.LoadBusybox(), check.IsNil)
|
||||
s.d.LoadBusybox(c)
|
||||
|
||||
daemonURL, err := url.Parse(s.d.Sock())
|
||||
|
||||
|
||||
@@ -1534,22 +1534,6 @@ func (s *DockerSwarmSuite) TestSwarmManagerAddress(c *check.C) {
|
||||
c.Assert(out, checker.Contains, expectedOutput)
|
||||
}
|
||||
|
||||
func (s *DockerSwarmSuite) TestSwarmServiceInspectPretty(c *check.C) {
|
||||
d := s.AddDaemon(c, true, true)
|
||||
|
||||
name := "top"
|
||||
out, err := d.Cmd("service", "create", "--no-resolve-image", "--name", name, "--limit-cpu=0.5", "busybox", "top")
|
||||
c.Assert(err, checker.IsNil, check.Commentf(out))
|
||||
|
||||
expectedOutput := `
|
||||
Resources:
|
||||
Limits:
|
||||
CPU: 0.5`
|
||||
out, err = d.Cmd("service", "inspect", "--pretty", name)
|
||||
c.Assert(err, checker.IsNil, check.Commentf(out))
|
||||
c.Assert(out, checker.Contains, expectedOutput, check.Commentf(out))
|
||||
}
|
||||
|
||||
func (s *DockerSwarmSuite) TestSwarmNetworkIPAMOptions(c *check.C) {
|
||||
d := s.AddDaemon(c, true, true)
|
||||
|
||||
@@ -1691,76 +1675,6 @@ func (s *DockerSwarmSuite) TestSwarmNetworkCreateDup(c *check.C) {
|
||||
}
|
||||
}
|
||||
|
||||
func (s *DockerSwarmSuite) TestSwarmServicePsMultipleServiceIDs(c *check.C) {
|
||||
d := s.AddDaemon(c, true, true)
|
||||
|
||||
name1 := "top1"
|
||||
out, err := d.Cmd("service", "create", "--no-resolve-image", "--detach=true", "--name", name1, "--replicas=3", "busybox", "top")
|
||||
c.Assert(err, checker.IsNil)
|
||||
c.Assert(strings.TrimSpace(out), checker.Not(checker.Equals), "")
|
||||
id1 := strings.TrimSpace(out)
|
||||
|
||||
name2 := "top2"
|
||||
out, err = d.Cmd("service", "create", "--no-resolve-image", "--detach=true", "--name", name2, "--replicas=3", "busybox", "top")
|
||||
c.Assert(err, checker.IsNil)
|
||||
c.Assert(strings.TrimSpace(out), checker.Not(checker.Equals), "")
|
||||
id2 := strings.TrimSpace(out)
|
||||
|
||||
// make sure task has been deployed.
|
||||
waitAndAssert(c, defaultReconciliationTimeout, d.CheckActiveContainerCount, checker.Equals, 6)
|
||||
|
||||
out, err = d.Cmd("service", "ps", name1)
|
||||
c.Assert(err, checker.IsNil)
|
||||
c.Assert(out, checker.Contains, name1+".1")
|
||||
c.Assert(out, checker.Contains, name1+".2")
|
||||
c.Assert(out, checker.Contains, name1+".3")
|
||||
c.Assert(out, checker.Not(checker.Contains), name2+".1")
|
||||
c.Assert(out, checker.Not(checker.Contains), name2+".2")
|
||||
c.Assert(out, checker.Not(checker.Contains), name2+".3")
|
||||
|
||||
out, err = d.Cmd("service", "ps", name1, name2)
|
||||
c.Assert(err, checker.IsNil)
|
||||
c.Assert(out, checker.Contains, name1+".1")
|
||||
c.Assert(out, checker.Contains, name1+".2")
|
||||
c.Assert(out, checker.Contains, name1+".3")
|
||||
c.Assert(out, checker.Contains, name2+".1")
|
||||
c.Assert(out, checker.Contains, name2+".2")
|
||||
c.Assert(out, checker.Contains, name2+".3")
|
||||
|
||||
// Name Prefix
|
||||
out, err = d.Cmd("service", "ps", "to")
|
||||
c.Assert(err, checker.IsNil)
|
||||
c.Assert(out, checker.Contains, name1+".1")
|
||||
c.Assert(out, checker.Contains, name1+".2")
|
||||
c.Assert(out, checker.Contains, name1+".3")
|
||||
c.Assert(out, checker.Contains, name2+".1")
|
||||
c.Assert(out, checker.Contains, name2+".2")
|
||||
c.Assert(out, checker.Contains, name2+".3")
|
||||
|
||||
// Name Prefix (no hit)
|
||||
out, err = d.Cmd("service", "ps", "noname")
|
||||
c.Assert(err, checker.NotNil)
|
||||
c.Assert(out, checker.Contains, "no such services: noname")
|
||||
|
||||
out, err = d.Cmd("service", "ps", id1)
|
||||
c.Assert(err, checker.IsNil)
|
||||
c.Assert(out, checker.Contains, name1+".1")
|
||||
c.Assert(out, checker.Contains, name1+".2")
|
||||
c.Assert(out, checker.Contains, name1+".3")
|
||||
c.Assert(out, checker.Not(checker.Contains), name2+".1")
|
||||
c.Assert(out, checker.Not(checker.Contains), name2+".2")
|
||||
c.Assert(out, checker.Not(checker.Contains), name2+".3")
|
||||
|
||||
out, err = d.Cmd("service", "ps", id1, id2)
|
||||
c.Assert(err, checker.IsNil)
|
||||
c.Assert(out, checker.Contains, name1+".1")
|
||||
c.Assert(out, checker.Contains, name1+".2")
|
||||
c.Assert(out, checker.Contains, name1+".3")
|
||||
c.Assert(out, checker.Contains, name2+".1")
|
||||
c.Assert(out, checker.Contains, name2+".2")
|
||||
c.Assert(out, checker.Contains, name2+".3")
|
||||
}
|
||||
|
||||
func (s *DockerSwarmSuite) TestSwarmPublishDuplicatePorts(c *check.C) {
|
||||
d := s.AddDaemon(c, true, true)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user