github.com/terramate-io/tf@v0.0.0-20230830114523-fce866b4dfcd/plans/planfile/config_snapshot_test.go (about)

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