From 935968fe2cdcf866f5899c296ca81c7c0d3f43ec Mon Sep 17 00:00:00 2001 From: Guillaume Lours <705411+glours@users.noreply.github.com> Date: Wed, 21 Dec 2022 15:20:39 +0100 Subject: [PATCH 1/5] add buildx plugin to e2e configuration directory Signed-off-by: Guillaume Lours <705411+glours@users.noreply.github.com> --- pkg/e2e/framework.go | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/pkg/e2e/framework.go b/pkg/e2e/framework.go index 5cc846f523..284d7f3ac9 100644 --- a/pkg/e2e/framework.go +++ b/pkg/e2e/framework.go @@ -44,9 +44,12 @@ var ( // DockerComposeExecutableName is the OS dependent Docker CLI binary name DockerComposeExecutableName = "docker-" + compose.PluginName - // DockerScanExecutableName is the OS dependent Docker CLI binary name + // DockerScanExecutableName is the OS dependent Docker Scan plugin binary name DockerScanExecutableName = "docker-scan" + // DockerBuildxExecutableName is the Os dependent Buildx plugin binary name + DockerBuildxExecutableName = "docker-buildx" + // WindowsExecutableSuffix is the Windows executable suffix WindowsExecutableSuffix = ".exe" ) @@ -56,6 +59,7 @@ func init() { DockerExecutableName += WindowsExecutableSuffix DockerComposeExecutableName += WindowsExecutableSuffix DockerScanExecutableName += WindowsExecutableSuffix + DockerBuildxExecutableName += WindowsExecutableSuffix } } @@ -133,8 +137,13 @@ func initializePlugins(t testing.TB, configDir string) { if os.IsNotExist(err) { t.Logf("WARNING: docker-compose cli-plugin not found") } + buildxPlugin, err := findPluginExecutable(DockerBuildxExecutableName) + if os.IsNotExist(err) { + t.Logf("WARNING: docker-buildx cli-plugin not found") + } if err == nil { CopyFile(t, composePlugin, filepath.Join(configDir, "cli-plugins", DockerComposeExecutableName)) + CopyFile(t, buildxPlugin, filepath.Join(configDir, "cli-plugins", DockerBuildxExecutableName)) // We don't need a functional scan plugin, but a valid plugin binary CopyFile(t, composePlugin, filepath.Join(configDir, "cli-plugins", DockerScanExecutableName)) } @@ -166,6 +175,22 @@ func findExecutable(executableName string) (string, error) { return "", errors.Wrap(os.ErrNotExist, "executable not found") } +func findPluginExecutable(pluginExecutableName string) (string, error) { + dockerUserDir := ".docker/cli-plugins" + userDir, err := os.UserHomeDir() + if err != nil { + return "", err + } + bin, err := filepath.Abs(filepath.Join(userDir, dockerUserDir, pluginExecutableName)) + if err != nil { + return "", err + } + if _, err := os.Stat(bin); err == nil { + return bin, nil + } + return "", errors.Wrap(os.ErrNotExist, fmt.Sprintf("plugin not found %s", pluginExecutableName)) +} + // CopyFile copies a file from a sourceFile to a destinationFile setting permissions to 0755 func CopyFile(t testing.TB, sourceFile string, destinationFile string) { t.Helper() From 27a3241934af61052e0165f93b19348583feaaa9 Mon Sep 17 00:00:00 2001 From: Guillaume Lours <705411+glours@users.noreply.github.com> Date: Wed, 21 Dec 2022 16:11:56 +0100 Subject: [PATCH 2/5] rely on CI timeout Signed-off-by: Guillaume Lours <705411+glours@users.noreply.github.com> --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 83adbbdae0..6b2c7fd606 100644 --- a/Makefile +++ b/Makefile @@ -34,7 +34,7 @@ ifeq ($(DETECTED_OS),Windows) endif TEST_COVERAGE_FLAGS = -race -coverprofile=coverage.out -covermode=atomic -TEST_FLAGS?= -timeout 15m +TEST_FLAGS?= E2E_TEST?= ifeq ($(E2E_TEST),) else From 86a648bd518ee0e76975daba9f30b6ecdeb63c13 Mon Sep 17 00:00:00 2001 From: Guillaume Lours <705411+glours@users.noreply.github.com> Date: Wed, 21 Dec 2022 18:38:24 +0100 Subject: [PATCH 3/5] e2e tests display Compose version used to run the test currently the version displayed is the one installed and not the one use for the tests Signed-off-by: Guillaume Lours <705411+glours@users.noreply.github.com> --- Makefile | 2 -- pkg/e2e/framework.go | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/Makefile b/Makefile index 6b2c7fd606..adda99de55 100644 --- a/Makefile +++ b/Makefile @@ -61,12 +61,10 @@ install: binary .PHONY: e2e-compose e2e-compose: ## Run end to end local tests in plugin mode. Set E2E_TEST=TestName to run a single test - docker compose version go test $(TEST_FLAGS) $(TEST_COVERAGE_FLAGS) -count=1 ./pkg/e2e .PHONY: e2e-compose-standalone e2e-compose-standalone: ## Run End to end local tests in standalone mode. Set E2E_TEST=TestName to run a single test - docker-compose version go test $(TEST_FLAGS) -v -count=1 -parallel=1 --tags=standalone ./pkg/e2e .PHONY: build-and-e2e-compose diff --git a/pkg/e2e/framework.go b/pkg/e2e/framework.go index 284d7f3ac9..c7dacaef71 100644 --- a/pkg/e2e/framework.go +++ b/pkg/e2e/framework.go @@ -103,7 +103,7 @@ func NewCLI(t testing.TB, opts ...CLIOption) *CLI { for _, opt := range opts { opt(c) } - + t.Log(c.RunDockerComposeCmdNoCheck(t, "version").Combined()) return c } From c72f161afb6bf7af12bc5f8e0ed358746fd05cb5 Mon Sep 17 00:00:00 2001 From: Guillaume Lours <705411+glours@users.noreply.github.com> Date: Wed, 21 Dec 2022 19:27:03 +0100 Subject: [PATCH 4/5] change the way finding the just built compose binary Signed-off-by: Guillaume Lours <705411+glours@users.noreply.github.com> --- pkg/e2e/framework.go | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/pkg/e2e/framework.go b/pkg/e2e/framework.go index c7dacaef71..62fe33bc77 100644 --- a/pkg/e2e/framework.go +++ b/pkg/e2e/framework.go @@ -134,8 +134,8 @@ func initializePlugins(t testing.TB, configDir string) { require.NoError(t, os.MkdirAll(filepath.Join(configDir, "cli-plugins"), 0o755), "Failed to create cli-plugins directory") composePlugin, err := findExecutable(DockerComposeExecutableName) - if os.IsNotExist(err) { - t.Logf("WARNING: docker-compose cli-plugin not found") + if err != nil { + t.Errorf("WARNING: docker-compose cli-plugin not found %s", err.Error()) } buildxPlugin, err := findPluginExecutable(DockerBuildxExecutableName) if os.IsNotExist(err) { @@ -159,8 +159,11 @@ func dirContents(dir string) []string { } func findExecutable(executableName string) (string, error) { - _, filename, _, _ := runtime.Caller(0) - root := filepath.Join(filepath.Dir(filename), "..", "..") + filename, err := os.Getwd() + if err != nil { + return "", err + } + root := filepath.Join(filepath.Dir(filename), "..") buildPath := filepath.Join(root, "bin", "build") bin, err := filepath.Abs(filepath.Join(buildPath, executableName)) From 5dcadc05d97e372af2933aefdbd225a92bdec981 Mon Sep 17 00:00:00 2001 From: Guillaume Lours <705411+glours@users.noreply.github.com> Date: Wed, 21 Dec 2022 20:06:22 +0100 Subject: [PATCH 5/5] debut output for CI Signed-off-by: Guillaume Lours <705411+glours@users.noreply.github.com> --- pkg/e2e/framework.go | 32 ++++++++++++++++++++++++-------- 1 file changed, 24 insertions(+), 8 deletions(-) diff --git a/pkg/e2e/framework.go b/pkg/e2e/framework.go index 62fe33bc77..9c90bc2d5e 100644 --- a/pkg/e2e/framework.go +++ b/pkg/e2e/framework.go @@ -133,17 +133,19 @@ func initializePlugins(t testing.TB, configDir string) { require.NoError(t, os.MkdirAll(filepath.Join(configDir, "cli-plugins"), 0o755), "Failed to create cli-plugins directory") - composePlugin, err := findExecutable(DockerComposeExecutableName) + composePlugin, err := findExecutable(t, DockerComposeExecutableName) if err != nil { t.Errorf("WARNING: docker-compose cli-plugin not found %s", err.Error()) } - buildxPlugin, err := findPluginExecutable(DockerBuildxExecutableName) - if os.IsNotExist(err) { - t.Logf("WARNING: docker-buildx cli-plugin not found") - } + if err == nil { CopyFile(t, composePlugin, filepath.Join(configDir, "cli-plugins", DockerComposeExecutableName)) - CopyFile(t, buildxPlugin, filepath.Join(configDir, "cli-plugins", DockerBuildxExecutableName)) + buildxPlugin, err := findPluginExecutable(DockerBuildxExecutableName) + if err != nil { + t.Logf("WARNING: docker-buildx cli-plugin not found, using default buildx installation.") + } else { + CopyFile(t, buildxPlugin, filepath.Join(configDir, "cli-plugins", DockerBuildxExecutableName)) + } // We don't need a functional scan plugin, but a valid plugin binary CopyFile(t, composePlugin, filepath.Join(configDir, "cli-plugins", DockerScanExecutableName)) } @@ -158,19 +160,24 @@ func dirContents(dir string) []string { return res } -func findExecutable(executableName string) (string, error) { +func findExecutable(t testing.TB, executableName string) (string, error) { filename, err := os.Getwd() if err != nil { return "", err } + t.Logf("Current dir %s", filename) root := filepath.Join(filepath.Dir(filename), "..") + t.Logf("Root dir %s", root) + buildPath := filepath.Join(root, "bin", "build") bin, err := filepath.Abs(filepath.Join(buildPath, executableName)) if err != nil { + t.Errorf("Error finding compose binary %s", err.Error()) return "", err } + t.Logf("binary path %s", bin) if _, err := os.Stat(bin); err == nil { return bin, nil } @@ -197,19 +204,28 @@ func findPluginExecutable(pluginExecutableName string) (string, error) { // CopyFile copies a file from a sourceFile to a destinationFile setting permissions to 0755 func CopyFile(t testing.TB, sourceFile string, destinationFile string) { t.Helper() + t.Logf("copy %s to %s", sourceFile, destinationFile) src, err := os.Open(sourceFile) require.NoError(t, err, "Failed to open source file: %s") //nolint:errcheck defer src.Close() + t.Logf("Source file opened %s ", src.Name()) dst, err := os.OpenFile(destinationFile, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0o755) require.NoError(t, err, "Failed to open destination file: %s", destinationFile) //nolint:errcheck defer dst.Close() + t.Logf("Destination file opened %s ", dst.Name()) _, err = io.Copy(dst, src) require.NoError(t, err, "Failed to copy file: %s", sourceFile) + t.Logf("File copied? %s ", err) + fileStat, err := dst.Stat() + if err != nil { + t.Logf("Can't get file stat %s ", err) + } + t.Logf("File stat: %+v", fileStat) } // BaseEnvironment provides the minimal environment variables used across all @@ -330,7 +346,7 @@ func ComposeStandalonePath(t testing.TB) string { if !composeStandaloneMode { require.Fail(t, "Not running in standalone mode") } - composeBinary, err := findExecutable(DockerComposeExecutableName) + composeBinary, err := findExecutable(t, DockerComposeExecutableName) require.NoError(t, err, "Could not find standalone Compose binary (%q)", DockerComposeExecutableName) return composeBinary