From 07a57469dbf9fa8b929554203782d0b7ac889b4f Mon Sep 17 00:00:00 2001
From: Guillaume Lours <guillaume.lours@docker.com>
Date: Wed, 13 May 2020 18:02:52 +0200
Subject: [PATCH] Add unit tests version of migration tests instead of e2e one

Signed-off-by: Guillaume Lours <guillaume.lours@docker.com>
Signed-off-by: Nicolas De Loof <nicolas.deloof@gmail.com>
---
 ecs/go.sum                                    |  1 +
 ecs/pkg/amazon/cloudformation_test.go         | 49 +++++++++++++++++++
 .../simple-single-service-with-overrides.yaml |  0
 .../testdata/input/simple-single-service.yaml |  0
 .../simple-cloudformation-conversion.golden   |  0
 ...formation-with-overrides-conversion.golden |  0
 ecs/pkg/compose/opts.go                       |  4 +-
 ecs/pkg/compose/project.go                    |  2 +-
 ecs/pkg/compose/project_test.go               |  8 +--
 ecs/tests/compose_command_test.go             | 49 -------------------
 10 files changed, 57 insertions(+), 56 deletions(-)
 create mode 100644 ecs/pkg/amazon/cloudformation_test.go
 rename ecs/{tests => pkg/amazon}/testdata/input/simple-single-service-with-overrides.yaml (100%)
 rename ecs/{tests => pkg/amazon}/testdata/input/simple-single-service.yaml (100%)
 rename ecs/{tests => pkg/amazon}/testdata/simple/simple-cloudformation-conversion.golden (100%)
 rename ecs/{tests => pkg/amazon}/testdata/simple/simple-cloudformation-with-overrides-conversion.golden (100%)
 delete mode 100644 ecs/tests/compose_command_test.go

diff --git a/ecs/go.sum b/ecs/go.sum
index 5ca9a4bfc..9088eaf22 100644
--- a/ecs/go.sum
+++ b/ecs/go.sum
@@ -213,6 +213,7 @@ github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0j
 github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
 github.com/miekg/pkcs11 v1.0.3 h1:iMwmD7I5225wv84WxIG/bmxz9AXjWvTWIbM/TYHvWtw=
 github.com/miekg/pkcs11 v1.0.3/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs=
+github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y=
 github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
 github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE=
 github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
