github.com/terramate-io/tf@v0.0.0-20230830114523-fce866b4dfcd/tfdiags/rpc_friendly_test.go (about)

     1  // Copyright (c) HashiCorp, Inc.
     2  // SPDX-License-Identifier: MPL-2.0
     3  
     4  package tfdiags
     5  
     6  import (
     7  	"bytes"
     8  	"encoding/gob"
     9  	"fmt"
    10  	"reflect"
    11  	"testing"
    12  
    13  	"github.com/davecgh/go-spew/spew"
    14  
    15  	"github.com/hashicorp/hcl/v2"
    16  )
    17  
    18  func TestDiagnosticsForRPC(t *testing.T) {
    19  	var diags Diagnostics
    20  	diags = diags.Append(fmt.Errorf("bad"))
    21  	diags = diags.Append(SimpleWarning("less bad"))
    22  	diags = diags.Append(&hcl.Diagnostic{
    23  		Severity: hcl.DiagError,
    24  		Summary:  "bad bad bad",
    25  		Detail:   "badily bad bad",
    26  		Subject: &hcl.Range{
    27  			Filename: "foo",
    28  		},
    29  		Context: &hcl.Range{
    30  			Filename: "bar",
    31  		},
    32  	})
    33  
    34  	buf := bytes.Buffer{}
    35  	enc := gob.NewEncoder(&buf)
    36  	dec := gob.NewDecoder(&buf)
    37  
    38  	rpcDiags := diags.ForRPC()
    39  	err := enc.Encode(rpcDiags)
    40  	if err != nil {
    41  		t.Fatalf("error on Encode: %s", err)
    42  	}
    43  
    44  	var got Diagnostics
    45  	err = dec.Decode(&got)
    46  	if err != nil {
    47  		t.Fatalf("error on Decode: %s", err)
    48  	}
    49  
    50  	want := Diagnostics{
    51  		&rpcFriendlyDiag{
    52  			Severity_: Error,
    53  			Summary_:  "bad",
    54  		},
    55  		&rpcFriendlyDiag{
    56  			Severity_: Warning,
    57  			Summary_:  "less bad",
    58  		},
    59  		&rpcFriendlyDiag{
    60  			Severity_: Error,
    61  			Summary_:  "bad bad bad",
    62  			Detail_:   "badily bad bad",
    63  			Subject_: &SourceRange{
    64  				Filename: "foo",
    65  			},
    66  			Context_: &SourceRange{
    67  				Filename: "bar",
    68  			},
    69  		},
    70  	}
    71  
    72  	if !reflect.DeepEqual(got, want) {
    73  		t.Errorf("wrong result\ngot: %swant: %s", spew.Sdump(got), spew.Sdump(want))
    74  	}
    75  }