From 823ff3443432476e6e56740864ccf92a0e14b99d Mon Sep 17 00:00:00 2001 From: Megan Marsh Date: Thu, 3 Dec 2020 16:32:42 -0800 Subject: [PATCH] remove noop ui, replace in adapter and ansible tests with sdk's TestUi --- packer-plugin-sdk/adapter/adapter_test.go | 3 +- packer-plugin-sdk/packer/ui.go | 50 ++++++++++++++ packer-plugin-sdk/packer/ui_mock.go | 2 + packer/ui.go | 65 ------------------- provisioner/ansible-local/provisioner_test.go | 4 +- provisioner/ansible/provisioner.go | 3 +- provisioner/inspec/provisioner.go | 3 +- 7 files changed, 57 insertions(+), 73 deletions(-) diff --git a/packer-plugin-sdk/adapter/adapter_test.go b/packer-plugin-sdk/adapter/adapter_test.go index bfc3e7d3d..dd48de72f 100644 --- a/packer-plugin-sdk/adapter/adapter_test.go +++ b/packer-plugin-sdk/adapter/adapter_test.go @@ -10,7 +10,6 @@ import ( "testing" "time" - "github.com/hashicorp/packer/packer" packersdk "github.com/hashicorp/packer/packer-plugin-sdk/packer" "golang.org/x/crypto/ssh" @@ -26,7 +25,7 @@ func TestAdapter_Serve(t *testing.T) { config := &ssh.ServerConfig{} - ui := new(packer.NoopUi) + ui := packersdk.TestUi(t) sut := NewAdapter(done, &l, config, "", ui, communicator{}) go func() { diff --git a/packer-plugin-sdk/packer/ui.go b/packer-plugin-sdk/packer/ui.go index 4c97b2a0c..7d75fc5a8 100644 --- a/packer-plugin-sdk/packer/ui.go +++ b/packer-plugin-sdk/packer/ui.go @@ -151,6 +151,56 @@ func (rw *BasicUi) TrackProgress(src string, currentSize, totalSize int64, strea return rw.PB.TrackProgress(src, currentSize, totalSize, stream) } +// Safe is a UI that wraps another UI implementation and +// provides concurrency-safe access +type SafeUi struct { + Sem chan int + Ui Ui + PB getter.ProgressTracker +} + +var _ Ui = new(SafeUi) + +func (u *SafeUi) Ask(s string) (string, error) { + u.Sem <- 1 + ret, err := u.Ui.Ask(s) + <-u.Sem + + return ret, err +} + +func (u *SafeUi) Say(s string) { + u.Sem <- 1 + u.Ui.Say(s) + <-u.Sem +} + +func (u *SafeUi) Message(s string) { + u.Sem <- 1 + u.Ui.Message(s) + <-u.Sem +} + +func (u *SafeUi) Error(s string) { + u.Sem <- 1 + u.Ui.Error(s) + <-u.Sem +} + +func (u *SafeUi) Machine(t string, args ...string) { + u.Sem <- 1 + u.Ui.Machine(t, args...) + <-u.Sem +} + +func (u *SafeUi) TrackProgress(src string, currentSize, totalSize int64, stream io.ReadCloser) (body io.ReadCloser) { + u.Sem <- 1 + ret := u.Ui.TrackProgress(src, currentSize, totalSize, stream) + <-u.Sem + + return ret +} + // NoopProgressTracker is a progress tracker // that displays nothing. type NoopProgressTracker struct{} diff --git a/packer-plugin-sdk/packer/ui_mock.go b/packer-plugin-sdk/packer/ui_mock.go index e1e165f5e..74600e1d9 100644 --- a/packer-plugin-sdk/packer/ui_mock.go +++ b/packer-plugin-sdk/packer/ui_mock.go @@ -7,6 +7,8 @@ import ( "testing" ) +// TestUi creates a simple UI for use in testing. +// It's not meant for "real" use. func TestUi(t *testing.T) Ui { var buf bytes.Buffer return &BasicUi{ diff --git a/packer/ui.go b/packer/ui.go index 4dc2c3490..05a947df6 100644 --- a/packer/ui.go +++ b/packer/ui.go @@ -30,21 +30,6 @@ const ( UiColorCyan = 36 ) -type NoopUi struct { - PB packersdk.NoopProgressTracker -} - -var _ packersdk.Ui = new(NoopUi) - -func (*NoopUi) Ask(string) (string, error) { return "", errors.New("this is a noop ui") } -func (*NoopUi) Say(string) { return } -func (*NoopUi) Message(string) { return } -func (*NoopUi) Error(string) { return } -func (*NoopUi) Machine(string, ...string) { return } -func (u *NoopUi) TrackProgress(src string, currentSize, totalSize int64, stream io.ReadCloser) io.ReadCloser { - return u.PB.TrackProgress(src, currentSize, totalSize, stream) -} - // ColoredUi is a UI that is colored using terminal colors. type ColoredUi struct { Color UiColor @@ -267,53 +252,3 @@ func (u *TimestampedUi) TrackProgress(src string, currentSize, totalSize int64, func (u *TimestampedUi) timestampLine(string string) string { return fmt.Sprintf("%v: %v", time.Now().Format(time.RFC3339), string) } - -// Safe is a UI that wraps another UI implementation and -// provides concurrency-safe access -type SafeUi struct { - Sem chan int - Ui packersdk.Ui - PB getter.ProgressTracker -} - -var _ packersdk.Ui = new(SafeUi) - -func (u *SafeUi) Ask(s string) (string, error) { - u.Sem <- 1 - ret, err := u.Ui.Ask(s) - <-u.Sem - - return ret, err -} - -func (u *SafeUi) Say(s string) { - u.Sem <- 1 - u.Ui.Say(s) - <-u.Sem -} - -func (u *SafeUi) Message(s string) { - u.Sem <- 1 - u.Ui.Message(s) - <-u.Sem -} - -func (u *SafeUi) Error(s string) { - u.Sem <- 1 - u.Ui.Error(s) - <-u.Sem -} - -func (u *SafeUi) Machine(t string, args ...string) { - u.Sem <- 1 - u.Ui.Machine(t, args...) - <-u.Sem -} - -func (u *SafeUi) TrackProgress(src string, currentSize, totalSize int64, stream io.ReadCloser) (body io.ReadCloser) { - u.Sem <- 1 - ret := u.Ui.TrackProgress(src, currentSize, totalSize, stream) - <-u.Sem - - return ret -} diff --git a/provisioner/ansible-local/provisioner_test.go b/provisioner/ansible-local/provisioner_test.go index 755443464..b0bef4449 100644 --- a/provisioner/ansible-local/provisioner_test.go +++ b/provisioner/ansible-local/provisioner_test.go @@ -135,7 +135,7 @@ func TestProvisionerProvision_PlaybookFiles(t *testing.T) { } comm := &communicatorMock{} - if err := p.Provision(context.Background(), new(packer.NoopUi), comm, make(map[string]interface{})); err != nil { + if err := p.Provision(context.Background(), packersdk.TestUi(t), comm, make(map[string]interface{})); err != nil { t.Fatalf("err: %s", err) } @@ -169,7 +169,7 @@ func TestProvisionerProvision_PlaybookFilesWithPlaybookDir(t *testing.T) { } comm := &communicatorMock{} - if err := p.Provision(context.Background(), new(packer.NoopUi), comm, make(map[string]interface{})); err != nil { + if err := p.Provision(context.Background(), packersdk.TestUi(t), comm, make(map[string]interface{})); err != nil { t.Fatalf("err: %s", err) } diff --git a/provisioner/ansible/provisioner.go b/provisioner/ansible/provisioner.go index b1568fe51..e1b919002 100644 --- a/provisioner/ansible/provisioner.go +++ b/provisioner/ansible/provisioner.go @@ -30,7 +30,6 @@ import ( "golang.org/x/crypto/ssh" "github.com/hashicorp/hcl/v2/hcldec" - "github.com/hashicorp/packer/packer" "github.com/hashicorp/packer/packer-plugin-sdk/adapter" "github.com/hashicorp/packer/packer-plugin-sdk/common" "github.com/hashicorp/packer/packer-plugin-sdk/multistep/commonsteps" @@ -433,7 +432,7 @@ func (p *Provisioner) setupAdapter(ui packersdk.Ui, comm packersdk.Communicator) return "", err } - ui = &packer.SafeUi{ + ui = &packersdk.SafeUi{ Sem: make(chan int, 1), Ui: ui, } diff --git a/provisioner/inspec/provisioner.go b/provisioner/inspec/provisioner.go index 0c7ab0492..f0e1b6add 100644 --- a/provisioner/inspec/provisioner.go +++ b/provisioner/inspec/provisioner.go @@ -28,7 +28,6 @@ import ( "golang.org/x/crypto/ssh" "github.com/hashicorp/hcl/v2/hcldec" - "github.com/hashicorp/packer/packer" "github.com/hashicorp/packer/packer-plugin-sdk/adapter" "github.com/hashicorp/packer/packer-plugin-sdk/common" packersdk "github.com/hashicorp/packer/packer-plugin-sdk/packer" @@ -304,7 +303,7 @@ func (p *Provisioner) Provision(ctx context.Context, ui packersdk.Ui, comm packe return err } - ui = &packer.SafeUi{ + ui = &packersdk.SafeUi{ Sem: make(chan int, 1), Ui: ui, }