Test empty diagnostics.
Add a test for a diagnostic with no steps to make sure it still gets associated with the resource in the config. Follow up to #27710 using @alisdair's suggested testing.
This commit is contained in:
parent
31387d2a0b
commit
6c57395ef3
|
@ -6,6 +6,8 @@ import (
|
|||
|
||||
"github.com/google/go-cmp/cmp"
|
||||
"github.com/google/go-cmp/cmp/cmpopts"
|
||||
"github.com/hashicorp/hcl/v2"
|
||||
"github.com/hashicorp/hcl/v2/hclsyntax"
|
||||
proto "github.com/hashicorp/terraform/internal/tfplugin5"
|
||||
"github.com/hashicorp/terraform/tfdiags"
|
||||
"github.com/zclconf/go-cty/cty"
|
||||
|
@ -365,3 +367,45 @@ func TestDiagnostics(t *testing.T) {
|
|||
})
|
||||
}
|
||||
}
|
||||
|
||||
// Test that a diagnostic with a present but empty attribute results in a
|
||||
// whole body diagnostic. We verify this by inspecting the resulting Subject
|
||||
// from the diagnostic when considered in the context of a config body.
|
||||
func TestProtoDiagnostics_emptyAttributePath(t *testing.T) {
|
||||
protoDiags := []*proto.Diagnostic{
|
||||
{
|
||||
Severity: proto.Diagnostic_ERROR,
|
||||
Summary: "error 1",
|
||||
Detail: "error 1 detail",
|
||||
Attribute: &proto.AttributePath{
|
||||
Steps: []*proto.AttributePath_Step{
|
||||
// this slice is intentionally left empty
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
tfDiags := ProtoToDiagnostics(protoDiags)
|
||||
|
||||
testConfig := `provider "test" {
|
||||
foo = "bar"
|
||||
}`
|
||||
f, parseDiags := hclsyntax.ParseConfig([]byte(testConfig), "test.tf", hcl.Pos{Line: 1, Column: 1})
|
||||
if parseDiags.HasErrors() {
|
||||
t.Fatal(parseDiags)
|
||||
}
|
||||
diags := tfDiags.InConfigBody(f.Body)
|
||||
|
||||
if len(tfDiags) != 1 {
|
||||
t.Fatalf("expected 1 diag, got %d", len(tfDiags))
|
||||
}
|
||||
got := diags[0].Source().Subject
|
||||
want := &tfdiags.SourceRange{
|
||||
Filename: "test.tf",
|
||||
Start: tfdiags.SourcePos{Line: 1, Column: 1},
|
||||
End: tfdiags.SourcePos{Line: 1, Column: 1},
|
||||
}
|
||||
|
||||
if !cmp.Equal(got, want, typeComparer, valueComparer) {
|
||||
t.Fatal(cmp.Diff(got, want, typeComparer, valueComparer))
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue