| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126 |
- package tests
- import (
- "encoding/json"
- "flag"
- "fmt"
- "io/ioutil"
- "os"
- "path/filepath"
- "runtime"
- "testing"
- dockerConfigFile "github.com/docker/cli/cli/config/configfile"
- "github.com/docker/ecs-plugin/pkg/docker"
- "gotest.tools/v3/icmd"
- )
- var (
- e2ePath = flag.String("e2e-path", ".", "Set path to the e2e directory")
- dockerCliPath = os.Getenv("DOCKERCLI_BINARY")
- dockerCli dockerCliCommand
- testContextName = "testAwsContextToBeRemoved"
- )
- type dockerCliCommand struct {
- path string
- cliPluginDir string
- }
- type ConfigFileOperator func(configFile *dockerConfigFile.ConfigFile)
- func (d dockerCliCommand) createTestCmd(ops ...ConfigFileOperator) (icmd.Cmd, func(), docker.AwsContext) {
- configDir, err := ioutil.TempDir("", "config")
- if err != nil {
- panic(err)
- }
- configFilePath := filepath.Join(configDir, "config.json")
- config := dockerConfigFile.ConfigFile{
- CLIPluginsExtraDirs: []string{
- d.cliPluginDir,
- },
- Filename: configFilePath,
- }
- for _, op := range ops {
- op(&config)
- }
- configFile, err := os.Create(configFilePath)
- if err != nil {
- panic(err)
- }
- defer configFile.Close()
- err = json.NewEncoder(configFile).Encode(config)
- if err != nil {
- panic(err)
- }
- awsContext := docker.AwsContext{
- Profile: "sandbox.devtools.developer",
- Region: "eu-west-3",
- }
- testStore, err := docker.NewContextWithStore(testContextName, awsContext, filepath.Join(configDir, "contexts"))
- if err != nil {
- panic(err)
- }
- cleanup := func() {
- fmt.Println("cleanup")
- testStore.Remove(testContextName)
- os.RemoveAll(configDir)
- }
- env := append(os.Environ(),
- "DOCKER_CONFIG="+configDir,
- "DOCKER_CLI_EXPERIMENTAL=enabled") // TODO: Remove this once docker ecs plugin is no more experimental
- return icmd.Cmd{Env: env}, cleanup, awsContext
- }
- func (d dockerCliCommand) Command(args ...string) []string {
- return append([]string{d.path, "--context", testContextName}, args...)
- }
- func TestMain(m *testing.M) {
- flag.Parse()
- if err := os.Chdir(*e2ePath); err != nil {
- panic(err)
- }
- cwd, err := os.Getwd()
- if err != nil {
- panic(err)
- }
- dockerEcs := os.Getenv("DOCKERECS_BINARY")
- if dockerEcs == "" {
- dockerEcs = filepath.Join(cwd, "../dist/docker-ecs")
- }
- dockerEcs, err = filepath.Abs(dockerEcs)
- if err != nil {
- panic(err)
- }
- if dockerCliPath == "" {
- dockerCliPath = "docker"
- } else {
- dockerCliPath, err = filepath.Abs(dockerCliPath)
- if err != nil {
- panic(err)
- }
- }
- // Prepare docker cli to call the docker-ecs plugin binary:
- // - Create a symbolic link with the dockerEcs binary to the plugin directory
- cliPluginDir, err := ioutil.TempDir("", "configContent")
- if err != nil {
- panic(err)
- }
- defer os.RemoveAll(cliPluginDir)
- createDockerECSSymLink(dockerEcs, cliPluginDir)
- dockerCli = dockerCliCommand{path: dockerCliPath, cliPluginDir: cliPluginDir}
- os.Exit(m.Run())
- }
- func createDockerECSSymLink(dockerEcs, configDir string) {
- dockerEcsExecName := "docker-ecs"
- if runtime.GOOS == "windows" {
- dockerEcsExecName += ".exe"
- }
- if err := os.Symlink(dockerEcs, filepath.Join(configDir, dockerEcsExecName)); err != nil {
- panic(err)
- }
- }
|