diff --git a/ecs/pkg/amazon/cloudformation_test.go b/ecs/pkg/amazon/cloudformation_test.go
new file mode 100644
index 000000000..e45073385
--- /dev/null
+++ b/ecs/pkg/amazon/cloudformation_test.go
@@ -0,0 +1,49 @@
+package amazon
+
+import (
+	"fmt"
+	"testing"
+
+	"github.com/docker/ecs-plugin/pkg/compose"
+	"gotest.tools/v3/golden"
+)
+
+func TestSimpleConvert(t *testing.T) {
+	options := compose.ProjectOptions{
+		Name:        t.Name(),
+		ConfigPaths: []string{"testdata/input/simple-single-service.yaml"},
+	}
+	result := convertResultAsString(t, options, "TestCluster")
+	expected := "simple/simple-cloudformation-conversion.golden"
+	golden.Assert(t, result, expected)
+}
+
+func TestSimpleWithOverrides(t *testing.T) {
+	options := compose.ProjectOptions{
+		Name:        t.Name(),
+		ConfigPaths: []string{"testdata/input/simple-single-service.yaml", "testdata/input/simple-single-service-with-overrides.yaml"},
+	}
+	result := convertResultAsString(t, options, "TestCluster")
+	expected := "simple/simple-cloudformation-with-overrides-conversion.golden"
+	golden.Assert(t, result, expected)
+}
+
+func convertResultAsString(t *testing.T, options compose.ProjectOptions, clusterName string) string {
+	project, err := compose.ProjectFromOptions(&options)
+	if err != nil {
+		t.Error(err)
+	}
+	client, err := NewClient("", clusterName, "")
+	if err != nil {
+		t.Error(err)
+	}
+	result, err := client.Convert(project)
+	if err != nil {
+		t.Error(err)
+	}
+	resultAsJSON, err := result.JSON()
+	if err != nil {
+		t.Error(err)
+	}
+	return fmt.Sprintf("%s\n", string(resultAsJSON))
+}
diff --git a/ecs/tests/testdata/input/simple-single-service-with-overrides.yaml b/ecs/pkg/amazon/testdata/input/simple-single-service-with-overrides.yaml
similarity index 100%
rename from ecs/tests/testdata/input/simple-single-service-with-overrides.yaml
rename to ecs/pkg/amazon/testdata/input/simple-single-service-with-overrides.yaml
diff --git a/ecs/tests/testdata/input/simple-single-service.yaml b/ecs/pkg/amazon/testdata/input/simple-single-service.yaml
similarity index 100%
rename from ecs/tests/testdata/input/simple-single-service.yaml
rename to ecs/pkg/amazon/testdata/input/simple-single-service.yaml
diff --git a/ecs/tests/testdata/simple/simple-cloudformation-conversion.golden b/ecs/pkg/amazon/testdata/simple/simple-cloudformation-conversion.golden
similarity index 100%
rename from ecs/tests/testdata/simple/simple-cloudformation-conversion.golden
rename to ecs/pkg/amazon/testdata/simple/simple-cloudformation-conversion.golden
diff --git a/ecs/tests/testdata/simple/simple-cloudformation-with-overrides-conversion.golden b/ecs/pkg/amazon/testdata/simple/simple-cloudformation-with-overrides-conversion.golden
similarity index 100%
rename from ecs/tests/testdata/simple/simple-cloudformation-with-overrides-conversion.golden
rename to ecs/pkg/amazon/testdata/simple/simple-cloudformation-with-overrides-conversion.golden
diff --git a/ecs/pkg/compose/opts.go b/ecs/pkg/compose/opts.go
index 9e9bdeee0..d2fef0c9d 100644
--- a/ecs/pkg/compose/opts.go
+++ b/ecs/pkg/compose/opts.go
@@ -7,12 +7,12 @@ import (
 
 type ProjectOptions struct {
 	ConfigPaths []string
-	name        string
+	Name        string
 }
 
 func (o *ProjectOptions) AddFlags(flags *pflag.FlagSet) {
 	flags.StringArrayVarP(&o.ConfigPaths, "file", "f", nil, "Specify an alternate compose file")
-	flags.StringVarP(&o.name, "project-name", "n", "", "Specify an alternate project name (default: directory name)")
+	flags.StringVarP(&o.Name, "project-name", "n", "", "Specify an alternate project name (default: directory name)")
 }
 
 type ProjectFunc func(project *Project, args []string) error
diff --git a/ecs/pkg/compose/project.go b/ecs/pkg/compose/project.go
index e17e22527..5c244b2c4 100644
--- a/ecs/pkg/compose/project.go
+++ b/ecs/pkg/compose/project.go
@@ -40,7 +40,7 @@ func ProjectFromOptions(options *ProjectOptions) (*Project, error) {
 		return nil, err
 	}
 
-	name := options.name
+	name := options.Name
 	if name == "" {
 		name = os.Getenv("COMPOSE_PROJECT_NAME")
 	}
diff --git a/ecs/pkg/compose/project_test.go b/ecs/pkg/compose/project_test.go
index 2906c9d21..733f34f03 100644
--- a/ecs/pkg/compose/project_test.go
+++ b/ecs/pkg/compose/project_test.go
@@ -9,14 +9,14 @@ import (
 
 func Test_project_name(t *testing.T) {
 	p, err := ProjectFromOptions(&ProjectOptions{
-		name:        "my_project",
+		Name:        "my_project",
 		ConfigPaths: []string{"testdata/simple/compose.yaml"},
 	})
 	assert.NilError(t, err)
 	assert.Equal(t, p.Name, "my_project")
 
 	p, err = ProjectFromOptions(&ProjectOptions{
-		name:        "",
+		Name:        "",
 		ConfigPaths: []string{"testdata/simple/compose.yaml"},
 	})
 	assert.NilError(t, err)
@@ -24,7 +24,7 @@ func Test_project_name(t *testing.T) {
 
 	os.Setenv("COMPOSE_PROJECT_NAME", "my_project_from_env")
 	p, err = ProjectFromOptions(&ProjectOptions{
-		name:        "",
+		Name:        "",
 		ConfigPaths: []string{"testdata/simple/compose.yaml"},
 	})
 	assert.NilError(t, err)
@@ -33,7 +33,7 @@ func Test_project_name(t *testing.T) {
 
 func Test_project_from_set_of_files(t *testing.T) {
 	p, err := ProjectFromOptions(&ProjectOptions{
-		name: "my_project",
+		Name: "my_project",
 		ConfigPaths: []string{
 			"testdata/simple/compose.yaml",
 			"testdata/simple/compose-with-overrides.yaml",
diff --git a/ecs/tests/compose_command_test.go b/ecs/tests/compose_command_test.go
deleted file mode 100644
index 0bdb94bc3..000000000
--- a/ecs/tests/compose_command_test.go
+++ /dev/null
@@ -1,49 +0,0 @@
-package tests
-
-import (
-	"testing"
-
-	"gotest.tools/v3/fs"
-	"gotest.tools/v3/golden"
-	"gotest.tools/v3/icmd"
-)
-
-const (
-	composeFileName = "compose.yaml"
-)
-
-func TestSimpleConvert(t *testing.T) {
-	cmd, cleanup := dockerCli.createTestCmd()
-	defer cleanup()
-
-	composeYAML := golden.Get(t, "input/simple-single-service.yaml")
-	tmpDir := fs.NewDir(t, t.Name(),
-		fs.WithFile(composeFileName, "", fs.WithBytes(composeYAML)),
-	)
-	defer tmpDir.Remove()
-
-	cmd.Command = dockerCli.Command("ecs", "compose", "--file="+tmpDir.Join(composeFileName), "--project-name", t.Name(), "convert")
-	result := icmd.RunCmd(cmd).Assert(t, icmd.Success).Combined()
-
-	expected := "simple/simple-cloudformation-conversion.golden"
-	golden.Assert(t, result, expected)
-}
-
-func TestSimpleWithOverrides(t *testing.T) {
-	cmd, cleanup := dockerCli.createTestCmd()
-	defer cleanup()
-
-	composeYAML := golden.Get(t, "input/simple-single-service.yaml")
-	overriddenComposeYAML := golden.Get(t, "input/simple-single-service-with-overrides.yaml")
-	tmpDir := fs.NewDir(t, t.Name(),
-		fs.WithFile(composeFileName, "", fs.WithBytes(composeYAML)),
-		fs.WithFile("overriddenService.yaml", "", fs.WithBytes(overriddenComposeYAML)),
-	)
-	defer tmpDir.Remove()
-	cmd.Command = dockerCli.Command("ecs", "compose", "--file="+tmpDir.Join(composeFileName), "--file",
-		tmpDir.Join("overriddenService.yaml"), "--project-name", t.Name(), "convert")
-	result := icmd.RunCmd(cmd).Assert(t, icmd.Success).Combined()
-
-	expected := "simple/simple-cloudformation-with-overrides-conversion.golden"
-	golden.Assert(t, result, expected)
-}