BeforeEach(func() { task1 = &fakeTask{TaskName: "task1"} task2 = &fakeTask{TaskName: "task2"} pipeline := task.NewPipeline("some-name", logger, task1, task2) finalArtifact, runErr = pipeline.Run(originalArtifact) }) It("executes all tasks with given artifact", func() { Expect(task1.Artifact).To(Equal(originalArtifact)) Expect(task2.Artifact.Path()).To(Equal("task1")) }) It("returns the artifact of the last task", func() { Expect(finalArtifact.Path()).To(Equal("task2")) }) It("logs each step", func() { Expect(log).To(ContainSequence( Info(Data("event", "starting", "pipeline", "some-name", "task", "task1")), Info(Data("event", "done", "pipeline", "some-name", "task", "task1")), Info(Data("event", "starting", "pipeline", "some-name", "task", "task2")), Info(Data("event", "done", "pipeline", "some-name", "task", "task2")), )) }) It("does not return an error", func() { Expect(runErr).ToNot(HaveOccurred()) }) })
renameTask := task.NewRename(finalPath, logger) renamedArtifact, runErr = renameTask.Run(artifact) }) AfterEach(func() { os.Remove(tmpDirPath) }) It("renames the artifact on disk", func() { Expect(originalPath).ToNot(BeAnExistingFile()) Expect(finalPath).To(BeAnExistingFile()) }) It("returns artifact with the new path", func() { Expect(renamedArtifact.Path()).To(Equal(finalPath)) }) It("does not return error", func() { Expect(runErr).ToNot(HaveOccurred()) }) It("provides logging", func() { Expect(log).To(gbytes.Say(fmt.Sprintf(`{"event":"starting","source":"%s","target":"%s","task":"rename"}`, originalPath, finalPath))) Expect(log).To(gbytes.Say(fmt.Sprintf(`{"event":"done","source":"%s","target":"%s","task":"rename"}`, originalPath, finalPath))) }) Context("when an error occurs", func() { BeforeEach(func() { originalPath = "path/to/nowhere" artifact := task.NewArtifact(originalPath)
fakeRedisClient = &fakes.Client{ ExpectedRDBPath: expectedArtifactPath, } timeout = 123 * time.Second logger = lager.NewLogger("logger") log = gbytes.NewBuffer() logger.RegisterSink(lager.NewWriterSink(log, lager.INFO)) snapshotter = backup.NewSnapshotter(fakeRedisClient, timeout, logger) }) JustBeforeEach(func() { artifact, err = snapshotter.Snapshot() }) It("creates an artifact with the right path", func() { Expect(artifact.Path()).To(Equal(expectedArtifactPath)) }) It("does not return an error", func() { Expect(err).ToNot(HaveOccurred()) }) It("runs bgsave on client and waits for completion of save", func() { Expect(fakeRedisClient.RunBGSaveCallCount).To(Equal(1)) Expect(fakeRedisClient.WaitForNewSaveSinceCallCount).To(Equal(1)) }) It("provides logging", func() { Expect(log).To(gbytes.Say(fmt.Sprintf(`{"event":"starting","task":"create-snapshot","timeout":"%s"}`, timeout.String()))) Expect(log).To(gbytes.Say(fmt.Sprintf(`{"event":"done","task":"create-snapshot","timeout":"%s"}`, timeout.String()))) Expect(log).To(gbytes.Say(`{"event":"starting","task":"get-rdb-path"}`))
_, actualTimeout, _ := providerFactory.SnapshotterProviderArgsForCall(0) Expect(actualTimeout).To(Equal(expectedTimeout)) }) It("creates the snapshotter with the correct logger", func() { _, _, actualLogger := providerFactory.SnapshotterProviderArgsForCall(0) Expect(actualLogger).To(Equal(logger)) }) It("takes a snapshot", func() { Expect(snapshotter.SnapshotCallCount()).To(Equal(1)) }) It("creates the rename task with a new path that is different from the initial artifact", func() { newPath, _ := providerFactory.RenameTaskProviderArgsForCall(0) Expect(newPath).ToNot(Equal(initialArtifact.Path())) }) It("creates the rename task with the correct logger", func() { _, actualLogger := providerFactory.RenameTaskProviderArgsForCall(0) Expect(actualLogger).To(Equal(logger)) }) It("creates the s3 upload task with the correct bucket name", func() { actualBucketName, _, _, _, _, _, _ := providerFactory.S3UploadTaskProviderArgsForCall(0) Expect(actualBucketName).To(Equal(expectedBucketName)) }) It("creates the s3 upload task with the correct target path", func() { _, actualTargetPath, _, _, _, _, _ := providerFactory.S3UploadTaskProviderArgsForCall(0) Expect(actualTargetPath).To(Equal(expectedTargetPath))