moby--moby/integration/container/create_test.go

142 lines
3.0 KiB
Go
Raw Normal View History

package container
import (
"context"
"fmt"
"os"
"testing"
"strconv"
"github.com/docker/docker/api/types/container"
"github.com/docker/docker/api/types/network"
"github.com/docker/docker/client"
"github.com/docker/docker/integration-cli/environment"
"github.com/docker/docker/integration-cli/fixtures/load"
"github.com/stretchr/testify/require"
)
var (
testEnv *environment.Execution
)
func TestMain(m *testing.M) {
var err error
testEnv, err = environment.New()
if err != nil {
fmt.Println(err)
os.Exit(1)
}
if testEnv.LocalDaemon() {
fmt.Println("INFO: Testing against a local daemon")
} else {
fmt.Println("INFO: Testing against a remote daemon")
}
// TODO: ensure and protect images
res := m.Run()
os.Exit(res)
}
func TestAPICreateWithNotExistImage(t *testing.T) {
defer setupTest(t)()
clt := createClient(t)
testCases := []struct {
image string
expectedError string
}{
{
image: "test456:v1",
expectedError: "No such image: test456:v1",
},
{
image: "test456",
expectedError: "No such image: test456",
},
{
image: "sha256:0cb40641836c461bc97c793971d84d758371ed682042457523e4ae701efeaaaa",
expectedError: "No such image: sha256:0cb40641836c461bc97c793971d84d758371ed682042457523e4ae701efeaaaa",
},
}
for index, tc := range testCases {
tc := tc
t.Run(strconv.Itoa(index), func(t *testing.T) {
t.Parallel()
_, err := clt.ContainerCreate(context.Background(),
&container.Config{
Image: tc.image,
},
&container.HostConfig{},
&network.NetworkingConfig{},
"foo",
)
require.Error(t, err)
require.Contains(t, err.Error(), tc.expectedError)
})
}
}
func TestAPICreateEmptyEnv(t *testing.T) {
defer setupTest(t)()
clt := createClient(t)
testCases := []struct {
env string
expectedError string
}{
{
env: "",
expectedError: "invalid environment variable:",
},
{
env: "=",
expectedError: "invalid environment variable: =",
},
{
env: "=foo",
expectedError: "invalid environment variable: =foo",
},
}
for index, tc := range testCases {
tc := tc
t.Run(strconv.Itoa(index), func(t *testing.T) {
t.Parallel()
_, err := clt.ContainerCreate(context.Background(),
&container.Config{
Image: "busybox",
Env: []string{tc.env},
},
&container.HostConfig{},
&network.NetworkingConfig{},
"foo",
)
require.Error(t, err)
require.Contains(t, err.Error(), tc.expectedError)
})
}
}
func createClient(t *testing.T) client.APIClient {
clt, err := client.NewEnvClient()
require.NoError(t, err)
return clt
}
func setupTest(t *testing.T) func() {
if testEnv.DaemonPlatform() == "linux" {
images := []string{"busybox:latest", "hello-world:frozen", "debian:jessie"}
err := load.FrozenImagesLinux(testEnv.DockerBinary(), images...)
if err != nil {
t.Fatalf("%+v", err)
}
defer testEnv.ProtectImage(t, images...)
}
return func() {
testEnv.Clean(t, testEnv.DockerBinary())
}
}