Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions post-processor/vagrant/parallels.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@ func (p *ParallelsProvider) Process(ui packersdk.Ui, artifact packersdk.Artifact
// Create the metadata
metadata = map[string]interface{}{"provider": "parallels"}

var copied int

// Copy all of the original contents into the temporary directory
for _, path := range artifact.Files() {
// If the file isn't critical to the function of the
Expand Down Expand Up @@ -55,6 +57,11 @@ func (p *ParallelsProvider) Process(ui packersdk.Ui, artifact packersdk.Artifact
if err = CopyContents(dstPath, path); err != nil {
return
}
copied++
}

if copied == 0 {
err = fmt.Errorf("No VM file found in source artifact")
}

return
Expand Down
106 changes: 106 additions & 0 deletions post-processor/vagrant/parallels_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,115 @@
package vagrant

import (
"context"
"fmt"
"io/ioutil"
"math/rand"
"os"
"testing"

packersdk "github.com/hashicorp/packer-plugin-sdk/packer"
)

func TestParallelsProvider_impl(t *testing.T) {
var _ Provider = new(ParallelsProvider)
}

// mockParallelsVMDir creates a fake temp dir for parallels testing
//
// Note: the path to the pvm/macvm dir is returned, the responsibility to remove
// it befalls the caller.
func mockParallelsVMDir() ([]string, error) {
tmpDir := fmt.Sprintf("%s/%d.pvm", os.TempDir(), rand.Uint32())
err := os.MkdirAll(tmpDir, 0755)
if err != nil {
return nil, err
}

file1, err := os.CreateTemp(tmpDir, "")
if err != nil {
os.RemoveAll(tmpDir)
return nil, err
}
file1.Close()

file2, err := os.CreateTemp(tmpDir, "")
if err != nil {
os.RemoveAll(tmpDir)
return nil, err
}
file2.Close()

return []string{
tmpDir,
file1.Name(),
file2.Name(),
}, nil
}

func TestPostProcessorPostProcessParallels(t *testing.T) {
var p PostProcessor

inputVM, err := mockParallelsVMDir()
if err != nil {
t.Fatalf("failed to create parallels VM directory")
}
dir := inputVM[0]
defer os.RemoveAll(dir)

f, err := ioutil.TempFile("", "packer")
if err != nil {
t.Fatalf("err: %s", err)
}
defer os.Remove(f.Name())

c := map[string]interface{}{
"packer_user_variables": map[string]string{
"foo": f.Name(),
},

"vagrantfile_template": "{{user `foo`}}",
}
err = p.Configure(c)
if err != nil {
t.Fatalf("err: %s", err)
}

a := &packersdk.MockArtifact{
BuilderIdValue: "packer.parallels",
FilesValue: inputVM,
}
a2, _, _, err := p.PostProcess(context.Background(), testUi(), a)
if a2 != nil {
for _, fn := range a2.Files() {
defer os.Remove(fn)
}
}
if err != nil {
t.Fatalf("err: %s", err)
}
}

func TestPostProcessorPostProcessParallels_NoFileErrorOnCopy(t *testing.T) {
var p PostProcessor

c := map[string]interface{}{}
err := p.Configure(c)
if err != nil {
t.Fatalf("err: %s", err)
}

a := &packersdk.MockArtifact{
BuilderIdValue: "packer.parallels",
}
a2, _, _, err := p.PostProcess(context.Background(), testUi(), a)
if a2 != nil {
for _, fn := range a2.Files() {
defer os.Remove(fn)
}
}
if err == nil {
t.Fatalf("should have failed without a file to copy, succeeded instead")
}
t.Logf("failed as expected: %s", err)
}
35 changes: 0 additions & 35 deletions post-processor/vagrant/post-processor_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -231,41 +231,6 @@ func TestPostProcessorPostProcess_badId(t *testing.T) {
}
}

func TestPostProcessorPostProcess_vagrantfileUserVariable(t *testing.T) {
var p PostProcessor

f, err := ioutil.TempFile("", "packer")
if err != nil {
t.Fatalf("err: %s", err)
}
defer os.Remove(f.Name())

c := map[string]interface{}{
"packer_user_variables": map[string]string{
"foo": f.Name(),
},

"vagrantfile_template": "{{user `foo`}}",
}
err = p.Configure(c)
if err != nil {
t.Fatalf("err: %s", err)
}

a := &packersdk.MockArtifact{
BuilderIdValue: "packer.parallels",
}
a2, _, _, err := p.PostProcess(context.Background(), testUi(), a)
if a2 != nil {
for _, fn := range a2.Files() {
defer os.Remove(fn)
}
}
if err != nil {
t.Fatalf("err: %s", err)
}
}

func TestProviderForName(t *testing.T) {
if v, ok := providerForName("virtualbox").(*VBoxProvider); !ok {
t.Fatalf("bad: %#v", v)
Expand Down