Skip to content

Commit bd073dc

Browse files
committed
stembuild: packagers use Messenger
rather than accessing STD{OUT,ERR} directly
1 parent 5e6beff commit bd073dc

File tree

10 files changed

+101
-60
lines changed

10 files changed

+101
-60
lines changed

stembuild/commandparser/commandparserfakes/fake_packager_factory.go

Lines changed: 11 additions & 8 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

stembuild/commandparser/package_stemcell.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
"os"
88
"path/filepath"
99

10+
"github.com/cloudfoundry/bosh-windows-stemcell-builder/stembuild/messenger"
1011
"github.com/google/subcommands"
1112

1213
"github.com/cloudfoundry/bosh-windows-stemcell-builder/stembuild/colorlogger"
@@ -23,7 +24,7 @@ type OSAndVersionGetter interface {
2324

2425
//counterfeiter:generate . PackagerFactory
2526
type PackagerFactory interface {
26-
NewPackager(sourceConfig config.SourceConfig, outputConfig config.OutputConfig, logger colorlogger.Logger) (Packager, error)
27+
NewPackager(sourceConfig config.SourceConfig, outputConfig config.OutputConfig, logger colorlogger.Logger, messenger messenger.Messenger) (Packager, error)
2728
}
2829

2930
//counterfeiter:generate . Packager
@@ -115,7 +116,6 @@ func (p *PackageCmd) SetFlags(f *flag.FlagSet) {
115116
}
116117

117118
func (p *PackageCmd) Execute(_ context.Context, f *flag.FlagSet, _ ...interface{}) subcommands.ExitStatus {
118-
119119
logLevel := colorlogger.NONE
120120
if p.GlobalFlags.Debug {
121121
logLevel = colorlogger.DEBUG
@@ -130,7 +130,8 @@ func (p *PackageCmd) Execute(_ context.Context, f *flag.FlagSet, _ ...interface{
130130
}
131131

132132
logger := colorlogger.New(logLevel, p.GlobalFlags.Color, os.Stderr)
133-
packager, err := p.packagerFactory.NewPackager(p.sourceConfig, p.outputConfig, logger)
133+
stembuildMessenger := messenger.NewStembuildMessenger(os.Stdout, os.Stderr)
134+
packager, err := p.packagerFactory.NewPackager(p.sourceConfig, p.outputConfig, logger, stembuildMessenger)
134135
if err != nil {
135136
p.packagerMessenger.CannotCreatePackager(err)
136137
return subcommands.ExitFailure

stembuild/commandparser/package_stemcell_test.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ var _ = Describe("package_stemcell", func() {
6262
Expect(exitStatus).To(Equal(subcommands.ExitSuccess))
6363

6464
Expect(packagerFactory.NewPackagerCallCount()).To(Equal(1))
65-
actualSourceConfig, _, _ := packagerFactory.NewPackagerArgsForCall(0)
65+
actualSourceConfig, _, _, _ := packagerFactory.NewPackagerArgsForCall(0)
6666
Expect(actualSourceConfig.Vmdk).To(Equal("some_vmdk_file"))
6767
})
6868

@@ -82,7 +82,7 @@ var _ = Describe("package_stemcell", func() {
8282
Expect(exitStatus).To(Equal(subcommands.ExitSuccess))
8383

8484
Expect(packagerFactory.NewPackagerCallCount()).To(Equal(1))
85-
actualSourceConfig, _, _ := packagerFactory.NewPackagerArgsForCall(0)
85+
actualSourceConfig, _, _, _ := packagerFactory.NewPackagerArgsForCall(0)
8686
Expect(actualSourceConfig.URL).To(Equal("https://vcenter.test"))
8787
Expect(actualSourceConfig.Username).To(Equal("test-user"))
8888
Expect(actualSourceConfig.Password).To(Equal("verysecure"))
@@ -100,7 +100,7 @@ var _ = Describe("package_stemcell", func() {
100100
Expect(exitStatus).To(Equal(subcommands.ExitSuccess))
101101

102102
Expect(packagerFactory.NewPackagerCallCount()).To(Equal(1))
103-
_, actualOutputConfig, _ := packagerFactory.NewPackagerArgsForCall(0)
103+
_, actualOutputConfig, _, _ := packagerFactory.NewPackagerArgsForCall(0)
104104
Expect(actualOutputConfig.OutputDir).To(Equal("some_output_dir"))
105105
})
106106

@@ -114,7 +114,7 @@ var _ = Describe("package_stemcell", func() {
114114
Expect(exitStatus).To(Equal(subcommands.ExitSuccess))
115115

116116
Expect(packagerFactory.NewPackagerCallCount()).To(Equal(1))
117-
_, actualOutputConfig, _ := packagerFactory.NewPackagerArgsForCall(0)
117+
_, actualOutputConfig, _, _ := packagerFactory.NewPackagerArgsForCall(0)
118118
Expect(actualOutputConfig.OutputDir).To(Equal("some_output_dir"))
119119
Expect(actualOutputConfig.StemcellVersion).To(Equal("2019.2"))
120120
Expect(actualOutputConfig.Os).To(Equal("2019"))
@@ -132,7 +132,7 @@ var _ = Describe("package_stemcell", func() {
132132
Expect(exitStatus).To(Equal(subcommands.ExitSuccess))
133133

134134
Expect(packagerFactory.NewPackagerCallCount()).To(Equal(1))
135-
_, actualOutputConfig, _ := packagerFactory.NewPackagerArgsForCall(0)
135+
_, actualOutputConfig, _, _ := packagerFactory.NewPackagerArgsForCall(0)
136136
Expect(actualOutputConfig.StemcellVersion).To(Equal("1803.27.36"))
137137

138138
Expect(oSAndVersionGetter.GetVersionWithPatchNumberCallCount()).To(Equal(1))

stembuild/messenger/messenger.go

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,13 @@ import (
77
"github.com/pkg/errors"
88
)
99

10-
func write(out io.Writer, message string) {
11-
_, err := out.Write([]byte(message))
10+
type Messenger interface {
11+
PrintOut(string)
12+
PrintErr(string)
13+
}
14+
15+
func write(writer io.Writer, message string) {
16+
_, err := writer.Write([]byte(message))
1217
if err != nil {
1318
err = errors.Wrap(err, fmt.Sprintf("Unable to Write(): '%s'", message))
1419
panic(err)

stembuild/package_stemcell/packager/factory.go

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,18 @@ import (
88
"github.com/cloudfoundry/bosh-windows-stemcell-builder/stembuild/commandparser"
99
"github.com/cloudfoundry/bosh-windows-stemcell-builder/stembuild/iaas_cli"
1010
"github.com/cloudfoundry/bosh-windows-stemcell-builder/stembuild/iaas_cli/iaas_clients"
11+
"github.com/cloudfoundry/bosh-windows-stemcell-builder/stembuild/messenger"
1112
"github.com/cloudfoundry/bosh-windows-stemcell-builder/stembuild/package_stemcell/config"
1213
)
1314

1415
type Factory struct{}
1516

16-
func (f *Factory) NewPackager(sourceConfig config.SourceConfig, outputConfig config.OutputConfig, logger colorlogger.Logger) (commandparser.Packager, error) {
17+
func (f *Factory) NewPackager(
18+
sourceConfig config.SourceConfig,
19+
outputConfig config.OutputConfig,
20+
logger colorlogger.Logger,
21+
messenger messenger.Messenger,
22+
) (commandparser.Packager, error) {
1723
source, err := sourceConfig.GetSource()
1824
if err != nil {
1925
return nil, err
@@ -35,6 +41,7 @@ func (f *Factory) NewPackager(sourceConfig config.SourceConfig, outputConfig con
3541
OutputConfig: outputConfig,
3642
Client: client,
3743
Logger: logger,
44+
Messenger: messenger,
3845
}, nil
3946
case config.VMDK:
4047
options :=
@@ -49,6 +56,7 @@ func (f *Factory) NewPackager(sourceConfig config.SourceConfig, outputConfig con
4956
Stop: make(chan struct{}),
5057
BuildOptions: options,
5158
Logger: logger,
59+
Messenger: messenger,
5260
}, nil
5361
default:
5462
return nil, errors.New("unable to determine packager")

stembuild/package_stemcell/packager/factory_test.go

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package packager_test
22

33
import (
4+
"github.com/cloudfoundry/bosh-windows-stemcell-builder/stembuild/messenger"
45
. "github.com/onsi/ginkgo/v2"
56
. "github.com/onsi/gomega"
67

@@ -17,12 +18,16 @@ var _ = Describe("Factory", func() {
1718
OutputDir: "/tmp/outputDir",
1819
}
1920

20-
var packagerFactory *packager.Factory
21-
var logger colorlogger.Logger
21+
var (
22+
packagerFactory *packager.Factory
23+
logger colorlogger.Logger
24+
stembuildMessenger messenger.Messenger
25+
)
2226

2327
BeforeEach(func() {
2428
packagerFactory = &packager.Factory{}
2529
logger = colorlogger.New(0, false, GinkgoWriter)
30+
stembuildMessenger = messenger.NewStembuildMessenger(GinkgoWriter, GinkgoWriter)
2631
})
2732

2833
Describe("GetPackager", func() {
@@ -32,7 +37,7 @@ var _ = Describe("Factory", func() {
3237
Vmdk: "path/to/a/vmdk",
3338
}
3439

35-
actualPackager, err := packagerFactory.NewPackager(sourceConfig, outputConfig, logger)
40+
actualPackager, err := packagerFactory.NewPackager(sourceConfig, outputConfig, logger, stembuildMessenger)
3641
Expect(err).NotTo(HaveOccurred())
3742

3843
Expect(actualPackager).To(BeAssignableToTypeOf(&packager.VmdkPackager{}))
@@ -49,7 +54,7 @@ var _ = Describe("Factory", func() {
4954
VmInventoryPath: "some-vm-inventory-path",
5055
}
5156

52-
actualPackager, err := packagerFactory.NewPackager(sourceConfig, outputConfig, logger)
57+
actualPackager, err := packagerFactory.NewPackager(sourceConfig, outputConfig, logger, stembuildMessenger)
5358
Expect(err).NotTo(HaveOccurred())
5459

5560
Expect(actualPackager).To(BeAssignableToTypeOf(&packager.VCenterPackager{}))
@@ -64,7 +69,7 @@ var _ = Describe("Factory", func() {
6469
VmInventoryPath: "some-vm",
6570
}
6671

67-
packager, err := packagerFactory.NewPackager(sourceConfig, outputConfig, logger)
72+
packager, err := packagerFactory.NewPackager(sourceConfig, outputConfig, logger, stembuildMessenger)
6873
Expect(err).To(HaveOccurred())
6974
Expect(err.Error()).To(Equal("configuration provided for VMDK & vCenter sources"))
7075
Expect(packager).To(BeNil())
@@ -79,7 +84,7 @@ var _ = Describe("Factory", func() {
7984
URL: "some-url",
8085
}
8186

82-
packager, err := packagerFactory.NewPackager(sourceConfig, outputConfig, logger)
87+
packager, err := packagerFactory.NewPackager(sourceConfig, outputConfig, logger, stembuildMessenger)
8388
Expect(err).To(HaveOccurred())
8489
Expect(err.Error()).To(Equal("missing vCenter configurations"))
8590
Expect(packager).To(BeNil())
@@ -90,7 +95,7 @@ var _ = Describe("Factory", func() {
9095
It("returns an error", func() {
9196
sourceConfig := config.SourceConfig{}
9297

93-
packager, err := packagerFactory.NewPackager(sourceConfig, outputConfig, logger)
98+
packager, err := packagerFactory.NewPackager(sourceConfig, outputConfig, logger, stembuildMessenger)
9499
Expect(err).To(HaveOccurred())
95100
Expect(err.Error()).To(Equal("no configuration was provided"))
96101
Expect(packager).To(BeNil())

stembuild/package_stemcell/packager/vcenter_packager.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import (
1010

1111
"github.com/cloudfoundry/bosh-windows-stemcell-builder/stembuild/colorlogger"
1212
"github.com/cloudfoundry/bosh-windows-stemcell-builder/stembuild/filesystem"
13+
"github.com/cloudfoundry/bosh-windows-stemcell-builder/stembuild/messenger"
1314
"github.com/cloudfoundry/bosh-windows-stemcell-builder/stembuild/package_stemcell/config"
1415
)
1516

@@ -29,6 +30,7 @@ type VCenterPackager struct {
2930
OutputConfig config.OutputConfig
3031
Client IaasClient
3132
Logger colorlogger.Logger
33+
Messenger messenger.Messenger
3234
}
3335

3436
func (v VCenterPackager) Package() error {
@@ -57,7 +59,7 @@ func (v VCenterPackager) Package() error {
5759
return errors.New("failed to export the prepared VM")
5860
}
5961

60-
fmt.Println("Converting VMDK into stemcell")
62+
v.Messenger.PrintOut("Converting VMDK into stemcell")
6163
vmName := path.Base(v.SourceConfig.VmInventoryPath)
6264
shaSum, err := TarGenerator(filepath.Join(stemcellDir, "image"), filepath.Join(workingDir, vmName)) //nolint:ineffassign,staticcheck
6365
manifestContents := CreateManifest(v.OutputConfig.Os, v.OutputConfig.StemcellVersion, shaSum)
@@ -70,7 +72,7 @@ func (v VCenterPackager) Package() error {
7072
stemcellFilename := StemcellFilename(v.OutputConfig.StemcellVersion, v.OutputConfig.Os)
7173
_, err = TarGenerator(filepath.Join(v.OutputConfig.OutputDir, stemcellFilename), stemcellDir) //nolint:ineffassign,staticcheck
7274

73-
fmt.Printf("Stemcell successfully created: %s\n", stemcellFilename)
75+
v.Messenger.PrintOut(fmt.Sprintf("Stemcell successfully created: %s\n", stemcellFilename))
7476
return nil
7577
}
7678

0 commit comments

Comments
 (0)