1package release_test
2
3import (
4	"errors"
5
6	. "github.com/onsi/ginkgo"
7	. "github.com/onsi/gomega"
8
9	. "github.com/cloudfoundry/bosh-cli/release"
10	fakerel "github.com/cloudfoundry/bosh-cli/release/releasefakes"
11	fakeres "github.com/cloudfoundry/bosh-cli/release/resource/resourcefakes"
12)
13
14var _ = Describe("BuiltReader", func() {
15	Describe("Read", func() {
16		var (
17			innerReader   *fakerel.FakeReader
18			devIndicies   ArchiveIndicies
19			finalIndicies ArchiveIndicies
20			reader        BuiltReader
21		)
22
23		BeforeEach(func() {
24			innerReader = &fakerel.FakeReader{}
25
26			devIndicies = ArchiveIndicies{
27				Jobs: &fakeres.FakeArchiveIndex{
28					FindStub: func(_, _ string) (string, string, error) { return "dev", "", nil },
29				},
30				Packages: &fakeres.FakeArchiveIndex{},
31				Licenses: &fakeres.FakeArchiveIndex{},
32			}
33
34			finalIndicies = ArchiveIndicies{
35				Jobs: &fakeres.FakeArchiveIndex{
36					FindStub: func(_, _ string) (string, string, error) { return "final", "", nil },
37				},
38				Packages: &fakeres.FakeArchiveIndex{},
39				Licenses: &fakeres.FakeArchiveIndex{},
40			}
41
42			reader = NewBuiltReader(innerReader, devIndicies, finalIndicies, 3)
43		})
44
45		It("reads and builds release", func() {
46			readRelease := &fakerel.FakeRelease{}
47			innerReader.ReadReturns(readRelease, nil)
48
49			release, err := reader.Read("/release.tgz")
50			Expect(err).ToNot(HaveOccurred())
51			Expect(release).To(Equal(readRelease))
52
53			Expect(readRelease.BuildCallCount()).To(Equal(1))
54
55			dev, final, parallel := readRelease.BuildArgsForCall(0)
56			Expect(dev).To(Equal(devIndicies))
57			Expect(final).To(Equal(finalIndicies))
58			Expect(parallel).To(Equal(3))
59		})
60
61		It("returns error if read fails", func() {
62			innerReader.ReadReturns(nil, errors.New("fake-err"))
63
64			_, err := reader.Read("/release.tgz")
65			Expect(err).To(Equal(errors.New("fake-err")))
66		})
67
68		It("returns error if building fails", func() {
69			readRelease := &fakerel.FakeRelease{}
70			innerReader.ReadReturns(readRelease, nil)
71
72			readRelease.BuildReturns(errors.New("fake-err"))
73
74			_, err := reader.Read("/release.tgz")
75			Expect(err).To(Equal(errors.New("fake-err")))
76		})
77
78		Context("parallel is less than 1", func() {
79			BeforeEach(func() {
80				reader = NewBuiltReader(innerReader, devIndicies, finalIndicies, 0)
81			})
82
83			It("builds with parallel of 1", func() {
84				readRelease := &fakerel.FakeRelease{}
85				innerReader.ReadReturns(readRelease, nil)
86
87				_, err := reader.Read("/release.tgz")
88				Expect(err).NotTo(HaveOccurred())
89
90				_, _, parallel := readRelease.BuildArgsForCall(0)
91				Expect(parallel).To(Equal(1))
92			})
93		})
94	})
95})
96