concourse/atc/exec/artifact_output_step_test.go

109 lines
2.8 KiB
Go

package exec_test
import (
"context"
"errors"
"io/ioutil"
"github.com/concourse/concourse/atc"
"github.com/concourse/concourse/atc/db/dbfakes"
"github.com/concourse/concourse/atc/exec"
"github.com/concourse/concourse/atc/exec/build"
"github.com/concourse/concourse/atc/exec/execfakes"
"github.com/concourse/concourse/atc/worker/workerfakes"
. "github.com/onsi/ginkgo"
. "github.com/onsi/gomega"
)
var _ = Describe("ArtifactOutputStep", func() {
var (
ctx context.Context
cancel func()
state exec.RunState
delegate *execfakes.FakeBuildStepDelegate
step exec.Step
stepErr error
plan atc.Plan
fakeBuild *dbfakes.FakeBuild
fakeWorkerClient *workerfakes.FakeClient
)
BeforeEach(func() {
ctx, cancel = context.WithCancel(context.Background())
state = exec.NewRunState()
delegate = new(execfakes.FakeBuildStepDelegate)
delegate.StdoutReturns(ioutil.Discard)
fakeBuild = new(dbfakes.FakeBuild)
fakeWorkerClient = new(workerfakes.FakeClient)
})
AfterEach(func() {
cancel()
})
JustBeforeEach(func() {
plan = atc.Plan{ArtifactOutput: &atc.ArtifactOutputPlan{"some-name"}}
step = exec.NewArtifactOutputStep(plan, fakeBuild, fakeWorkerClient, delegate)
stepErr = step.Run(ctx, state)
})
Context("when the source does not exist", func() {
It("returns the error", func() {
Expect(stepErr).To(HaveOccurred())
})
})
Context("when the source exists", func() {
Context("when the source is not a worker.Volume", func() {
BeforeEach(func() {
fakeSource := new(workerfakes.FakeArtifactSource)
state.ArtifactRepository().RegisterSource(build.ArtifactName("some-name"), fakeSource)
})
It("returns the error", func() {
Expect(stepErr).To(HaveOccurred())
})
})
Context("when the source is a worker.Volume", func() {
var fakeWorkerVolume *workerfakes.FakeVolume
BeforeEach(func() {
fakeWorkerVolume = new(workerfakes.FakeVolume)
fakeWorkerVolume.HandleReturns("handle")
source := exec.NewTaskArtifactSource(fakeWorkerVolume)
state.ArtifactRepository().RegisterSource(build.ArtifactName("some-name"), source)
})
Context("when initializing the artifact fails", func() {
BeforeEach(func() {
fakeWorkerVolume.InitializeArtifactReturns(nil, errors.New("nope"))
})
It("returns the error", func() {
Expect(stepErr).To(HaveOccurred())
})
})
Context("when initializing the artifact succeeds", func() {
var fakeWorkerArtifact *dbfakes.FakeWorkerArtifact
BeforeEach(func() {
fakeWorkerArtifact = new(dbfakes.FakeWorkerArtifact)
fakeWorkerArtifact.IDReturns(0)
fakeWorkerVolume.InitializeArtifactReturns(fakeWorkerArtifact, nil)
})
It("succeeds", func() {
Expect(step.Succeeded()).To(BeTrue())
})
})
})
})
})