mirror of
https://github.com/hashicorp/terraform.git
synced 2026-06-09 00:42:48 -04:00
103 lines
2.3 KiB
Go
103 lines
2.3 KiB
Go
// 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")
|
|
}
|
|
}
|