You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
terraform/internal/configs/named_values_test.go

104 lines
2.3 KiB

// Copyright IBM Corp. 2014, 2026
// SPDX-License-Identifier: BUSL-1.1
package configs
import (
"testing"
"github.com/hashicorp/hcl/v2"
"github.com/hashicorp/hcl/v2/hclsyntax"
)
func TestVariableInvalidDefault(t *testing.T) {
src := `
variable foo {
type = map(object({
foo = bool
}))
default = {
"thingy" = {
foo = "string where bool is expected"
}
}
}
`
hclF, diags := hclsyntax.ParseConfig([]byte(src), "test.tf", hcl.InitialPos)
if diags.HasErrors() {
t.Fatal(diags.Error())
}
_, diags = parseConfigFile(hclF.Body, nil, false, false)
if !diags.HasErrors() {
t.Fatal("unexpected success; want error")
}
for _, diag := range diags {
if diag.Severity != hcl.DiagError {
continue
}
if diag.Summary != "Invalid default value for variable" {
t.Errorf("unexpected diagnostic summary: %q", diag.Summary)
continue
}
if got, want := diag.Detail, `This default value is not compatible with the variable's type constraint: ["thingy"].foo: a bool is required.`; got != want {
t.Errorf("wrong diagnostic detault\ngot: %s\nwant: %s", got, want)
}
}
}
func TestOutputDeprecation(t *testing.T) {
src := `
output "foo" {
value = "bar"
deprecated = "This output is deprecated"
}
`
hclF, diags := hclsyntax.ParseConfig([]byte(src), "test.tf", hcl.InitialPos)
if diags.HasErrors() {
t.Fatal(diags.Error())
}
b, diags := parseConfigFile(hclF.Body, nil, false, false)
if diags.HasErrors() {
t.Fatalf("unexpected error: %q", diags)
}
if !b.Outputs[0].DeprecatedSet {
t.Fatalf("expected output to be deprecated")
}
if b.Outputs[0].Deprecated != "This output is deprecated" {
t.Fatalf("expected output to have deprecation message")
}
}
func TestVariableDeprecation(t *testing.T) {
src := `
variable "foo" {
type = string
deprecated = "This variable is deprecated, use bar instead"
}
`
hclF, diags := hclsyntax.ParseConfig([]byte(src), "test.tf", hcl.InitialPos)
if diags.HasErrors() {
t.Fatal(diags.Error())
}
b, diags := parseConfigFile(hclF.Body, nil, false, false)
if diags.HasErrors() {
t.Fatalf("unexpected error: %q", diags)
}
if !b.Variables[0].DeprecatedSet {
t.Fatalf("expected variable to be deprecated")
}
if b.Variables[0].Deprecated != "This variable is deprecated, use bar instead" {
t.Fatalf("expected variable to have deprecation message")
}
}