Skip to content
This repository has been archived by the owner on Jun 20, 2024. It is now read-only.

Commit

Permalink
Test container args-parsing code
Browse files Browse the repository at this point in the history
Extract function just to parse args, so we can call it separately and
test it.
  • Loading branch information
bboreham committed Aug 8, 2018
1 parent 374fed4 commit 1814bbd
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 5 deletions.
16 changes: 11 additions & 5 deletions prog/weaveutil/container.go
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ func containerFQDN(args []string) error {
return nil
}

func runContainer(args []string) error {
func parseContainerArgs(args []string) docker.CreateContainerOptions {
env := []string{}
labels := map[string]string{}
name := ""
Expand Down Expand Up @@ -166,19 +166,25 @@ func runContainer(args []string) error {
image := args[0]
cmds := args[1:]

config := docker.Config{Image: image, Env: env, Cmd: cmds, Labels: labels}
hostConfig := docker.HostConfig{NetworkMode: net, PidMode: pid, Privileged: privileged, RestartPolicy: restart, Binds: volumes, VolumesFrom: volumesFrom}
return docker.CreateContainerOptions{Name: name, Config: &config, HostConfig: &hostConfig}
}

func runContainer(args []string) error {
containerOptions := parseContainerArgs(args)

c, err := docker.NewVersionedClientFromEnv("1.18")
if err != nil {
return fmt.Errorf("unable to connect to docker: %s", err)
}

config := docker.Config{Image: image, Env: env, Cmd: cmds, Labels: labels}
hostConfig := docker.HostConfig{NetworkMode: net, PidMode: pid, Privileged: privileged, RestartPolicy: restart, Binds: volumes, VolumesFrom: volumesFrom}
container, err := c.CreateContainer(docker.CreateContainerOptions{Name: name, Config: &config, HostConfig: &hostConfig})
container, err := c.CreateContainer(containerOptions)
if err != nil {
return fmt.Errorf("unable to create container: %s", err)
}

err = c.StartContainer(container.ID, &hostConfig)
err = c.StartContainer(container.ID, containerOptions.HostConfig)
if err != nil {
return fmt.Errorf("unable to start container: %s", err)
}
Expand Down
36 changes: 36 additions & 0 deletions prog/weaveutil/container_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package main

import (
"testing"

docker "github.com/fsouza/go-dockerclient"
"github.com/stretchr/testify/require"
)

func TestParseContainerArgs(t *testing.T) {
args := []string{"--name", "weave", "--privileged", "--net", "host",
"-l", "foo=bar", "-l", "foobar",
"-v", "/var/run/docker.sock:/var/run/docker.sock", "-v", "/etc:/host/etc",
"--restart", "always", "--pid", "host", "--volumes-from", "weavedb",
"-e", "WEAVE_DEBUG", "-e", "EXEC_IMAGE=weaveworks/weaveexec:latest",
"weaveworks/weave:latest", "cmd", "arg1", "arg2"}
expected := docker.CreateContainerOptions{
Name: "weave",
Config: &docker.Config{
Image: "weaveworks/weave:latest",
Env: []string{"WEAVE_DEBUG", "EXEC_IMAGE=weaveworks/weaveexec:latest"},
Cmd: []string{"cmd", "arg1", "arg2"},
Labels: map[string]string{"foo": "bar", "foobar": ""},
},
HostConfig: &docker.HostConfig{
NetworkMode: "host",
PidMode: "host",
Privileged: true,
RestartPolicy: docker.RestartPolicy{Name: "always"},
Binds: []string{"/var/run/docker.sock:/var/run/docker.sock", "/etc:/host/etc"},
VolumesFrom: []string{"weavedb"},
},
}
have := parseContainerArgs(args)
require.Equal(t, expected, have)
}

0 comments on commit 1814bbd

Please sign in to comment.