X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=extras%2Fhs-test%2Fcontainer.go;h=76d08c7d2d6ab7c1354ae1923c178ea767e731c8;hb=109f3ce4eba0a6ba869752f24cfaae73ab70bb2d;hp=1f600f9fe24a20df1b0510b86bcd23d5442906f3;hpb=e7625d08566f6127acb351376797b4fdc75e3c6a;p=vpp.git diff --git a/extras/hs-test/container.go b/extras/hs-test/container.go index 1f600f9fe24..76d08c7d2d6 100644 --- a/extras/hs-test/container.go +++ b/extras/hs-test/container.go @@ -27,6 +27,7 @@ type Volume struct { type Container struct { suite *HstSuite isOptional bool + runDetached bool name string image string extraRunningArgs string @@ -65,6 +66,12 @@ func newContainer(yamlInput ContainerConfig) (*Container, error) { container.isOptional = false } + if runDetached, ok := yamlInput["run-detached"]; ok { + container.runDetached = runDetached.(bool) + } else { + container.runDetached = true + } + if _, ok := yamlInput["volumes"]; ok { r := strings.NewReplacer("$HST_DIR", workDir) for _, volu := range yamlInput["volumes"].([]interface{}) { @@ -119,9 +126,12 @@ func (c *Container) getContainerWorkDir() (res string) { } func (c *Container) getContainerArguments() string { - args := "--cap-add=all --privileged --network host --rm" + args := "--ulimit nofile=90000:90000 --cap-add=all --privileged --network host --rm" args += c.getVolumesAsCliOption() args += c.getEnvVarsAsCliOption() + if *vppSourceFileDir != "" { + args += fmt.Sprintf(" -v %s:%s", *vppSourceFileDir, *vppSourceFileDir) + } args += " --name " + c.name + " " + c.image args += " " + c.extraRunningArgs return args @@ -139,19 +149,38 @@ func (c *Container) start() error { return exechelper.Run(cmd) } -func (c *Container) run() error { +func (c *Container) prepareCommand() (string, error) { if c.name == "" { - return fmt.Errorf("run container failed: name is blank") + return "", fmt.Errorf("run container failed: name is blank") } - cmd := "docker run -d " + c.getContainerArguments() + cmd := "docker run " + if c.runDetached { + cmd += " -d" + } + cmd += " " + c.getContainerArguments() + c.suite.log(cmd) - err := exechelper.Run(cmd) + return cmd, nil +} + +func (c *Container) combinedOutput() (string, error) { + cmd, err := c.prepareCommand() if err != nil { - return fmt.Errorf("container run failed: %s", err) + return "", err } - return nil + byteOutput, err := exechelper.CombinedOutput(cmd) + return string(byteOutput), err +} + +func (c *Container) run() error { + cmd, err := c.prepareCommand() + if err != nil { + return err + } + + return exechelper.Run(cmd) } func (c *Container) addVolume(hostDir string, containerDir string, isDefaultWorkDir bool) { @@ -190,16 +219,12 @@ func (c *Container) getEnvVarsAsCliOption() string { return cliOption } -func (c *Container) newVppInstance(additionalConfig ...Stanza) (*VppInstance, error) { +func (c *Container) newVppInstance(cpus []int, additionalConfigs ...Stanza) (*VppInstance, error) { vpp := new(VppInstance) vpp.container = c - - if len(additionalConfig) > 0 { - vpp.additionalConfig = additionalConfig[0] - } - + vpp.cpus = cpus + vpp.additionalConfig = append(vpp.additionalConfig, additionalConfigs...) c.vppInstance = vpp - return vpp, nil }