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  }