From 352f064b55747b895c75fb794572184807519373 Mon Sep 17 00:00:00 2001 From: Megan Marsh Date: Thu, 3 Dec 2020 14:58:07 -0800 Subject: [PATCH] fix docker acceptance tests. Turns out they were broken on the main branch too; needed to move noop progress bar into the sdk to be used in the builder testui. --- builder/docker/artifact_export.go | 5 +- builder/docker/communicator_test.go | 499 +++++++----------- main.go | 2 +- packer-plugin-sdk/acctest/testing.go | 2 + .../commonsteps/step_download_test.go | 3 +- .../commonsteps/step_output_dir_test.go | 3 +- packer-plugin-sdk/packer/ui.go | 9 + packer-plugin-sdk/packer/ui_mock.go | 1 + packer/progressbar_noop.go | 12 - packer/progressbar_solaris.go | 6 +- packer/ui.go | 4 +- provisioner/file/provisioner_test.go | 11 +- 12 files changed, 213 insertions(+), 344 deletions(-) delete mode 100644 packer/progressbar_noop.go diff --git a/builder/docker/artifact_export.go b/builder/docker/artifact_export.go index eb26f96c3..fd945ee97 100644 --- a/builder/docker/artifact_export.go +++ b/builder/docker/artifact_export.go @@ -35,5 +35,8 @@ func (a *ExportArtifact) State(name string) interface{} { } func (a *ExportArtifact) Destroy() error { - return os.Remove(a.path) + if a.path != "" { + return os.Remove(a.path) + } + return nil } diff --git a/builder/docker/communicator_test.go b/builder/docker/communicator_test.go index 3b30f2c48..fa118d2bf 100644 --- a/builder/docker/communicator_test.go +++ b/builder/docker/communicator_test.go @@ -1,99 +1,107 @@ package docker import ( - "context" "crypto/sha256" + "encoding/json" + "fmt" "io/ioutil" "os" "os/exec" - "strings" "testing" - "github.com/hashicorp/packer/packer" + builderT "github.com/hashicorp/packer/packer-plugin-sdk/acctest" packersdk "github.com/hashicorp/packer/packer-plugin-sdk/packer" - "github.com/hashicorp/packer/packer-plugin-sdk/template" - "github.com/hashicorp/packer/provisioner/file" - "github.com/hashicorp/packer/provisioner/shell" ) +// RenderConfig helps create dynamic packer template configs for parsing by +// builderT without having to write the config to a file. +func RenderConfig(builderConfig map[string]interface{}, provisionerConfig []map[string]interface{}) string { + // set up basic build template + t := map[string][]map[string]interface{}{ + "builders": { + // Setup basic docker config + map[string]interface{}{ + "type": "test", + "image": "ubuntu", + "discard": true, + }, + }, + "provisioners": []map[string]interface{}{}, + } + // apply special builder overrides + for k, v := range builderConfig { + t["builders"][0][k] = v + } + // Apply special provisioner overrides + for _, v := range provisionerConfig { + t["provisioners"] = append(t["provisioners"], v) + } + + j, _ := json.Marshal(t) + return string(j) +} + // TestUploadDownload verifies that basic upload / download functionality works func TestUploadDownload(t *testing.T) { - ui := packersdk.TestUi(t) - - tpl, err := template.Parse(strings.NewReader(dockerBuilderConfig)) - if err != nil { - t.Fatalf("Unable to parse config: %s", err) - } - if os.Getenv("PACKER_ACC") == "" { t.Skip("This test is only run with PACKER_ACC=1") } + + dockerBuilderExtraConfig := map[string]interface{}{ + "run_command": []string{"-d", "-i", "-t", "{{.Image}}", "/bin/sh"}, + } + + dockerProvisionerConfig := []map[string]interface{}{ + { + "type": "file", + "source": "test-fixtures/onecakes/strawberry", + "destination": "/strawberry-cake", + }, + { + "type": "file", + "source": "/strawberry-cake", + "destination": "my-strawberry-cake", + "direction": "download", + }, + } + + configString := RenderConfig(dockerBuilderExtraConfig, dockerProvisionerConfig) + + // this should be a precheck cmd := exec.Command("docker", "-v") - cmd.Run() - if !cmd.ProcessState.Success() { + err := cmd.Run() + if err != nil { t.Error("docker command not found; please make sure docker is installed") } - // Setup the builder - builder := &Builder{} - _, warnings, err := builder.Prepare(tpl.Builders["docker"].Config) - if err != nil { - t.Fatalf("Error preparing configuration %s", err) - } - if len(warnings) > 0 { - t.Fatal("Encountered configuration warnings; aborting") - } - - // Setup the provisioners - upload := &file.Provisioner{} - err = upload.Prepare(tpl.Provisioners[0].Config) - if err != nil { - t.Fatalf("Error preparing upload: %s", err) - } - download := &file.Provisioner{} - err = download.Prepare(tpl.Provisioners[1].Config) - if err != nil { - t.Fatalf("Error preparing download: %s", err) - } - // Preemptive cleanup. Honestly I don't know why you would want to get rid - // of my strawberry cake. It's so tasty! Do you not like cake? Are you a - // cake-hater? Or are you keeping all the cake all for yourself? So selfish! - defer os.Remove("my-strawberry-cake") - - // Add hooks so the provisioners run during the build - hooks := map[string][]packersdk.Hook{} - hooks[packersdk.HookProvision] = []packersdk.Hook{ - &packer.ProvisionHook{ - Provisioners: []*packer.HookedProvisioner{ - {Provisioner: upload, Config: nil, TypeName: ""}, - {Provisioner: download, Config: nil, TypeName: ""}, - }, + builderT.Test(t, builderT.TestCase{ + Builder: &Builder{}, + Template: configString, + Check: func(a []packersdk.Artifact) error { + // Verify that the thing we downloaded is the same thing we sent up. + // Complain loudly if it isn't. + inputFile, err := ioutil.ReadFile("test-fixtures/onecakes/strawberry") + if err != nil { + return fmt.Errorf("Unable to read input file: %s", err) + } + outputFile, err := ioutil.ReadFile("my-strawberry-cake") + if err != nil { + return fmt.Errorf("Unable to read output file: %s", err) + } + if sha256.Sum256(inputFile) != sha256.Sum256(outputFile) { + return fmt.Errorf("Input and output files do not match\n"+ + "Input:\n%s\nOutput:\n%s\n", inputFile, outputFile) + } + return nil }, - } - hook := &packersdk.DispatchHook{Mapping: hooks} - - // Run things - artifact, err := builder.Run(context.Background(), ui, hook) - if err != nil { - t.Fatalf("Error running build %s", err) - } - // Preemptive cleanup - defer artifact.Destroy() - - // Verify that the thing we downloaded is the same thing we sent up. - // Complain loudly if it isn't. - inputFile, err := ioutil.ReadFile("test-fixtures/onecakes/strawberry") - if err != nil { - t.Fatalf("Unable to read input file: %s", err) - } - outputFile, err := ioutil.ReadFile("my-strawberry-cake") - if err != nil { - t.Fatalf("Unable to read output file: %s", err) - } - if sha256.Sum256(inputFile) != sha256.Sum256(outputFile) { - t.Fatalf("Input and output files do not match\n"+ - "Input:\n%s\nOutput:\n%s\n", inputFile, outputFile) - } + Teardown: func() error { + // Cleanup. Honestly I don't know why you would want to get rid + // of my strawberry cake. It's so tasty! Do you not like cake? Are you a + // cake-hater? Or are you keeping all the cake all for yourself? So selfish! + os.Remove("my-strawberry-cake") + return nil + }, + }) } // TestLargeDownload verifies that files are the appropriate size after being @@ -101,276 +109,133 @@ func TestUploadDownload(t *testing.T) { // need to use github.com/cbednarski/rerun to verify since this problem occurs // only intermittently. func TestLargeDownload(t *testing.T) { - ui := packersdk.TestUi(t) - - tpl, err := template.Parse(strings.NewReader(dockerLargeBuilderConfig)) - if err != nil { - t.Fatalf("Unable to parse config: %s", err) - } - if os.Getenv("PACKER_ACC") == "" { t.Skip("This test is only run with PACKER_ACC=1") } + + dockerProvisionerConfig := []map[string]interface{}{ + { + "type": "shell", + "inline": []string{ + "dd if=/dev/urandom of=/tmp/cupcake bs=1M count=2", + "dd if=/dev/urandom of=/tmp/bigcake bs=1M count=100", + "sync", + "md5sum /tmp/cupcake /tmp/bigcake", + }, + }, + { + "type": "file", + "source": "/tmp/cupcake", + "destination": "cupcake", + "direction": "download", + }, + { + "type": "file", + "source": "/tmp/bigcake", + "destination": "bigcake", + "direction": "download", + }, + } + + configString := RenderConfig(map[string]interface{}{}, dockerProvisionerConfig) + + // this should be a precheck cmd := exec.Command("docker", "-v") - cmd.Run() - if !cmd.ProcessState.Success() { + err := cmd.Run() + if err != nil { t.Error("docker command not found; please make sure docker is installed") } - // Setup the builder - builder := &Builder{} - _, warnings, err := builder.Prepare(tpl.Builders["docker"].Config) - if err != nil { - t.Fatalf("Error preparing configuration %s", err) - } - if len(warnings) > 0 { - t.Fatal("Encountered configuration warnings; aborting") - } + builderT.Test(t, builderT.TestCase{ + Builder: &Builder{}, + Template: configString, + Check: func(a []packersdk.Artifact) error { + // Verify that the things we downloaded are the right size. Complain loudly + // if they are not. + // + // cupcake should be 2097152 bytes + // bigcake should be 104857600 bytes + cupcake, err := os.Stat("cupcake") + if err != nil { + t.Fatalf("Unable to stat cupcake file: %s", err) + } + cupcakeExpected := int64(2097152) + if cupcake.Size() != cupcakeExpected { + t.Errorf("Expected cupcake to be %d bytes; found %d", cupcakeExpected, cupcake.Size()) + } - // Setup the provisioners - shell := &shell.Provisioner{} - err = shell.Prepare(tpl.Provisioners[0].Config) - if err != nil { - t.Fatalf("Error preparing shell provisioner: %s", err) - } - downloadCupcake := &file.Provisioner{} - err = downloadCupcake.Prepare(tpl.Provisioners[1].Config) - if err != nil { - t.Fatalf("Error preparing downloadCupcake: %s", err) - } - downloadBigcake := &file.Provisioner{} - err = downloadBigcake.Prepare(tpl.Provisioners[2].Config) - if err != nil { - t.Fatalf("Error preparing downloadBigcake: %s", err) - } + bigcake, err := os.Stat("bigcake") + if err != nil { + t.Fatalf("Unable to stat bigcake file: %s", err) + } + bigcakeExpected := int64(104857600) + if bigcake.Size() != bigcakeExpected { + t.Errorf("Expected bigcake to be %d bytes; found %d", bigcakeExpected, bigcake.Size()) + } - // Preemptive cleanup. - defer os.Remove("cupcake") - defer os.Remove("bigcake") + // TODO if we can, calculate a sha inside the container and compare to the + // one we get after we pull it down. We will probably have to parse the log + // or ui output to do this because we use /dev/urandom to create the file. - // Add hooks so the provisioners run during the build - hooks := map[string][]packersdk.Hook{} - hooks[packersdk.HookProvision] = []packersdk.Hook{ - &packer.ProvisionHook{ - Provisioners: []*packer.HookedProvisioner{ - {Provisioner: shell, Config: nil, TypeName: ""}, - {Provisioner: downloadCupcake, Config: nil, TypeName: ""}, - {Provisioner: downloadBigcake, Config: nil, TypeName: ""}, - }, + // if sha256.Sum256(inputFile) != sha256.Sum256(outputFile) { + // t.Fatalf("Input and output files do not match\n"+ + // "Input:\n%s\nOutput:\n%s\n", inputFile, outputFile) + // } + return nil }, - } - hook := &packersdk.DispatchHook{Mapping: hooks} - - // Run things - artifact, err := builder.Run(context.Background(), ui, hook) - if err != nil { - t.Fatalf("Error running build %s", err) - } - // Preemptive cleanup - defer artifact.Destroy() - - // Verify that the things we downloaded are the right size. Complain loudly - // if they are not. - // - // cupcake should be 2097152 bytes - // bigcake should be 104857600 bytes - cupcake, err := os.Stat("cupcake") - if err != nil { - t.Fatalf("Unable to stat cupcake file: %s", err) - } - cupcakeExpected := int64(2097152) - if cupcake.Size() != cupcakeExpected { - t.Errorf("Expected cupcake to be %d bytes; found %d", cupcakeExpected, cupcake.Size()) - } - - bigcake, err := os.Stat("bigcake") - if err != nil { - t.Fatalf("Unable to stat bigcake file: %s", err) - } - bigcakeExpected := int64(104857600) - if bigcake.Size() != bigcakeExpected { - t.Errorf("Expected bigcake to be %d bytes; found %d", bigcakeExpected, bigcake.Size()) - } - - // TODO if we can, calculate a sha inside the container and compare to the - // one we get after we pull it down. We will probably have to parse the log - // or ui output to do this because we use /dev/urandom to create the file. - - // if sha256.Sum256(inputFile) != sha256.Sum256(outputFile) { - // t.Fatalf("Input and output files do not match\n"+ - // "Input:\n%s\nOutput:\n%s\n", inputFile, outputFile) - // } + Teardown: func() error { + os.Remove("cupcake") + os.Remove("bigcake") + return nil + }, + }) } // TestFixUploadOwner verifies that owner of uploaded files is the user the container is running as. func TestFixUploadOwner(t *testing.T) { - ui := packersdk.TestUi(t) - - tpl, err := template.Parse(strings.NewReader(testFixUploadOwnerTemplate)) - if err != nil { - t.Fatalf("Unable to parse config: %s", err) - } - if os.Getenv("PACKER_ACC") == "" { t.Skip("This test is only run with PACKER_ACC=1") } + cmd := exec.Command("docker", "-v") - cmd.Run() - if !cmd.ProcessState.Success() { + err := cmd.Run() + if err != nil { t.Error("docker command not found; please make sure docker is installed") } - // Setup the builder - builder := &Builder{} - _, warnings, err := builder.Prepare(tpl.Builders["docker"].Config) - if err != nil { - t.Fatalf("Error preparing configuration %s", err) - } - if len(warnings) > 0 { - t.Fatal("Encountered configuration warnings; aborting") + dockerBuilderExtraConfig := map[string]interface{}{ + "run_command": []string{"-d", "-i", "-t", "-u", "42", "{{.Image}}", "/bin/sh"}, } - // Setup the provisioners - fileProvisioner := &file.Provisioner{} - err = fileProvisioner.Prepare(tpl.Provisioners[0].Config) - if err != nil { - t.Fatalf("Error preparing single file upload provisioner: %s", err) - } - - dirProvisioner := &file.Provisioner{} - err = dirProvisioner.Prepare(tpl.Provisioners[1].Config) - if err != nil { - t.Fatalf("Error preparing directory upload provisioner: %s", err) - } - - shellProvisioner := &shell.Provisioner{} - err = shellProvisioner.Prepare(tpl.Provisioners[2].Config) - if err != nil { - t.Fatalf("Error preparing shell provisioner: %s", err) - } - - verifyProvisioner := &shell.Provisioner{} - err = verifyProvisioner.Prepare(tpl.Provisioners[3].Config) - if err != nil { - t.Fatalf("Error preparing verification provisioner: %s", err) - } - - // Add hooks so the provisioners run during the build - hooks := map[string][]packersdk.Hook{} - hooks[packersdk.HookProvision] = []packersdk.Hook{ - &packer.ProvisionHook{ - Provisioners: []*packer.HookedProvisioner{ - {Provisioner: fileProvisioner, Config: nil, TypeName: ""}, - {Provisioner: dirProvisioner, Config: nil, TypeName: ""}, - {Provisioner: shellProvisioner, Config: nil, TypeName: ""}, - {Provisioner: verifyProvisioner, Config: nil, TypeName: ""}, + testFixUploadOwnerProvisionersTemplate := []map[string]interface{}{ + { + "type": "file", + "source": "test-fixtures/onecakes/strawberry", + "destination": "/tmp/strawberry-cake", + }, + { + "type": "file", + "source": "test-fixtures/manycakes", + "destination": "/tmp/", + }, + { + "type": "shell", + "inline": "touch /tmp/testUploadOwner", + }, + { + "type": "shell", + "inline": []string{ + "[ $(stat -c %u /tmp/strawberry-cake) -eq 42 ] || (echo 'Invalid owner of /tmp/strawberry-cake' && exit 1)", + "[ $(stat -c %u /tmp/testUploadOwner) -eq 42 ] || (echo 'Invalid owner of /tmp/testUploadOwner' && exit 1)", + "find /tmp/manycakes | xargs -n1 -IFILE /bin/sh -c '[ $(stat -c %u FILE) -eq 42 ] || (echo \"Invalid owner of FILE\" && exit 1)'", }, }, } - hook := &packersdk.DispatchHook{Mapping: hooks} - artifact, err := builder.Run(context.Background(), ui, hook) - if err != nil { - t.Fatalf("Error running build %s", err) - } - defer artifact.Destroy() + configString := RenderConfig(dockerBuilderExtraConfig, testFixUploadOwnerProvisionersTemplate) + builderT.Test(t, builderT.TestCase{ + Builder: &Builder{}, + Template: configString, + }) } - -const dockerBuilderConfig = ` -{ - "builders": [ - { - "type": "docker", - "image": "ubuntu", - "discard": true, - "run_command": ["-d", "-i", "-t", "{{.Image}}", "/bin/sh"] - } - ], - "provisioners": [ - { - "type": "file", - "source": "test-fixtures/onecakes/strawberry", - "destination": "/strawberry-cake" - }, - { - "type": "file", - "source": "/strawberry-cake", - "destination": "my-strawberry-cake", - "direction": "download" - } - ] -} -` - -const dockerLargeBuilderConfig = ` -{ - "builders": [ - { - "type": "docker", - "image": "ubuntu", - "discard": true - } - ], - "provisioners": [ - { - "type": "shell", - "inline": [ - "dd if=/dev/urandom of=/tmp/cupcake bs=1M count=2", - "dd if=/dev/urandom of=/tmp/bigcake bs=1M count=100", - "sync", - "md5sum /tmp/cupcake /tmp/bigcake" - ] - }, - { - "type": "file", - "source": "/tmp/cupcake", - "destination": "cupcake", - "direction": "download" - }, - { - "type": "file", - "source": "/tmp/bigcake", - "destination": "bigcake", - "direction": "download" - } - ] -} -` - -const testFixUploadOwnerTemplate = ` -{ - "builders": [ - { - "type": "docker", - "image": "ubuntu", - "discard": true, - "run_command": ["-d", "-i", "-t", "-u", "42", "{{.Image}}", "/bin/sh"] - } - ], - "provisioners": [ - { - "type": "file", - "source": "test-fixtures/onecakes/strawberry", - "destination": "/tmp/strawberry-cake" - }, - { - "type": "file", - "source": "test-fixtures/manycakes", - "destination": "/tmp/" - }, - { - "type": "shell", - "inline": "touch /tmp/testUploadOwner" - }, - { - "type": "shell", - "inline": [ - "[ $(stat -c %u /tmp/strawberry-cake) -eq 42 ] || (echo 'Invalid owner of /tmp/strawberry-cake' && exit 1)", - "[ $(stat -c %u /tmp/testUploadOwner) -eq 42 ] || (echo 'Invalid owner of /tmp/testUploadOwner' && exit 1)", - "find /tmp/manycakes | xargs -n1 -IFILE /bin/sh -c '[ $(stat -c %u FILE) -eq 42 ] || (echo \"Invalid owner of FILE\" && exit 1)'" - ] - } - ] -} -` diff --git a/main.go b/main.go index 026ed3f41..64d1e51df 100644 --- a/main.go +++ b/main.go @@ -200,7 +200,7 @@ func wrappedMain() int { Reader: os.Stdin, Writer: os.Stdout, ErrorWriter: os.Stdout, - PB: &packer.NoopProgressTracker{}, + PB: &packersdk.NoopProgressTracker{}, } ui = basicUi if !inPlugin { diff --git a/packer-plugin-sdk/acctest/testing.go b/packer-plugin-sdk/acctest/testing.go index cd2a69782..799682842 100644 --- a/packer-plugin-sdk/acctest/testing.go +++ b/packer-plugin-sdk/acctest/testing.go @@ -163,10 +163,12 @@ func Test(t TestT, c TestCase) { // Run it! We use a temporary directory for caching and discard // any UI output. We discard since it shows up in logs anyways. log.Printf("[DEBUG] Running 'test' build") + // ui := packersdk.TestUi(t) ui := &packersdk.BasicUi{ Reader: os.Stdin, Writer: ioutil.Discard, ErrorWriter: ioutil.Discard, + PB: &packersdk.NoopProgressTracker{}, } artifacts, err := build.Run(context.Background(), ui) if err != nil { diff --git a/packer-plugin-sdk/multistep/commonsteps/step_download_test.go b/packer-plugin-sdk/multistep/commonsteps/step_download_test.go index 460100731..4ed23856a 100644 --- a/packer-plugin-sdk/multistep/commonsteps/step_download_test.go +++ b/packer-plugin-sdk/multistep/commonsteps/step_download_test.go @@ -17,7 +17,6 @@ import ( "github.com/google/go-cmp/cmp" urlhelper "github.com/hashicorp/go-getter/v2/helper/url" - "github.com/hashicorp/packer/packer" "github.com/hashicorp/packer/packer-plugin-sdk/multistep" packersdk "github.com/hashicorp/packer/packer-plugin-sdk/packer" "github.com/hashicorp/packer/packer-plugin-sdk/tmp" @@ -246,7 +245,7 @@ func TestStepDownload_download(t *testing.T) { ui := &packersdk.BasicUi{ Reader: new(bytes.Buffer), Writer: new(bytes.Buffer), - PB: &packer.NoopProgressTracker{}, + PB: &packersdk.NoopProgressTracker{}, } dir := createTempDir(t) diff --git a/packer-plugin-sdk/multistep/commonsteps/step_output_dir_test.go b/packer-plugin-sdk/multistep/commonsteps/step_output_dir_test.go index 66b37f033..4e7c8771a 100644 --- a/packer-plugin-sdk/multistep/commonsteps/step_output_dir_test.go +++ b/packer-plugin-sdk/multistep/commonsteps/step_output_dir_test.go @@ -7,7 +7,6 @@ import ( "os" "testing" - "github.com/hashicorp/packer/packer" "github.com/hashicorp/packer/packer-plugin-sdk/multistep" packersdk "github.com/hashicorp/packer/packer-plugin-sdk/packer" ) @@ -17,7 +16,7 @@ func testState(t *testing.T) multistep.StateBag { state.Put("ui", &packersdk.BasicUi{ Reader: new(bytes.Buffer), Writer: new(bytes.Buffer), - PB: &packer.NoopProgressTracker{}, + PB: &packersdk.NoopProgressTracker{}, }) return state } diff --git a/packer-plugin-sdk/packer/ui.go b/packer-plugin-sdk/packer/ui.go index 16ad5d9e6..4c97b2a0c 100644 --- a/packer-plugin-sdk/packer/ui.go +++ b/packer-plugin-sdk/packer/ui.go @@ -150,3 +150,12 @@ func (rw *BasicUi) Machine(t string, args ...string) { func (rw *BasicUi) TrackProgress(src string, currentSize, totalSize int64, stream io.ReadCloser) (body io.ReadCloser) { return rw.PB.TrackProgress(src, currentSize, totalSize, stream) } + +// NoopProgressTracker is a progress tracker +// that displays nothing. +type NoopProgressTracker struct{} + +// TrackProgress returns stream +func (*NoopProgressTracker) TrackProgress(_ string, _, _ int64, stream io.ReadCloser) io.ReadCloser { + return stream +} diff --git a/packer-plugin-sdk/packer/ui_mock.go b/packer-plugin-sdk/packer/ui_mock.go index 8ca8beafb..e1e165f5e 100644 --- a/packer-plugin-sdk/packer/ui_mock.go +++ b/packer-plugin-sdk/packer/ui_mock.go @@ -13,6 +13,7 @@ func TestUi(t *testing.T) Ui { Reader: &buf, Writer: ioutil.Discard, ErrorWriter: ioutil.Discard, + PB: &NoopProgressTracker{}, } } diff --git a/packer/progressbar_noop.go b/packer/progressbar_noop.go deleted file mode 100644 index e8891afaa..000000000 --- a/packer/progressbar_noop.go +++ /dev/null @@ -1,12 +0,0 @@ -package packer - -import "io" - -// NoopProgressTracker is a progress tracker -// that displays nothing. -type NoopProgressTracker struct{} - -// TrackProgress returns stream -func (*NoopProgressTracker) TrackProgress(_ string, _, _ int64, stream io.ReadCloser) io.ReadCloser { - return stream -} diff --git a/packer/progressbar_solaris.go b/packer/progressbar_solaris.go index 868037c38..28f989f1a 100644 --- a/packer/progressbar_solaris.go +++ b/packer/progressbar_solaris.go @@ -1,3 +1,7 @@ package packer -type UiProgressBar = NoopProgressTracker +import ( + packersdk "github.com/hashicorp/packer/packer-plugin-sdk/packer" +) + +type UiProgressBar = packersdk.NoopProgressTracker diff --git a/packer/ui.go b/packer/ui.go index dd70b6d02..4dc2c3490 100644 --- a/packer/ui.go +++ b/packer/ui.go @@ -31,7 +31,7 @@ const ( ) type NoopUi struct { - PB NoopProgressTracker + PB packersdk.NoopProgressTracker } var _ packersdk.Ui = new(NoopUi) @@ -173,7 +173,7 @@ func (u *TargetedUI) TrackProgress(src string, currentSize, totalSize int64, str // to the given Writer. type MachineReadableUi struct { Writer io.Writer - PB NoopProgressTracker + PB packersdk.NoopProgressTracker } var _ packersdk.Ui = new(MachineReadableUi) diff --git a/provisioner/file/provisioner_test.go b/provisioner/file/provisioner_test.go index 510dabfc7..07a9d2871 100644 --- a/provisioner/file/provisioner_test.go +++ b/provisioner/file/provisioner_test.go @@ -10,7 +10,6 @@ import ( "strings" "testing" - "github.com/hashicorp/packer/packer" packersdk "github.com/hashicorp/packer/packer-plugin-sdk/packer" ) @@ -127,7 +126,7 @@ func TestProvisionerProvision_SendsFile(t *testing.T) { b := bytes.NewBuffer(nil) ui := &packersdk.BasicUi{ Writer: b, - PB: &packer.NoopProgressTracker{}, + PB: &packersdk.NoopProgressTracker{}, } comm := &packersdk.MockCommunicator{} err = p.Provision(context.Background(), ui, comm, make(map[string]interface{})) @@ -186,7 +185,7 @@ func TestProvisionerProvision_SendsFileMultipleFiles(t *testing.T) { b := bytes.NewBuffer(nil) ui := &packersdk.BasicUi{ Writer: b, - PB: &packer.NoopProgressTracker{}, + PB: &packersdk.NoopProgressTracker{}, } comm := &packersdk.MockCommunicator{} err = p.Provision(context.Background(), ui, comm, make(map[string]interface{})) @@ -256,7 +255,7 @@ func TestProvisionerProvision_SendsFileMultipleDirs(t *testing.T) { b := bytes.NewBuffer(nil) ui := &packersdk.BasicUi{ Writer: b, - PB: &packer.NoopProgressTracker{}, + PB: &packersdk.NoopProgressTracker{}, } comm := &packersdk.MockCommunicator{} err = p.Provision(context.Background(), ui, comm, make(map[string]interface{})) @@ -308,7 +307,7 @@ func TestProvisionerProvision_SendsFileMultipleFilesToFolder(t *testing.T) { b := bytes.NewBuffer(nil) ui := &packersdk.BasicUi{ Writer: b, - PB: &packer.NoopProgressTracker{}, + PB: &packersdk.NoopProgressTracker{}, } comm := &packersdk.MockCommunicator{} err = p.Provision(context.Background(), ui, comm, make(map[string]interface{})) @@ -366,7 +365,7 @@ func TestProvisionDownloadMkdirAll(t *testing.T) { b := bytes.NewBuffer(nil) ui := &packersdk.BasicUi{ Writer: b, - PB: &packer.NoopProgressTracker{}, + PB: &packersdk.NoopProgressTracker{}, } comm := &packersdk.MockCommunicator{} err = p.ProvisionDownload(ui, comm)