1package templatescompiler_test
2
3import (
4	. "github.com/cloudfoundry/bosh-cli/templatescompiler"
5
6	"bytes"
7	"os"
8
9	. "github.com/onsi/ginkgo"
10	. "github.com/onsi/gomega"
11
12	mock_template "github.com/cloudfoundry/bosh-cli/templatescompiler/mocks"
13	"github.com/golang/mock/gomock"
14
15	bosherr "github.com/cloudfoundry/bosh-utils/errors"
16	boshlog "github.com/cloudfoundry/bosh-utils/logger"
17	fakeboshsys "github.com/cloudfoundry/bosh-utils/system/fakes"
18)
19
20var _ = Describe("RenderedJobListArchive", func() {
21	var mockCtrl *gomock.Controller
22
23	BeforeEach(func() {
24		mockCtrl = gomock.NewController(GinkgoT())
25	})
26
27	AfterEach(func() {
28		mockCtrl.Finish()
29	})
30
31	var (
32		outBuffer *bytes.Buffer
33		logger    boshlog.Logger
34		fs        *fakeboshsys.FakeFileSystem
35
36		mockRenderedJobList *mock_template.MockRenderedJobList
37
38		renderedJobListArchivePath   string
39		renderedJobListArchiveDigest string
40
41		renderedJobListArchive RenderedJobListArchive
42	)
43
44	BeforeEach(func() {
45		outBuffer = bytes.NewBufferString("")
46		logger = boshlog.NewWriterLogger(boshlog.LevelDebug, outBuffer)
47
48		fs = fakeboshsys.NewFakeFileSystem()
49
50		mockRenderedJobList = mock_template.NewMockRenderedJobList(mockCtrl)
51
52		renderedJobListArchivePath = "fake-archive-path"
53		renderedJobListArchiveDigest = "fake-sha1"
54
55		renderedJobListArchive = NewRenderedJobListArchive(
56			mockRenderedJobList,
57			renderedJobListArchivePath,
58			renderedJobListArchiveDigest,
59			fs, logger)
60	})
61
62	Describe("List", func() {
63		It("returns the rendered job list", func() {
64			Expect(renderedJobListArchive.List()).To(Equal(mockRenderedJobList))
65		})
66	})
67
68	Describe("Path", func() {
69		It("returns the rendered job list archive path", func() {
70			Expect(renderedJobListArchive.Path()).To(Equal(renderedJobListArchivePath))
71		})
72	})
73
74	Describe("SHA1", func() {
75		It("returns the rendered job list archive sha1", func() {
76			Expect(renderedJobListArchive.SHA1()).To(Equal(renderedJobListArchiveDigest))
77		})
78	})
79
80	Describe("Delete", func() {
81		It("deletes the rendered job list archive from the file system", func() {
82			err := fs.MkdirAll(renderedJobListArchivePath, os.ModePerm)
83			Expect(err).ToNot(HaveOccurred())
84
85			err = renderedJobListArchive.Delete()
86			Expect(err).ToNot(HaveOccurred())
87			Expect(fs.FileExists(renderedJobListArchivePath)).To(BeFalse())
88		})
89
90		Context("when deleting from the file system fails", func() {
91			JustBeforeEach(func() {
92				fs.RemoveAllStub = func(_ string) error {
93					return bosherr.Error("fake-delete-error")
94				}
95			})
96
97			It("returns an error", func() {
98				err := renderedJobListArchive.Delete()
99				Expect(err).To(HaveOccurred())
100				Expect(err.Error()).To(ContainSubstring("fake-delete-error"))
101			})
102		})
103	})
104
105	Describe("DeleteSilently", func() {
106		It("deletes the rendered job path from the file system", func() {
107			err := fs.MkdirAll(renderedJobListArchivePath, os.ModePerm)
108			Expect(err).ToNot(HaveOccurred())
109
110			renderedJobListArchive.DeleteSilently()
111			Expect(fs.FileExists(renderedJobListArchivePath)).To(BeFalse())
112		})
113
114		Context("when deleting from the file system fails", func() {
115			JustBeforeEach(func() {
116				fs.RemoveAllStub = func(_ string) error {
117					return bosherr.Error("fake-delete-error")
118				}
119			})
120
121			It("logs the error", func() {
122				renderedJobListArchive.DeleteSilently()
123
124				log := outBuffer.String()
125				Expect(log).To(ContainSubstring("Failed to delete rendered job list archive"))
126				Expect(log).To(ContainSubstring("fake-delete-error"))
127			})
128		})
129	})
130})
131