commit
d9c2b13dbc
3 changed files with 50 additions and 7 deletions
|
@ -102,6 +102,14 @@ func CreateBundleWithFilter(source, name string, args []string, filter func(spec
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func GetBundle(name string) *Bundle {
|
||||||
|
bundle, ok := bundleMap[name]
|
||||||
|
if !ok {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return &bundle
|
||||||
|
}
|
||||||
|
|
||||||
func CreateBusyboxBundle(name string, args []string) error {
|
func CreateBusyboxBundle(name string, args []string) error {
|
||||||
return CreateBundleWithFilter("busybox", name, args, nil)
|
return CreateBundleWithFilter("busybox", name, args, nil)
|
||||||
}
|
}
|
||||||
|
|
|
@ -180,13 +180,13 @@ func NewContainerProcess(cs *ContainerdSuite, bundle *Bundle, cid, pid string) (
|
||||||
return c, nil
|
return c, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (cs *ContainerdSuite) StartContainer(id, bundleName string) (c *containerProcess, err error) {
|
func (cs *ContainerdSuite) StartContainerWithEventFilter(id, bundleName string, filter func(*types.Event)) (c *containerProcess, err error) {
|
||||||
bundle, ok := bundleMap[bundleName]
|
bundle := GetBundle(bundleName)
|
||||||
if !ok {
|
if bundle == nil {
|
||||||
return nil, fmt.Errorf("No such bundle '%s'", bundleName)
|
return nil, fmt.Errorf("No such bundle '%s'", bundleName)
|
||||||
}
|
}
|
||||||
|
|
||||||
c, err = NewContainerProcess(cs, &bundle, id, "init")
|
c, err = NewContainerProcess(cs, bundle, id, "init")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -199,9 +199,13 @@ func (cs *ContainerdSuite) StartContainer(id, bundleName string) (c *containerPr
|
||||||
Stderr: filepath.Join(cs.cwd, c.io.stderr),
|
Stderr: filepath.Join(cs.cwd, c.io.stderr),
|
||||||
}
|
}
|
||||||
|
|
||||||
cs.SetContainerEventFilter(id, func(event *types.Event) {
|
if filter == nil {
|
||||||
c.eventsCh <- event
|
filter = func(event *types.Event) {
|
||||||
})
|
c.eventsCh <- event
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
cs.SetContainerEventFilter(id, filter)
|
||||||
|
|
||||||
if _, err := cs.grpcClient.CreateContainer(context.Background(), r); err != nil {
|
if _, err := cs.grpcClient.CreateContainer(context.Background(), r); err != nil {
|
||||||
c.Cleanup()
|
c.Cleanup()
|
||||||
|
@ -211,6 +215,10 @@ func (cs *ContainerdSuite) StartContainer(id, bundleName string) (c *containerPr
|
||||||
return c, nil
|
return c, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (cs *ContainerdSuite) StartContainer(id, bundleName string) (c *containerProcess, err error) {
|
||||||
|
return cs.StartContainerWithEventFilter(id, bundleName, nil)
|
||||||
|
}
|
||||||
|
|
||||||
func (cs *ContainerdSuite) RunContainer(id, bundleName string) (c *containerProcess, err error) {
|
func (cs *ContainerdSuite) RunContainer(id, bundleName string) (c *containerProcess, err error) {
|
||||||
c, err = cs.StartContainer(id, bundleName)
|
c, err = cs.StartContainer(id, bundleName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -96,3 +96,30 @@ func (cs *ContainerdSuite) TestStartBusyboxLsEvents(t *check.C) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (cs *ContainerdSuite) TestStartBusyboxSleep(t *check.C) {
|
||||||
|
if err := CreateBusyboxBundle("busybox-sleep-5", []string{"sleep", "5"}); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
ch := make(chan interface{})
|
||||||
|
filter := func(e *types.Event) {
|
||||||
|
if e.Type == "exit" && e.Pid == "init" {
|
||||||
|
ch <- nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
start := time.Now()
|
||||||
|
_, err := cs.StartContainerWithEventFilter("sleep5", "busybox-sleep-5", filter)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// We add a generous 20% marge of error
|
||||||
|
select {
|
||||||
|
case <-ch:
|
||||||
|
t.Assert(uint64(time.Now().Sub(start)), checker.LessOrEqualThan, uint64(6*time.Second))
|
||||||
|
case <-time.After(6 * time.Second):
|
||||||
|
t.Fatal("Container took more than 6 seconds to exit")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue