| package statefile |
| |
| import ( |
| "bytes" |
| "io/ioutil" |
| "os" |
| "path/filepath" |
| "sort" |
| "strings" |
| "testing" |
| |
| "github.com/go-test/deep" |
| ) |
| |
| func TestRoundtrip(t *testing.T) { |
| const dir = "testdata/roundtrip" |
| entries, err := ioutil.ReadDir(dir) |
| if err != nil { |
| t.Fatal(err) |
| } |
| |
| for _, info := range entries { |
| const inSuffix = ".in.tfstate" |
| const outSuffix = ".out.tfstate" |
| |
| if info.IsDir() { |
| continue |
| } |
| inName := info.Name() |
| if !strings.HasSuffix(inName, inSuffix) { |
| continue |
| } |
| name := inName[:len(inName)-len(inSuffix)] |
| outName := name + outSuffix |
| |
| t.Run(name, func(t *testing.T) { |
| oSrcWant, err := ioutil.ReadFile(filepath.Join(dir, outName)) |
| if err != nil { |
| t.Fatal(err) |
| } |
| oWant, diags := readStateV4(oSrcWant) |
| if diags.HasErrors() { |
| t.Fatal(diags.Err()) |
| } |
| |
| ir, err := os.Open(filepath.Join(dir, inName)) |
| if err != nil { |
| t.Fatal(err) |
| } |
| defer ir.Close() |
| |
| f, err := Read(ir) |
| if err != nil { |
| t.Fatalf("unexpected error: %s", err) |
| } |
| |
| var buf bytes.Buffer |
| err = Write(f, &buf) |
| if err != nil { |
| t.Fatal(err) |
| } |
| oSrcWritten := buf.Bytes() |
| |
| oGot, diags := readStateV4(oSrcWritten) |
| if diags.HasErrors() { |
| t.Fatal(diags.Err()) |
| } |
| |
| problems := deep.Equal(oGot, oWant) |
| sort.Strings(problems) |
| for _, problem := range problems { |
| t.Error(problem) |
| } |
| }) |
| } |
| } |