Skip to content

Commit

Permalink
test(dockerfile): test digest change when RUN with --mount from anoth…
Browse files Browse the repository at this point in the history
…er stage used

Signed-off-by: Timofey Kirillov <timofey.kirillov@flant.com>
  • Loading branch information
distorhead committed Jun 1, 2022
1 parent bf1f2d0 commit a655a35
Show file tree
Hide file tree
Showing 3 changed files with 76 additions and 4 deletions.
2 changes: 1 addition & 1 deletion pkg/build/stage/dependencies_test.go
Expand Up @@ -15,7 +15,7 @@ var _ = Describe("DependenciesStage", func() {
func(data TestDependencies) {
ctx := context.Background()

conveyor := NewConveyorStubForDependencies(NewGiterminismManagerStub(NewLocalGitRepoStub("9d8059842b6fde712c58315ca0ab4713d90761c0")), data.Dependencies)
conveyor := NewConveyorStubForDependencies(NewGiterminismManagerStub(NewLocalGitRepoStub("9d8059842b6fde712c58315ca0ab4713d90761c0"), NewGiterminismInspectorStub()), data.Dependencies)
containerBackend := NewContainerBackendMock()

stage := newDependenciesStage(nil, GetConfigDependencies(data.Dependencies), "example-stage", &NewBaseStageOptions{
Expand Down
52 changes: 50 additions & 2 deletions pkg/build/stage/dockerfile_test.go
Expand Up @@ -64,7 +64,7 @@ var _ = Describe("DockerfileStage", func() {
func(data TestDockerfileDependencies) {
ctx := context.Background()

conveyor := NewConveyorStubForDependencies(NewGiterminismManagerStub(NewLocalGitRepoStub("9d8059842b6fde712c58315ca0ab4713d90761c0")), data.TestDependencies.Dependencies)
conveyor := NewConveyorStubForDependencies(NewGiterminismManagerStub(NewLocalGitRepoStub("9d8059842b6fde712c58315ca0ab4713d90761c0"), NewGiterminismInspectorStub()), data.TestDependencies.Dependencies)
containerBackend := NewContainerBackendMock()

dockerStages, dockerMetaArgs := testDockerfileToDockerStages(data.Dockerfile)
Expand Down Expand Up @@ -289,7 +289,7 @@ RUN echo hello

ctx := context.Background()

conveyor := NewConveyorStubForDependencies(NewGiterminismManagerStub(NewLocalGitRepoStub("9d8059842b6fde712c58315ca0ab4713d90761c0")), nil)
conveyor := NewConveyorStubForDependencies(NewGiterminismManagerStub(NewLocalGitRepoStub("9d8059842b6fde712c58315ca0ab4713d90761c0"), NewGiterminismInspectorStub()), nil)

dockerStages, dockerMetaArgs := testDockerfileToDockerStages(dockerfile)

Expand All @@ -303,6 +303,54 @@ RUN echo hello
Expect(IsErrInvalidBaseImage(err)).To(BeTrue())
})
})

When("Dockerfile uses run with mount from another stage", func() {
It("should change dockerfile stage digest when base stage context has changed", func() {
dockerfile := []byte(`
FROM alpnie:latest AS build
WORKDIR /usr/local/test_project
COPY . .
RUN mkdir -p dist && \
cp -v main.py dist/prog.py
FROM alpine:latest
RUN --mount=type=bind,from=build,source=/usr/local/test_project/dist,target=/usr/test_project/dist \
cp -v /usr/test_project/dist/prog.py /usr/local/bin/prog
`)

ctx := context.Background()

gitRepoStub := NewLocalGitRepoStub("9d8059842b6fde712c58315ca0ab4713d90761c0")

conveyor := NewConveyorStubForDependencies(NewGiterminismManagerStub(gitRepoStub, NewGiterminismInspectorStub()), nil)

dockerStages, dockerMetaArgs := testDockerfileToDockerStages(dockerfile)

stage := newTestDockerfileStage(dockerfile, "", nil, dockerStages, dockerMetaArgs, nil)

containerBackend := NewContainerBackendMock()

img := NewLegacyImageStub()
stageBuilder := stage_builder.NewStageBuilder(containerBackend, nil, img)
stageImage := &StageImage{
Image: img,
Builder: stageBuilder,
}

{
digest, err := stage.GetDependencies(ctx, conveyor, containerBackend, nil, stageImage)
Expect(err).To(Succeed())
Expect(digest).To(Equal("65d219096bc3718c101995b00584d700de791027f2e2ca00635e428932478a1c"))
}

gitRepoStub.headCommitHash = "23a0884072c0d31b7c42dfaa7f0772cbfa33ec75"
{
digest, err := stage.GetDependencies(ctx, conveyor, containerBackend, nil, stageImage)
Expect(err).To(Succeed())
Expect(digest).To(Equal("beb818f2c49f6501194c72449aff59e80be61b405ef39581b01dbf68da927609"))
}
})
})
})

type TestDockerfileDependencies struct {
Expand Down
26 changes: 25 additions & 1 deletion pkg/build/stage/stubs_test.go
Expand Up @@ -3,6 +3,8 @@ package stage
import (
"context"

"github.com/werf/werf/pkg/path_matcher"

v1 "github.com/google/go-containerregistry/pkg/v1"
. "github.com/onsi/gomega"

Expand Down Expand Up @@ -105,15 +107,29 @@ func (c *ConveyorStub) GiterminismManager() giterminism_manager.Interface {
return c.giterminismManager
}

type GiterminismInspectorStub struct {
giterminism_manager.Inspector
}

func NewGiterminismInspectorStub() *GiterminismInspectorStub {
return &GiterminismInspectorStub{}
}

func (inspector *GiterminismInspectorStub) InspectBuildContextFiles(ctx context.Context, matcher path_matcher.PathMatcher) error {
return nil
}

type GiterminismManagerStub struct {
giterminism_manager.Interface

inspector giterminism_manager.Inspector
localGitRepo git_repo.GitRepo
}

func NewGiterminismManagerStub(localGitRepo git_repo.GitRepo) *GiterminismManagerStub {
func NewGiterminismManagerStub(localGitRepo git_repo.GitRepo, inspector giterminism_manager.Inspector) *GiterminismManagerStub {
return &GiterminismManagerStub{
localGitRepo: localGitRepo,
inspector: inspector,
}
}

Expand All @@ -135,6 +151,10 @@ func (manager *GiterminismManagerStub) HeadCommit() string {
return commit
}

func (manager *GiterminismManagerStub) Inspector() giterminism_manager.Inspector {
return manager.inspector
}

type LocalGitRepoStub struct {
git_repo.GitRepo

Expand All @@ -155,6 +175,10 @@ func (repo *LocalGitRepoStub) GetOrCreateArchive(ctx context.Context, opts git_r
return NewGitRepoArchiveStub(), nil
}

func (repo *LocalGitRepoStub) GetOrCreateChecksum(ctx context.Context, opts git_repo.ChecksumOptions) (string, error) {
return repo.headCommitHash, nil
}

type GitRepoArchiveStub struct {
git_repo.Archive
}
Expand Down

0 comments on commit a655a35

Please sign in to comment.