github.com/terraform-linters/tflint-ruleset-azurerm@v0.26.0/integration/integration_test.go (about)

     1  package integration
     2  
     3  import (
     4  	"bytes"
     5  	"encoding/json"
     6  	"io/ioutil"
     7  	"os"
     8  	"os/exec"
     9  	"testing"
    10  
    11  	"github.com/google/go-cmp/cmp"
    12  )
    13  
    14  func TestIntegration(t *testing.T) {
    15  	cases := []struct {
    16  		Name    string
    17  		Command *exec.Cmd
    18  		Dir     string
    19  	}{
    20  		{
    21  			Name:    "basic",
    22  			Command: exec.Command("tflint", "--format", "json", "--force"),
    23  			Dir:     "basic",
    24  		},
    25  		{
    26  			Name:    "tags",
    27  			Command: exec.Command("tflint", "--format", "json", "--force"),
    28  			Dir:     "tags",
    29  		},
    30  	}
    31  
    32  	dir, _ := os.Getwd()
    33  	defer os.Chdir(dir)
    34  
    35  	for _, tc := range cases {
    36  		testDir := dir + "/" + tc.Dir
    37  		os.Chdir(testDir)
    38  
    39  		var stdout, stderr bytes.Buffer
    40  		tc.Command.Stdout = &stdout
    41  		tc.Command.Stderr = &stderr
    42  		if err := tc.Command.Run(); err != nil {
    43  			t.Fatalf("Failed `%s`: %s, stdout=%s stderr=%s", tc.Name, err, stdout.String(), stderr.String())
    44  		}
    45  
    46  		ret, err := ioutil.ReadFile("result.json")
    47  		if err != nil {
    48  			t.Fatalf("Failed `%s`: %s", tc.Name, err)
    49  		}
    50  
    51  		var expected interface{}
    52  		if err := json.Unmarshal(ret, &expected); err != nil {
    53  			t.Fatalf("Failed `%s`: %s", tc.Name, err)
    54  		}
    55  
    56  		var got interface{}
    57  		if err := json.Unmarshal(stdout.Bytes(), &got); err != nil {
    58  			t.Fatalf("Failed `%s`: %s", tc.Name, err)
    59  		}
    60  
    61  		if !cmp.Equal(got, expected) {
    62  			t.Fatalf("Failed `%s`: diff=%s", tc.Name, cmp.Diff(expected, got))
    63  		}
    64  	}
    65  }