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 }