@@ -14,6 +14,7 @@ import (
1414 "github.com/aws/aws-sdk-go/aws/session"
1515 "github.com/aws/aws-sdk-go/service/s3"
1616 "github.com/aws/aws-sdk-go/service/s3/s3iface"
17+ "github.com/aws/aws-sdk-go/service/s3/s3manager"
1718 . "github.com/onsi/ginkgo"
1819 . "github.com/onsi/gomega"
1920 "github.com/pivotal-cf/jhanda"
@@ -34,10 +35,7 @@ compiled_releases:
3435 regex: ^2.5/.+/(?P<release_name>[a-z-_]+)-(?P<release_version>[0-9\.]+)-(?P<stemcell_os>[a-z-_]+)-(?P<stemcell_version>[\d\.]+)\.tgz$
3536`
3637
37- const MinimalAssetsLockContents = `
38- ---
39- releases: []
40- `
38+ const MinimalAssetsLockContents = `---`
4139
4240var _ = Describe ("Fetch" , func () {
4341 var (
@@ -163,6 +161,7 @@ compiled_releases:
163161 Expect (sessionArg .Config .Region ).To (Equal (aws .String ("north-east-1" )))
164162 })
165163 })
164+
166165 Context ("failure cases" , func () {
167166 Context ("the assets-file flag is missing" , func () {
168167 It ("returns a flag error" , func () {
@@ -320,25 +319,56 @@ compiled_releases:
320319 })
321320
322321 It ("downloads the appropriate versions of releases listed in the assets.lock" , func () {
323- err = commands .DownloadReleases (logger , assetsLock , bucket , matchedS3Objects , fileCreator , fakeDownloader )
322+ err = commands .DownloadReleases (logger , assetsLock , bucket , matchedS3Objects , fileCreator , fakeDownloader , 7 )
324323 Expect (err ).NotTo (HaveOccurred ())
325324 Expect (fakeDownloader .DownloadCallCount ()).To (Equal (2 ))
326325
327- w1 , input1 , _ := fakeDownloader .DownloadArgsForCall (0 )
326+ w1 , input1 , opts := fakeDownloader .DownloadArgsForCall (0 )
328327 Expect (w1 ).To (Equal (fakeUAAFile ))
329328 Expect (input1 ).To (Equal (uaaInput ))
329+ Expect (opts ).To (HaveLen (1 ))
330+
331+ downloader := & s3manager.Downloader {
332+ Concurrency : s3manager .DefaultDownloadConcurrency ,
333+ }
334+
335+ opts [0 ](downloader )
330336
331- w2 , input2 , _ := fakeDownloader .DownloadArgsForCall (1 )
337+ Expect (downloader .Concurrency ).To (Equal (7 ))
338+
339+ w2 , input2 , opts := fakeDownloader .DownloadArgsForCall (1 )
332340 Expect (w2 ).To (Equal (fakeBPMFile ))
333341 Expect (input2 ).To (Equal (bpmInput ))
342+ Expect (opts ).To (HaveLen (1 ))
343+ })
344+
345+ Context ("when number of threads is not specified" , func () {
346+ It ("uses the s3manager package's default download concurrency" , func () {
347+ err = commands .DownloadReleases (logger , assetsLock , bucket , matchedS3Objects , fileCreator , fakeDownloader , 0 )
348+ Expect (err ).NotTo (HaveOccurred ())
349+ Expect (fakeDownloader .DownloadCallCount ()).To (Equal (2 ))
350+
351+ w1 , input1 , opts := fakeDownloader .DownloadArgsForCall (0 )
352+ Expect (w1 ).To (Equal (fakeUAAFile ))
353+ Expect (input1 ).To (Equal (uaaInput ))
354+ Expect (opts ).To (HaveLen (1 ))
355+
356+ downloader := & s3manager.Downloader {
357+ Concurrency : s3manager .DefaultDownloadConcurrency ,
358+ }
359+
360+ opts [0 ](downloader )
361+
362+ Expect (downloader .Concurrency ).To (Equal (s3manager .DefaultDownloadConcurrency ))
363+ })
334364 })
335365
336366 It ("returns an error if the release does not exist" , func () {
337367 assetsLock .Releases = []cargo.Release {
338368 {Name : "not-real" , Version : "1.2.3" },
339369 }
340370
341- err = commands .DownloadReleases (logger , assetsLock , bucket , matchedS3Objects , fileCreator , fakeDownloader )
371+ err = commands .DownloadReleases (logger , assetsLock , bucket , matchedS3Objects , fileCreator , fakeDownloader , 0 )
342372 Expect (err ).To (HaveOccurred ())
343373 Expect (err ).To (MatchError ("Compiled release: not-real, version: 1.2.3, stemcell OS: ubuntu-trusty, stemcell version: 1234, not found" ))
344374 })
0 commit comments