Skip to content

Commit

Permalink
wip
Browse files Browse the repository at this point in the history
  • Loading branch information
paultyng authored and appilon committed Sep 16, 2020
1 parent 0fde23c commit 3649e43
Show file tree
Hide file tree
Showing 10 changed files with 64 additions and 28 deletions.
9 changes: 8 additions & 1 deletion tfexec/errors.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,9 @@ var (
)

func (tf *Terraform) parseError(err error, stderr string) error {
if _, ok := err.(*exec.ExitError); !ok {
// if not an ExitError, just return it, do not try to parse
var ee *exec.ExitError
if !errors.As(err, &ee) {
return err
}

Expand Down Expand Up @@ -87,6 +89,11 @@ func (tf *Terraform) parseError(err error, stderr string) error {
return &ErrWorkspaceExists{submatches[1]}
}
}
errString := strings.TrimSpace(stderr)
if errString == "" {
// if stderr is empty, return the ExitError directly, as it will have a better message
return ee
}
return errors.New(stderr)
}

Expand Down
25 changes: 19 additions & 6 deletions tfexec/fmt.go
Original file line number Diff line number Diff line change
Expand Up @@ -73,8 +73,7 @@ func (tf *Terraform) FormatWrite(ctx context.Context, opts ...FormatOption) erro
return err
}

panic("not implemented")
panic(cmd)
return tf.runTerraformCmd(cmd)
}

func (tf *Terraform) FormatCheck(ctx context.Context, opts ...FormatOption) (bool, []string, error) {
Expand All @@ -96,11 +95,25 @@ func (tf *Terraform) FormatCheck(ctx context.Context, opts ...FormatOption) (boo
cmd.Stdout = mergeWriters(cmd.Stdout, &outBuf)

err = tf.runTerraformCmd(cmd)
if err != nil {
return false, nil, err
if err == nil {
return true, nil, nil
}
if cmd.ProcessState.ExitCode() == 3 {
// unformatted, parse the file list

files := []string{}
lines := strings.Split(strings.Replace(outBuf.String(), "\r\n", "\n", -1), "\n")
for _, l := range lines {
l = strings.TrimSpace(l)
if l == "" {
continue
}
files = append(files, l)
}

panic("not implemented")
return false, files, nil
}
return false, nil, err
}

func (tf *Terraform) formatCmd(ctx context.Context, args []string, opts ...FormatOption) (*exec.Cmd, error) {
Expand Down Expand Up @@ -128,5 +141,5 @@ func (tf *Terraform) formatCmd(ctx context.Context, args []string, opts ...Forma
args = append(args, c.dir)
}

return tf.buildTerraformCmd(ctx, args...), nil
return tf.buildTerraformCmd(ctx, nil, args...), nil
}
16 changes: 14 additions & 2 deletions tfexec/internal/e2etest/fmt_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package e2etest

import (
"context"
"path/filepath"
"reflect"
"strings"
"testing"
Expand Down Expand Up @@ -44,7 +45,7 @@ func TestFormatCheck(t *testing.T) {
runTest(t, "unformatted", func(t *testing.T, tfv *version.Version, tf *tfexec.Terraform) {
formatted, files, err := tf.FormatCheck(context.Background())
if err != nil {
t.Fatal(err)
t.Fatalf("error from FormatCheck: %T %q", err, err)
}

if formatted {
Expand All @@ -54,12 +55,23 @@ func TestFormatCheck(t *testing.T) {
if !reflect.DeepEqual(files, []string{"file1.tf", "file2.tf"}) {
t.Fatalf("unexpected files list: %#v", files)
}

// TODO: assert files not updated to golden, mabye take hash before running
})
}

func TestFormatWrite(t *testing.T) {
t.Skip("not implemented")
runTest(t, "unformatted", func(t *testing.T, tfv *version.Version, tf *tfexec.Terraform) {
err := tf.FormatWrite(context.Background())
if err != nil {
t.Fatalf("error from FormatWrite: %T %q", err, err)
}

for file, golden := range map[string]string{
"file1.tf": "file1.golden.txt",
"file2.tf": "file2.golden.txt",
} {
textFilesEqual(t, filepath.Join(tf.WorkingDir(), golden), filepath.Join(tf.WorkingDir(), file))
}
})
}
Binary file not shown.
4 changes: 4 additions & 0 deletions tfexec/internal/e2etest/testdata/unformatted/file1.golden.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
resource "foo" "bar" {
baz = 1
qux = 2
}
2 changes: 1 addition & 1 deletion tfexec/internal/e2etest/testdata/unformatted/file1.tf
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
resource "foo" "bar" {
baz = 1
qux = 2
}
}
Binary file not shown.
4 changes: 4 additions & 0 deletions tfexec/internal/e2etest/testdata/unformatted/file2.golden.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
resource "foo" "baz" {
baz = 1
qux = 2
}
2 changes: 1 addition & 1 deletion tfexec/internal/e2etest/testdata/unformatted/file2.tf
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
resource "foo" "baz" {
baz = 1
qux = 2
}
}
30 changes: 13 additions & 17 deletions tfexec/internal/e2etest/util_test.go
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
package e2etest

import (
"bufio"
"bytes"
"context"
"fmt"
"io"
Expand Down Expand Up @@ -163,27 +161,25 @@ func copyFile(path string, dstPath string) error {
return nil
}

// filesEqual returns true iff the two files have the same contents.
func filesEqual(file1, file2 string) (bool, error) {
sf, err := os.Open(file1)
// filesEqual asserts that two files have the same contents.
func textFilesEqual(t *testing.T, expected, actual string) {
eb, err := ioutil.ReadFile(expected)
if err != nil {
return false, err
t.Fatal(err)
}

df, err := os.Open(file2)
ab, err := ioutil.ReadFile(actual)
if err != nil {
return false, err
t.Fatal(err)
}

sscan := bufio.NewScanner(sf)
dscan := bufio.NewScanner(df)
es := string(eb)
es = strings.ReplaceAll(es, "\r\n", "\n")

for sscan.Scan() {
dscan.Scan()
if !bytes.Equal(sscan.Bytes(), dscan.Bytes()) {
return true, nil
}
}
as := string(ab)
as = strings.ReplaceAll(as, "\r\n", "\n")

return false, nil
if as != es {
t.Fatalf("expected:\n%s\n\ngot:\n%s\n", es, as)
}
}

0 comments on commit 3649e43

Please sign in to comment.