143 lines
4.9 KiB
Go
143 lines
4.9 KiB
Go
package command
|
|
|
|
import (
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/mitchellh/cli"
|
|
)
|
|
|
|
func setupTest(fixturepath string, args ...string) (*cli.MockUi, int) {
|
|
ui := new(cli.MockUi)
|
|
c := &ValidateCommand{
|
|
Meta: Meta{
|
|
testingOverrides: metaOverridesForProvider(testProvider()),
|
|
Ui: ui,
|
|
},
|
|
}
|
|
|
|
args = append(args, testFixturePath(fixturepath))
|
|
|
|
code := c.Run(args)
|
|
return ui, code
|
|
}
|
|
|
|
func TestValidateCommand(t *testing.T) {
|
|
if ui, code := setupTest("validate-valid"); code != 0 {
|
|
t.Fatalf("bad: %d\n\n%s", code, ui.ErrorWriter.String())
|
|
}
|
|
}
|
|
|
|
func TestValidateFailingCommand(t *testing.T) {
|
|
if ui, code := setupTest("validate-invalid"); code != 1 {
|
|
t.Fatalf("Should have failed: %d\n\n%s", code, ui.ErrorWriter.String())
|
|
}
|
|
}
|
|
|
|
func TestValidateFailingCommandMissingQuote(t *testing.T) {
|
|
ui, code := setupTest("validate-invalid/missing_quote")
|
|
|
|
if code != 1 {
|
|
t.Fatalf("Should have failed: %d\n\n%s", code, ui.ErrorWriter.String())
|
|
}
|
|
if !strings.HasSuffix(strings.TrimSpace(ui.ErrorWriter.String()), "IDENT test") {
|
|
t.Fatalf("Should have failed: %d\n\n'%s'", code, ui.ErrorWriter.String())
|
|
}
|
|
}
|
|
|
|
func TestValidateFailingCommandMissingVariable(t *testing.T) {
|
|
ui, code := setupTest("validate-invalid/missing_var")
|
|
if code != 1 {
|
|
t.Fatalf("Should have failed: %d\n\n%s", code, ui.ErrorWriter.String())
|
|
}
|
|
if !strings.HasSuffix(strings.TrimSpace(ui.ErrorWriter.String()), "config: unknown variable referenced: 'description'. define it with 'variable' blocks") {
|
|
t.Fatalf("Should have failed: %d\n\n'%s'", code, ui.ErrorWriter.String())
|
|
}
|
|
}
|
|
|
|
func TestSameProviderMutipleTimesShouldFail(t *testing.T) {
|
|
ui, code := setupTest("validate-invalid/multiple_providers")
|
|
if code != 1 {
|
|
t.Fatalf("Should have failed: %d\n\n%s", code, ui.ErrorWriter.String())
|
|
}
|
|
if !strings.HasSuffix(strings.TrimSpace(ui.ErrorWriter.String()), "provider.aws: declared multiple times, you can only declare a provider once") {
|
|
t.Fatalf("Should have failed: %d\n\n'%s'", code, ui.ErrorWriter.String())
|
|
}
|
|
}
|
|
|
|
func TestSameModuleMultipleTimesShouldFail(t *testing.T) {
|
|
ui, code := setupTest("validate-invalid/multiple_modules")
|
|
if code != 1 {
|
|
t.Fatalf("Should have failed: %d\n\n%s", code, ui.ErrorWriter.String())
|
|
}
|
|
if !strings.HasSuffix(strings.TrimSpace(ui.ErrorWriter.String()), "multi_module: module repeated multiple times") {
|
|
t.Fatalf("Should have failed: %d\n\n'%s'", code, ui.ErrorWriter.String())
|
|
}
|
|
}
|
|
|
|
func TestSameResourceMultipleTimesShouldFail(t *testing.T) {
|
|
ui, code := setupTest("validate-invalid/multiple_resources")
|
|
if code != 1 {
|
|
t.Fatalf("Should have failed: %d\n\n%s", code, ui.ErrorWriter.String())
|
|
}
|
|
if !strings.HasSuffix(strings.TrimSpace(ui.ErrorWriter.String()), "aws_instance.web: resource repeated multiple times") {
|
|
t.Fatalf("Should have failed: %d\n\n'%s'", code, ui.ErrorWriter.String())
|
|
}
|
|
}
|
|
|
|
func TestOutputWithoutValueShouldFail(t *testing.T) {
|
|
ui, code := setupTest("validate-invalid/outputs")
|
|
if code != 1 {
|
|
t.Fatalf("Should have failed: %d\n\n%s", code, ui.ErrorWriter.String())
|
|
}
|
|
if !strings.HasSuffix(strings.TrimSpace(ui.ErrorWriter.String()), "output is missing required 'value' key") {
|
|
t.Fatalf("Should have failed: %d\n\n'%s'", code, ui.ErrorWriter.String())
|
|
}
|
|
}
|
|
|
|
func TestModuleWithIncorrectNameShouldFail(t *testing.T) {
|
|
ui, code := setupTest("validate-invalid/incorrectmodulename")
|
|
if code != 1 {
|
|
t.Fatalf("Should have failed: %d\n\n%s", code, ui.ErrorWriter.String())
|
|
}
|
|
|
|
if !strings.Contains(ui.ErrorWriter.String(), "module name can only contain letters, numbers, dashes, and underscores") {
|
|
t.Fatalf("Should have failed: %d\n\n'%s'", code, ui.ErrorWriter.String())
|
|
}
|
|
if !strings.Contains(ui.ErrorWriter.String(), "module source cannot contain interpolations") {
|
|
t.Fatalf("Should have failed: %d\n\n'%s'", code, ui.ErrorWriter.String())
|
|
}
|
|
}
|
|
|
|
func TestWronglyUsedInterpolationShouldFail(t *testing.T) {
|
|
ui, code := setupTest("validate-invalid/interpolation")
|
|
if code != 1 {
|
|
t.Fatalf("Should have failed: %d\n\n%s", code, ui.ErrorWriter.String())
|
|
}
|
|
|
|
if !strings.Contains(ui.ErrorWriter.String(), "depends on value cannot contain interpolations") {
|
|
t.Fatalf("Should have failed: %d\n\n'%s'", code, ui.ErrorWriter.String())
|
|
}
|
|
if !strings.Contains(ui.ErrorWriter.String(), "Variable 'vairable_with_interpolation': cannot contain interpolations") {
|
|
t.Fatalf("Should have failed: %d\n\n'%s'", code, ui.ErrorWriter.String())
|
|
}
|
|
}
|
|
|
|
func TestMissingDefinedVar(t *testing.T) {
|
|
ui, code := setupTest("validate-invalid/missing_defined_var")
|
|
if code != 1 {
|
|
t.Fatalf("Should have failed: %d\n\n%s", code, ui.ErrorWriter.String())
|
|
}
|
|
|
|
if !strings.Contains(ui.ErrorWriter.String(), "Required variable not set:") {
|
|
t.Fatalf("Should have failed: %d\n\n'%s'", code, ui.ErrorWriter.String())
|
|
}
|
|
}
|
|
|
|
func TestMissingDefinedVarConfigOnly(t *testing.T) {
|
|
ui, code := setupTest("validate-invalid/missing_defined_var", "-check-variables=false")
|
|
if code != 0 {
|
|
t.Fatalf("Should have passed: %d\n\n%s", code, ui.ErrorWriter.String())
|
|
}
|
|
}
|