177 lines
4.3 KiB
Go
177 lines
4.3 KiB
Go
package command
|
|
|
|
import (
|
|
"bytes"
|
|
"fmt"
|
|
"io/ioutil"
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/google/go-cmp/cmp"
|
|
packersdk "github.com/hashicorp/packer-plugin-sdk/packer"
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestFmt(t *testing.T) {
|
|
s := &strings.Builder{}
|
|
ui := &packersdk.BasicUi{
|
|
Writer: s,
|
|
}
|
|
c := &FormatCommand{
|
|
Meta: testMeta(t),
|
|
}
|
|
|
|
c.Ui = ui
|
|
|
|
args := []string{"-check=true", filepath.Join(testFixture("fmt"), "formatted.pkr.hcl")}
|
|
if code := c.Run(args); code != 0 {
|
|
fatalCommand(t, c.Meta)
|
|
}
|
|
expected := ""
|
|
assert.Equal(t, expected, strings.TrimSpace(s.String()))
|
|
}
|
|
|
|
func TestFmt_unformattedPKRVarsTemplate(t *testing.T) {
|
|
c := &FormatCommand{
|
|
Meta: testMeta(t),
|
|
}
|
|
|
|
args := []string{"-check=true", filepath.Join(testFixture("fmt"), "unformatted.pkrvars.hcl")}
|
|
if code := c.Run(args); code != 3 {
|
|
fatalCommand(t, c.Meta)
|
|
}
|
|
}
|
|
|
|
func TestFmt_unfomattedTemlateDirectory(t *testing.T) {
|
|
c := &FormatCommand{
|
|
Meta: testMeta(t),
|
|
}
|
|
|
|
args := []string{"-check=true", filepath.Join(testFixture("fmt"), "")}
|
|
|
|
if code := c.Run(args); code != 3 {
|
|
fatalCommand(t, c.Meta)
|
|
}
|
|
}
|
|
|
|
const (
|
|
unformattedHCL = `
|
|
ami_filter_name ="amzn2-ami-hvm-*-x86_64-gp2"
|
|
ami_filter_owners =[ "137112412989" ]
|
|
|
|
`
|
|
formattedHCL = `
|
|
ami_filter_name = "amzn2-ami-hvm-*-x86_64-gp2"
|
|
ami_filter_owners = ["137112412989"]
|
|
|
|
`
|
|
)
|
|
|
|
func TestFmt_Recursive(t *testing.T) {
|
|
|
|
tests := []struct {
|
|
name string
|
|
formatArgs []string // arguments passed to format
|
|
alreadyPresentContent map[string]string
|
|
fileCheck
|
|
}{
|
|
{
|
|
name: "nested formats recursively",
|
|
formatArgs: []string{"-recursive=true"},
|
|
alreadyPresentContent: map[string]string{
|
|
"foo/bar/baz.pkr.hcl": unformattedHCL,
|
|
"foo/bar/baz/woo.pkrvars.hcl": unformattedHCL,
|
|
"potato": unformattedHCL,
|
|
"foo/bar/potato": unformattedHCL,
|
|
"bar.pkr.hcl": unformattedHCL,
|
|
"-": unformattedHCL,
|
|
},
|
|
fileCheck: fileCheck{
|
|
expectedContent: map[string]string{
|
|
"foo/bar/baz.pkr.hcl": formattedHCL,
|
|
"foo/bar/baz/woo.pkrvars.hcl": formattedHCL,
|
|
"potato": unformattedHCL,
|
|
"foo/bar/potato": unformattedHCL,
|
|
"bar.pkr.hcl": formattedHCL,
|
|
"-": unformattedHCL,
|
|
}},
|
|
},
|
|
{
|
|
name: "nested no recursive format",
|
|
formatArgs: []string{},
|
|
alreadyPresentContent: map[string]string{
|
|
"foo/bar/baz.pkr.hcl": unformattedHCL,
|
|
"foo/bar/baz/woo.pkrvars.hcl": unformattedHCL,
|
|
"bar.pkr.hcl": unformattedHCL,
|
|
"-": unformattedHCL,
|
|
},
|
|
fileCheck: fileCheck{
|
|
expectedContent: map[string]string{
|
|
"foo/bar/baz.pkr.hcl": unformattedHCL,
|
|
"foo/bar/baz/woo.pkrvars.hcl": unformattedHCL,
|
|
"bar.pkr.hcl": formattedHCL,
|
|
"-": unformattedHCL,
|
|
}},
|
|
},
|
|
}
|
|
|
|
c := &FormatCommand{
|
|
Meta: testMeta(t),
|
|
}
|
|
|
|
testDir := "test-fixtures/fmt"
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
tempDirectory := mustString(ioutil.TempDir(testDir, "test-dir-*"))
|
|
defer os.RemoveAll(tempDirectory)
|
|
|
|
createFiles(tempDirectory, tt.alreadyPresentContent)
|
|
|
|
testArgs := append(tt.formatArgs, tempDirectory)
|
|
if code := c.Run(testArgs); code != 0 {
|
|
ui := c.Meta.Ui.(*packersdk.BasicUi)
|
|
out := ui.Writer.(*bytes.Buffer)
|
|
err := ui.ErrorWriter.(*bytes.Buffer)
|
|
t.Fatalf(
|
|
"Bad exit code for test case: %s.\n\nStdout:\n\n%s\n\nStderr:\n\n%s",
|
|
tt.name,
|
|
out.String(),
|
|
err.String())
|
|
}
|
|
|
|
tt.fileCheck.verify(t, tempDirectory)
|
|
})
|
|
}
|
|
}
|
|
|
|
func Test_fmt_pipe(t *testing.T) {
|
|
|
|
tc := []struct {
|
|
piped string
|
|
command []string
|
|
env []string
|
|
expected string
|
|
}{
|
|
{unformattedHCL, []string{"fmt", "-"}, nil, formattedHCL},
|
|
}
|
|
|
|
for _, tc := range tc {
|
|
t.Run(fmt.Sprintf("echo %q | packer %s", tc.piped, tc.command), func(t *testing.T) {
|
|
p := helperCommand(t, tc.command...)
|
|
p.Stdin = strings.NewReader(tc.piped)
|
|
p.Env = append(p.Env, tc.env...)
|
|
fmt.Println(fmt.Sprintf("Path: %s", p.Path))
|
|
bs, err := p.Output()
|
|
if err != nil {
|
|
t.Fatalf("Error occurred running command %v: %s", err, bs)
|
|
}
|
|
if diff := cmp.Diff(tc.expected, string(bs)); diff != "" {
|
|
t.Fatalf("Error in diff: %s", diff)
|
|
}
|
|
})
|
|
}
|
|
}
|