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