github.com/rstandt/terraform@v0.12.32-0.20230710220336-b1063613405c/states/statefile/roundtrip_test.go (about)

     1  package statefile
     2  
     3  import (
     4  	"bytes"
     5  	"io/ioutil"
     6  	"os"
     7  	"path/filepath"
     8  	"sort"
     9  	"strings"
    10  	"testing"
    11  
    12  	"github.com/go-test/deep"
    13  )
    14  
    15  func TestRoundtrip(t *testing.T) {
    16  	const dir = "testdata/roundtrip"
    17  	entries, err := ioutil.ReadDir(dir)
    18  	if err != nil {
    19  		t.Fatal(err)
    20  	}
    21  
    22  	for _, info := range entries {
    23  		const inSuffix = ".in.tfstate"
    24  		const outSuffix = ".out.tfstate"
    25  
    26  		if info.IsDir() {
    27  			continue
    28  		}
    29  		inName := info.Name()
    30  		if !strings.HasSuffix(inName, inSuffix) {
    31  			continue
    32  		}
    33  		name := inName[:len(inName)-len(inSuffix)]
    34  		outName := name + outSuffix
    35  
    36  		t.Run(name, func(t *testing.T) {
    37  			oSrcWant, err := ioutil.ReadFile(filepath.Join(dir, outName))
    38  			if err != nil {
    39  				t.Fatal(err)
    40  			}
    41  			oWant, diags := readStateV4(oSrcWant)
    42  			if diags.HasErrors() {
    43  				t.Fatal(diags.Err())
    44  			}
    45  
    46  			ir, err := os.Open(filepath.Join(dir, inName))
    47  			if err != nil {
    48  				t.Fatal(err)
    49  			}
    50  			defer ir.Close()
    51  
    52  			f, err := Read(ir)
    53  			if err != nil {
    54  				t.Fatalf("unexpected error: %s", err)
    55  			}
    56  
    57  			var buf bytes.Buffer
    58  			err = Write(f, &buf)
    59  			if err != nil {
    60  				t.Fatal(err)
    61  			}
    62  			oSrcWritten := buf.Bytes()
    63  
    64  			oGot, diags := readStateV4(oSrcWritten)
    65  			if diags.HasErrors() {
    66  				t.Fatal(diags.Err())
    67  			}
    68  
    69  			problems := deep.Equal(oGot, oWant)
    70  			sort.Strings(problems)
    71  			for _, problem := range problems {
    72  				t.Error(problem)
    73  			}
    74  		})
    75  	}
    76  }