From 6f6e1635fdb5c9625d22db445ca4f25c6a92f73e Mon Sep 17 00:00:00 2001 From: Nicolas De Loof Date: Thu, 25 May 2023 16:23:16 +0200 Subject: [PATCH] compute service hash with a default DeployConfig Signed-off-by: Nicolas De Loof --- pkg/compose/hash.go | 9 +++++---- pkg/e2e/up_test.go | 19 +++++++++++++++++-- 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/pkg/compose/hash.go b/pkg/compose/hash.go index 672af0ffc..c4a4c91a4 100644 --- a/pkg/compose/hash.go +++ b/pkg/compose/hash.go @@ -28,11 +28,12 @@ func ServiceHash(o types.ServiceConfig) (string, error) { // remove the Build config when generating the service hash o.Build = nil o.PullPolicy = "" - o.Scale = 1 - if o.Deploy != nil { - var one uint64 = 1 - o.Deploy.Replicas = &one + if o.Deploy == nil { + o.Deploy = &types.DeployConfig{} } + o.Scale = 1 + var one uint64 = 1 + o.Deploy.Replicas = &one bytes, err := json.Marshal(o) if err != nil { return "", err diff --git a/pkg/e2e/up_test.go b/pkg/e2e/up_test.go index de34d76c2..f2217297b 100644 --- a/pkg/e2e/up_test.go +++ b/pkg/e2e/up_test.go @@ -23,13 +23,14 @@ import ( "context" "os" "os/exec" + "strings" "syscall" "testing" "time" "github.com/docker/compose/v2/pkg/utils" - "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + "gotest.tools/v3/assert" "gotest.tools/v3/icmd" ) @@ -79,7 +80,7 @@ func TestUpDependenciesNotStopped(t *testing.T) { defer cancel() cmd, err := StartWithNewGroupID(ctx, testCmd, upOut, nil) - assert.NoError(t, err, "Failed to run compose up") + assert.NilError(t, err, "Failed to run compose up") t.Log("Waiting for containers to be in running state") upOut.RequireEventuallyContains(t, "hello app") @@ -138,3 +139,17 @@ func TestUpWithDependencyExit(t *testing.T) { res.Assert(t, icmd.Expected{ExitCode: 1, Err: "dependency failed to start: container dependencies-db-1 exited (1)"}) }) } + +func TestScaleDoesntRecreate(t *testing.T) { + c := NewCLI(t) + const projectName = "compose-e2e-scale" + t.Cleanup(func() { + c.RunDockerComposeCmd(t, "--project-name", projectName, "down") + }) + + c.RunDockerComposeCmd(t, "-f", "fixtures/simple-composefile/compose.yaml", "--project-name", projectName, "up", "-d") + + res := c.RunDockerComposeCmd(t, "-f", "fixtures/simple-composefile/compose.yaml", "--project-name", projectName, "up", "--scale", "simple=2", "-d") + assert.Check(t, !strings.Contains(res.Combined(), "Recreated")) + +}