configs: Simple test of loading valid configuration files
This test is intended to be an easy-to-maintain catalog of good examples that we can use to catch certain parsing or decoding regressions easily. It's not a fully-comprehensive test since it doesn't check the result of decoding, instead just accepting any decode that completes without errors. However, an easy-to-maintain test like this is a good complement to some more specialized tests since we can easily collect good examples over time and just add them in here.
This commit is contained in:
parent
e15ec486bf
commit
e524d1eb95
|
@ -0,0 +1,43 @@
|
||||||
|
package configs
|
||||||
|
|
||||||
|
import (
|
||||||
|
"io/ioutil"
|
||||||
|
"path/filepath"
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
// 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)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,10 @@
|
||||||
|
|
||||||
|
terraform {
|
||||||
|
backend "example" {
|
||||||
|
foo = "bar"
|
||||||
|
|
||||||
|
baz {
|
||||||
|
bar = "foo"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,15 @@
|
||||||
|
data "http" "example1" {
|
||||||
|
}
|
||||||
|
|
||||||
|
data "http" "example2" {
|
||||||
|
url = "http://example.com/"
|
||||||
|
|
||||||
|
request_headers = {
|
||||||
|
"Accept" = "application/json"
|
||||||
|
}
|
||||||
|
|
||||||
|
count = 5
|
||||||
|
depends_on = [
|
||||||
|
data.http.example1,
|
||||||
|
]
|
||||||
|
}
|
|
@ -0,0 +1 @@
|
||||||
|
{}
|
|
@ -0,0 +1,16 @@
|
||||||
|
|
||||||
|
locals {
|
||||||
|
# This block intentionally left blank
|
||||||
|
}
|
||||||
|
|
||||||
|
locals {
|
||||||
|
foo = "foo"
|
||||||
|
bar = true
|
||||||
|
}
|
||||||
|
|
||||||
|
locals {
|
||||||
|
baz = "oink"
|
||||||
|
dunno = "🤷"
|
||||||
|
rowing = "🚣♀️"
|
||||||
|
π = 3.14159265359
|
||||||
|
}
|
|
@ -0,0 +1,10 @@
|
||||||
|
{
|
||||||
|
"locals": {
|
||||||
|
"foo": "foo",
|
||||||
|
"bar": true,
|
||||||
|
"baz": "oink",
|
||||||
|
"dunno": "🤷",
|
||||||
|
"rowing": "🚣♀️",
|
||||||
|
"π": 3.14159265359
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,26 @@
|
||||||
|
|
||||||
|
module "foo" {
|
||||||
|
source = "./foo"
|
||||||
|
# this block intentionally left (almost) blank
|
||||||
|
}
|
||||||
|
|
||||||
|
module "bar" {
|
||||||
|
source = "hashicorp/bar/aws"
|
||||||
|
|
||||||
|
boom = "🎆"
|
||||||
|
yes = true
|
||||||
|
}
|
||||||
|
|
||||||
|
module "baz" {
|
||||||
|
source = "git::https://example.com/"
|
||||||
|
|
||||||
|
a = 1
|
||||||
|
|
||||||
|
count = 12
|
||||||
|
for_each = ["a", "b", "c"]
|
||||||
|
|
||||||
|
depends_on = [
|
||||||
|
module.bar,
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,25 @@
|
||||||
|
|
||||||
|
output "foo" {
|
||||||
|
value = "hello"
|
||||||
|
}
|
||||||
|
|
||||||
|
output "bar" {
|
||||||
|
value = local.bar
|
||||||
|
}
|
||||||
|
|
||||||
|
output "baz" {
|
||||||
|
value = "ssshhhhhhh"
|
||||||
|
sensitive = true
|
||||||
|
}
|
||||||
|
|
||||||
|
output "cheeze_pizza" {
|
||||||
|
description = "Nothing special"
|
||||||
|
value = "🍕"
|
||||||
|
}
|
||||||
|
|
||||||
|
output "π" {
|
||||||
|
value = 3.14159265359
|
||||||
|
depends_on = [
|
||||||
|
pizza.cheese,
|
||||||
|
]
|
||||||
|
}
|
|
@ -0,0 +1,15 @@
|
||||||
|
|
||||||
|
provider "foo" {
|
||||||
|
}
|
||||||
|
|
||||||
|
provider "bar" {
|
||||||
|
version = ">= 1.0.2"
|
||||||
|
|
||||||
|
other = 12
|
||||||
|
}
|
||||||
|
|
||||||
|
provider "bar" {
|
||||||
|
other = 13
|
||||||
|
|
||||||
|
alias = "bar"
|
||||||
|
}
|
|
@ -0,0 +1,7 @@
|
||||||
|
|
||||||
|
terraform {
|
||||||
|
required_providers {
|
||||||
|
aws = "~> 1.0.0"
|
||||||
|
consul = "~> 1.2.0"
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,4 @@
|
||||||
|
|
||||||
|
terraform {
|
||||||
|
required_version = "~> 0.12.0"
|
||||||
|
}
|
|
@ -0,0 +1,42 @@
|
||||||
|
resource "aws_security_group" "firewall" {
|
||||||
|
lifecycle {
|
||||||
|
create_before_destroy = true
|
||||||
|
prevent_destroy = true
|
||||||
|
ignore_changes = [
|
||||||
|
description,
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
connection {
|
||||||
|
host = "127.0.0.1"
|
||||||
|
}
|
||||||
|
|
||||||
|
provisioner "local-exec" {
|
||||||
|
command = "echo hello"
|
||||||
|
|
||||||
|
connection {
|
||||||
|
host = "10.1.2.1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
provisioner "local-exec" {
|
||||||
|
command = "echo hello"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "aws_instance" "web" {
|
||||||
|
ami = "ami-1234"
|
||||||
|
security_groups = [
|
||||||
|
"foo",
|
||||||
|
"bar",
|
||||||
|
]
|
||||||
|
|
||||||
|
network_interface {
|
||||||
|
device_index = 0
|
||||||
|
description = "Main network interface"
|
||||||
|
}
|
||||||
|
|
||||||
|
depends_on = [
|
||||||
|
aws_security_group.firewall,
|
||||||
|
]
|
||||||
|
}
|
|
@ -0,0 +1,24 @@
|
||||||
|
|
||||||
|
variable "foo" {
|
||||||
|
}
|
||||||
|
|
||||||
|
variable "bar" {
|
||||||
|
default = "hello"
|
||||||
|
}
|
||||||
|
|
||||||
|
variable "baz" {
|
||||||
|
type = list
|
||||||
|
}
|
||||||
|
|
||||||
|
variable "bar-baz" {
|
||||||
|
default = []
|
||||||
|
type = list
|
||||||
|
}
|
||||||
|
|
||||||
|
variable "cheeze_pizza" {
|
||||||
|
description = "Nothing special"
|
||||||
|
}
|
||||||
|
|
||||||
|
variable "π" {
|
||||||
|
default = 3.14159265359
|
||||||
|
}
|
|
@ -0,0 +1,21 @@
|
||||||
|
{
|
||||||
|
"variable": {
|
||||||
|
"foo": {},
|
||||||
|
"bar": {
|
||||||
|
"default": "hello"
|
||||||
|
},
|
||||||
|
"baz": {
|
||||||
|
"type": "list"
|
||||||
|
},
|
||||||
|
"bar-baz": {
|
||||||
|
"default": [],
|
||||||
|
"type": "list"
|
||||||
|
},
|
||||||
|
"cheese_pizza": {
|
||||||
|
"description": "Nothing special"
|
||||||
|
},
|
||||||
|
"π": {
|
||||||
|
"default": 3.14159265359
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue