From 4b3044621783b27a636923dfe8b03a2b0e3bb71a Mon Sep 17 00:00:00 2001 From: Peng Tao Date: Fri, 20 Apr 2018 17:43:28 +0800 Subject: [PATCH] api: add sandbox startcontainer API And make VC.StartContainer a wrapper of it. Signed-off-by: Peng Tao --- virtcontainers/api.go | 11 ++--------- virtcontainers/interfaces.go | 1 + virtcontainers/pkg/vcmock/sandbox.go | 5 +++++ virtcontainers/sandbox.go | 17 +++++++++++++++++ virtcontainers/sandbox_test.go | 20 ++++++++++++++++++++ 5 files changed, 45 insertions(+), 9 deletions(-) diff --git a/virtcontainers/api.go b/virtcontainers/api.go index fc2de780b5..702cc13dfd 100644 --- a/virtcontainers/api.go +++ b/virtcontainers/api.go @@ -355,19 +355,12 @@ func StartContainer(sandboxID, containerID string) (VCContainer, error) { } defer unlockSandbox(lockFile) - p, err := fetchSandbox(sandboxID) - if err != nil { - return nil, err - } - - // Fetch the container. - c, err := p.findContainer(containerID) + s, err := fetchSandbox(sandboxID) if err != nil { return nil, err } - // Start it. - err = c.start() + c, err := s.StartContainer(containerID) if err != nil { return nil, err } diff --git a/virtcontainers/interfaces.go b/virtcontainers/interfaces.go index 04cac7c1c3..5b96efed15 100644 --- a/virtcontainers/interfaces.go +++ b/virtcontainers/interfaces.go @@ -52,6 +52,7 @@ type VCSandbox interface { Delete() error CreateContainer(contConfig ContainerConfig) (VCContainer, error) DeleteContainer(contID string) (VCContainer, error) + StartContainer(containerID string) (VCContainer, error) } // VCContainer is the Container interface diff --git a/virtcontainers/pkg/vcmock/sandbox.go b/virtcontainers/pkg/vcmock/sandbox.go index e91704dbda..9ef8258cc8 100644 --- a/virtcontainers/pkg/vcmock/sandbox.go +++ b/virtcontainers/pkg/vcmock/sandbox.go @@ -79,3 +79,8 @@ func (p *Sandbox) CreateContainer(conf vc.ContainerConfig) (vc.VCContainer, erro func (p *Sandbox) DeleteContainer(contID string) (vc.VCContainer, error) { return &Container{}, nil } + +// StartContainer implements the VCSandbox function of the same name. +func (p *Sandbox) StartContainer(contID string) (vc.VCContainer, error) { + return &Container{}, nil +} diff --git a/virtcontainers/sandbox.go b/virtcontainers/sandbox.go index c0555ca23f..5195f17ee3 100644 --- a/virtcontainers/sandbox.go +++ b/virtcontainers/sandbox.go @@ -894,6 +894,23 @@ func (s *Sandbox) CreateContainer(contConfig ContainerConfig) (VCContainer, erro return c, nil } +// StartContainer starts a container in the sandbox +func (s *Sandbox) StartContainer(containerID string) (VCContainer, error) { + // Fetch the container. + c, err := s.findContainer(containerID) + if err != nil { + return nil, err + } + + // Start it. + err = c.start() + if err != nil { + return nil, err + } + + return c, nil +} + // DeleteContainer deletes a container from the sandbox func (s *Sandbox) DeleteContainer(containerID string) (VCContainer, error) { if containerID == "" { diff --git a/virtcontainers/sandbox_test.go b/virtcontainers/sandbox_test.go index 455a72e125..799d660f00 100644 --- a/virtcontainers/sandbox_test.go +++ b/virtcontainers/sandbox_test.go @@ -1316,3 +1316,23 @@ func TestDeleteContainer(t *testing.T) { _, err = s.DeleteContainer(contID) assert.Nil(t, err, "Failed to delete container %s in sandbox %s: %v", contID, s.ID(), err) } + +func TestStartContainer(t *testing.T) { + s, err := testCreateSandbox(t, testSandboxID, MockHypervisor, newHypervisorConfig(nil, nil), NoopAgentType, NoopNetworkModel, NetworkConfig{}, nil, nil) + assert.Nil(t, err, "VirtContainers should not allow empty sandboxes") + defer cleanUp() + + contID := "999" + _, err = s.StartContainer(contID) + assert.NotNil(t, err, "Starting non-existing container should fail") + + err = s.start() + assert.Nil(t, err, "Failed to start sandbox: %v", err) + + contConfig := newTestContainerConfigNoop(contID) + _, err = s.CreateContainer(contConfig) + assert.Nil(t, err, "Failed to create container %+v in sandbox %+v: %v", contConfig, s, err) + + _, err = s.StartContainer(contID) + assert.Nil(t, err, "Start container failed: %v", err) +}