github.com/opentofu/opentofu@v1.7.1/internal/plans/planfile/config_snapshot_test.go (about) 1 // Copyright (c) The OpenTofu Authors 2 // SPDX-License-Identifier: MPL-2.0 3 // Copyright (c) 2023 HashiCorp, Inc. 4 // SPDX-License-Identifier: MPL-2.0 5 6 package planfile 7 8 import ( 9 "archive/zip" 10 "bytes" 11 "path/filepath" 12 "reflect" 13 "testing" 14 15 "github.com/davecgh/go-spew/spew" 16 17 "github.com/opentofu/opentofu/internal/configs/configload" 18 ) 19 20 func TestConfigSnapshotRoundtrip(t *testing.T) { 21 fixtureDir := filepath.Join("testdata", "test-config") 22 loader, err := configload.NewLoader(&configload.Config{ 23 ModulesDir: filepath.Join(fixtureDir, ".terraform", "modules"), 24 }) 25 if err != nil { 26 t.Fatal(err) 27 } 28 29 _, snapIn, diags := loader.LoadConfigWithSnapshot(fixtureDir) 30 if diags.HasErrors() { 31 t.Fatal(diags.Error()) 32 } 33 34 var buf bytes.Buffer 35 zw := zip.NewWriter(&buf) 36 err = writeConfigSnapshot(snapIn, zw) 37 if err != nil { 38 t.Fatalf("failed to write snapshot: %s", err) 39 } 40 zw.Close() 41 42 raw := buf.Bytes() 43 r := bytes.NewReader(raw) 44 zr, err := zip.NewReader(r, int64(len(raw))) 45 if err != nil { 46 t.Fatal(err) 47 } 48 49 snapOut, err := readConfigSnapshot(zr) 50 if err != nil { 51 t.Fatalf("failed to read snapshot: %s", err) 52 } 53 54 if !reflect.DeepEqual(snapIn, snapOut) { 55 t.Errorf("result does not match input\nresult: %sinput: %s", spew.Sdump(snapOut), spew.Sdump(snapIn)) 56 } 57 }