github.com/emc-cmd/terraform@v0.7.8-0.20161101145618-f16309630e7c/command/validate_test.go (about) 1 package command 2 3 import ( 4 "strings" 5 "testing" 6 7 "github.com/mitchellh/cli" 8 ) 9 10 func setupTest(fixturepath string) (*cli.MockUi, int) { 11 ui := new(cli.MockUi) 12 c := &ValidateCommand{ 13 Meta: Meta{ 14 Ui: ui, 15 }, 16 } 17 18 args := []string{ 19 testFixturePath(fixturepath), 20 } 21 22 code := c.Run(args) 23 return ui, code 24 } 25 func TestValidateCommand(t *testing.T) { 26 if ui, code := setupTest("validate-valid"); code != 0 { 27 t.Fatalf("bad: %d\n\n%s", code, ui.ErrorWriter.String()) 28 } 29 } 30 31 func TestValidateFailingCommand(t *testing.T) { 32 if ui, code := setupTest("validate-invalid"); code != 1 { 33 t.Fatalf("Should have failed: %d\n\n%s", code, ui.ErrorWriter.String()) 34 } 35 } 36 37 func TestValidateFailingCommandMissingQuote(t *testing.T) { 38 ui, code := setupTest("validate-invalid/missing_quote") 39 40 if code != 1 { 41 t.Fatalf("Should have failed: %d\n\n%s", code, ui.ErrorWriter.String()) 42 } 43 if !strings.HasSuffix(strings.TrimSpace(ui.ErrorWriter.String()), "IDENT test") { 44 t.Fatalf("Should have failed: %d\n\n'%s'", code, ui.ErrorWriter.String()) 45 } 46 } 47 48 func TestValidateFailingCommandMissingVariable(t *testing.T) { 49 ui, code := setupTest("validate-invalid/missing_var") 50 if code != 1 { 51 t.Fatalf("Should have failed: %d\n\n%s", code, ui.ErrorWriter.String()) 52 } 53 if !strings.HasSuffix(strings.TrimSpace(ui.ErrorWriter.String()), "config: unknown variable referenced: 'description'. define it with 'variable' blocks") { 54 t.Fatalf("Should have failed: %d\n\n'%s'", code, ui.ErrorWriter.String()) 55 } 56 } 57 58 func TestSameProviderMutipleTimesShouldFail(t *testing.T) { 59 ui, code := setupTest("validate-invalid/multiple_providers") 60 if code != 1 { 61 t.Fatalf("Should have failed: %d\n\n%s", code, ui.ErrorWriter.String()) 62 } 63 if !strings.HasSuffix(strings.TrimSpace(ui.ErrorWriter.String()), "provider.aws: declared multiple times, you can only declare a provider once") { 64 t.Fatalf("Should have failed: %d\n\n'%s'", code, ui.ErrorWriter.String()) 65 } 66 } 67 68 func TestSameModuleMultipleTimesShouldFail(t *testing.T) { 69 ui, code := setupTest("validate-invalid/multiple_modules") 70 if code != 1 { 71 t.Fatalf("Should have failed: %d\n\n%s", code, ui.ErrorWriter.String()) 72 } 73 if !strings.HasSuffix(strings.TrimSpace(ui.ErrorWriter.String()), "multi_module: module repeated multiple times") { 74 t.Fatalf("Should have failed: %d\n\n'%s'", code, ui.ErrorWriter.String()) 75 } 76 } 77 78 func TestSameResourceMultipleTimesShouldFail(t *testing.T) { 79 ui, code := setupTest("validate-invalid/multiple_resources") 80 if code != 1 { 81 t.Fatalf("Should have failed: %d\n\n%s", code, ui.ErrorWriter.String()) 82 } 83 if !strings.HasSuffix(strings.TrimSpace(ui.ErrorWriter.String()), "aws_instance.web: resource repeated multiple times") { 84 t.Fatalf("Should have failed: %d\n\n'%s'", code, ui.ErrorWriter.String()) 85 } 86 } 87 88 func TestOutputWithoutValueShouldFail(t *testing.T) { 89 ui, code := setupTest("validate-invalid/outputs") 90 if code != 1 { 91 t.Fatalf("Should have failed: %d\n\n%s", code, ui.ErrorWriter.String()) 92 } 93 if !strings.HasSuffix(strings.TrimSpace(ui.ErrorWriter.String()), "output is missing required 'value' key") { 94 t.Fatalf("Should have failed: %d\n\n'%s'", code, ui.ErrorWriter.String()) 95 } 96 } 97 98 func TestModuleWithIncorrectNameShouldFail(t *testing.T) { 99 ui, code := setupTest("validate-invalid/incorrectmodulename") 100 if code != 1 { 101 t.Fatalf("Should have failed: %d\n\n%s", code, ui.ErrorWriter.String()) 102 } 103 104 if !strings.Contains(ui.ErrorWriter.String(), "module name can only contain letters, numbers, dashes, and underscores") { 105 t.Fatalf("Should have failed: %d\n\n'%s'", code, ui.ErrorWriter.String()) 106 } 107 if !strings.Contains(ui.ErrorWriter.String(), "module source cannot contain interpolations") { 108 t.Fatalf("Should have failed: %d\n\n'%s'", code, ui.ErrorWriter.String()) 109 } 110 } 111 112 func TestWronglyUsedInterpolationShouldFail(t *testing.T) { 113 ui, code := setupTest("validate-invalid/interpolation") 114 if code != 1 { 115 t.Fatalf("Should have failed: %d\n\n%s", code, ui.ErrorWriter.String()) 116 } 117 118 if !strings.Contains(ui.ErrorWriter.String(), "depends on value cannot contain interpolations") { 119 t.Fatalf("Should have failed: %d\n\n'%s'", code, ui.ErrorWriter.String()) 120 } 121 if !strings.Contains(ui.ErrorWriter.String(), "Variable 'vairable_with_interpolation': cannot contain interpolations") { 122 t.Fatalf("Should have failed: %d\n\n'%s'", code, ui.ErrorWriter.String()) 123 } 124 }