Skip to content

Commit cc10702

Browse files
committed
move tests from cmd/deploy to cmd/release_manager
1 parent 3640ca7 commit cc10702

File tree

5 files changed

+318
-215
lines changed

5 files changed

+318
-215
lines changed

bin/gen-fakes

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ counterfeiter cmd Downloader
1010
counterfeiter cmd LoginStrategy
1111
counterfeiter cmd ReleaseUploadingCmd
1212
counterfeiter cmd ReleaseCreatingCmd
13+
counterfeiter cmd ReleaseUploader
1314
counterfeiter cmd/config Config
1415

1516
counterfeiter deployment/manifest Parser

cmd/deploy_test.go

Lines changed: 52 additions & 156 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import (
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

2118
var _ = 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\nbefore-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\nname: 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(`
194154
name: 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(`
239175
name: dep
240176
releases:
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() {

cmd/fakes/fake_release_uploader.go

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
// This file was generated by counterfeiter
2+
package fakes
3+
4+
import (
5+
"sync"
6+
7+
"github.com/cloudfoundry/bosh-cli/cmd"
8+
)
9+
10+
type FakeReleaseUploader struct {
11+
UploadReleasesStub func([]byte) ([]byte, error)
12+
uploadReleasesMutex sync.RWMutex
13+
uploadReleasesArgsForCall []struct {
14+
arg1 []byte
15+
}
16+
uploadReleasesReturns struct {
17+
result1 []byte
18+
result2 error
19+
}
20+
}
21+
22+
func (fake *FakeReleaseUploader) UploadReleases(arg1 []byte) ([]byte, error) {
23+
fake.uploadReleasesMutex.Lock()
24+
fake.uploadReleasesArgsForCall = append(fake.uploadReleasesArgsForCall, struct {
25+
arg1 []byte
26+
}{arg1})
27+
fake.uploadReleasesMutex.Unlock()
28+
if fake.UploadReleasesStub != nil {
29+
return fake.UploadReleasesStub(arg1)
30+
} else {
31+
return fake.uploadReleasesReturns.result1, fake.uploadReleasesReturns.result2
32+
}
33+
}
34+
35+
func (fake *FakeReleaseUploader) UploadReleasesCallCount() int {
36+
fake.uploadReleasesMutex.RLock()
37+
defer fake.uploadReleasesMutex.RUnlock()
38+
return len(fake.uploadReleasesArgsForCall)
39+
}
40+
41+
func (fake *FakeReleaseUploader) UploadReleasesArgsForCall(i int) []byte {
42+
fake.uploadReleasesMutex.RLock()
43+
defer fake.uploadReleasesMutex.RUnlock()
44+
return fake.uploadReleasesArgsForCall[i].arg1
45+
}
46+
47+
func (fake *FakeReleaseUploader) UploadReleasesReturns(result1 []byte, result2 error) {
48+
fake.UploadReleasesStub = nil
49+
fake.uploadReleasesReturns = struct {
50+
result1 []byte
51+
result2 error
52+
}{result1, result2}
53+
}
54+
55+
var _ cmd.ReleaseUploader = new(FakeReleaseUploader)

0 commit comments

Comments
 (0)