2018-03-20 19:31:51 +08:00
|
|
|
package buildah
|
|
|
|
|
|
|
|
import (
|
|
|
|
"strings"
|
|
|
|
"testing"
|
|
|
|
|
|
|
|
"github.com/opencontainers/runtime-tools/generate"
|
2020-04-04 04:34:43 +08:00
|
|
|
"github.com/pkg/errors"
|
2018-03-20 19:31:51 +08:00
|
|
|
)
|
|
|
|
|
|
|
|
func TestAddRlimits(t *testing.T) {
|
|
|
|
tt := []struct {
|
|
|
|
name string
|
|
|
|
ulimit []string
|
|
|
|
test func(error, *generate.Generator) error
|
|
|
|
}{
|
|
|
|
{
|
|
|
|
name: "empty ulimit",
|
|
|
|
ulimit: []string{},
|
|
|
|
test: func(e error, g *generate.Generator) error {
|
|
|
|
return e
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
name: "invalid ulimit argument",
|
|
|
|
ulimit: []string{"bla"},
|
|
|
|
test: func(e error, g *generate.Generator) error {
|
|
|
|
if e == nil {
|
2020-04-04 04:34:43 +08:00
|
|
|
return errors.Errorf("expected to receive an error but got nil")
|
2018-03-20 19:31:51 +08:00
|
|
|
}
|
|
|
|
errMsg := "invalid ulimit argument"
|
|
|
|
if !strings.Contains(e.Error(), errMsg) {
|
2020-04-04 04:34:43 +08:00
|
|
|
return errors.Errorf("expected error message to include %#v in %#v", errMsg, e.Error())
|
2018-03-20 19:31:51 +08:00
|
|
|
}
|
|
|
|
return nil
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
name: "invalid ulimit type",
|
|
|
|
ulimit: []string{"bla=hard"},
|
|
|
|
test: func(e error, g *generate.Generator) error {
|
|
|
|
if e == nil {
|
2020-04-04 04:34:43 +08:00
|
|
|
return errors.Errorf("expected to receive an error but got nil")
|
2018-03-20 19:31:51 +08:00
|
|
|
}
|
|
|
|
errMsg := "invalid ulimit type"
|
|
|
|
if !strings.Contains(e.Error(), errMsg) {
|
2020-04-04 04:34:43 +08:00
|
|
|
return errors.Errorf("expected error message to include %#v in %#v", errMsg, e.Error())
|
2018-03-20 19:31:51 +08:00
|
|
|
}
|
|
|
|
return nil
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
name: "valid ulimit",
|
|
|
|
ulimit: []string{"fsize=1024:4096"},
|
|
|
|
test: func(e error, g *generate.Generator) error {
|
|
|
|
if e != nil {
|
|
|
|
return e
|
|
|
|
}
|
2019-02-23 10:08:09 +08:00
|
|
|
rlimits := g.Config.Process.Rlimits
|
2018-03-20 19:31:51 +08:00
|
|
|
for _, rlimit := range rlimits {
|
|
|
|
if rlimit.Type == "RLIMIT_FSIZE" {
|
|
|
|
if rlimit.Hard != 4096 {
|
2020-04-04 04:34:43 +08:00
|
|
|
return errors.Errorf("expected spec to have %#v hard limit set to %v but got %v", rlimit.Type, 4096, rlimit.Hard)
|
2018-03-20 19:31:51 +08:00
|
|
|
}
|
|
|
|
if rlimit.Soft != 1024 {
|
2020-04-04 04:34:43 +08:00
|
|
|
return errors.Errorf("expected spec to have %#v hard limit set to %v but got %v", rlimit.Type, 1024, rlimit.Soft)
|
2018-03-20 19:31:51 +08:00
|
|
|
}
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
}
|
2020-04-04 04:34:43 +08:00
|
|
|
return errors.Errorf("expected spec to have RLIMIT_FSIZE")
|
2018-03-20 19:31:51 +08:00
|
|
|
},
|
|
|
|
},
|
|
|
|
}
|
|
|
|
|
2020-01-08 22:48:59 +08:00
|
|
|
for _, tst := range tt {
|
2018-06-27 04:35:43 +08:00
|
|
|
g, _ := generate.New("linux")
|
2020-02-08 01:54:18 +08:00
|
|
|
err := addRlimits(tst.ulimit, &g, []string{})
|
2020-01-08 22:48:59 +08:00
|
|
|
if testErr := tst.test(err, &g); testErr != nil {
|
|
|
|
t.Errorf("test %#v failed: %v", tst.name, testErr)
|
2018-03-20 19:31:51 +08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|