44 "errors"
55
66 "github.com/cppforlife/go-patch/patch"
7- semver "github.com/cppforlife/go-semi-semantic/version"
87 . "github.com/onsi/ginkgo"
98 . "github.com/onsi/gomega"
109
@@ -13,18 +12,15 @@ import (
1312 boshdir "github.com/cloudfoundry/bosh-cli/director"
1413 fakedir "github.com/cloudfoundry/bosh-cli/director/fakes"
1514 boshtpl "github.com/cloudfoundry/bosh-cli/director/template"
16- boshrel "github.com/cloudfoundry/bosh-cli/release"
17- fakerel "github.com/cloudfoundry/bosh-cli/release/fakes"
1815 fakeui "github.com/cloudfoundry/bosh-cli/ui/fakes"
1916)
2017
2118var _ = Describe ("DeployCmd" , func () {
2219 var (
23- ui * fakeui.FakeUI
24- deployment * fakedir.FakeDeployment
25- uploadReleaseCmd * fakecmd.FakeReleaseUploadingCmd
26- createReleaseCmd * fakecmd.FakeReleaseCreatingCmd
27- command DeployCmd
20+ ui * fakeui.FakeUI
21+ deployment * fakedir.FakeDeployment
22+ releaseUploader * fakecmd.FakeReleaseUploader
23+ command DeployCmd
2824 )
2925
3026 BeforeEach (func () {
@@ -33,20 +29,11 @@ var _ = Describe("DeployCmd", func() {
3329 NameStub : func () string { return "dep" },
3430 }
3531
36- uploadReleaseCmd = & fakecmd.FakeReleaseUploadingCmd {}
37-
38- createReleaseCmd = & fakecmd.FakeReleaseCreatingCmd {
39- RunStub : func (opts CreateReleaseOpts ) (boshrel.Release , error ) {
40- release := & fakerel.FakeRelease {
41- NameStub : func () string { return opts .Name },
42- VersionStub : func () string { return opts .Name + "-created-ver" },
43- }
44- return release , nil
45- },
32+ releaseUploader = & fakecmd.FakeReleaseUploader {
33+ UploadReleasesStub : func (bytes []byte ) ([]byte , error ) { return bytes , nil },
4634 }
4735
48- releaseManager := NewReleaseManager (createReleaseCmd , uploadReleaseCmd )
49- command = NewDeployCmd (ui , deployment , releaseManager )
36+ command = NewDeployCmd (ui , deployment , releaseUploader )
5037 })
5138
5239 Describe ("Run" , func () {
@@ -138,57 +125,30 @@ var _ = Describe("DeployCmd", func() {
138125 Expect (deployment .UpdateCallCount ()).To (Equal (0 ))
139126 })
140127
141- It ("creates and uploads releases but does not deploy if confirmation is rejected " , func () {
128+ It ("uploads releases provided in the manifest after manifest has been interpolated " , func () {
142129 opts .Args .Manifest = FileBytesArg {
143- Bytes : []byte (`
144- name: dep
145- releases:
146- - name: capi
147- sha1: capi-sha1
148- url: /capi-url
149- version: create
150- ` ),
130+ Bytes : []byte ("name: dep\n before-upload-manifest: ((key))" ),
151131 }
152132
153- ui .AskedConfirmationErr = errors .New ("stop" )
154-
155- err := act ()
156- Expect (err ).To (HaveOccurred ())
157- Expect (err .Error ()).To (ContainSubstring ("stop" ))
158-
159- Expect (createReleaseCmd .RunCallCount ()).To (Equal (1 ))
160- Expect (uploadReleaseCmd .RunCallCount ()).To (Equal (1 ))
161- Expect (deployment .UpdateCallCount ()).To (Equal (0 ))
162- })
133+ opts .VarKVs = []boshtpl.VarKV {
134+ {Name : "key" , Value : "key-val" },
135+ }
163136
164- It ("returns an error if diffing failed" , func () {
165- deployment .DiffReturns (boshdir.DiffLines {}, errors .New ("Fetching diff result" ))
137+ releaseUploader .UploadReleasesReturns ([]byte ("after-upload-manifest" ), nil )
166138
167139 err := act ()
168- Expect (err ).To (HaveOccurred ())
169- })
140+ Expect (err ).ToNot (HaveOccurred ())
170141
171- It ("gets the diff from the deployment" , func () {
172- expectedDiff := boshdir.DiffLines {
173- []interface {}{
174- "some line that stayed" , nil ,
175- }, []interface {}{
176- "some line that was added" , "added" ,
177- }, []interface {}{
178- "some line that was removed" , "removed" ,
179- },
180- }
142+ bytes := releaseUploader .UploadReleasesArgsForCall (0 )
143+ Expect (bytes ).To (Equal ([]byte ("before-upload-manifest: key-val\n name: dep\n " )))
181144
182- deployment .DiffReturns (expectedDiff , nil )
183- err := act ()
184- Expect (err ).ToNot (HaveOccurred ())
185- Expect (deployment .DiffCallCount ()).To (Equal (1 ))
186- Expect (ui .Said ).To (ContainElement (" some line that stayed\n " ))
187- Expect (ui .Said ).To (ContainElement ("+ some line that was added\n " ))
188- Expect (ui .Said ).To (ContainElement ("- some line that was removed\n " ))
145+ Expect (deployment .UpdateCallCount ()).To (Equal (1 ))
146+
147+ bytes , _ = deployment .UpdateArgsForCall (0 )
148+ Expect (bytes ).To (Equal ([]byte ("after-upload-manifest" )))
189149 })
190150
191- It ("uploads remote releases skipping releases without url " , func () {
151+ It ("returns error and does not deploy if uploading releases fails " , func () {
192152 opts .Args .Manifest = FileBytesArg {
193153 Bytes : []byte (`
194154name: dep
@@ -197,129 +157,65 @@ releases:
197157 sha1: capi-sha1
198158 url: https://capi-url
199159 version: 1+capi
200- - name: rel-without-upload
201- version: 1+rel
202- - name: consul
203- sha1: consul-sha1
204- url: https://consul-url
205- version: 1+consul
206- - name: local
207- url: file:///local-dir
208- version: create
209160` ),
210161 }
211162
212- err := act ()
213- Expect (err ).ToNot (HaveOccurred ())
214-
215- Expect (uploadReleaseCmd .RunCallCount ()).To (Equal (3 ))
216-
217- Expect (uploadReleaseCmd .RunArgsForCall (0 )).To (Equal (UploadReleaseOpts {
218- Name : "capi" ,
219- Args : UploadReleaseArgs {URL : URLArg ("https://capi-url" )},
220- SHA1 : "capi-sha1" ,
221- Version : VersionArg (semver .MustNewVersionFromString ("1+capi" )),
222- }))
163+ releaseUploader .UploadReleasesReturns (nil , errors .New ("fake-err" ))
223164
224- Expect (uploadReleaseCmd .RunArgsForCall (1 )).To (Equal (UploadReleaseOpts {
225- Name : "consul" ,
226- Args : UploadReleaseArgs {URL : URLArg ("https://consul-url" )},
227- SHA1 : "consul-sha1" ,
228- Version : VersionArg (semver .MustNewVersionFromString ("1+consul" )),
229- }))
165+ err := act ()
166+ Expect (err ).To (HaveOccurred ())
167+ Expect (err .Error ()).To (ContainSubstring ("fake-err" ))
230168
231- arg := uploadReleaseCmd .RunArgsForCall (2 )
232- Expect (arg .Release .Name ()).To (Equal ("local" ))
233- Expect (arg ).To (Equal (UploadReleaseOpts {Release : arg .Release })) // only Release should be set
169+ Expect (deployment .UpdateCallCount ()).To (Equal (0 ))
234170 })
235171
236- It ("creates releases if version is 'create' skipping others " , func () {
172+ It ("uploads releases but does not deploy if confirmation is rejected " , func () {
237173 opts .Args .Manifest = FileBytesArg {
238174 Bytes : []byte (`
239175name: dep
240176releases:
241177- name: capi
242- url: file:///capi-dir
243- version: create
244- - name: rel-without-upload
245- version: 1+rel
246- - name: consul
247- url: /consul-dir # doesn't require file://
178+ sha1: capi-sha1
179+ url: /capi-url
248180 version: create
249181` ),
250182 }
251183
252- err := act ()
253- Expect (err ).ToNot (HaveOccurred ())
254-
255- Expect (createReleaseCmd .RunCallCount ()).To (Equal (2 ))
256-
257- Expect (createReleaseCmd .RunArgsForCall (0 )).To (Equal (CreateReleaseOpts {
258- Name : "capi" ,
259- Directory : DirOrCWDArg {Path : "/capi-dir" },
260- TimestampVersion : true ,
261- Force : true ,
262- }))
184+ ui .AskedConfirmationErr = errors .New ("stop" )
263185
264- Expect (createReleaseCmd .RunArgsForCall (1 )).To (Equal (CreateReleaseOpts {
265- Name : "consul" ,
266- Directory : DirOrCWDArg {Path : "/consul-dir" },
267- TimestampVersion : true ,
268- Force : true ,
269- }))
186+ err := act ()
187+ Expect (err ).To (HaveOccurred ())
188+ Expect (err .Error ()).To (ContainSubstring ("stop" ))
270189
271- bytes , _ := deployment .UpdateArgsForCall (0 )
272- Expect (bytes ).To (Equal ([]byte (`name: dep
273- releases:
274- - name: capi
275- url: file:///capi-dir
276- version: capi-created-ver
277- - name: rel-without-upload
278- version: 1+rel
279- - name: consul
280- url: /consul-dir
281- version: consul-created-ver
282- ` )))
190+ Expect (releaseUploader .UploadReleasesCallCount ()).To (Equal (1 ))
191+ Expect (deployment .UpdateCallCount ()).To (Equal (0 ))
283192 })
284193
285- It ("returns error and does not deploy if uploading release fails" , func () {
286- opts .Args .Manifest = FileBytesArg {
287- Bytes : []byte (`
288- name: dep
289- releases:
290- - name: capi
291- sha1: capi-sha1
292- url: https://capi-url
293- version: 1+capi
294- ` ),
295- }
296- uploadReleaseCmd .RunReturns (errors .New ("fake-err" ))
194+ It ("returns an error if diffing failed" , func () {
195+ deployment .DiffReturns (boshdir.DiffLines {}, errors .New ("Fetching diff result" ))
297196
298197 err := act ()
299198 Expect (err ).To (HaveOccurred ())
300- Expect (err .Error ()).To (ContainSubstring ("fake-err" ))
301-
302- Expect (deployment .UpdateCallCount ()).To (Equal (0 ))
303199 })
304200
305- It ("returns an error if release version cannot be parsed" , func () {
306- opts .Args .Manifest = FileBytesArg {
307- Bytes : []byte (`
308- name: dep
309- releases:
310- - name: capi
311- sha1: capi-sha1
312- url: https://capi-url
313- version: 1+capi+capi
314- ` ),
201+ It ("gets the diff from the deployment" , func () {
202+ expectedDiff := boshdir.DiffLines {
203+ []interface {}{
204+ "some line that stayed" , nil ,
205+ }, []interface {}{
206+ "some line that was added" , "added" ,
207+ }, []interface {}{
208+ "some line that was removed" , "removed" ,
209+ },
315210 }
316211
212+ deployment .DiffReturns (expectedDiff , nil )
317213 err := act ()
318- Expect (err ).To (HaveOccurred ())
319- Expect (err . Error ()).To (ContainSubstring ( "Expected version '1+capi+capi' to match version format" ))
320-
321- Expect (uploadReleaseCmd . RunCallCount ()) .To (Equal ( 0 ))
322- Expect (deployment . UpdateCallCount ()) .To (Equal ( 0 ))
214+ Expect (err ).ToNot (HaveOccurred ())
215+ Expect (deployment . DiffCallCount ()).To (Equal ( 1 ))
216+ Expect ( ui . Said ). To ( ContainElement ( " some line that stayed \n " ))
217+ Expect (ui . Said ) .To (ContainElement ( "+ some line that was added \n " ))
218+ Expect (ui . Said ) .To (ContainElement ( "- some line that was removed \n " ))
323219 })
324220
325221 It ("returns error if deploying failed" , func () {
0 commit comments