mirror of
https://github.com/opentofu/opentofu.git
synced 2024-12-29 10:21:01 -06:00
9be399d49c
Much like TestParserLoadConfigFileSuccess, this is intended to be an easy-to-maintain collection of bad examples to test different permutations of our error handling. As with TestParserLoadConfigFileSuccess, we should also have more specific tests alongside this that check that the error outcome is what was expected, since this test just accepts any error and may thus not be testing what we think it is.
145 lines
3.5 KiB
Go
145 lines
3.5 KiB
Go
package configs
|
|
|
|
import (
|
|
"io/ioutil"
|
|
"path/filepath"
|
|
"testing"
|
|
|
|
"github.com/hashicorp/hcl2/hcl"
|
|
)
|
|
|
|
// TestParseLoadConfigFileSuccess is a simple test that just verifies that
|
|
// a number of test configuration files (in test-fixtures/valid-files) can
|
|
// be parsed without raising any diagnostics.
|
|
//
|
|
// This test does not verify that reading these files produces the correct
|
|
// file element contents. More detailed assertions may be made on some subset
|
|
// of these configuration files in other tests.
|
|
func TestParserLoadConfigFileSuccess(t *testing.T) {
|
|
files, err := ioutil.ReadDir("test-fixtures/valid-files")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
for _, info := range files {
|
|
name := info.Name()
|
|
t.Run(name, func(t *testing.T) {
|
|
src, err := ioutil.ReadFile(filepath.Join("test-fixtures/valid-files", name))
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
parser := testParser(map[string]string{
|
|
name: string(src),
|
|
})
|
|
|
|
_, diags := parser.LoadConfigFile(name)
|
|
if len(diags) != 0 {
|
|
t.Errorf("unexpected diagnostics")
|
|
for _, diag := range diags {
|
|
t.Logf("- %s", diag)
|
|
}
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
// TestParseLoadConfigFileFailure is a simple test that just verifies that
|
|
// a number of test configuration files (in test-fixtures/invalid-files)
|
|
// produce errors as expected.
|
|
//
|
|
// This test does not verify specific error messages, so more detailed
|
|
// assertions should be made on some subset of these configuration files in
|
|
// other tests.
|
|
func TestParserLoadConfigFileFailure(t *testing.T) {
|
|
files, err := ioutil.ReadDir("test-fixtures/invalid-files")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
for _, info := range files {
|
|
name := info.Name()
|
|
t.Run(name, func(t *testing.T) {
|
|
src, err := ioutil.ReadFile(filepath.Join("test-fixtures/invalid-files", name))
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
parser := testParser(map[string]string{
|
|
name: string(src),
|
|
})
|
|
|
|
_, diags := parser.LoadConfigFile(name)
|
|
if !diags.HasErrors() {
|
|
t.Errorf("LoadConfigFile succeeded; want errors")
|
|
}
|
|
for _, diag := range diags {
|
|
t.Logf("- %s", diag)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
// This test uses a subset of the same fixture files as
|
|
// TestParserLoadConfigFileFailure, but additionally verifies that each
|
|
// file produces the expected diagnostic summary.
|
|
func TestParserLoadConfigFileFailureMessages(t *testing.T) {
|
|
tests := []struct {
|
|
Filename string
|
|
WantError string
|
|
}{
|
|
{
|
|
"data-resource-lifecycle.tf",
|
|
"Unsupported lifecycle block",
|
|
},
|
|
{
|
|
"variable-type-unknown.tf",
|
|
"Invalid variable type hint",
|
|
},
|
|
{
|
|
"variable-type-quoted.tf",
|
|
"Invalid variable type hint",
|
|
},
|
|
{
|
|
"unexpected-attr.tf",
|
|
"Unsupported attribute",
|
|
},
|
|
{
|
|
"unexpected-block.tf",
|
|
"Unsupported block type",
|
|
},
|
|
{
|
|
"resource-lifecycle-badbool.tf",
|
|
"Unsuitable value type",
|
|
},
|
|
}
|
|
|
|
for _, test := range tests {
|
|
t.Run(test.Filename, func(t *testing.T) {
|
|
src, err := ioutil.ReadFile(filepath.Join("test-fixtures/invalid-files", test.Filename))
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
parser := testParser(map[string]string{
|
|
test.Filename: string(src),
|
|
})
|
|
|
|
_, diags := parser.LoadConfigFile(test.Filename)
|
|
if len(diags) != 1 {
|
|
t.Errorf("Wrong number of diagnostics %d; want 1", len(diags))
|
|
for _, diag := range diags {
|
|
t.Logf("- %s", diag)
|
|
}
|
|
return
|
|
}
|
|
if diags[0].Severity != hcl.DiagError {
|
|
t.Errorf("Wrong diagnostic severity %s; want %s", diags[0].Severity, hcl.DiagError)
|
|
}
|
|
if diags[0].Summary != test.WantError {
|
|
t.Errorf("Wrong diagnostic summary\ngot: %s\nwant: %s", diags[0].Summary, test.WantError)
|
|
}
|
|
})
|
|
}
|
|
}
|